本文主要是介绍现代密码学-数字签名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从消息认证码到数字签名
前面讲到,消息认证码无法防止否认,A,B之间共享密钥计算出MAC,A,B都能计算出MAC,对于第三方C来说,他无法证明这个MAC是A计算的还是B计算的。
通过数字签名解决问题。
A,B各自使用不同的密钥-公钥密码,A用私钥生成一个签名,B可以用A公开的公钥进行验证。
签名的生成和验证
数字签名中的两种行为:
生成消息签名
验证消息签名
数字签名:将公钥密码反过来用,
私钥 | 公钥 | |
公钥密码 | 接收者解密使用 | 发送者加密使用 |
数字签名 | 签名者生成签名使用 | 验证者验证签名使用 |
个人持有 | 公开 |
数字签名的方法
直接对消息签名
- A用私钥对消息进行加密
- A将消息和签名发给B
- B用A的公钥对收到的签名进行解密
- B将解密出来的消息和A发的消息进行对比
直接对消息签名
对消息的散列值签名
A用单向散列函数计算消息的散列值
A用自己的私钥对散列值加密
A将消息和签名发给B
B用A的公钥对收到的签名进行解密
B将解密得到的散列值和A发来的消息的散列值进行比较
对消息的散列值签名
对消息的散列值签名时序图
使用公钥密码的私钥生成签名,主要是利用了私钥只有特定的人才持有这一特性。签名和消息是具有对应关系的,消息不同,签名内容不同。如果将一份签名提取出来放在另一个消息后面,验证签名的时候会失败。
应用实例
安全信息公告
软件下载
公钥证书
SSL/TLS
对数字签名的攻击
中间人攻击:确认自己得到的公钥是否真的是通信对象的
单向散列函数攻击:散列函数抗碰撞性
利用数字签名攻击公钥密码-不要直接对消息进行签名,对散列值进行签名更安全;公钥密码和数字签名分别使用不同的密钥
数字签名无法解决的问题
数字签名可以识别出篡改和伪装,还可以防止否认。前提条件是用于签名的公钥属于真正的发送者。数字签名用来识别消息篡改、伪装及否认,但我们必须从一个没有被伪装的发送者得到没有被篡改的公钥才行----死循环。
怎样才能确认自己得到的公钥是合法 的 ---使用证书。那么证书又由谁来颁发才安全呢?---公钥基础设施PKI
这篇关于现代密码学-数字签名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!