数字签名
公钥密码:存在加密秘钥 (公钥) 和解密秘钥(私钥)。用公钥加密。 数字签名:签名秘钥(私钥)和验证秘钥(公钥)。用私钥加密。 数字签名并不是为了保证机密性。
签名的生成和验证
签名秘钥:私钥。用于对消息进行签名——生成签名。只能一人持有。 验证秘钥:公钥。用于验证消息的签名——验证签名。可以多人持有。
对消息签名的过程
- A 用自己的私钥进行加密。
- A 将签名和消息发送给 B。
- B 用 A 的公钥进行解密(签名验证)。
- B 将解密后的消息与 A 发过来的消息进行对比。一致,则验证成功,否则,验证失败。
对消息散列值签名的过程
公钥密码算法较慢,如果直接对消息进行签名,会比较耗时。
- A 用
单向散列函数
计算消息的散列值。 - A 用私钥对散列值进行加密。
- A 将消息和签名发送给 B。
- B 用 A 的 g 公钥对收到的签名进行解密。
- B 将签名解密后得到的散列值与 A 发送的消息的散列值进行对比。一致,验证成功,否则,验证失败。
应用场景
- 信息公告
- 确保是目标组织发布的目标公告,法制被篡改。
- 软件下载
- 软件下载完成后,验证签名,防止软件遭到篡改。(并不能检测软件是否是恶意的)
- 公钥证书。
- 验证数字签名时,需要合法的公钥。对公钥进行签名得到的就是公钥证书。【第三方???】
- SSL/TLS。
- 使用服务器证书验证服务器身份。
- 服务器证书:加上数字签名的服务器公钥。
总结
对称密码的秘钥是机密性的精华,单向散列函数的散列值是完整性的精华。