コンテンツへスキップ
uencoder

PKCS#7 Padding

PKCS#7パディングは、平文の末尾に値nのバイトをn個(1 ≤ n ≤ ブロックサイズ)付加する。可逆かつ自己検証可能であり、CBCモードの事実上の標準パディングである。

目的

可逆で検証可能なパディングを提供し、復号側が真の平文長を判定してパディングエラーを検出できるようにする。

メカニズム

平文長がブロックサイズの倍数のときも、可逆性を保つため値がブロックサイズのパディングブロック1つ分を付加する。復号時は末尾バイトの値nを読み、末尾nバイトがすべてnと等しいことを確認してから除去する。検証失敗は暗号文の破損または改ざんを示す。

ユースケース

  • AES-CBCのデフォルトパディング
  • CMS/PKCS#7のメッセージ形式
  • JavaのPKCS5Padding(PKCS7と同等)
  • OpenSSLのデフォルトパディング

例

  • 入力
    block=16, data=13 bytes
    Output
    appends 03 03 03

    Pads with three 0x03 bytes

よくあるエラー

Non-constant-time padding verification falls to Padding Oracle attacks
Use AEAD, or compare padding in constant time

関連用語

関連ツール

References