现有的攻击是关于冲突的:攻击者构建了两个证书,这些证书哈希到相同的 MD5,但具有不同的内容。其中之一是“良性”(它包含攻击者的名称),这是攻击者发送给 CA 以进行签名的名称。CA 对其进行签名,因为它是一个完全有效的证书请求(它来自攻击者并且确实包含攻击者的名称)。由于 MD5 碰撞,签名在插入另一个时也是可验证的证书。因此,攻击者在证书上获得了 CA 签名,他在该证书上选择了不受 CA 控制的内容。细节有点复杂,因为攻击者必须以这样一种方式找到冲突,即两个生成的证书都是“结构上有效的”。
您要求的是非常不同的东西:您询问的是攻击者试图生成一个哈希值与现有证书相匹配的证书,而攻击者最初并未生成该证书。这称为第二次原像攻击,通常比发现碰撞更难。特别是,目前 MD5 在第二个原像方面没有已知的弱点。
有 2 128个可能的 MD5 输出(即 16 32,而不是 32 16)。一般来说,如果您有N条输入消息m 1 , m 2 ,... m N ,并且您想构建一个与所有m i不同的新消息m ,但要使m的 MD5等于 MD5 m i之一(任何都可以),那么最著名的攻击方法就是简单地尝试随机消息m直到匹配。该操作的平均成本为2 128 /N。
那里的SSL 证书可能远少于 2 32 个,因此这意味着攻击成本将至少为 2 96 个,这在现有技术下是完全不可行的。所以这种攻击是行不通的。破解 CA 公钥会容易得多(也不可行,但如果被攻击的 CA 密钥是 1024 位 RSA 密钥,则更容易破解大约 100 万倍)。
实际上,对于证书,攻击比这更昂贵,因为证书包含颁发 CA 的名称。拥有来自 CA 的匹配签名(例如,通过使用相同的 MD5)不足以使生成的证书有任何用途:它还必须与 CA 正确“链接”,这意味着包含 CA 名称作为“颁发者名称” . 因此,上面公式中的N不是野外存在的证书总数,而是给定 CA颁发的证书总数,您必须专门针对这些证书。这更低,会产生更高的攻击成本。