如何使用已知的IV解密AES/CBC

7
我有一个不可能的任务,需要解密从客户端发送的AES/CBC加密数据包。我已经做了大量的研究,得出结论,如果IV是静态的,则加密是不安全的。对于这个任务,IV总是静态设置为0。是否有任何方法可以完成这个任务?
编辑:明文是哈姆雷特剧本的片段。客户端以随机块发送它们,因此长度不一致。数据包可能最终会重复,但我不确定。

明文中是否存在已知的模式或重复?我不知道如何处理完全随机的明文。 - Matthew Flaschen
4个回答

3

没有密钥就不行。

具体而言,假设没有填充,每次使用相同的IV会导致漏洞。如果您开始加密与上次加密的数据相同的数据,则两次都会得到相同的加密字符串。这使攻击者可以推断出有关消息内容的一些信息,但无法帮助他们解密它。


3
仅供参考,术语“解密”表示使用密钥的正常操作。如果您没有密钥,则通常称为“破解”,“破解”或“密码分析”。
具有固定初始化向量的CBC具有这样的属性:使用相同密钥加密的消息的相同起始块在密文中也会显示相同的起始块......这是唯一的弱点。因此,如果您可以让受害者为您的消息进行某些猜测(使用相同的密钥进行加密),则可以将其密文与您正在使用的消息中的密文进行比较。
当消息具有某个固定格式时,这更容易实现,并且如果消息在有足够的随机数据之前包含足够多的随机数据,则变得很无望(这是“穷人的初始化向量”)。
其他依赖于所选密文攻击的CBC弱点,其中您选择初始化向量并观察其中的解密验证的可能也适用(您将设置第一个密文块,并观察第二个块是否具有有效的填充)。

1
使用非随机IV的主要问题在于,使用相同密钥加密的两个相同初始块将产生相同的输出。因此,根据你描述的《哈姆雷特》片段,知道你重复使用相同的IV,我将执行以下操作:
  • 我会为“生存还是毁灭”(16字节)计算各种可能的密码(如John the Ripper生成的密码)的密文。
  • 我会比较基于这些16字节可能作为开头的所有消息的结果cipertext。
  • 如果有一个匹配,我就知道密码了。完成。

我会用几个其他著名短语做同样的事情。这是一项我可以在捕获你的文件并将其缓存到数据库之前大规模并行处理的操作。这种方法的通用术语是彩虹表

如果我碰巧知道你的消息的前16个字节(例如,如果它们是发送给已知人员的电子邮件消息,或具有已知标头的HTTP请求等),我的工作将变得更加容易。

如果您使用随机密钥(或像PBKDF2这样的适当KDF),那该怎么办呢?假设我有您的一些消息,至少其中一些具有相同的前16个字节(协议中的标头再次帮助我很多)。第一步是我知道这些消息具有相同的前16个字节。这是非常有用的信息。现在我有了一个攻击您消息的crib
在CBC中重复使用IV +密钥并不会完全破坏其安全性(与在CTR模式下重复使用Nonce +密钥不同)。但它为攻击者提供了许多有用的工具来简化攻击。
我并不是说这些中的任何一个都可以让您在短时间内解密特定的密文。但它们都严重削弱了AES的所谓强密码学。

0

Zero IV 可以泄露一些关于数据的前几个字节的信息,但如果它们不同,这应该不是一个问题(但并不建议使用)。 例如,OpenPGP 在某些情况下使用零 IV。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接