当使用AES加密时,有没有一种方法可以判断数据是使用128位还是256位密钥进行加密的?

5

我想知道是否有办法在没有源代码的情况下判断数据是否使用特定密钥大小进行加密。在加密后,是否可以检查数据中是否存在可检测的差异?

2个回答

4
没有任何方法可以做到这一点。加密16字节的数据块,加密完成后生成的块会“看起来”相同(它们将具有不同的值,但是仅对加密数据进行分析将无法确定原始密钥大小)。如果原始数据(明文)可用,则可能可以进行某种类型的分析。
一个非常简单的“证明”是:
- 对于给定的输入,输出的长度与密钥大小无关。但是,它可能取决于模式(CBC、CTR等)。 - 由于加密是可逆的,因此可以认为它是一个一对一的函数。换句话说,不同的输入会产生不同的输出。 - 因此,无论密钥大小如何,都可以通过更改明文来产生任何给定的输出。
因此,对于给定的密码,通过使用适当的明文,您可以获得相同的输出,而不管密钥的大小。这个“证明”有一个漏洞,即填充方案可能导致输出比输入长(因此该函数不一定是映满的)。但我怀疑这不会对最终结果产生影响。

2
如果一个加密系统是好的(AES是),那么就不应该有办法区分其原始输出和随机数据 - 因此,特别地,至少在输出位上,不应该有办法区分AES-128和AES-256。然而,大多数使用加密的协议最终会包含一些元数据,指定明确使用的算法类型,包括密钥大小。这是为了让接收方知道用什么来解密。这被认为不是一个问题。因此,在实践中,必须假设任何攻击者查看您的系统都知道密钥是128位还是256位。一些副通道也可能提供这些信息。使用256位密钥的AES加密比使用128位密钥的AES加密慢40%:简单地计时加密服务器响应所需的时间可以揭示密钥大小。

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