top page > computer > web > rfc > rfc5246 > 6_2_3_2_padding.html
更新日:
文責: 重城良国

RFC 5246 6.2.3.2 ブロック暗号のパディングについて

参照: RFC5246 6.2.3.2

POODLEとパディング

最近セキュリティ関係で騒がれている問題としてPOODLEと呼ばれる脆弱性がある。POODLEに関するトピックとして2つの問題がある。

RFC 5246の記述に則って正しく実装すれば問題ないが、そうでないとSSLでなくTLSであっても同様の脆弱性が生じる。ことでは正しく実装しなかった場合にこの問題が生じる仕様について書いていく。

送受信されるデータの構造

暗号化された通信のひとつのデータは以下のようになっている。

[type] [version] [length] [fragment]

このうちの[fragment]に暗号化されたデータが入っている。さらに、CBCブロック暗号を使用している場合、fragment自体が以下の構造となる。

[IV] [ciphered]

つまりIV(初期化ベクトル)と暗号化されたデータである。この[ciphered]の部分を復号化すると以下の構造のデータが得られる。

[content] [MAC] [padding] [padding_length]

順に実際のデータ、MAC値(確認用のハッシュ値)、パディング、パディングの長さを示す値(1バイト)となる。

padding_lengthは[padding]部分の長さ(バイト長)である。

パディング部の値

無視しても良い?

パディング部分の値はデータとは関係ない。長ささえ正しければその値は何であってもデータには影響を与えない。よって、パディング部の値を無視したとしても、一応、動作はする。

攻撃に利用可能

POODLEではこの部分に他の暗号化ブロックの値をコピーすることが要となる。

値を固定してしまえば攻撃はできない

よって、この部分の値を固定してしまえばPOODLEによる攻撃は成り立たなくなる。TLSではこの部分の値を[padding_length]の値と同じバイト値を並べたものと規定し、サーバはこの値をチェックし、もしそうでなければ、bad_record_mac警告を使って、エラーを報告する必要がある。

パディング部の長さ

パディングは全体の長さがブロック長の整数倍になるのなら、255以下のいかなる長さでも良い。パディングを必要とされる長さ以上にすることは「メッセージの長さ」を利用する攻撃を避けるうえで有効と考えられ、推奨される。

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics