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

问题描述 投票:0回答:2

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

encryption aes
2个回答
4
投票

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

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

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

因此,对于给定的密码,无论密钥大小如何,您都可以通过使用适当的纯文本来获得相同的输出。 这个“证明”有一个漏洞,即填充方案可能会导致输出比输入更长(因此该函数不一定是

one-to-one
。)但我怀疑这会对最终结果产生影响。


2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.