一、数字签名
1.1、为什么需要数字签名?
由于网络环境的复杂性,我们无法保证通信的双方是真是的,而且内容是完整的、没被修改过的,因此才需要数字签名。数字签名类似于现实生活中的签名,有以下两种功能:(1)确认通信双方的真实身份,别人假冒不了;(2)能确认消息的完整性。
它是基于非对称加密算法。
1.2、数字签名的流程
假如A和B进行通信。开始时A有两把钥匙:自己的公钥和私钥。A把自己的公钥公布出来,每个人都能看到。同理,B也如此。
1.2.1、B向A发送信息
B向A发送时,需要注意两点:
(1)需要让A知道确实是B自己发送的,而不是其他人伪造的。这就叫做数字签名。过程如下:
①由于只是验证身份,所以不需要像一片文档一样那么多内容,所以需要先针对文档生成一段短的字符串,一般用hash函数,生成一个32位的字符串,这叫做摘要;
②B用自己的私钥对摘要进行加密,得到摘要的密文,即:数字签名。因为B要验证自己的身份,所以必须要加密,而且只能用自己的私钥进行加密,而不是对方A的。
(2)对发送的文档进行加密。B就用A的公钥对文档进行加密,得到密文。
最后,B将签名密文+文档密文一起发送给A。
1.2.2、A解密密文+身份认证
A在得到签名、文档后,需要进行解密、身份认证的操作,A进行如下过程:
(1)A用自己的私钥对文档密文进行解密,得到文档的明文;
(2)A用B的公钥对签名密文进行解密,得到签名的明文(即:摘要),证明了确实是由B发过来的;
(3)A对文档的内容,使用相同hash函数,得到摘要,与(2)中的摘要进行对比,即可得知文档的内容有没有被修改过,证明了文档的完整性。
1.3、数字加密和数字签名区别
数字签名和数字加密的过程都是使用公开密钥体系,但实现的过程正好相反,使用的密钥对也不同。
数字签名:使用的是发送方的密钥对,发送方用自己的私钥进行加密,接收方用发送方的公钥进行解密;这是一个一对多的关系,任何拥有发送方公钥的人都可以验证数字签名的正确性;
数字加密:使用的是接收方的密钥对,这是多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私钥的人才可能对信息解密;
另外:数字签名只采用了非对称密钥加密算法,它能保证发送信息的完整性、身份认证和不可否认性;
数字加密采用了对称密钥加密算法和非对称密钥加密算法形结合的方法,它能保证发送信息的保密性。
二、数字证书
以上从数字签名的过程可以看出,它可以保证通信双方身份的正确性,但有可能出现这样一种情况。由于数字签名是由公钥、A发送给B的签名这两部分构成的,假如这两部分都被别人替换掉,该怎么办?比如:B保存的A的公钥被黑客C替换成C自己的了,那么C就可以假冒A和B进行通信了。这时候就需要数字证书了。
数字证书是由权威的认证机构颁发的证书:证书认证中心(certificate authority,简称CA),他保证了自己所颁发给网站A的公钥的正确性。数字证书的内容包括该证书的颁发机构、证书的拥有者、证书的有效期、公钥等,这些内容是由证书认证中心用自己的私钥加密得到的,通过证书认证中心自己公开的公钥即可认证网站A的身份。证书认证中心的证书是由更高一级的证书认证中心授权的,以此类推,直到根证书认证中心,我们假设根证书认证中心是可信的,因为没有办法认证根证书认证中心的身份的正确性。
如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出如下警告。
如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。如下图。