密码学家工具箱中的6个重要的工具:
- 对称密码
- 公钥密码
- 单向散列函数
- 消息认证码
- 数字签名
- 伪随机数生成器
提问:
有了消息认证码为什么还要有数字签名?
因为消息认证码无法防止否认。消息认证码可以识别消息是否被篡改或者发送者身份是否被伪装。(消息认证码保证完整性、可以进行认证)
为什么消息认证码无法防止否认,数字签名就能够否认呢?
消息认证码中,能够计算出MAC值的密钥(共享密钥)是由发送者和接受者双方共同持有的,因此发送者和接受者中的任何一方都能够计算MAC值,发送者也就可以声称“这个MAC值不是我计算的,而是接收者计算的”。
相反的,在数字签名中,能够生成签名的密钥(私钥)是只有发送者才持有的,只有发送者才能够生成签名,因此发送者也就没办法说“这个签名不是我生成的”了。
数字签名的方法
- 直接对消息进行签名
发送者用私钥对消息进行签名并把签名和消息发送给接收者,接收者用公钥解密得到消息原文并和收到的消息进行匹配。
- 对消息的散列值进行签名
对散列值签名就是多了一步,先计算消息的散列值,再计算签名。
数字签名的应用实例
- 安全信息公告
- 软件下载
(1)验证软件是否有被修改。
(2)一种名为带签名的Applet的软件就是一个具体的例子。这种软件就是用Java编写的(一种浏览器进行下载并执行的软件),并加上了作者的签名,而浏览器会在下载之后对签名进行验证。
- 公钥证书
- SSL/TLS
实现数字签名的方法
- RSA
- EIGamal
- 由Taher EIGammal设计的公钥算法,利用了在mod N中求离散对数的困难度。可被用于公钥密码和数字签名。
- DSA
- NIST于1991年制定的数字签名规范,DSA是Schnorr算法与EIGammal方式的变体,只能用于数字签名。
- Rabin
- 由M.O.Rabin设计的公钥算法,利用了在mod N中求平方根的困难度。Rabin可以被用于公钥密码和数字签名。