目录
数字签名
1.签名的生成和验证
2.公钥密码与数字签名
1)公钥密码
2)数字签名
数字签名的方法
1)直接对消息签名的方法
2)对消息的散列值签名的方法
注意:
数字签名的应用:
1)安全信息公告
2)软件下载
3)公钥证书
4)SSL/TSL
数字签名的算法
对数字签名的攻击:
消息认证码与数字签名对比
数字签名无法解决的问题:
之前提到过由于消息认证码无法防止否认。之所以无法否认,是因为收发双方共享一个密钥;由于密钥共享,所以能计算出正确MAC值的不只有发送者,接收者也可以计算出,对于第三方而言,无法判断出消息的出处。因此需要使用数字签名
数字签名(又称公钥数字签名、电子签章等)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。
1)生成消息签名:该行为由发送者来完成,生成签名就是根据消息内容计算数字签名的值,隐含”签名人认可消息内容“
2)生成数字签名:该行为由接收者来完成,也可能由验证的第三方来完成,验证签名就是检查消息是否真的来自发送方
一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证;发送方使用签名密钥来生成消息的签名;接收方(第三方)使用验证密钥来验证消息的签名
注:签名密钥只能签名人持有,而验证密钥是需要验证的人都可以持有
公钥密码包括有公钥和私钥组成的密码对,公钥用于加密,私钥用于解密
同公钥密码一样,数字签名也使用公钥和私钥组成的密钥对,但其用法与公钥密码相反;私钥加密相当于生成签名,公钥解密相当于验证签名
所以说,在公钥密码中,人人都可以使用公钥进行加密;在数字签名中,人人都可以使用验证密钥来验证签名
1.发送者使用自己的密钥对消息进行加密(只有发送者才能持有,除发送者外,其他人是无法生成相同签名的)
2.将签名和消息发送给接收方
3.接收方使用公钥对签名进行解密
4.发送方将解密的消息与发送方发送的消息进行比对
1.发送方使用单向散列函数计算消息散列值
2.发送方使用私钥对散列值进行加密
3.将消息和签名发送给接收方
4.接收方使用公钥对签名进行解密
5.接收方将解密后的散列值与发送方发过来的散列值进行对比
1)数字签名使用私钥进行加密来产生认证符号
2)数字签名并不用于保证机密性
3)签名所代表的是签名人对该消息进行的签名,复制签名不会改变签名者和消息的内容
4)在签名之后对消息进行修改是毫无意义的,数字签名的作用为识别修改
5)数字签名会根据消息内容的改变而改变,所以签名是不会重复使用的
6)想要使一份数字签名作废,需要再创建一份声明该签名已作废并附上数字签名的文书
7)在数字签名中,能生成签名的只有发送者,能验证签名的只有接收者;因此可以防止否认
此类消息是为了让更多人知道,因此没有加密的必要,只用在消息中加上数字签名(对明文施加的签名称为明文签名)
用于检测所下载的软件是否被篡改
将公钥当作信息,对其加上数字签名
在认证服务器身份是与否合法时所使用的服务器证书(加上签名的服务器公钥)
1)RSA
2)EIGamel
3)DSA
4)Rabin
1)中间人攻击
2)对单向散列函数进行攻击
3)利用数字签名攻击公钥密码
4)其他攻击
验证签名的公钥必须属于真正的发送者,为了确认自己得到的公钥是否合法,我们需要证书(将公钥当成一条消息,由可信任的第三方对其签名后得到的公钥)