CBC-IV-Detection

CBCモード

IVがわからなくて、使い回されているというなかなか見ない状況だけど、そういうときにIVを特定する手法がある。

条件は

  • CBCモードでの暗号化ができること

  • CBCモードでの復号の成否がわかること

何をするかと言うと、

  • 適当な3ブロック以上の平文を暗号化する

*cipherblocks[0] + "\0"*16 + cipherblocks[0] を復号する

*plainblocks[0] ^ plainblocks[2] == iv

原理

暗号化

 C_0 = E(P_0 \oplus iv)

 C_1 = E(P_1 \oplus C_0)

 C_2 = E(P_2 \oplus C_1)

復号

 P_2' = D(C_0) \oplus 0 = P_0 \oplus iv

 P_1' = D(0) \oplus C_0 = ???

 P_0' = D(C_0) \oplus iv = P_0 \oplus iv \oplus iv = P_0

従って、 P_0' \oplus P_2' = iv