TLS record_size_limit 拡張の提案

IoTデバイスなどリソースが制限されている端末でTLS通信を行うのには課題がある。特に送られてきたレコードを復号するのにはそれを計算する十分なメモリが必要になる。

リソースが制限されている端末でも問題なく復号処理が出来るように、相手に受信したいレコードのサイズを伝えられるようにするrecord_size_limit拡張の仕様が提案されている。

仕様は「Record Size Limit Extension for Transport Layer Security」であり、MozillaのMartin Thomsonによって提案されている。この提案はすでにWGドラフトになっている。

この仕様によって、max_fragment_length 拡張は廃止される。

max_fragment_length拡張 の課題

似たように最大フラグメントサイズをネゴシエーションする拡張としてmax_fragment_length がある。しかし幾つかの課題がある

  • サイズが対象であり、クライアント・サーバ両方が送信するサイズが一緒である
  • クライアントからの提案に対して、サーバはそれより低い値を提案できない(サーバの方のリソースが制限されている場合に問題)
  • 最大レコードサイズは2^14なのにたいし、2^12までしか指定できない

record_size_limit拡張

現在、record_size_limit拡張の拡張コードはTBDになっているが、値はuint16で指定することになる。

uint16 RecordSizeLimit;

このrecord_size_limit拡張では

  • 制限は平文サイズに対して適応される(パディングなどは含まない)
  • 送信相手にのみ適応される。自信はそれ以上のサイズを送信して良い。
  • サーバが制限しようとすることもあるので、クライアント側はサイズを制限しなくてもrecord_size_limit拡張を送信スべき
  • 64以下のサイズを送っていはいけない

record_size_limit拡張によってmax_fragment_length拡張はとって代わります。record_size_limit拡張をサポートするサーバは、record_size_limit拡張とmax_fragment_length拡張がClientHello似合った場合無視しなければなりません。