密码学专题 - 数字签名
9. 数字签名
数字签名是消息认证码的公钥等价形式,其一般框架如图 2-6 所示。这次 Alice 使用密钥生成算法来产生一个密钥对 并公开公钥 ,当她要发送一个带签名的消息 m 给 Bob 时,先计算签名 ,然后将 m 和 s 发送给 Bob。Bob 利用 Alice 的公钥通过验证算法 来验证签名。签名的工作机制类似于 MAC,不同的是 Bob 利用公钥进行验证,而产生一个新的签名却需要私钥。
Bob 只需要拥有 Alice 的公钥就可以验证消息是否来自于 Alice。非常有趣的是,任何人都能够得到 Alice 的公钥从而验证该消息是否来自 Alice,这也正是我们称 s 为数字签名的原因。在某种意义上,Alice 签署了该消息。如果发生了争执,Bob 可以把 m 和 s 提交给法官来证明 Alice 确实签署了该消息。
这种性质在理论上非常好,但也只是在理论上有效。在实际应用中,需认识到数字签名还有一定的局限性。主要问题在于并不是 Alice 本人亲自计算签名,而是她的计算机计算签名,因此数字签名并不能证明 Alice 认可了该消息,甚至也不能证明她在计算机屏幕上看到了该消息。既然病毒能够轻易地控制计算机,那么在这种情况下数字签名实际上也不能证明什么。然而,如果使用适当,数字签名还是相当有用的。
9.1 DSA
1991 年 8 月,NIST 提出了数字签名算法 (DSA) 用于他们的数字签名标准 (DSS) 中。
项目源代码
项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp。
Contributor
- Windstamp, https://github.com/windstamp