メインコンテンツまでスキップ

4.1. Demultiplexing DTLS Records (DTLSレコードの逆多重化)

4.1. Demultiplexing DTLS Records (DTLSレコードの逆多重化)

DTLS 1.3のヘッダー形式は, 常に最初のバイトとしてコンテンツタイプを含んでいたDTLS 1.2よりも逆多重化が複雑です。図5に示すように, 最初のバイトが着信DTLSレコードの逆多重化方法を決定します。最初のバイトの最初の3ビットは, DTLS 1.3暗号化レコードを以前のDTLSバージョンで使用されていたレコードタイプおよび平文DTLS 1.3レコードタイプから区別します。したがって, 逆多重化中の問題を避けるために, IANAは範囲32 (0b0010 0000)から63 (0b0011 1111)を将来の割り当てから除外する必要があります。第14節を参照してください。実装は, 次のように最初のバイトを調べることでDTLS 1.3レコードを逆多重化できます:

  • 最初のバイトがalert(21), handshake(22), またはack(提案された, 26)の場合, レコードはDTLSPlaintextレコードとして解釈しなければなりません。

  • 最初のバイトがその他の値である場合, 受信者は最初のバイトの先頭ビットが001であるかどうかを確認しなければなりません。そうである場合, 実装はレコードをDTLSCiphertextとして処理しなければなりません。真のコンテンツタイプは保護された部分の内部にあります。

  • それ以外の場合, 第4.5.2節に記載されているように, レコードは保護解除に失敗したかのように拒否しなければなりません。

図5は, DTLS 1.3および以前のバージョンのDTLSを考慮に入れて, この逆多重化手順をグラフィカルに示しています。

            +----------------+
| Outer Content |
| Type (OCT) |
| |
| OCT == 20 -+--> ChangeCipherSpec (DTLS <1.3)
| OCT == 21 -+--> Alert (Plaintext)
| OCT == 22 -+--> DTLSHandshake (Plaintext)
| OCT == 23 -+--> Application Data (DTLS <1.3)
| OCT == 24 -+--> Heartbeat (DTLS <1.3)
packet --> | OCT == 25 -+--> DTLSCiphertext with CID (DTLS 1.2)
| OCT == 26 -+--> ACK (DTLS 1.3, Plaintext)
| |
| | /+----------------+\
| 31 < OCT < 64 -+--> |DTLSCiphertext |
| | |(header bits |
| else | | start with 001)|
| | | /+-------+--------+\
+-------+--------+ |
| |
v Decryption |
+---------+ +------+
| Reject | |
+---------+ v
+----------------+
| Decrypted |
| Content Type |
| (DCT) |
| |
| DCT == 21 -+--> Alert
| DCT == 22 -+--> DTLSHandshake
| DCT == 23 -+--> Application Data
| DCT == 24 -+--> Heartbeat
| DCT == 26 -+--> ACK
| else ------+--> Error
+----------------+

図5: DTLS 1.2およびDTLS 1.3レコードの逆多重化