以下の条件を満たすとき、暗号文から平文を復元できる
原理
CBCモードでは暗号化は次のように行われる
同様に復号はこう
ここで偽物のデータ を与えて復号してみる。すると以下のようになることがわかる。
の最下位バイトを探索して の最下位バイトを0x01にできれば復号は成功する(それ以外はたいてい失敗する)。この時 はわかっているので、
同様に、の下位2バイトが0x02, 0x02となって復号が成功するように を探索する。はとして求まるので探索する必要がない。
これを繰り返すことで からまで、すなわちがすべて求まる。同じ手順を繰り返すと が求まる。
Padding Oracle Encryption Attack
Padding Oracle Attackが使えるとき、好きな平文に復号される暗号文を作ることができる。以下の手順
は適当にやる
の値を探索してpadding oracle attackみたいにする
まず16バイト目を探索する。 となるような を求める
続いて15バイト目を探索する。 は とすれば とできるので探索する必要はない
同様にして を全て求める
を使うと適当に決めた を好きな平文 として復号させられる
ただし の復号結果は当然壊れるので、これもすきな平文に復号させられるように を探索する
同様にしていくとIVを探索して の復号結果を好きに決められる。結果的に全ての平文を好きに復号できた