IV不应该等于key

Author: kexinohCreated Dec 16, 2024Updated Dec 16, 2024

在你的代码:

https://github.com/chillzhuang/SpringBlade/blob/74669cebe5f8eb2d654db2bbf294859d2b07fbd3/blade-gateway/src/main/java/org/springblade/gateway/utils/JwtCrypto.java#L159-L166

中使用了IV=KEY。 攻击方案: 截获密文:攻击者截获一段使用IV = Key加密的密文C = (C1, C2, C3, ..., Cn)。 构造特制密文:攻击者构造一个新的密文C' = (C1, 0, C1, C2, C3, ..., Cn),其中0表示一个全零的块。 解密过程:解密C1时,P1 = AES_decrypt(C1, Key) XOR Key。解密第二个块时,P2 = AES_decrypt(0, Key) XOR C1。解密第三个块时,P3 = AES_decrypt(C1, Key) XOR 0。恢复Key:由于P1 = AES_decrypt(C1, Key) XOR Key,且P3 = AES_decrypt(C1, Key),所以P1 XOR P3 = Key。 可以参阅:https://cedricvanrompay.gitlab.io/cryptopals/challenges/27.html 三、修复方案 IV应该设置为随机数,然后拼接在密文前面。 解密使再取下来即可。