我正在尝试弄清楚公钥密码学如何才能真正以安全的方式工作。
据我所知,您可以访问 example.com 并下载他们的 PGP/GPG 公钥并将其添加到您的密钥环中。然后,他们会向您发送一个用他们的私钥签名或用您的公钥加密的文本文件(或其他内容);您可以验证其真实性和/或解密它。
如果攻击者修改了发送给您的网站,并以他们的名义签署了自己的假密钥,而您将其放在钥匙圈中,该怎么办?然后,您继续验证并解密被篡改的文件,假设它是有效的。
我猜我说的是中间人篡改整个网络流量,或者类似的事情。我只是不确定“签名”如何能防止密钥和数据在传输过程中被伪造。
答案1
您描述的场景需要多重信任网故障:
攻击者必须破坏密钥服务器,并在那里放置一份伪造的公钥副本。
如果您过于偏执而使用 PGP,您很可能会让其他人签署您的密钥,因此攻击者必须让这些人签署伪造的密钥(或污染整个密钥链)。其他用户必须接受已泄露的公钥才能使用
。真正的偏执狂只会从所有者手中获取物理密钥。普通的偏执狂(比如我)只会在签署密钥时坚持这一点。攻击者必须破坏数据流(解密 - 这是最简单的部分,因为它是用他们破解的密钥加密的),修改它,重新加密它,并用发送者的私钥
假设您足够偏执以至于使用 PGP,您会坚持要求收到所有签名的内容。
签名是用发送者的私钥制作的,因此攻击者要么破解了发送者的密钥,要么让您接受其公钥的破解版本,您将使用该公钥来检查伪造签名。
有一本关于这个主题的精彩书籍 -应用密码学- 这进一步解释了导致该系统崩溃所需的妥协类型。
答案2
一般来说,您需要在信任密钥之前对其进行验证。
在您概述的情况下,这意味着仅当密钥是通过安全通道(例如,经过验证的 SSL)或您信任的其他方式(例如,通过不同的验证方式传达的指纹哈希)提供给您的时,才会信任该密钥。
答案3
一般来说,对于 PGP 来说,这就是为什么会有密钥签名聚会,这样你就可以亲眼看到指纹,验证对方的身份,然后在线获取公钥本身。