記録層

TLS Record Protocol

[1] TLS Record Protocol (記録層 (record layer) ) は、 TLS の下位側のプロトコル階層です。

仕様書

記録層データ構造

[9] 記録層では、 214 バイト以下のデータに分割して TLSPlaintext として扱います。記録層データ構造間で分割した境界は意味を持たず、 同じ記録内容型なら1つの TLSPlaintext に結合したり、分解したりできます。 >>2

[11] TLSPlaintext圧縮アルゴリズムを適用した結果が TLSCompressed です。 (ここでいう圧縮アルゴリズムには、無変換の 「null」も含まれます。)

[12] TLSCompressedMACアルゴリズム暗号化アルゴリズムを適用した結果が TLSCiphertext です。

[10] TLSPlaintextTLSCompressedTLSCiphertext は、次のもので構成されます >>2

[20] 含まれるデータの意味 (処理状態) が異なるだけで、の構成は同じです。
type
含まれているデータを処理する上位層プロトコル (記録内容型 1バイト)。
version
プロトコルの版 (2バイト)。 3.3 なら TLS/1.2, 3.2 なら TLS/1.1, 3.1 なら TLS/1.0
length
データの長さ (uint16)。
fragment
データ (length の値の長さ)。
[13] TLS のプロトコルの版は記録層のメッセージに記述されるだけでなく、 TLS Handshake ProtocolClientHelloServerHello にも記述されます。そちらとこちらの値は異なるかもしれません。

[19] データ (fragment) の長さは、 TLS拡張 max_fragment_length >>18 により最大値を折衝できます。

[15] TLS で送受信されるデータはすべて TLS Record Protocol のメッセージという形で送信されます。 TLS が開始された当初は暗号化、圧縮などを行わない接続状態なので、 平文のままのメッセージが送信されます。この状態で上位層プロトコルとして TLS Handshake Protocol を用いて新たな接続状態を折衝し、移行します。これによって TLS Record Protocol のメッセージに暗号化、圧縮などが適用された状態になります。これで上位層プロトコルとしてTLS応用データプロトコルを用い、上位アプリケーション層プロトコルのデータの送受信が行えるようになります。 その後も alert protocolTLSメッセージが送受信されることがあります。

内容型

[3] TLS Record Protocol を使って規定されるプロトコルはいくつかあり、 その区別を表す値を記録内容型 (record content type) (ContentType) といいます >>2

[16] 値は1バイトの数値で表されます。

n
数値
name
名称
desc
プロトコル名
n
22
name
handshake
desc
handshake protocol
n
21
name
alert
desc
alert protocol
n
20
name
change_cipher_spec
desc
change cipher spec protocol
n
23
name
application_data
desc
application data protocol
n
24
name
heartbeat
desc
Heartbeat protocol

[21] IANA登録簿 (>>17) もあります >>2

接続状態

[4] TLS Record Protocol運用環境 (operating environment) のことを TLS接続状態 (TLS connection state) といい、 次のもので構成されます >>2

セキュリティー引数 (security parameter) (SecurityParameters)
接続端 (connection end) (entity)
自身がクライアントか。
PRFアルゴリズム (prf_algorithm)
master secret からを生成するのに使うアルゴリズム
bulk encryption algorithm
bulk encryption に使うアルゴリズム (bulk_cipher_algorithm)。 鍵サイズ (enc_key_length)、 ブロック・ストリーム・AEAD のいずれであるか (cipher_type)、 cipher のブロック長 (block_length)、 明示的および暗示的な初期化ベクトル (nonce) (fixed_iv_length, record_iv_length)。
MACアルゴリズム
メッセージ認証に使うアルゴリズム (mac_algorithm)。 アルゴリズムが返す値の長さ (mac_length)。 鍵の長さ (mac_key_length)。
圧縮アルゴリズム (compression_algorithm)
データ圧縮に使うアルゴリズム
master secret (master_secret)
48バイト秘密。
client random (client_random)
クライアントによる32バイト値。
server random (server_random)
による32バイト値。
client write MAC key
server write MAC key
client write encryption key
server write encryption key
client write IV
server write IV
圧縮状態
cipher state
MAC鍵
シーケンス番号

[5] 接続状態は、現在の読み取り用状態、書き込み用状態と、 pending の読み取り用状態、書き込み用状態の4つがあります >>2

[8] 記録 (record) は、現在の読み取り用状態と書き込み用状態に従い処理されます >>2

[6] 現在の接続状態の初期値は、暗号化、圧縮、MAC のいずれも使用しないものです >>2

[7] TLS Handshake Protocol は pending 接続状態セキュリティー引数を設定します。 ChangeCipherSpec は pending 接続状態を現在の接続状態とします。 >>2

[25] RFC 7983 - Multiplexing Scheme Updates for Secure Real-time Transport Protocol (SRTP) Extension for Datagram Transport Layer Security (DTLS) () <https://tools.ietf.org/html/rfc7983>