我们不得不扩展我们的网站以使用带有 256 位密钥的 AES 将用户凭据传送到供应商网站(在查询字符串中),但是他们在解密信息时使用的是静态 IV。
我建议 IV 不应该是静态的,并且这样做不在我们的标准中,但如果他们最终改变它,我们将承担 [大] 成本,因此我们同意接受这是一个安全风险,并且使用相同的 IV(令我非常沮丧)。
我想知道的是,这有多大的安全威胁?我需要能够有效地将这一点传达给管理层,以便他们确切地知道他们同意什么。
我们也始终使用相同的 KEY。
谢谢
我们不得不扩展我们的网站以使用带有 256 位密钥的 AES 将用户凭据传送到供应商网站(在查询字符串中),但是他们在解密信息时使用的是静态 IV。
我建议 IV 不应该是静态的,并且这样做不在我们的标准中,但如果他们最终改变它,我们将承担 [大] 成本,因此我们同意接受这是一个安全风险,并且使用相同的 IV(令我非常沮丧)。
我想知道的是,这有多大的安全威胁?我需要能够有效地将这一点传达给管理层,以便他们确切地知道他们同意什么。
我们也始终使用相同的 KEY。
谢谢
这取决于链接模式。AES 是一种分组密码,它应用于 16 字节的块(确切地说)。链接模式定义了输入数据如何变成几个这样的块,以及输出块如何组合在一起。大多数链接模式需要使用某种“起始值”,这不是秘密,但应该针对每条消息进行更改:这就是 IV。
如果您使用 CTR 链接模式,重复使用相同的 IV 是致命的。在 CTR 模式下,AES 用于一系列连续的计数器值(以 IV 开头),然后将生成的加密块序列(通过按位异或)与要加密(或解密)的数据组合。如果你使用相同的 IV,那么你会得到相同的序列,这就是臭名昭著的“两次垫”。基本上,通过对两个加密字符串进行异或运算,您可以获得两个明文数据的异或。这会引发大量攻击,基本上整个事情都被破坏了。
如果你使用 CBC,事情就不那么可怕了。在 CBC 中,数据本身被分成 16 字节的块。当要加密一个块时,它首先与前一个加密块进行异或。IV 具有“-1”块的作用(第一个块的前一个加密块)。重用 IV 的主要结果是,如果两条消息以相同的字节序列开头,那么加密的消息对于几个块也将是相同的。这会泄漏数据并打开一些攻击的可能性。
总而言之,不要那样做。使用相同的 IV 和相同的密钥永远会破坏 IV 的全部目的,这就是为什么首先使用 IV 的链接模式的原因。
对所有数据使用相同的 IV 等同于根本不使用 IV - 对于相同的明文,密文的第一个块将是相同的。我很想知道您的供应商为什么要使用恒定的 IV,但这无关紧要。关键是系统容易受到这种方式的影响:如果攻击者可以设置自己的凭据并观察生成的密文,他们可以将其与其他加密凭据进行比较以找出有关密钥的信息。
我不是加密专家,但我的理解是,如果 IV 没有改变并且相同的值被重新加密,那么输出将是相同的。因此,可以通过查找重复值来推断内容,例如与每个请求一起传递的凭证。
不过,我又不是加密人,所以我可能是错的。