使用AES时,有没有办法判断数据是使用128位还是256位密钥加密?

时间:2011-04-27 22:58:37

标签: encryption aes

我想知道是否有某种方法可以判断数据是否使用特定密钥大小加密,当然没有源代码。您可以在加密后检查的数据是否存在任何可检测的差异?

2 个答案:

答案 0 :(得分:4)

没有办法做到这一点。两者都加密了16字节的数据块,并且在加密完成后得到的块“看起来”相同(它们将具有不同的值,但仅对加密数据的分析将无法确定原始密钥大小)。如果原始数据(纯文本)可用,则可以进行某种分析。

一个非常简单的“证明”是:

  • 对于给定的输入,无论密钥大小如何,输出的长度都相同。但是,它可能因模式(CBC,CTR等)而异。
  • 由于加密是可逆的,因此可以将其视为one-to-one函数。换句话说,不同的输入会产生不同的输出。
  • 因此,无论密钥大小如何,都可以生成任何给定的输出(通过更改纯文本)。

因此,对于给定的密码,无论密钥大小如何,您都可以使用相应的纯文本来获得相同的输出。这个“证明”有一个漏洞,填充方案可以导致输出比输入更长(因此函数不一定是onto。)但我怀疑这会对最终结果产生影响。

答案 1 :(得分:2)

如果加密系统有任何好处(AES是),则应该无法区分其原始输出和随机数据 - 因此,特别是,应该无法区分AES-128和AES-256 ,至少在输出位上。

然而,大多数使用加密的协议最终都包括一些元数据,这些元数据没有模糊地指定所使用的算法类型,包括密钥大小。这是因为接收者知道要使用什么来解密。这不被认为是一个问题。因此,在实践中,必须假设无论攻击者查看您的系统,都知道该密钥实际上是128位密钥还是256位密钥。

一些辅助渠道也可能提供这些信息。使用256位密钥的AES加密比使用128位密钥的AES加密慢40%:只需计算加密服务器响应所花费的时间就可以显示密钥大小。