Encryption 如何更改CBC加密文本以更改消息

Encryption 如何更改CBC加密文本以更改消息,encryption,aes,cbc-mode,Encryption,Aes,Cbc Mode,我目前正在学习加密技术,我希望能找到更多关于我所学内容的澄清 假设消息“100美元应该从123456账户转移到555555”是使用aes-128-cbc和随机IV加密的。我的教授说,可以更改加密文本,以便在再次解密时,消息显示“900美元应该从123456账户转移到555555”。你是怎么做的 我试着通过生成我自己的密钥和iv,对消息进行加密,然后将其转换为十六进制字符来处理,来自己解决这个问题。从那里我可以交换一些字符然后解密吗?我试着玩弄这个,但似乎总是出问题 我们使用一个基本的linux命

我目前正在学习加密技术,我希望能找到更多关于我所学内容的澄清

假设消息“100美元应该从123456账户转移到555555”是使用aes-128-cbc和随机IV加密的。我的教授说,可以更改加密文本,以便在再次解密时,消息显示“900美元应该从123456账户转移到555555”。你是怎么做的

我试着通过生成我自己的密钥和iv,对消息进行加密,然后将其转换为十六进制字符来处理,来自己解决这个问题。从那里我可以交换一些字符然后解密吗?我试着玩弄这个,但似乎总是出问题

我们使用一个基本的linux命令行来实现这一点


任何帮助或解释都会很棒

假设字符串是使用一次性pad加密的,结果密文是“B8B7D8CB9860EBD0163507FD00A9F923D45…”。我们知道明文的第一个字节,数字1,有ASCII码0x31。密文的第一个字节是0xB8。如果k0表示键的第一个字节,则0x31 xor k0=0xB8。对一次性键盘进行解码只是将密文与密钥进行异或运算。因此,person解码获得明文的第一个字节0x31=0xB8 xor k0。如果我们用m0对密文的第一个字节进行异或,那么解码密文的人将得到(0xB8 xor m0)xor k0。但这只是(0xB8 xor k0)xor m0,因为xor是可交换的和结合的。最后一个表达式可以缩减为0x31 xor m0。现在我们要将结果字节更改为0x39,即数字9的ASCII码。所以我们需要解0x31 xor m0=0x39。但这很简单,只是两边都是0x31的异或


使用CBC模式时,同样的原则也适用。您可以用类似的方式修改IV以更改解码的消息。

@user515430的上述推理基于这样一个事实,即每个密文C都与明文p线性相关(因为
C=p⊕ K

事实上,@polettix让我们注意到,在CBC加密中,我们有这样的功能,例如,对于某个文本的第6个块,
C₆ = E(P₆ ⊕ C₅, K) 
,给定一个键K;如果E(·)是一个很好的加密函数,我们应该放松这种线性

但是,在CBC解密中,第6块明文将作为
p获得₆ = D(C)₆, (K)⊕ C₅,因此它将是线性相关的,而不是C₆, 但是来自C₅.

重新措辞,如果您想更改CBC中的纯文本块,只需更改先前的chiphertext块


另请参见(记录在案,Cryptography StackExchange是解决此类问题的正确站点)。

在您上面的回答中,m0指的是什么?m0只是一个任意字节。通过适当的选择,我们可以得到想要的结果。@Katie,你是对的。所有操作都是使用第一个字节(密文、IV和生成的明文)。“考虑到AES是一种分组密码,这有点令人惊讶。”凯蒂,接近了。04是D(k,C)的第一个字节,即第一个密码锁的AES解密。在CBC中,通过带IV的xor环D(k,C)得到明文的第一块。这里有一个提示,编写一个小程序,将IV的第一个字节修改为所有可能的值,并查看结果明文。有没有任何地方可以解释为什么这也适用于CBC模式?这意味着在明文中翻转一点意味着在密文中翻转完全相同的比特,考虑到中间有一个加密框,看起来真的很令人震惊。非常感谢!