在PKI-1中提到了加解密,还有非对称算法中公钥和密钥的概念,那么什么是数字签名、数字证书呢
我们先讨论一个场景,有一对情侣分别在遥远的西伯利亚和北京;男生A拿着自己的私钥对情书进行加密,然后通过公共网络发给在繁华都市中的女生B,B收到加密后的情书很高兴,用A的密钥解开,一切看起来很完美,非对称加密算法很强大,不能随随便便被攻破,看起来可以完美的保护他们两个隐私。
这样的步骤是:
- A采用自己的私钥加密明文信息
- A把加密后的信息通过公共网络传递到B
- B用A的公钥解开步骤2中的明文,开始阅读。
请注意以上都是对明文进行加解密。
明文可能很长很长,加解密过程也可能很费时间,非常影响发信和阅读体验。
那么如果不对整个明文进行加解密,只需要保证B收到的信息确实是A发送的就可以了,怎么办呢。
现在的步骤是:
- A对长长的明文采用摘要算法(例如MD5),这样会生成一个128位的字符串,称为信息摘要(digest),A采用自己的私钥加密这128位的信息,生成的密文就是数字签名(signature)
- A把没有加密的明文和数字签名通过公共网络传递到B
- B用A的公钥解开数字签名,然后检查收到的信息摘要,是否和收到的明文产生的信息摘要一致,如果一致认为是由A发送的,开始阅读。
由此可以看出,B依靠的是A的公钥,如果B存储A公钥的地方被攻破,被悄无声息的替换,那么A-B之间的安全通信就荡然无存了。
假设C偷偷替换了B手里的私钥,那么C就可以假装成A和B通信了。那B怎么保证A的公钥是可靠的呢。
这时候就需要一个公开的,可靠的,第三方鉴权机构,即“证书中心”(certification authority,简称CA)。
证书中心用自己的私钥,对A的公钥和一些相关信息进行加密,生成“数字证书”(Digital Certificate)。
现在的步骤是:
- A对创建明文、生成数字签名(signature)。
- A把没有加密(也可以加密)的明文和数字签名、从CA拿到的数字证书(用来证明自己),通过公共网络传递到B
- B利用手里CA的公钥(可以理解为客户端的根证书,或者可信赖的第三方证书)验证收到的数字证书是否是CA签发,如是则解开拿到A的公钥,然后检查数字签名通过后,开始阅读。
到了此处,大家应该能理解数字签名和数字证书的概念了。
信息安全中由三个基本要求:
- 保密性(Confidentiality):信息在传输时不被泄露
- 完整性(Integrity):信息在传输时不被篡改
- 有效性(Availability):信息的使用者是合法的
这样我们可以看到使用公钥密码对明文加密可以解决保密性,数字签名解决完整性,而数字证书保证了有效性。
数字签名就是对明文先进行Hash运算,得到Hash值;然后利用自己的私钥对Hash值进行加密,生成签名。
证书实际上就是对公钥和某些信息一起进行数字签名,它是对公钥合法性提供证明的技术。
大家可以看看这个证书的详细信息,能够有些直接感性的认识。