-1

这些天我一直在阅读和做关于 AES 的实验。比如说 128 位 AES,在加密过程中,如果明文小于 128 位,则将添加全 0 的填充。解密后,这些 0 可以被删除。

我正在考虑使用填充进行错误检测:如果明文始终为 16 位,则解密后的文本应为(某些数据的 16 位 + 0 的 112 位)的形式。我们称这种形式为“法律明文”。总共可以有 2^16 个合法明文。

如果攻击者不知道密钥和 IV,通过修改密码,解密的明文可以是任何形式。他/她有 (2^16)/(2^128) = 2^(-112) 的概率使其成为合法的明文,这是一个非常小的机会。

这听起来合理吗?

(当然,攻击者仍然可以通过修改第 i 个密码来进行位翻转,以在第 (i+1) 个明文中获得想要的结果)

4

2 回答 2

1

有精心设计的认证加密模式,GCM,可以检测错误(或篡改)。

您没有明确说明您的方案中的模式,但听起来您正在提议 CBC。如果是这样,它完全没有提供任何保护:攻击者可以翻转密文的前 16 位中的任何一个,并且仍然拥有有效的纯文本。

于 2016-04-12T22:54:49.523 回答
0
  1. 对于可能以 0x00 字节结尾的二进制数据,使用 0 (0x00) 填充将不起作用。通常使用PKCS#7 née PKCS#5 填充。

  2. 将填充与加密身份验证相结合是 CBC 模式加密的安全违规,请参阅填充 oracle,并且通常是一个坏主意。将加密身份验证和填充分开。

  3. IV 不被视为秘密,最佳实践是在加密数据前附加一个随机值。使用非随机 IV 是一个设计缺陷。

许多密码学家已经考虑过填充和加密认证并得出了更好的方法,最好遵循这些方法。

一般来说,除非您是密码领域专家,否则最好不要尝试提出非标准方法。

“施奈尔定律”:任何人,从最无知的业余爱好者到最优秀的密码学家,都可以创建自己无法破解的算法。

于 2016-04-12T22:32:52.460 回答