为什么 IV 在 AES CBC 加密中不需要保密?

信息安全 加密 AES 初始化向量 密码
2021-08-18 10:37:24

根据 Wikipedia,在使用 CBC 操作模式时,初始化向量 (IV) 不必保密。这是 CBC 加密的架构(也来自 Wikipedia):

在此处输入图像描述

如果我加密一个明文文件,其中第一个块具有已知的标准化结构,例如标题,该怎么办?

让我们想象以下场景:

file.pnm使用AES-CBC. pnm文件具有已知的标头结构,例如:

P6
1200 800
255

此外,尺寸(1200 x 800)和颜色模式(P6)可以从加密文件大小中猜测出来。

如果两者IV和第一个纯文本块都已知,这不会损害整个 CBC 链吗?

4个回答

我认为将其拆分为其组成部分更容易,并将它们视为单独的实体:AES 和 CBC。

AES 本身并不“基本上由对块的块进行异或运算组成”——这是一个更复杂的事情。暂时忽略它的内部,AES 被认为是安全的,因为在不知道密钥的情况下,实际上不可能恢复明文或仅给定加密块的任何有关明文的信息,甚至在您获得部分内容的情况下明文,您需要找到其余部分。如果没有密钥,AES 也可能是一种单向函数(并且有依赖于此的 MAC 方案!)。围绕 AES 和类似分组密码的安全性讨论技术问题非常复杂,我无法在答案中涵盖,

您在上面发布的图表描述了 CBC。块密码,例如 AES,旨在安全地使用密钥加密一个块问题是我们很少想只加密一个块,而是想加密一个长度不确定的数据流。这就是块模式(如 CBC)发挥作用的地方。

块模式旨在使密码安全,以使用相同的密钥加密多个块。最简单的区块模式是 ECB,在这方面提供零安全性。ECB 涉及使用相同的密钥独立加密每个块,而不需要在块之间提供任何数据。这以两种方式泄漏信息:首先,如果您有两个相同的明文块,如果您使用相同的密钥,您将获得两个相同的密文块;其次,您将获得两个相同的密文流,用于使用相同密钥对同一消息进行两次加密。这是一个问题,因为它会泄露有关明文的信息。

CBC 通过引入“级联”效应解决了这个问题。每个明文块与前一个密文块进行异或,导致原来相等的明文块在加密步骤不再相等,因此不再产生相等的密文块。对于第一个明文块,没有以前的密文块(你还没有加密任何东西),这就是 IV 的来源。考虑一下,如果我们只使用零而不是 IV 会发生什么第-1块(即假想的密文块“在”第一个明文块之前)。虽然级联效应会使相同的明文块产生不同的密文块,但相同的整个消息每次都会以相同的方式级联,当使用相同的密钥对相同的完整消息进行多次加密时,会产生相同的密文。IV 解决了这个问题。通过选择唯一的 IV,无论每次加密的明文消息是相同还是不同,都不会有两个密文相同。

希望这可以帮助您理解为什么 IV 不需要保密。知道 IV 不会让攻击者在任何地方受到攻击,因为 IV 只是为了确保密文的不相等性。密钥是保护实际数据的东西。

为了进一步强调这一点,您甚至不需要IV 来解密除第一个块之外的所有块。CBC 的解密过程是相反的:使用密钥解密一个块,然后将结果与前一个密文块进行异或运算。对于除第一个块之外的所有块,您都知道前一个密文块(您已经获得密文),因此解密只是知道密钥的情况。唯一需要 IV 进行解密的情况是第一个加密块,其中前一个密文块是虚构的并被 IV 替换。

不,因为密钥是秘密的。

图中的“块密码加密”块根据密钥对数据进行加扰。图中的 XOR 不提供安全性,加密提供。XOR 和 IV 只是为了确保相同的明文加密为每个块的不同密文。

所有现代加密方法(AES、河豚等)的设计都比您预期的要安全得多。让我们快速看一下此类密码旨在抵抗的一些攻击。

已知的纯文本攻击 - 在这种情况下,我们假设攻击者可以访问许多纯文本块以及在给定密钥 K 下加密的相应密文块。他的目标是找到 K。

选择明文攻击 - 在这种情况下,我们假设攻击者可以选择许多明文块并获得在给定密钥 K 下加密的相应密文块。他的目标是找到 K。

选择密文攻击——在这种情况下,我们假设攻击者可以选择许多密文块,并在给定的密钥 K 下获得相应的明文块解密。他的目标是找到 K。

选择自适应密文攻击——在这种情况下,我们假设攻击者可以选择许多密文块,在给定的密钥 K 下,他得到相应的明文块解密,然后他可以用他的新知识重复这个过程。他的目标是找到K。

如果在这些场景中的任何一种情况下发现攻击,并设法获得现代密码的 K,则此类密码将被宣布为已损坏且不会被进一步使用。其实要求要严格很多。如果发现可以表明您甚至可以获得有关 K 的部分信息的攻击,则表示奇偶校验已经很重要了。或者,如果您可以证明您无法真正找到密钥 K,但可以比蛮力做得更好(即使 2^110 与 2^126 通常被认为值得发布)来搜索它,密码通常会被宣布为损坏.

所以总而言之,不,你不能仅仅因为你知道一个明文块并且它是相应的密文就得到一个密码的密钥。

IV 具有与加密块相同的安全要求。

要使 CBC 工作,您需要将当前块中的未加密数据与前一个块中的加密数据进行异或。因为在第一个块之前没有块(因此无法获得加密块),所以使用 IV。