Résumé

  • Le Packet Number transmis contient 1 à 4 octets de poids faible, masqués par header protection.
  • Le récepteur reconstruit un candidat à partir de l’état du même packet-number space et de la prochaine valeur attendue.
  • Une répétition, une rupture numérique ou un échec de déchiffrement ne suffit pas à prouver perte, rejeu, attaque ou livraison applicative.

Une capture passive peut transformer une observation partielle en diagnostic définitif. Deux champs qui semblent identiques deviennent un « rejeu » ; un saut numérique devient une perte massive. RFC 9000 et RFC 9001 imposent pourtant de séparer trois états : les octets présents sur le fil, la valeur tronquée une fois header protection retirée, et le numéro complet reconstruit. Un packet number QUIC est un entier compris entre 0 et 2^62-1, mais le champ Packet Number d’un en-tête long ou court ne transporte que 1 à 4 octets de ses bits de poids faible. La longueur du champ est elle-même protégée.

Cette identité n’est pas globale. QUIC possède trois packet-number spaces : Initial, Handshake et application data, ce dernier regroupant 0-RTT et 1-RTT. Chaque espace commence à zéro. Les numéros d’envoi et de réception sont aussi maintenus séparément pour chaque direction. Le même entier peut donc désigner des paquets différents. Retry et Version Negotiation n’emportent pas de Packet Number et ne sont pas acquittés par les ACK ordinaires.

L’encodage côté émetteur dépend de l’historique. Tant qu’aucun acquittement n’a été reçu dans l’espace concerné, l’émetteur utilise le numéro complet. Ensuite, il choisit suffisamment de bits encodés pour couvrir plus de deux fois l’écart entre le paquet envoyé et Largest Acknowledged. Les exemples de RFC 9000 illustrent l’algorithme à partir des numéros non acquittés contigus ; ils ne définissent ni seuil de production ni garantie pour tout paquet très retardé.

Le récepteur retire d’abord header protection. Il dispose alors de la valeur tronquée et de la longueur encodée. La reconstruction utilise exactement trois données dans l’algorithme illustratif : le plus grand numéro correctement traité dans le même espace, la valeur tronquée et sa longueur. La prochaine valeur attendue est ce plus grand numéro plus un. Le récepteur choisit, dans la fenêtre d’encodage, le candidat le plus proche de cette attente. Sans cet état, une capture ne possède pas le contexte nécessaire.

Un paquet fortement retardé peut tomber dans une situation ambiguë après l’arrivée de nombreux numéros supérieurs. Un échec de déprotection ou d’authentification n’est donc pas à lui seul une preuve de faute de protocole ou d’attaque. Le numéro reconstruit sert à construire le nonce AEAD ; l’en-tête non protégé jusqu’au Packet Number est authentifié comme associated data lors du retrait de la protection. Une valeur devinée n’est pas un décodage authentifié.

ACK fournit une autre catégorie de preuve. Largest Acknowledged est un entier complet à longueur variable, contrairement au champ protégé de l’en-tête. Les ACK ranges décrivent des paquets reçus et traités dans l’espace du paquet qui porte l’ACK. Ils peuvent établir un fait côté terminal après traitement, mais ne réparent pas les trous d’une capture et ne traversent pas les espaces. La détection d’un doublon intervient après retrait de la protection et récupération authentifiée du numéro ; deux mêmes bits faibles ne constituent pas encore un doublon.

Le registre de preuve doit conserver séparément direction et identité de connexion, type et espace, octets protégés et complétude de capture, contexte de clé, succès de déprotection, longueur et valeur tronquée, plus grand numéro traité, prochaine attente, fenêtre, numéro complet authentifié, puis valeurs et plages ACK. Perte, retransmission, réordonnancement, rejeu, injection, attaque, chemin et livraison applicative sont des conclusions distinctes. Un trou peut venir du point de capture, de l’échantillonnage, de la troncature, de l’état de déchiffrement ou du trafic réel ; le corpus RFC ne l’assimile pas à une perte.

Cette analyse reste distincte de l’échantillonnage spin-bit de TR-038, de key phase dans TR-042, de la sémantique ACK-vers-application de TR-045, de la coalescence de TR-049 et du PTO de TR-051.