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

Encryption 当使用AES时,有没有办法判断数据是使用128位还是256位密钥加密的?,encryption,aes,Encryption,Aes,我想知道是否有某种方法可以判断数据是否用特定的密钥大小加密,当然没有源代码。加密后可以检查的数据是否存在任何可检测的差异?不,没有任何方法可以做到这一点。这两种方法都对16字节的数据块进行加密,加密完成后生成的块“外观”相同(它们的值不同,但仅对加密数据进行分析无法确定原始密钥大小)。如果原始数据(纯文本)可用,则可以进行某种分析 一个非常简单的“证明”是: 对于给定的输入,无论键大小如何,输出的长度都是相同的。但是,它可能因模式(CBC、CTR等)的不同而有所不同 由于加密是可逆的,因此可以

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

不,没有任何方法可以做到这一点。这两种方法都对16字节的数据块进行加密,加密完成后生成的块“外观”相同(它们的值不同,但仅对加密数据进行分析无法确定原始密钥大小)。如果原始数据(纯文本)可用,则可以进行某种分析

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

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

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

如果加密系统是好的(AES是),那么就不应该有办法区分其原始输出和随机数据——因此,特别是,至少在输出位上,应该没有办法区分AES-128和AES-256

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

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