我收到了一份关键的过渡声明,因为有人发现自己处于与此处描述的完全相同的情况。这个问题将来会针对越来越多的 OpenPGP 用户,甚至可能是所有用户。与其只在私信中回复,不如将其作为问答发布似乎更合理。
有人想攻击我,并劫持了我的 OpenPGP 密钥 ID。当我在0xDEADBEEF密钥服务器上搜索我的短密钥 ID 时,除了我自己的密钥之外,还找到了多个其他密钥。
这怎么发生的?我能做些什么呢?我必须撤销我的密钥吗?
我收到了一份关键的过渡声明,因为有人发现自己处于与此处描述的完全相同的情况。这个问题将来会针对越来越多的 OpenPGP 用户,甚至可能是所有用户。与其只在私信中回复,不如将其作为问答发布似乎更合理。
有人想攻击我,并劫持了我的 OpenPGP 密钥 ID。当我在0xDEADBEEF密钥服务器上搜索我的短密钥 ID 时,除了我自己的密钥之外,还找到了多个其他密钥。
这怎么发生的?我能做些什么呢?我必须撤销我的密钥吗?
这怎么发生的?
OpenPGP 短密钥 ID 太小,无法提供合理的安全性来抵御冲突攻击。2^32不同的短密钥 ID少之又少,不到 50 亿个。
生成如此大量的密钥将需要大量时间。但是,密钥 ID 是根据 OpenPGP 公钥(例如,RSA 公钥)和密钥生成时间(作为 unix 时间戳,即自 1970-01-01 以来的秒数)计算得出的。这允许将要生成的密钥数量减少几个数量级。
使用相当简单的计算机程序,可以轻松生成密钥对,然后迭代所有合理的密钥创建时间值。让我们假设过去五年的合理时期,这意味着 1.5 亿个不同的密钥 ID。可能有点低估(将可能的短密钥 ID 的数量除以每个生成的密钥的密钥 ID 数量),它没有考虑到我们在生成的集合中也会有重复的密钥 ID,假设您只需要生成更少超过 30 个“真实”键,这只是几秒钟或几分钟的事情。
Micah Lee的OHM 2013 演讲Trolling the Web of Trust介绍了这个缺陷以及如何利用它的一些示例实现。Richard Klafter 和 Eric Swanson 使用这种技术复制了完整的强集(最大的一组完全相互连接的密钥,换句话说,大多数活跃的 OpenPGP 用户与其他人进行了相互密钥签名),包括认证并发布了它在(非同步)密钥服务器上。
有人将“伪造的”信任网络复制到“真正的密钥服务器”,或者只是生成他自己的“副本”,这只是时间问题。
我在什么是 OpenPGP 密钥 ID 冲突?,特别是讨论不同的 OpenPGP 密钥 ID 类型以及它们之间的关系。
我能做些什么呢?
这种攻击不仅击中了您的钥匙,而且可能击中了每一个钥匙。产生碰撞不需要(太多)特殊知识或特定硬件,每个“高级用户”在短时间阅读后都能够在商品机器上产生碰撞。
解决此问题的唯一方法是停止使用短密钥 ID,尤其是在没有执行后续指纹验证的情况下。因此:
我必须撤销我的密钥吗?
撤销您的 OpenPGP 密钥对您没有帮助,攻击者将能够在几秒钟或几分钟内重新创建一个新的冲突 OpenPGP 密钥。而是将您的声誉(认证)保留在信任网络中,并确保扩展它!