CBC - 密文窃取解密

时间:2018-03-26 15:09:42

标签: encryption cryptography cbc-mode

图表显示CBC-密文窃取,(b)是块长度。输出密文是c1,...,c4 这个图的解密怎么样?我希望有人可以用图表向我解释,因为我检查了维基百科中的解释,这让我很困惑。 enter image description here

1 个答案:

答案 0 :(得分:4)

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

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

这会生成一个完整大小的密文块,我们现在把它放在C3位置(假设我们按顺序在消息中发送所有这些块)和前一个C3块(减去C3'我们切断的部分) )将在此消息的末尾作为C4。我们想把它放在最后,因为它不是一个完整的块大小,任何解密此消息的人都会一次读取块大小的数量直到它们到达结尾,所以部分阻塞(C3')然后是一个完整的块(C4)将导致对消息结束的错误解密(除非解密器知道正好部分块有多少位)。

现在进行解密。

请记住,最后一个明文块(M4)上的XOR运算结果有效地存储了C3'我们的密文。所以为了解密原来的C3(我们把它放在C4位置),我们需要得到C3'背部。我们必须解密M4的结果才能得到这个,我们存储在C3位置!

我们接收消息C3,将其传递给解密密码,但在我们对其进行异或之前,我们需要重建原始的C3块,即消息的C4 || C3'也就是我们从解密密码得到的结果中的最后一个B-A位。

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

这是一张图ripped from Wikipediacbc-stealing-ciphertext-decryption