1、介绍
使用签名秘钥生成数字签名、使用验证秘钥验证数字签名是不是发送者的。
使用验证秘钥是无法生成数字签名的
2、方法
- 直接对消息进行数字签名
- 对消息的散列值进行数字签名
3.疑问
数字签名没有对信息进行加密,不能保证机密性。
只有持有该密钥的人才能够生成的信息,称为认证符号。数字签名就是一种认证符号。
消息和数字签名可以被篡改,但是无法通过验证。
如果数字签名被重复使用,由于信息不同,也无法通过验证。
Q:带有数字签名的合同是计算机文件,无法保证是否留存副本。那么如何作废合同?
- 写一份文书,声明该合同上的公钥作废,加上数字签名
- 在合同上声明消息的有效期,加上数字签名
Q:如何防止否认?
消息认证码的秘钥由双方共享,所以第三方无法确定该消息由谁发送。但是数字签名只有发送者才能生成。
Q:数字签名能够代替纸质签名和印章吗?
暂时不能。我们在签名时不能确保该软件是否安全,签名的可能是另一个文件。
4.具体事例
- 安全信息公告
- 软件下载——防止被篡改
- 公钥证书——保证公钥合法,对公钥进行数字签名
- SSL/TLS——认证服务器身份是否合法
五、RSA实现数字签名
1.用RSA进行加密
在RSA中,所有的数据都是数字,如果消息不是数字,要先将消息变为数字
2.由RSA进行解密
六、其他方式实现数字签名
1、ElGamal——公钥密码和数字签名(有漏洞)
2.DSA——数字签名
3.Rabin——公钥密码和数字签名
七、对数字签名的攻击
1、中间人攻击
防御方法
打电话和对方确认公钥,为了方便,计算公钥的散列值,对比散列值,这个散列值叫做指纹。
在密码软件PGP中。定义了一套单词表,以方便在在电话中确认指纹,该单词表称为生物识别单词表,其中包括256个容易通过声音来识别的单词。
PGP在用16进制序列显示签名指纹的时候还会显现出对应的单词序列,这样就可以通过口头确认了。如果不能通过电话确认,可以使用公钥证书。
2.对单项散列函数攻击
用于消息相同散列值的消息替换消息
3.使用数字签名攻击公钥密码
公钥密码与数字签名的加解密公式相反,如果公钥密码与数字签名使用的密钥对一样,就容易被破解。只要Mallory将密文发给Alice,让其进行数字签名,就可以破解密文,但这样风险较大。
防御方式
- 对消息的散列值进行数字签名,不要对消息进行签名
- 公钥密码和数字签名最好使用不同的密钥对
4.其他攻击
攻击公钥密码的方法都可以用来攻击数字签名
八、对比
九、数字签名无法解决的问题
无法确认公钥是否合法,这需要使用证书。
公钥以及数字签名成为一种社会性基础设施,即公钥基础设施,简称KPI