TLS 1.3のサブプロトコル(4種類)
TLS 1.3のRecordプロトコルの下で具体的な処理を実装するサブプロトコルとして以下の4つが定義されています。基本的な動作はTLS 1.2以前と共通ですが、細かい部分では様々に違いがあります。
Alertプロトコル
シグナリングおよび例外的な状況で使われるサブプロトコル。例えばハンドシェイクを完遂出来ない場合に接続が切れる事を相手に通知する場合に使われます。
Application Data プロトコル
アプリケーションデータの転送に使われるサブプロトコル。書式の無いバイト列として一方から他方へデータを送るためのサブプロトコル。送信するメッセージだけからなる最も単純なプロトコルです。
Change Cipher Spec プロトコル
TLS 1.3では廃止されたプロトコルです。TLS 1.2以前ではこのプロトコルを使ってネゴシエーション時に決定した暗号方式を変更する事が出来ました。ですが、実際的には安全性を確保して実装する事が難しく結果的に様々な脆弱性を引き起こす原因でした。
TLS 1.3では以前のバージョンとの互換性維持のために残されており、サーバー、クライアントともこのプロトコルを送信できますが、受信側ではメッセージは無視されます。
Handshakeプロトコル
おそらくは最も重要なサブプロトコル。接続時利用することになるセキュリティパラメーターはこのサブプロトコルを使ってネゴシエーションを実行します。
メッセージのフラグメンテーション
Recordプロトコルのペイロードは最大長16,384バイト と定義されていますが、その中に収めるサブプロトコルのデータの形式は指定がありません。
例として以下のような構成はすべて可能です。
・1つのレコードにサブプロトコルのメッセージを複数格納する
・1つのメッセージを分割して複数のレコードにまたがって送信する
・異なるサブプロトコルのメッセージを1つのレコードに格納して送信する
ただし、Handshakeプロトコルで使うメッセージに他のサブプロトコルのメッセージは含められない、後述のAlertプロトコルのメッセージは分割できない、などの個別のルールはあります。
※TLS 1.3関連では以下の説明がこの後続きます。
2.Handshakeプロトコル
3.認証
4.Alertプロトコル
5.暗号に関する計算
6.拡張
7.暗号スイート
8.0-RTT