数字签名相当于现实世界中的盖章、签字的功能,数字签名可以识别篡改、伪装、防止否认。
1、从消息认证码到数字签名
消息认证码:因为密钥是共享的,两方都可以知道。对于第三方来说,你无法确定是谁的
数字签名:
●生成消息签名的行为
发送者对消息进行签名(签名密钥)
●验证消息签名的行为
接收者验证签名(验证密钥)
以上两个行为,需要各自专用的密钥来完成。
验证密钥无法生成签名
●签名密钥只有签名的人才可持有。
验证密钥则可以任何验证的人都可持有。
●(这不是和第五章讲的公钥密码吗!)
简而言之,数字签名就是通过将公钥密码“反过来用”而实现的。
(这不是和第五章讲的公钥密码吗!)
简而言之,数字签名就是通过将公钥密码“反过来用”而实现的。
2、公钥密码与数字签名
反过来:两者是反过来的。数字签名:私钥加密(生成签名),公钥解密(验证签名)
●公钥密码中,任何人都可以加密
●数字签名中,任何人都可以验证
3、数字签名的方法
1、直接对消息签名的方法(一般不会用)
2、对消息的散列值签名的方法(一般都使用这种方法)
第一种需要对整个消息进行加密,非常耗时
(想到了单向散列函数)我们直接把消息转换成散列值,再加密
一些问题:
●数字签名的作用本来就不是保证机密性的。如果需要也可以直接加密后发送。关于密码和签名的组合方法,第十三章会讲到
●签名能不能被复制不重要,重要的是特定的签名者与特定的消息绑定在一起了这一事实
●如果拿着私钥的人说我的私钥被窃取了怎么办?第十章会进行讨论
4、数字签名的应用实例
●安全信息公告
●软件下载
●公钥证书
●SSL/TLS
5、对数字签名的攻击
1、中间人攻击
对公钥密码的攻击方式
对发送者伪装成接收者,对接收者伪装成发送者
防止:对公钥的认证。一般情况下是先计算出散列值,然后电话沟通。也可用后面要讲的“证书”
2、对单向散列函数的攻击
使用散列值的话,必须要有抗碰撞性
3、利用数字签名攻击公钥密码
(签名的操作实际上是对消息的解密)绝对不要对意思不清楚的消息进行签名
解决方式:
对散列值进行签名比较安全
公钥密码和数字签名最好使用不同的密钥对
4、潜在伪造
对一个无意思的消息,没有私钥的情况下,能生成合法的数字签名
RSA-PASS
5、其他攻击
暴力破解、对RSA的N进行质因数分解等
6、各种密码技术的对比
7、数字签名无法解决的问题
●可以识别出篡改、伪装、防止否认
●前提:公钥必须属于真正的发送者
●我们需要使用“证书”。公钥基础设施(PKI)
原标题:密码笔记 | 数字签名