Padding
パディングは、平文をブロック境界まで伸長する仕組みである。代表的な方式はPKCS#7、ゼロパディング、ISO 10126で、AEADモードでは不要である。
目的
ブロック暗号が、長さがブロックサイズの倍数でない平文を処理できるようにする。
メカニズム
平文にバイトを追加して全長をブロックサイズの倍数にし、復号時に取り除く。PKCS#7は値nのバイトをn個追加する(可逆で自己検証的)。ゼロパディングはシンプルだが、パディングとデータを区別できない。ストリームモード(CTR)とAEAD(GCM)はパディング不要である。
ユースケース
- AES-CBCでのPKCS#7パディング
- RSAのOAEPパディング
- 従来のゼロパディング
- 教育用のサンプル
例
- 入力
3 bytes + PKCS#7 (block=8)Outputappends 05 05 05 05 05Pads with five 0x05 bytes
よくあるエラー
- Zero padding cannot distinguish trailing data zeros from padding
- Use a self-describing scheme such as PKCS#7
- Padding errors fall to Padding Oracle attacks
- Use AEAD or constant-time validation
関連用語
PKCS#7 Padding
PKCS#7パディングは、平文の末尾に値nのバイトをn個(1 ≤ n ≤ ブロックサイズ)付加する。可逆かつ自己検証可能であり、CBCモードの事実上の標準パディングである。 用語集
Block Cipher
ブロック暗号は固定長のブロック(例: 128 ビット)を暗号化・復号する対称暗号であり、任意長のデータを扱うには運用モードが必要である。 用語集
CBC (Cipher Block Chaining)
CBC モードは、暗号化前に直前の暗号文ブロックと現在の平文ブロックを XOR するため、同一の平文ブロックも異なる暗号文になる。ランダムな IV が必要である一方、完全性の認証は提供しない。 用語集