mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-11-17 14:43:43 +08:00
fix img
This commit is contained in:
@@ -262,7 +262,7 @@ function hide_canvas() {
|
||||
<h3>数字签名和证书</h3>
|
||||
<p>在计算机中,数字签名是一种很好的实现签名(模拟现实世界中签名)的方式。 所谓数字签名,就是对摘要进行加密形成的密文。</p>
|
||||
<p>举个例子:现在 Alice 和 Bob 签合同。Alice 首先用 SHA 算法计算合同的摘要,然后用自己私钥将摘要加密,得到数字签名。Alice 将合同原文、签名,以及公钥三者都交给 Bob。如下图所示:</p>
|
||||
<p><img src="assets/CgqCHmAH6jSAER_BAACprlu8LmA391.png" alt="Lark20210120-162725.png" /></p>
|
||||
<p><img src="assets/CgqCHmAH6jSAER_BAACprlu8LmA391.png" alt="png" /></p>
|
||||
<p>Bob 如果想证明合同是 Alice 的,就要用 Alice 的公钥,将签名解密得到摘要 X。然后,Bob 计算原文的 SHA 摘要 Y。Bob 对比 X 和 Y,如果 X = Y 则说明数据没有被篡改过。</p>
|
||||
<p>在这样的一个过程当中,Bob 不能篡改 Alice 合同。因为篡改合同不但要改原文还要改摘要,而摘要被加密了,如果要重新计算摘要,就必须提供 Alice 的私钥。所谓私钥,就是 Alice 独有的密码。所谓公钥,就是 Alice 公布给他人使用的密码。</p>
|
||||
<p><strong>公钥加密的数据,只有私钥才可以解密。私钥加密的数据,只有公钥才可以解密</strong>。这样的加密方法我们称为<strong>非对称加密</strong>,基于非对称加密算法建立的安全体系,也被称作<strong>公私钥体系</strong>。用这样的方法,签约双方都不可以篡改合同。</p>
|
||||
@@ -270,12 +270,12 @@ function hide_canvas() {
|
||||
<p>但是在上面描述的过程当中,仍然存在着一个非常明显的信任风险。这个风险在于,Alice 虽然不能篡改合同,但是可以否认给过 Bob 的公钥和合同。这样,尽管合同双方都不可以篡改合同本身,但是双方可以否认签约行为本身。</p>
|
||||
<p>如果要解决这个问题,那么 Alice 提供的公钥,必须有足够的信誉。这就需要引入第三方机构和证书机制。</p>
|
||||
<p><strong>证书为公钥提供方提供公正机制</strong>。证书之所以拥有信用,是因为证书的签发方拥有信用。假设 Alice 想让 Bob 承认自己的公钥。Alice 不能把公钥直接给 Bob,而是要提供第三方公证机构签发的、含有自己公钥的证书。如果 Bob 也信任这个第三方公证机构,信任关系和签约就成立。当然,法律也得承认,不然没法打官司。</p>
|
||||
<p><img src="assets/CgpVE2AH6j6ASBKvAADJu5B4-Bc773.png" alt="Lark20210120-162728.png" /></p>
|
||||
<p><img src="assets/CgpVE2AH6j6ASBKvAADJu5B4-Bc773.png" alt="png" /></p>
|
||||
<p>如上图所示,Alice 将自己的申请提交给机构,产生证书的原文。机构用自己的私钥签名 Alice 的申请原文(先根据原文内容计算摘要,再用私钥加密),得到带有签名信息的证书。Bob 拿到带签名信息的证书,通过第三方机构的公钥进行解密,获得 Alice 证书的摘要、证书的原文。有了 Alice 证书的摘要和原文,Bob 就可以进行验签。验签通过,Bob 就可以确认 Alice 的证书的确是第三方机构签发的。</p>
|
||||
<p>用上面这样一个机制,合同的双方都无法否认合同。这个解决方案的核心在于<strong>需要第三方信用服务机构提供信用背书</strong>。这里产生了一个最基础的信任链,如果第三方机构的信任崩溃,比如被黑客攻破,那整条信任链条也就断裂了。</p>
|
||||
<h3>信任链</h3>
|
||||
<p>为了固化信任关系,减少风险。最合理的方式就是<strong>在互联网中打造一条更长的信任链,环环相扣,避免出现单点的信任风险</strong>。</p>
|
||||
<p><img src="assets/Cip5yGAH6kWAEWq5AABj5AWYCbQ099.png" alt="Lark20210120-162730.png" /></p>
|
||||
<p><img src="assets/Cip5yGAH6kWAEWq5AABj5AWYCbQ099.png" alt="png" /></p>
|
||||
<p>上图中,由信誉最好的根证书机构提供根证书,然后根证书机构去签发二级机构的证书;二级机构去签发三级机构的证书;最后有由三级机构去签发 Alice 证书。</p>
|
||||
<ul>
|
||||
<li>如果要验证 Alice 证书的合法性,就需要用三级机构证书中的公钥去解密 Alice 证书的数字签名。</li>
|
||||
@@ -286,7 +286,7 @@ function hide_canvas() {
|
||||
<h3>中间人攻击</h3>
|
||||
<p>最后我们再来说说中间人攻击。在 HTTPS 协议当中,客户端需要先从服务器去下载证书,然后再通过信任链验证服务器的证书。当证书被验证为有效且合法时,客户端和服务器之间会利用非对称加密协商通信的密码,双方拥有了一致的密码和加密算法之后,客户端和服务器之间会进行对称加密的传输。</p>
|
||||
<p>在上述过程当中,要验证一个证书是否合法,就必须依据信任链,逐级的下载证书。但是根证书通常不是下载的,它往往是随着操作系统预安装在机器上的。如果黑客能够通过某种方式在你的计算机中预装证书,那么黑客也可以伪装成中间节点。如下图所示:</p>
|
||||
<p><img src="assets/CgpVE2AH6kyAHNWzAABv6F_xIJU589.png" alt="Lark20210120-162718.png" /></p>
|
||||
<p><img src="assets/CgpVE2AH6kyAHNWzAABv6F_xIJU589.png" alt="png" /></p>
|
||||
<p>一方面,黑客向客户端提供伪造的证书,并且这个伪造的证书会在客户端中被验证为合法。因为黑客已经通过其他非法手段在客户端上安装了证书。举个例子,比如黑客利用 U 盘的自动加载程序,偷偷地将 U 盘插入客户端机器上一小段时间预装证书。</p>
|
||||
<p>安装证书后,黑客一方面和客户端进行正常的通信,另一方面黑客和服务器之间也建立正常的连接。这样黑客在中间就可以拿到客户端到服务器的所有信息,并从中获利。</p>
|
||||
<h3>总结</h3>
|
||||
|
||||
Reference in New Issue
Block a user