6. Mise à jour des clés (Key Update)
Une fois que le handshake 1-RTT est terminé, les points d'extrémité peuvent mettre à jour les clés utilisées pour protéger les paquets 1-RTT. Cela permet de protéger contre les compromissions de clés. Un point d'extrémité initie une mise à jour de clé en mettant à jour les clés qu'il utilise pour l'envoi de paquets.
La mise à jour de clé dans QUIC est distincte du mécanisme KeyUpdate de TLS. La mise à jour de clé QUIC utilise les fonctions de dérivation de clés de la bibliothèque TLS.
6.1. Initier une mise à jour de clé (Initiating a Key Update)
Les points d'extrémité maintiennent des clés séparées de lecture et d'écriture. Un point d'extrémité initie une mise à jour de clé en mettant à jour ses clés d'écriture de paquet et en commençant à les utiliser pour protéger les paquets qu'il envoie. Le point d'extrémité crée une nouvelle clé secrète en utilisant la fonction KDF fournie par TLS.
Le point d'extrémité met ensuite à jour ses clés de protection de paquet et utilise les clés mises à jour pour protéger les nouveaux paquets.
6.2. Répondre à une mise à jour de clé (Responding to a Key Update)
Lorsqu'un point d'extrémité reçoit un paquet avec un nouveau numéro de génération de clé plus grand que n'importe quelle clé qu'il a reçue précédemment, il sait que le pair a mis à jour ses clés. Le point d'extrémité DOIT (MUST) mettre à jour ses clés de réception avant de traiter avec succès le paquet.
Si un point d'extrémité détecte un second paquet avec un numéro de génération de clé plus grand que celui qu'il a utilisé, il indique que le pair a répondu à la mise à jour de clé. Dans ce cas, le point d'extrémité DOIT (MUST) mettre à jour ses clés d'envoi de paquet si ce n'est pas déjà fait.
6.3. Timing de génération des clés de réception
Les implémentations peuvent choisir de conserver des clés de réception plus anciennes pendant un certain temps pour permettre de recevoir des paquets qui ont été retardés dans le réseau. Cependant, dès qu'un point d'extrémité reçoit un paquet 1-RTT qui nécessite la génération de clés suivante, il DEVRAIT (SHOULD) mettre à jour ses clés de réception.
6.4. Envoi avec des clés mises à jour (Sending with Updated Keys)
Un point d'extrémité n'envoie jamais de paquets protégés avec des clés plus anciennes. Seuls des paquets protégés avec la génération de clés la plus récente sont envoyés. Les clés d'envoi plus anciennes DOIVENT (MUST) être supprimées lorsque des clés plus récentes sont disponibles.
6.5. Réception avec différentes clés (Receiving with Different Keys)
Pour les paquets protégés avec des clés obsolètes qui arrivent après qu'un point d'extrémité ait mis à jour, le point d'extrémité peut soit supprimer ces paquets sans traitement, soit tenter de les traiter. Si l'implémentation choisit de conserver les clés plus anciennes, elle peut traiter les paquets qui arrivent tard.
6.6. Limites d'utilisation d'AEAD (Limits on AEAD Usage)
Chaque suite AEAD a une limite sur la quantité de données qu'elle peut chiffrer de manière sécurisée. Cela prend en compte à la fois le nombre de paquets protégés avec une clé donnée et la taille de ces paquets.
L'analyse dans [AEBounds] et [ROBUST] montre que la limite de confidentialité pour tous les AEAD actuellement acceptés dans QUIC est considérablement plus grande que les limites de protection contre la falsification.
Les points d'extrémité DOIVENT (MUST) compter le nombre d'octets de texte chiffré qui ont été chiffrés pour chaque clé de chiffrement et initier une mise à jour de clé avant de chiffrer plus que la limite de confidentialité pour l'AEAD utilisé.
Les limites spécifiques pour chaque AEAD sont listées dans la section 6.6.
Pour AEAD_AES_128_GCM et AEAD_AES_256_GCM :
- Limite de confidentialité : 2^23 paquets
- Limite d'intégrité : 2^52 tentatives d'authentification
Pour AEAD_CHACHA20_POLY1305 :
- Limite de confidentialité : 2^23 paquets
- Limite d'intégrité : 2^36 tentatives d'authentification
Pour AEAD_AES_128_CCM :
- Limite de confidentialité : 2^21.5 paquets
- Limite d'intégrité : 2^23.5 tentatives d'authentification
6.7. Code d'erreur de mise à jour de clé (Key Update Error Code)
Le code d'erreur KEY_UPDATE_ERROR (0x0E) est utilisé pour signaler des erreurs liées à la mise à jour de clé.