加密算法的抗冲突性如何?

Joh*_*rer 3 encryption cryptography hash-collision

对于在明文/密钥对上工作的给定(对称或非对称)加密算法生成的给定密文,找到产生相同密文的不同明文/密钥对有多难?

两个明文/密钥对导致相同的密文有多难?

导致这个问题的是另一个可能与上述问题无关的问题:

如果您有密文和密钥并希望使用某些解密例程对其进行解密,则例程通常会告诉您密钥是否正确.但它怎么知道呢?它是否在结果明文中寻找某种模式,表明解密是成功的?在一些不同的明文中是否存在另一个关键结果,它包含模式并且还被例程报告为"有效"?

后续问题的灵感来自答案和评论:

如果允许的明文/密钥对限制在以下(或两种)方式中:

1)明文以密钥的KCV(密钥检查值)开始.

2)明文以某些明文/密钥组合的哈希值开始

这会使碰撞发现不可行吗?甚至清楚,这样的明文/密钥存在=

Hen*_*röm 9

你的问题的答案与你所说的一样,就是没有任何碰撞阻力.

对称情况 假设您有一个纯文本PT,其长度是底层块密码的块长度的倍数.您生成随机IV并使用密钥K,CBC模式加密纯文本,并且不填充.

生成生成相同密文CT的纯文本PT'和密钥K'很容易.只需随机选择K',使用密钥K'和IV解密CT,就可以得到碰撞的PT'.

如果你也使用填充,这会变得有点复杂,但它仍然是可能的.如果你使用PKCS#5/7填充,只需保持生成密钥,直到找到一个密码文本PT'的最后一个八位字节为0x01.这将平均需要128次尝试.

要使此类碰撞发现不可行,您必须使用消息验证代码(MAC).

非对称情况 类似的情况适用于RSA公钥加密.如果您不使用填充(显然不建议使用,甚至可能不被大多数加密库支持),并使用公钥(N,E)将PT加密为CT,只需生成第二个密钥对(N',E) ','D')使得N'> N,然后PT'= CT ^ D'(mod N)将在(N',E')下加密成CT.

如果您使用PKCS#1 v1.5填充进行RSA加密,则RSA私钥操作后最重要的八位字节必须为0x02,其概率大约为256中的一个.此外,第一个0x00值为八位字节必须在指数9之前发生,这将以高概率(大约0.97)发生.因此,平均而言,您必须平均生成大约264个相同位大小的随机RSA密钥对,然后再针对某些纯文本生成相同的密文.

如果您正在使用RSA-OAEP填充,则除非使用相应的公钥生成密文,否则保证私钥解密失败.