🥑原文:数字签名和数字证书的原理解读 - 知乎
🥑声明:后文图中若未明确指明,默认是 Bob 的公钥或私钥。
Step1:Bob 有两把钥匙,一把是公钥,另一把是私钥。
Step2:Bob 把公钥分发给他的朋友们 —— Alice 和 Chris —— 每人一把。
Step3:假设 Alice 要给 Bob 写一封保密的信。
Alice 写完信后用 Bob 的公钥进行加密,就可以达到保密的效果。
Step4:Bob 收信后,用私钥解密,就看到了信件内容。
这里需要强调的是,只要 Bob 的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
Step5:Bob 给 Alice 回信,决定采用 数字签名。
Bob 写完后先对信件内容使用 Hash 函数,生成信件的 digest 总结。
Step6:然后,Bob 使用私钥,为这个总结生成一个 数字签名。
Step7:Bob 将这个数字签名,附在信件后面,一起发给 Alice 。
Step8:Alice 收信后,取下数字签名,用 Bob 的公钥解密,得到信件的总结。由此证明,这封信确实是 Bob 发出的。
数字签名作用一:验证这封信到底是谁发的,见第 8 步。
数字签名作用二:验证这封信是否被篡改过,见第 9 步。
Step9:Alice 再对信件本身使用 Hash 函数,将得到的结果,与上一步得到的总结进行对比。如果两者一致,就证明这封信未被篡改过。
为什么不直接对 digest 进行解析?答:因为哈希函数具有单向性,所以没有办法根据 Hash 结果求解原始值。这里重新对信件内容使用 Hash 函数,通过比较新老 Hash 结果是否一致,来判断信件内容是否被篡改。
Step10:复杂的情况出现了。
- Chris 偷偷打开 Alice 的电脑,把 Bob 的公钥换成了自己的公钥;
- Alice 实际拥有的是 Chris 的公钥,但她还以为这是 Bob 的公钥;
- Chris 冒充 Bob,用自己的私钥制造数字签名,并写信给 Alice;
- Alice 将会使用假的 Bob 公钥进行解密。
Step11:后来,Alice 感觉不对劲,发现自己无法确定公钥是否真的属于 Bob 。
Alice 想到了一个办法,要求 Bob 去找 证书中心,为公钥做认证。证书中心用自己的私钥,对 Bob 的公钥和一些相关信息一起加密,生成 数字证书。
证书中心的英文是 certificate authority,简称 CA;数字证书的英文是 Digital Certificate 。
Step12:Bob 拿到 数字证书 以后,就可以放心了。以后再给 Alice 写信,只要在签名的同时,再附上 数字证书 就行了。
Step13:Alice 收信后,用 CA 的公钥解开 数字证书,就可以拿到 Bob 真实的公钥了,然后就能证明 数字签名 是否真的是 Bob 签的。