假设攻击者拥有特定消息的明文、密文和IV。如果攻击者能够控制密文和IV,他能伪造有效的明文吗?假设消息比块大小短,只有几个字节。攻击者可以通过更改IV来更改明文的值吗?
发布于 2020-10-25 01:04:51
考虑使用AES-CBC-256加密明文消息attack at noon!!的情况,使用密钥7ac01f50605b8fcebd1c82ea6a6aacd6b112e8c9675b84cd77054b2f49668301和iv f822ee7b8c0a8ba40daa773b01d9485a:
echo -n 'attack at noon!!' | openssl aes-256-cbc -e -nopad -K 7ac01f50605b8fcebd1c82ea6a6aacd6b112e8c9675b84cd77054b2f49668301 -iv f822ee7b8c0a8ba40daa773b01d9485a | xxd -p明文消息的长度为一个块(16个字节),不使用填充,因此产生一个密码文本块:
8b2f9ede941cb6f3958d809510f579a5当然,如果您使用相同的密钥和iv解密上面的密文,您将得到原始明文:
echo -n '8b2f9ede941cb6f3958d809510f579a5' | xxd -p -r | openssl aes-256-cbc -d -nopad -K 7ac01f50605b8fcebd1c82ea6a6aacd6b112e8c9675b84cd77054b2f49668301 -iv f822ee7b8c0a8ba40daa773b01d9485a生产:
attack at noon!!现在,知道原始明文(attack at noon!!)、密文和iv的攻击者希望修改iv,以便解密时生成的明文是attack at dawn!!。
要了解如何做到这一点,请参阅下面的图表(从https://en.wikipedia.org/wiki/Block_密码学_模式_的_操作复制):

考虑标记E. E的点是使用密钥对密文的第一个块(在这种情况下是唯一块)的AES解密。我们不知道钥匙,所以我们不能计算E.
或者我们可以吗?进一步看,第一个密文块是E XOR IV。XOR函数是唯一的:如果A XOR B= C,那么您可以按任何顺序重新排列A、B和C,表达式仍然成立--即A XOR C= B,B XOR C=A。所以:
Plaintext = E XOR IV
E = Plaintext XOR IV
IV = E XOR Plaintext因此,知道原始明文(attack at noon!!)和IV (f822ee7b8c0a8ba40daa773b01d9485a),我们可以计算E。为此,我们使用E=明文XOR IV (上面)。首先,使用以下命令获取明文的底层ascii解码字节的十六进制表示:
echo -n 'attack at noon!!' | xxd -p这就产生了:
61747461636b206174206e6f6f6e2121现在,XOR --纯文本和IV --获得E,如下所示:
python3 -c "print (hex(0x61747461636b206174206e6f6f6e2121 ^ 0xf822ee7b8c0a8ba40daa773b01d9485a))"这就产生了:
0x99569a1aef61abc5798a19546eb7697b所以,E是99569a1aef61abc5798a19546eb7697b。
现在,我们可以计算出IV应该是什么,这样当加密文本用我们巧尽心思构建的IV被AES-CBC解密,而E得到XOR与这个IV时,产生的明文将是我们想要的明文‘黎明时的攻击!’。为此,我们使用IV =E明文(上面)。首先,获取所需明文的底层ascii解码字节的十六进制表示形式,就像我们以前做的那样:
echo -n 'attack at dawn!!' | xxd -p这就产生了:
61747461636b206174206461776e2121现在,XOR使用E来获取我们需要的IV纯文本,如下所示:
python3 -c "print (hex(0x61747461636b206174206461776e2121 ^ 0x99569a1aef61abc5798a19546eb7697b))"这就产生了:
0xf822ee7b8c0a8ba40daa7d3519d9485a让我们看看它是否有效。让我们使用上面的解密命令来欺骗密文,使用iv f822ee7b8c0a8ba40daa7d3519d9485a代替f822ee7b8c0a8ba40daa773b01d9485a:
echo -n '8b2f9ede941cb6f3958d809510f579a5' | xxd -p -r | openssl aes-256-cbc -d -nopad -K 7ac01f50605b8fcebd1c82ea6a6aacd6b112e8c9675b84cd77054b2f49668301 -iv f822ee7b8c0a8ba40daa7d3519d9485a毫无疑问,所产生的明文是:
attack at dawn!!*特别感谢安热尔在问题下的评论中帮助我解决这个问题。
https://crypto.stackexchange.com/questions/85785
复制相似问题