密码学初级教程(六)数字签名 Digital Signature
2016-02-01 23:35
246 查看
密码学家工具箱中的6个重要的工具:
对称密码
公钥密码
单向散列函数
消息认证码
数字签名
伪随机数生成器
因为消息认证码无法防止否认。消息认证码可以识别消息是否被篡改或者发送者身份是否被伪装。(消息认证码保证完整性、可以进行认证)
为什么消息认证码无法防止否认,数字签名就能够否认呢?
消息认证码中,能够计算出MAC值的密钥(共享密钥)是由发送者和接受者双方共同持有的,因此发送者和接受者中的任何一方都能够计算MAC值,发送者也就可以声称“这个MAC值不是我计算的,而是接收者计算的”。
相反的,在数字签名中,能够生成签名的密钥(私钥)是只有发送者才持有的,只有发送者才能够生成签名,因此发送者也就没办法说“这个签名不是我生成的”了。
发送者用私钥对消息进行签名并把签名和消息发送给接收者,接收者用公钥解密得到消息原文并和收到的消息进行匹配。
对消息的散列值进行签名
对散列值签名就是多了一步,先计算消息的散列值,再计算签名。
软件下载
(1)验证软件是否有被修改。
(2)一种名为带签名的Applet的软件就是一个具体的例子。这种软件就是用Java编写的(一种浏览器进行下载并执行的软件),并加上了作者的签名,而浏览器会在下载之后对签名进行验证。
公钥证书
SSL/TLS
EIGamal
由Taher EIGammal设计的公钥算法,利用了在mod N中求离散对数的困难度。可被用于公钥密码和数字签名。
DSA
NIST于1991年制定的数字签名规范,DSA是Schnorr算法与EIGammal方式的变体,只能用于数字签名。
Rabin
由M.O.Rabin设计的公钥算法,利用了在mod N中求平方根的困难度。Rabin可以被用于公钥密码和数字签名。
对称密码
公钥密码
单向散列函数
消息认证码
数字签名
伪随机数生成器
提问:
有了消息认证码为什么还要有数字签名?因为消息认证码无法防止否认。消息认证码可以识别消息是否被篡改或者发送者身份是否被伪装。(消息认证码保证完整性、可以进行认证)
为什么消息认证码无法防止否认,数字签名就能够否认呢?
消息认证码中,能够计算出MAC值的密钥(共享密钥)是由发送者和接受者双方共同持有的,因此发送者和接受者中的任何一方都能够计算MAC值,发送者也就可以声称“这个MAC值不是我计算的,而是接收者计算的”。
相反的,在数字签名中,能够生成签名的密钥(私钥)是只有发送者才持有的,只有发送者才能够生成签名,因此发送者也就没办法说“这个签名不是我生成的”了。
数字签名的方法
直接对消息进行签名发送者用私钥对消息进行签名并把签名和消息发送给接收者,接收者用公钥解密得到消息原文并和收到的消息进行匹配。
对消息的散列值进行签名
对散列值签名就是多了一步,先计算消息的散列值,再计算签名。
数字签名的应用实例
安全信息公告软件下载
(1)验证软件是否有被修改。
(2)一种名为带签名的Applet的软件就是一个具体的例子。这种软件就是用Java编写的(一种浏览器进行下载并执行的软件),并加上了作者的签名,而浏览器会在下载之后对签名进行验证。
公钥证书
SSL/TLS
实现数字签名的方法
RSAEIGamal
由Taher EIGammal设计的公钥算法,利用了在mod N中求离散对数的困难度。可被用于公钥密码和数字签名。
DSA
NIST于1991年制定的数字签名规范,DSA是Schnorr算法与EIGammal方式的变体,只能用于数字签名。
Rabin
由M.O.Rabin设计的公钥算法,利用了在mod N中求平方根的困难度。Rabin可以被用于公钥密码和数字签名。
相关文章推荐
- 第十章编程练习(2)
- android源码分析之notification
- JAVA中的几种设计模式
- direcrx11 学习日记supersampling (超采样抗锯齿)和(多重采样抗锯齿)的区别
- SGU 531 Bonnie and Clyde(二分)
- 坚果手机使用感受
- 坚果手机使用感受
- 9. Oracle深度学习笔记——性能调优汇总
- JAVA中接口与抽象类的区别
- HDU 4429 Split the Rectangle(暴力)
- C遇到的问题
- memcached系列之
- spark on yarn作业执行流程
- OSMC简介
- 好用的软件
- go中的main函数和init函数
- java常用数据类型
- go lang中的import
- Linux configure 参数解释
- 015 关于matlab更改默认路径的方法