4.2.3. Chiffrement du numéro d'enregistrement
4.2.3. Chiffrement du numéro d'enregistrement (Record Number Encryption)
Dans DTLS 1.3, lorsque les enregistrements sont chiffrés, les numéros de séquence des enregistrements sont également chiffrés. Le modèle de base est que l'algorithme de chiffrement sous-jacent utilisé avec l'algorithme AEAD est utilisé pour générer un masque qui est ensuite soumis à une opération XOR avec le numéro de séquence.
Lorsque l'AEAD est basé sur AES, le masque est généré en calculant AES-ECB sur les 16 premiers octets du texte chiffré:
Mask = AES-ECB(sn_key, Ciphertext[0..15])
Lorsque l'AEAD est basé sur ChaCha20, le masque est généré en traitant les 4 premiers octets du texte chiffré comme le compteur de bloc et les 12 octets suivants comme le nonce, en les passant à la fonction de bloc ChaCha20 (Section 2.3 de [CHACHA]):
Mask = ChaCha20(sn_key, Ciphertext[0..3], Ciphertext[4..15])
Le sn_key est calculé comme suit:
[sender]_sn_key = HKDF-Expand-Label(Secret, "sn", "", key_length)
[sender] désigne le côté expéditeur. La valeur Secret par époque à utiliser est décrite dans la Section 7.3 de [TLS13]. Notez qu'une nouvelle clé est utilisée pour chaque époque: comme l'époque est envoyée en clair, cela n'entraîne pas d'ambiguïté.
Le numéro de séquence chiffré est calculé en effectuant un XOR des octets de tête du masque avec la représentation sur le fil du numéro de séquence. Le déchiffrement est accompli par le même processus.
Cette procédure nécessite que la longueur du texte chiffré soit d'au moins 16 octets. Les récepteurs DOIVENT rejeter les enregistrements plus courts comme s'ils avaient échoué la déprotection, comme décrit dans la Section 4.5.2. Les expéditeurs DOIVENT remplir les textes en clair courts (en utilisant le mécanisme de remplissage d'enregistrement conventionnel) afin de créer un texte chiffré de longueur appropriée. Notez que la plupart des algorithmes AEAD DTLS ont une étiquette d'authentification de 16 octets et n'ont pas besoin de remplissage. Cependant, certains algorithmes, comme TLS_AES_128_CCM_8_SHA256, ont une étiquette d'authentification plus courte et peuvent nécessiter un remplissage pour les entrées courtes.
Les suites de chiffrement futures, qui ne sont pas basées sur AES ou ChaCha20, DOIVENT définir leur propre chiffrement de numéro de séquence d'enregistrement pour être utilisées avec DTLS.
Notez que le chiffrement du numéro de séquence n'est appliqué qu'à la structure DTLSCiphertext et non à la structure DTLSPlaintext, même si elle contient également un numéro de séquence.