パディング(暗号):方式、用途、パディングオラクル攻撃と対策
暗号方式のブロックサイズ要件を満たし、既知平文を隠しやすくするためにメッセージへ追加データを加える技術。代表的なパディング方式、目的、パディングオラクル攻撃のリスクと対策を解説する。
暗号技術におけるパディングとは、メッセージの末尾または先頭に追加データを付加し、暗号方式の要件に適合させたり、予測可能なメッセージ断片の有用性を低下させたりする手法である。パディングはブロック暗号、一部の公開鍵方式、固定長入力を想定する少数のプロトコルで用いられる。適切なパディングは、元の平文を復元できるようにしつつ、構造とランダム性を維持する。
パディングが使われる理由
主な理由は二つある。第一に、多くのブロック暗号は固定長のブロック(たとえば128ビット)で動作する。メッセージ長がブロックサイズの倍数でない場合、最後のブロックを埋めなければならない。第二に、メッセージには予測可能なヘッダー、フッター、形式(あいさつ文やファイルヘッダーなど)が含まれることが多い。パディングは、既知平文のパターンを攻撃者にとって利用しにくくするエントロピーを加え、正確なメッセージ長を分かりにくくできる。
代表的なパディング方式
- PKCS#7 / PKCS#5:値Nに等しいN個のバイトを追加する。受信者はNバイトを曖昧さなく取り除ける。
- ゼロパディング:ゼロバイトで埋める。単純だが、元データが正当にゼロで終わり得る場合は曖昧である。
- ANSI X.923:ゼロの後に、パディング長を含む最終バイトを置く。
- ISO/IEC 7816-4:0x80バイトを置き、ブロック境界までゼロで埋める。
- OAEPおよびPKCS#1:公開鍵暗号(RSA)向けのランダム化パディング。意味論的安全性を提供し、秘密鍵なしの直接復号に耐性を持つ。
リスクと主な攻撃
パディングの不適切な処理は、深刻な脆弱性を生み得る。パディングオラクル攻撃は、システムがメッセージを復号または認証する前にパディングを検証する際の、エラー応答や処理時間の差を悪用する。このような欠陥により、攻撃者は鍵を知らずに暗号文を復号したり、メッセージを偽造したりできる場合がある。同様に、公開鍵パディング方式の欠陥は、ランダム化パディング(OAEPなど)が使用されない限り、適応的攻撃につながってきた。
ベストプラクティス
パディング関連の弱点を避けるため、現代のシステムでは暗号化と完全性を組み合わせる認証付き暗号モード(AEAD)が推奨される。これにより、真正性の検査が成功した後にのみパディングを検証する。実装ではパディング検査を定数時間で行い、異なるエラーメッセージを外部に示さないようにするべきである。可能な場合は、独自方式を作成するのではなく、仕様が明確で広くレビューされたパディングアルゴリズムとライブラリを利用する。
入門と追加の技術的資料については、暗号技術の参考資料を参照。
関連項目
著者
AlegsaOnline.com パディング(暗号):方式、用途、パディングオラクル攻撃と対策 Leandro Alegsa
URL: https://ja.alegsaonline.com/art/73955