数字指纹如何防止假 public 密钥被传递?

How do digital fingerprints prevent fake public keys from being passed?

我正在阅读 public 密钥密码学。考虑 Bob 想要将他的 public 密钥传递给 Alice 以便她可以向他发送只有他可以解密的消息的场景。现在假设有一个中间人攻击,其中 John 拦截了从 Bob 传递给 Alice 的 public 密钥并将他(John)的 public 密钥传递给 Alice。 Alice 认为她收到了 Bob 的 public 密钥,用它加密一条消息,然后发回。约翰截获它并用他的私钥解密,从而截获爱丽丝发给鲍勃的消息。 article 我读到的解决方案是使用数字指纹:Bob 将他的指纹传递给 Alice,这样当他稍后将他的 public 密钥传递给她时,她可以使用 Bob 的指纹来验证public 密钥有效。

我想知道的:

如果 John 能够通过发送他自己的 public 密钥而不是 Bob 的密钥来冒充 Bob,为什么他不能用数字指纹做同样的事情? Bob 会将他的数字指纹发送给 Alice,John 会拦截并发送他自己的指纹,然后当 Bob 发送他的 public 密钥时,John 会再次发送他自己的指纹,Alice 会认为这是 Bob 的,因为她验证了它(John 的 public 钥匙,以为是 Bob 的)使用 John 的数字指纹,以为是 Bob 的。

我在这里错过了什么?数字指纹如何解决public密钥冒充攻击?

你是对的——它们本身并没有帮助。有帮助的是在 Alice 和 Bob 之间有多种沟通渠道。 John 需要能够拦截和更改所有通道以实施 MITM 攻击。更多的渠道使这变得更加困难。因此,通过不同的(或多个不同的)额外通道发送指纹会给约翰可能错过的额外 "check",从而揭示他的攻击。

简短回答:如果 Bob 的证书是由证书颁发机构签署,则中间人攻击不可能(加利福尼亚州)。这就是现实中的情况,例如,如果您访问一个网站。

长答案: Alice 应该有一个受信任的根 CA 列表(例如由网络浏览器或操作系统提供)。

Bob 应该有一个电子邮件地址或域来唯一标识他。 此电子邮件地址或域名已嵌入到他的证书中。

现在当 Alice 收到 public 证书时,她可以通过检查电子邮件地址或域名来检查它是否属于 Bob。她还可以检查该证书是否受到她的根 CA 之一的信任。如果证书来自 John,她会发现它不受信任,并且会检测到中间人攻击。

请注意,实际上也有中间 CA。

我的回答也不包括自签名证书。

你是对的,如果 Alice 收到了一个(消息,public 密钥,签名)三元组——并且没有其他信息——那么消息就可以被欺骗。

如果 Bob 和 Alice 过去见过面并交换了 public 密钥,那么 Alice 会知道随消息发送的密钥(现在不一定需要随消息发送)是不是 Bob 的。

或者,Bob 可以得到像 Notary Public 这样的东西来断言他们知道这个密钥确实属于 Bob。现在是爱丽丝是否愿意信任那个公证人的问题。在 PKI(Public 密钥基础设施)中,最常见的表示方式是 X.509 Public 密钥证书(“数字证书”)。公证人的角色由颁发证书的机构提供。该 CA 可能已被另一个 CA“公证”,Alice(的 OS)已经被告知该 CA 是可信的,只能信任可信赖的 CA。