我们想向 Alice 发送一条加密消息。我们可以通过网络向她索要一个公钥,用它加密一条消息并将该消息发回。这很糟糕,因为有人可以假装是 Alice 并发送他们的公钥。该解决方案据说是PKI。因此,我们连接到 PKI 服务(例如 Verisign)并获取公钥。但这与直接询问爱丽丝有什么不同呢?有人可以干扰我们的连接并发送他们自己的证书。我显然错过了一些东西......
我们如何信任 PKI,例如 Verisign?
1) 证书颁发机构只是创建 PKI 的一种方法。旁通道和信任网络的预分发证书是其他的。您的问题应该是“我们如何信任证书颁发机构?”
2)这不是它的工作原理,只连接到威瑞信以检查证书是否已被吊销。证书来自与您连接的同一台服务器,并包含威瑞信的数字签名,威瑞信的公钥随 Web 浏览器或操作系统(或两者)一起分发。在根证书存储中。
至于能够信任证书颁发机构,这是一个大问题,每个浏览器制造商/操作系统在允许根证书存储中的公钥之前都有一些规则。规则规定了有关何时应删除根证书的审核和规则。DigiNotar 是一家荷兰 ca,它的根证书确实被拉了。然而,检查 CA 的人通常不想在没有 100% 证据的情况下提取更大的 CA,因为使用它们的网站会立即崩溃。
最终,在我们目前的规模上,我们几乎没有其他方法来管理它,尽管有些人试图对其他解决方案进行原型设计,例如融合。
例如,假设我有一个 GPG 密钥,用于签署我的所有消息和电子邮件。
我想分发公钥,这样人们就可以验证消息是否真的来自我。我能做的就是将公钥放在我的网站上,这样任何人都可以去那里获取密钥文件。如果我通过 HTTP 提供此连接,任何攻击者都可以拦截流量并替换密钥文件,实质上是执行 MITM 攻击。
所以我能做的是通过 SSL 为我的网站提供服务。然后我可以引导人们访问我的网站,他们将能够下载密钥文件。如果任何攻击者截获流量并执行 MITM 攻击,Web 浏览器将显示警告,通知用户他未连接到正确的服务器。
在PKI中,数字证书上的签名不会创建信任;他们转移它。您信任证书中包含的信息(名称/公钥关联),因为您相对于您信任的证书颁发机构的公钥验证了证书上的签名。您必须从某个地方开始,使用您天生信任的公钥,即不是您刚刚下载的公钥。该根公钥确实被称为“根 CA”或“信任锚”。您的 Web 浏览器和/或操作系统带有几十个“受信任的 CA”。您的计算机先验地知道公钥:它们带有操作系统代码,在操作系统安装 CD-ROM 上,或预安装在计算机上,或随操作系统更新(已签名)一起下载。您可以相信这些密钥是真实的,就像您可以相信操作系统代码是正确的一样。
至于信任的另一面,即您是否可以假设威瑞信没有敌意或太容易上当受骗……嗯,微软为您做出了这个决定。Microsoft 和 Verisign 受相互合同的约束,您与 Microsoft 受合同的约束(我在这里假设您使用 Windows)。如果威瑞信变得敌对并签署虚假证书,那么您的安全将受到威胁;然后,您可以以几美元的价格起诉微软,而微软会以数十亿美元的价格起诉威瑞信。打赌威瑞信和微软将保持一致并不是那么糟糕的赌注。
我们可能信任 Verisign、goDaddy 或 Digicert。但是 MITMA 可能会使这种信任变得毫无用处,因为有很多方法可以让浏览器让用户相信他是在安全的水域。正如 Mike Marlinspike 在 Defcon17 ( http://www.youtube.com/watch?v=ibF36Yyeehw )上雄辩地证明的那样,可以欺骗证书链或欺骗已撤销的证书。
所以不,您不能信任 VeriSign。
顺便提一句。威瑞信在被我的赛门铁克收购之前的几年里就遭到了黑客攻击。