AES256,重复的 IV 和大部分成本有效的有效载荷:这有多好/坏?

信息安全 密码学 AES
2021-08-25 22:10:36

我最近遇到了一个或多或少这样做的应用程序:

  • 从(可能其他人不知道的)键开始
  • 生成随机 IV
  • 使用密钥加密一些较小(约 160 字节)的有效负载,并在 CBC 模式下使用 AES256 生成 IV
  • [>=60% 的有效负载由两个或三个 ASCII 字组成,这些字是从一个假定未知但或多或少容易猜到的几十个元素列表中选择的]
  • 只需对键进行一些数学运算即可得出另一个 IV。这个 IV 对于每个数据包都是相同的,并且从密钥生成它的代码是公开的。
  • 在 CBC 模式下使用 AES256 使用密钥和派生的 IV 加密小标题(32 字节)
  • [此标头的大部分由固定数据组成,例如应该被认为是公开已知的“协议版本”,然后它包含一个 unix 时间戳(如果您知道数据包何时传输,则为已知数据)和之前用于有效载荷部分]
  • 在线路上传输生成的加密标头+有效负载

接收部分知道(预共享)密钥,从中重新生成“标头 IV”,解密标头,从那里获取有效负载 IV,解密有效负载。

每个数据包都会重复整个过程,典型的应用程序每秒会传输 5 到 50 个数据包,并且由于其中许多只是“状态信息”,因此它们的明文之间的唯一区别是 unix 时间戳和(伪)随机生成的有效载荷 IV。

我绝对不是密码学专家,但据我所知,“从用于加密 32 个字节的密钥派生的固定 IV,其中 28 个是固定的和/或容易猜到的”至少应该引起一些警觉。

如何考虑这种方法的安全性?- “安全性”定义为即使有人可以从线路窃听数据包,也要对密钥和/或有效负载保密。

3个回答

IV 重用的后果从“严重”到“严重”不等,具体取决于加密模式。AES 本身就是一种分组密码:它处理 128 位分组加密消息(长度不是 16 个字节)时,必须使用分组密码操作模式许多这样的模式在某种程度上是“顺序的”,具有运行状态,IV 是该状态的初始值。

如果加密模式是CTR(在许多现代扩展模式中很常见,如GCM),IV 重用是致命的,因为这样加密会降级为臭名昭著的multi-times pad使用CBC模式,IV 重用不太重要,但很严重。特别是,根据定义,重用的 IV 也是可预测的IV,可用于选择明文攻击,如 BEAST 攻击。

更一般的评论是,重复使用的 IV 是无能的标志;上述无能不太可能在 IV 重用时停止。很可能整个协议的其他元素也设计得很差。弱点不会独自旅行...

您所解释的内容听起来类似于 802.11 的 WEP 加密。我也不是密码学家,但已经阅读了很多次Aircrack-ng文档。对静态数据集使用这种加密技术会使应用程序容易受到基于统计的攻击,例如 Korek 和 FMS。可以在此处找到有关如何对 WEP 进行这些攻击的深入解释这里可以找到更多资源来解释对 802.11 加密协议的其他攻击。

我也不是专家,但据我了解,实际有效负载是用每个数据包的随机(据说是唯一的)IV 加密的,这是做事的正确方法。有效载荷非常相似并不重要。

相反,标头很容易受到攻击(请参阅this question以获得更彻底的解释),但由于它是公共数据,我不认为这是一个问题:无法从中恢复 AES 密钥据我所知,已知的密文。

我主要担心的是固定的 IV 是通过对密钥执行的非描述性“数学”生成的。根据此处实际发生的情况,某些信息可能会泄露有关密钥的信息,而您真的不希望这样。

总而言之,这绝对不是标准的做事方式,而且头部的加密方式对我来说似乎非常不安全。泄露有效载荷的内容是否足够不安全?也许,我们需要更多的信息来告诉我们。有效载荷加密对我来说看起来不错。保持简单怎么样?如果此标头确实由公共数据组成,则不应对其进行加密,并且无论如何,对标头和有效负载使用不同的 IV 是没有意义的。要么对整个数据包使用随机 IV,要么不加密标头(并放弃固定的 IV)!