签名存在的意义
信息安全有三个需要解决的问题:
- 保密性:信息在传输时不被泄露。
- 完整性:信息在传输是不被篡改。
- 有效性:信息的使用者是合法的。
非对称加密解决了信息再传输时的泄露问题(即使被截取也无法获得有效信息),签名解决了完整性和有效性问题。
数字签名
签名是对非对称加密的逆应用,使用私钥加密信息,这样所有人都可以使用公钥验证信息是否来自唯一拥有私钥的用户。
生成签名
- 对消息进行哈希计算,得到哈希值。
- 用私钥对哈希值加密,生成签名。
- 将签名附加在消息后面,一起发送过去。
验证签名
- 提取消息中的签名。
- 用公钥对签名进行解密,得到哈希值1。
- 对消息中的正文进行哈希计算,得到哈希值2。
- 如果1和2相等,则验证成功。
在实际应用中,还需要对公钥进行验证,也就是证书。