场景设置
数字签名
Bob的公钥是公开的,任何人都能够获取,但是仅有Bob保存着自己的私钥。这一对key是用来加密解密的。可以用私钥加密,公钥解密;也可以用公钥加密,私钥解密。
所以Susan可以使用Bob的公钥进行加密,把密文传递给Bob后,Bob可以用自己的私钥解密。当然Bob的Co-workers都可以想Susan一样用使用Bob的公钥。下图演示了Bob和Susan的解密加密过程。
如果应用合适的软件,利用Bob的私钥我们能够对文本进行数字签名。数字签名可以看做跟在Bob明文后面的“戳”。
数字签名主要是用来防篡改,只要使用了数字签名,如果“坏人”修改了我们传递的内容,是会被我们检测到的。
首先将我们要传递的文本Hash化,生成Hash值,有时候我们称这个值为信息摘要。如下图所示:
然后Bob使用自己的私钥对信息摘要进行加密。如下图所示:
接下来Bob将签名附着在正文后面。如下图所示:
至此我们已经了解了数字签名的过程,接下来Bob把带有签名的文本发送给Pat。Pat会使用Bob的公钥解密签名,将签名转化为信息摘要;Pat也用算法将Bob的正文Hash化,通过正文又会得到一个信息摘要。比较这两个摘要是否相同,如果相同说明信息传输过程数据未被篡改,如果不同说明数据传输过程被篡改。如下图所示:
数字证书
Doug是一个心怀叵测的人,总是想要欺骗Pat。Doug知道Pat可以获取到Bob的公钥和已签名的数据,于是Doug利用Bob的信息生成了一个欺骗性公钥。对于Pat来说,他无法确定自己获得的公钥是否是正确的。
巧的是Susan在公司的认证中心工作。Susan可以使用Bob的公开信息和公钥为Bob创建一个仅属于Bob的数字证书。如下图所示:
现在Bob的同事可以使用Bob的数字证书来确定Bob公钥的真实性,事实上,同事们不会相信未经过Susan颁发的数字证书。~~~~~联想一下CA,签发证书的过程干的活类似于Susan,只不过CA站在互联网更高的角度去保障身份验证过程。
回到刚刚的话题,有了数字证书,正常的流程应该是Pat会首先使用Susan的公钥解密Bob的数字证书(该证书是被Susan使用自己的私钥签发的),如果成功解密,说明该证书是Susan签发的证书。接下来Pat可以检查Bob在Susan的证书颁发处的信誉是否良好(CRL OR OSCP),以及与Bob的身份有关的所有证书信息有没有被更改。如果没有发现问题,Pat会从Bob的证书中取出Bob的公钥去解密Bob传给自己的数据,如果成功解密说明Bob传输的数据是由Bob的私钥加密的,然后利用数字签名技术就可以知道Doug是否篡改了数据。