CBC加密原理


加密公式:

Ciphertext[i]=encrypt(Plaintext[i] xor IV)
IV=Ciphertext[i]

IV: 初始化向量

Plaintext:明文

Ciphertext:密文

encrypt:加密

CBC解密原理



加密公式:

Plaintext=encrypt(Ciphertext)xor IV
IV=Ciphertext

IV: 初始化向量

Plaintext:明文

Ciphertext:密文

encrypt:加密

如何攻击?

攻击原理


当改变一组密文中的一个字符

1.本组明文全部都受影响(因为本组密文要经过密钥(key)的加密)

2.下一组明文中只改变对应位置的那个字符;

这样我们就可以通过改变一组密文中的一个字符来修改下一组密文中对应位置的那一个字符,从而改变明文为我们想要的.


如何修改密文?


A:上一组明文的一个字符

B:本组明文中对应位置的字符(必须已知,不然只能改变而无法控制改变后的字符)

C:经过密钥key解密后的本组密文对应位置的字符

B=A xor C

A xor C xor B=B xor B =0

所以 A xor B xor C =0

而 任何东西与0异或都等于其本身

设置 NEW_A为上一组密文中修改变后的字符,NEW_B为本组密文随之改变的那个字符

当设置 NEW_A=A xor B xor ‘任意字符’ 时

NEW_B=A xor B xor ‘任意字符’ xor C

A xor B xor C =0

NEW_B=’任意字符’

这样就可以将本组密文中的那个字符改变为我们想要的字符

举个例子:

设原来本组密文中的第二个字符为’D’(对应上面的B)而上一组的明文中的第二个字符为’F’(对应上面的A)
我们想让本组密文中的第二个字符变为’W’(对应上面的NEW_B),只要将上一组明文中的第二个字符修改为 'D' xor 'F' xor 'W' (对应上面的NEW_A),本组密文中的第二个字符就会修改为’W’