我认为将其拆分为其组成部分更容易,并将它们视为单独的实体: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 替换。