4. The "record_size_limit" Extension ("record_size_limit" 拡張)
4. The "record_size_limit" Extension ("record_size_limit" 拡張)
record_size_limit 拡張の ExtensionData は RecordSizeLimit である:
uint16 RecordSizeLimit;
RecordSizeLimit の値は, エンドポイントが受信してもよいレコードの最大サイズ (オクテット) である. この値は, アプリケーションデータと保護されたハンドシェイクメッセージをレコードにエンコードするときに作成されるレコードのサイズを制限するために用いられる.
record_size_limit 拡張が交渉された場合, エンドポイントは, ピアから受け取った RecordSizeLimit の値より大きい平文を持つ保護されたレコードを生成してはならない. 保護されていないメッセージはこの制限の対象外である.
この値は保護されたレコードの平文の長さである. この値には TLS 1.3 で追加されるコンテンツタイプとパディングが含まれる (つまり TLSInnerPlaintext の完全な長さ). TLS 1.2 およびそれ以前では, 制限は圧縮と暗号化へのすべての入力を対象とする (最終的に TLSCiphertext.fragment を生成するデータ). ブロック暗号などが追加する暗号化の一部としてのパディングはこのカウントに含まれない (セクション 4.1 参照).
すべてのレコードサイズをサポートするエンドポイントは, プロトコルで定義された最大レコードサイズまでの任意の上限を含めてよい. TLS 1.2 およびそれ以前ではその上限は 2^14 オクテットである. TLS 1.3 では 2^14+1 オクテットの上限を用いる. より高い値は現在, より大きなレコードを許す可能性のあるプロトコルの将来のバージョン用に予約されている, そのような将来のバージョンまたは拡張が明示的に許可しない限り, エンドポイントはプロトコルで定義された最大レコードサイズより大きい値を送信してはならない. サーバーはこの制限を強制してはならない, クライアントはサーバーが理解しない拡張またはバージョンによって有効化されたより高い上限を通告する場合がある. クライアントは, record_size_limit 拡張に交渉されたプロトコルバージョンと拡張で許可される最大レコードサイズより大きい値が含まれる場合, illegal_parameter アラートでハンドシェイクを中止してもよい.
ピアがより大きなレコードサイズ上限を提供した場合でも, 将来の TLS バージョンまたは拡張が明示的に許可しない限り, エンドポイントはプロトコルで定義された上限より大きいレコードを送信してはならない.
レコードサイズの制限は, その上限を通告したエンドポイントに向かって送信されるレコードにのみ適用される. エンドポイントは, 自身の上限として通告した上限より大きいレコードを送信してもよい. 通告した上限より大きいレコードを受信した TLS エンドポイントは, 致命的 record_overflow アラートを生成しなければならない, 通告した上限より大きいレコードを受信した DTLS エンドポイントは, 致命的 record_overflow アラートを生成するか, レコードを破棄してもよい.
エンドポイントは, レコードサイズを制限する必要がなくても record_size_limit 拡張を通告すべきである. クライアントにとっては, サーバーが裁量で上限を通告できるようにする. サーバーにとっては, クライアントが自身の上限が尊重されることを知れるようにする. この拡張が交渉されない場合, エンドポイントはプロトコルまたは他の交渉済み拡張で許可される任意のサイズのレコードを送信できる.
エンドポイントは, 値が 64 未満の record_size_limit 拡張を送信してはならない. エンドポイントは, より小さい値の受信を致命的エラーとして扱い, illegal_parameter アラートを生成しなければならない.
TLS 1.3 では, サーバーは EncryptedExtensions メッセージで record_size_limit 拡張を送る.
再交渉または再開の際, レコードサイズの制限は再交渉される. レコードは, それらを保護する鍵を生成したハンドシェイクで設定された制限の対象となる. 接続が再交渉または再開される際に拡張が交渉されない可能性がある.
DTLS における Path Maximum Transmission Unit (PMTU) もレコードサイズを制限する. レコードサイズの制限は PMTU 発見には影響せず, 独立して設定すべきである. レコードサイズの制限はハンドシェイク中に固定されるため, 現在のネットワーク環境ではなくエンドポイントの制約に基づいて設定すべきである. 対照的に, PMTU はネットワークパスによって決まり, 時間とともに動的に変わりうる. PMTU 発見の詳細は [PMTU] および [DTLS] のセクション 4.1.1.1 を参照のこと.
PMTU は UDP データグラムのサイズを支配し, レコードサイズを制限するが, レコードをより小さくすることは妨げない. 小さいレコードを送るエンドポイントは, 単一の UDP データグラムに複数のレコードを送ることもできる.