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似合った場合無視しなければなりません。