4.1. Demultiplexing DTLS Records (Demultiplexing von DTLS-Datensätzen)
4.1. Demultiplexing DTLS Records (Demultiplexing von DTLS-Datensätzen)
Das Header-Format von DTLS 1.3 ist komplizierter zu demultiplexen als DTLS 1.2, das immer den Inhaltstyp als erstes Byte trug. Wie in Abbildung 5 beschrieben, bestimmt das erste Byte, wie ein eingehender DTLS-Datensatz demultiplext wird. Die ersten 3 Bits des ersten Bytes unterscheiden einen verschlüsselten DTLS 1.3-Datensatz von in früheren DTLS-Versionen verwendeten Datensatztypen und Klartext-DTLS 1.3-Datensatztypen. Daher muss der Bereich 32 (0b0010 0000) bis 63 (0b0011 1111) von zukünftigen Zuweisungen durch IANA ausgeschlossen werden, um Probleme beim Demultiplexing zu vermeiden; siehe Abschnitt 14. Implementierungen können DTLS 1.3-Datensätze demultiplexen, indem sie das erste Byte wie folgt untersuchen:
-
Wenn das erste Byte alert(21), handshake(22) oder ack(vorgeschlagen, 26) ist, MUSS der Datensatz als DTLSPlaintext-Datensatz interpretiert werden.
-
Wenn das erste Byte ein anderer Wert ist, dann MÜSSEN Empfänger überprüfen, ob die führenden Bits des ersten Bytes 001 sind. Wenn ja, MUSS die Implementierung den Datensatz als DTLSCiphertext verarbeiten; der wahre Inhaltstyp befindet sich im geschützten Bereich.
-
Andernfalls MUSS der Datensatz abgelehnt werden, als ob er die Entschlüsselung nicht bestanden hätte, wie in Abschnitt 4.5.2 beschrieben.
Abbildung 5 zeigt dieses Demultiplexing-Verfahren grafisch unter Berücksichtigung von DTLS 1.3 und früheren Versionen von 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
+----------------+
Abbildung 5: Demultiplexing von DTLS 1.2- und DTLS 1.3-Datensätzen