公钥、私钥与数字签名
复习
- 篡改与消息认证:用密钥验证消息未被改动
- 窃听与对称加密:对称密钥存在分发难题
- 消息认证码:双方需要共享同一把密钥
TL;DR
- 非对称加密使用一对密钥:公钥公开,私钥保密
- 用公钥加密,只有私钥能解;用私钥签名,公钥可验证
- 数字签名能证明消息确实来自私钥持有者
- 它同时缓解了密钥分发与来源证明两个问题
正文
对称加密和消息认证码都需要双方事先共享同一把密钥。可如果双方从没见过面,这把钥匙怎么给?非对称加密换了个思路:用一对密钥,而不是一把。
一对钥匙,分工不同
非对称加密给每个人一对密钥:
- 公钥:可以公开,谁都能拿到
- 私钥:只有自己保存,绝不外泄
奇妙之处在于,这两个方向各有用途:
- 别人用你的公钥加密,只有你的私钥能解开
- 你用私钥签名,别人用你的公钥就能验证
前者保证了“内容只有你能读”,后者保证了“内容确实是你发的”。
签名:证明“这就是我”
数字签名(digital signature)用的正是第二个方向。
发送方对消息算出一个简短的摘要,再用自己的私钥对摘要签名。接收方用发送方的公钥去验证这个签名:
- 验证通过:说明这条消息确实由私钥持有者签发,且中途没被改动
- 验证失败:签名有问题,或消息被改过
关键在于,私钥只有本人有。所以一旦签名验证通过,就基本可以认定“是本人发的”——这叫作不可否认:发出方事后无法抵赖说“不是我发的”。
它顺便解决了什么
非对称加密一举缓解了两个难题:
- 密钥分发:公钥可以公开传递,不必担心被看见
- 来源证明:签名让人能确认消息的出处
但它也有代价:计算开销大、速度慢,不适合直接加密大量数据。所以实际系统通常让它和对称加密配合——下一章就会看到这种“分工合作”。
不过,还有一个问题没解决:你拿到的公钥,真的属于你想找的那个人吗? 这就要靠证书来回答了。
思考题 1
公钥加密与私钥签名,方向相反,各自解决了什么问题?
思考题 2
数字签名为什么能起到“不可否认”的作用?
小结
知识点
- 非对称加密使用公钥与私钥一对密钥
- 公钥加密、私钥解密可保密
- 私钥签名、公钥验证可证明来源
- 签名提供不可否认性,但计算开销较大
参考资料
- Wikipedia(zh):公开密钥加密:使用公私钥对的加密方式
- Wikipedia(zh):数字签名:证明消息来源与完整性的机制
思考题答案(仅供参考)
思考题 1
公钥加密、私钥解密解决的是“保密”:内容只有私钥持有者能读懂。私钥签名、公钥验证解决的是“来源与完整性”:能确认消息确实由私钥持有者发出且未被篡改。两个方向用途相反、互为补充。
思考题 2
因为私钥只有本人持有,理论上别人无法伪造出通过验证的签名。所以一旦签名验证通过,就说明是本人签发的,本人事后无法抵赖说自己没发过,这就是不可否认。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪