CBC——密文窃取解密
CBC - Cipher-text stealing decryption
该图显示了 CBC- 和密文窃取,(b) 是块长度。输出密文是c1,...,c4
该图的解密情况如何?我希望有人可以用图表向我解释,因为我在维基百科中查看了解释,这让我感到困惑。
通过窃取 cipher-text 解密 CBC 的关键是记住我们将加密明文的每一部分放在哪里。
该算法从 second-to-last 密文块(那是你的 C3,它需要 C3')中提取 B-A 位,并将它们与你的 M4 进行异或运算,M4 已用 B-A 零。由于它用零填充,因此异或运算导致 C3' 有效地附加到进入加密密码的位的末尾。
这会产生一个完整大小的密文块,我们现在将其放入 C3 位置(假设我们按顺序在消息中发送所有这些块)和前 C3 块(减去我们切掉的 C3' 部分) ) 将作为 C4 出现在此消息的末尾。我们想把它放在末尾,因为它不是一个完整的块大小,任何解密此消息的人都会一次读取块大小的数量,直到他们到达末尾,所以部分块 (C3') 后跟一个完整块 ( C4) 会导致消息末尾的解密不正确(除非解密者确切知道部分块有多少位)。
这是一张图表ripped from Wikipedia:
现在解密。
请记住,对最后一个明文块(M4)进行异或运算的结果有效地为我们存储了C3'密文。所以为了解密原来的C3(我们把一部分放在C4的位置),我们需要取回C3'。我们必须解密M4的结果才能得到这个,我们存放在C3位置!
我们获取消息的C3,通过解密密码传递它,但在我们对其进行异或之前,我们需要重建原始的C3块,即消息的C4 || C3' 也就是我们刚刚从解密密码得到的结果的最后 B-A 位。
现在我们运行将重构的原始C3通过解密密码,与C2异或得到M3。我们将之前的结果与这个重构的 C3 进行异或,得到 M4(在从末尾切掉 B-A 填充零之后)。
这是另一个图表 ripped from Wikipedia:
该图显示了 CBC- 和密文窃取,(b) 是块长度。输出密文是c1,...,c4
该图的解密情况如何?我希望有人可以用图表向我解释,因为我在维基百科中查看了解释,这让我感到困惑。
通过窃取 cipher-text 解密 CBC 的关键是记住我们将加密明文的每一部分放在哪里。
该算法从 second-to-last 密文块(那是你的 C3,它需要 C3')中提取 B-A 位,并将它们与你的 M4 进行异或运算,M4 已用 B-A 零。由于它用零填充,因此异或运算导致 C3' 有效地附加到进入加密密码的位的末尾。
这会产生一个完整大小的密文块,我们现在将其放入 C3 位置(假设我们按顺序在消息中发送所有这些块)和前 C3 块(减去我们切掉的 C3' 部分) ) 将作为 C4 出现在此消息的末尾。我们想把它放在末尾,因为它不是一个完整的块大小,任何解密此消息的人都会一次读取块大小的数量,直到他们到达末尾,所以部分块 (C3') 后跟一个完整块 ( C4) 会导致消息末尾的解密不正确(除非解密者确切知道部分块有多少位)。
这是一张图表ripped from Wikipedia:
现在解密。
请记住,对最后一个明文块(M4)进行异或运算的结果有效地为我们存储了C3'密文。所以为了解密原来的C3(我们把一部分放在C4的位置),我们需要取回C3'。我们必须解密M4的结果才能得到这个,我们存放在C3位置!
我们获取消息的C3,通过解密密码传递它,但在我们对其进行异或之前,我们需要重建原始的C3块,即消息的C4 || C3' 也就是我们刚刚从解密密码得到的结果的最后 B-A 位。
现在我们运行将重构的原始C3通过解密密码,与C2异或得到M3。我们将之前的结果与这个重构的 C3 进行异或,得到 M4(在从末尾切掉 B-A 填充零之后)。
这是另一个图表 ripped from Wikipedia: