CBC - 密文窃取解密

use*_*554 1 encryption cryptography cbc-mode

该图显示了带有密文窃取的 CBC-,(b) 是块长度。输出密文是 c1,...,c4 这个图的解密如何?我希望有人可以用图表向我解释它,因为我在维基百科中查看了解释,这让我感到困惑。 在此处输入图片说明

小智 5

使用密文窃取来解密 CBC 的关键是记住我们将加密明文的每个部分放在哪里。

该算法从密文的倒数第二个块(即您的 C3,它需要 C3')中获取 BA 位,并将它们与您的 M4 进行异或,该 M4 已填充有 BA 零。由于它用零填充,因此 XOR 运算导致 C3' 有效地附加到进入加密密码的位的末尾。

这会产生一个完整大小的密文块,我们现在将其放在 C3 位置(假设我们按顺序在消息中发送所有这些块),并且前一个 C3 块(减去我们切掉的 C3' 部分)将放在此消息的结尾为 C4。我们想把它放在最后,因为它不是一个完整的块大小,任何解密这个消息的人都会一次读取块大小直到他们到达末尾,所以一个部分块 (C3') 后面跟着一个完整块 ( C4) 将导致对消息末尾的错误解密(除非解密器确切地知道部分块是多少位)。

这是从维基百科翻录的图表: cbc-窃取密文加密

现在进行解密。

请记住,对最后一个明文块 (M4) 进行 XOR 运算的结果有效地为我们存储了 C3' 密文。因此,为了解密原始 C3(我们将其一部分放在 C4 位置),我们需要取回 C3'。我们必须解密 M4 的结果才能得到这个,我们将其存储在 C3 位置!

我们取消息的 C3,通过解密密码传递它,但在我们对它进行异或之前,我们需要重建原始的 C3 块,即消息的 C4 || C3' 也就是我们刚刚从解密密码中得到的结果中的最后一个 BA 位。

现在我们通过解密密码运行重建的原始 C3,将其与 C2 异或得到 M3。我们用这个重建的 C3 异或我们之前的结果并得到 M4(在从末尾切掉 BA 填充零之后)。

这是从维基百科撕下的另一个图表: cbc-窃取-密文-解密