Validateur de réutilisation de nonce ChaCha20-Poly1305 | Audit des nonces AEAD
Collez une liste de nonces ChaCha20-Poly1305 (12 octets) ou XChaCha20-Poly1305 (24 octets) et l'outil signale chaque doublon, chaque entrée de longueur invalide et le risque de collision d'anniversaire sur un seul écran. Conçu pour détecter le défaut qui casse totalement le chiffrement AEAD : un nonce réutilisé avec la même clé.
💡 À propos de cet outil
Dans les chiffrements AEAD comme ChaCha20-Poly1305, le nonce est un « number used once » et ce nom n'est pas anodin. Réutilisez-en un avec la même clé et vous révélez le flux de clés ChaCha20 sous la forme du XOR de deux messages, et surtout vous exposez la clé d'authentification à usage unique de Poly1305, ce qui permet à un attaquant de forger des textes chiffrés. Ce n'est pas un cas limite théorique : c'est un incident récurrent en production, causé par des bugs de génération, des émetteurs sans état et des redémarrages qui réinitialisent les compteurs.
La difficulté, c'est que la réutilisation de nonce passe rarement la revue de code. Les schémas aléatoires, à compteur ou dérivés d'horodatage paraissent corrects isolément, puis entrent en collision entre instances. Ce validateur part de la réalité du terrain : collez les nonces directement depuis vos journaux ou votre export d'audit, et il énumère les valeurs dupliquées exactes tout en comptant à part les entrées qui ne respectent pas la longueur attendue de 12 ou 24 octets, car une longueur invalide trahit plus souvent un bug d'extraction qu'une réutilisation.
Il calcule aussi la borne d'anniversaire sous l'hypothèse de nonces aléatoires : P(collision) ≈ q² / 2ⁿ⁺¹. Vous obtenez la probabilité de collision pour votre nombre actuel ainsi que le plafond de messages sûrs où la probabilité reste sous 2⁻³² et 2⁻⁶⁴. Concrètement : avec un nonce de 96 bits, la génération aléatoire atteint un risque de collision notable vers 2³² messages par clé, raison pour laquelle on oriente les émetteurs sans état vers le nonce de 192 bits de XChaCha20.
🧐 Questions fréquentes
Le nonce est-il secret ? Est-il prudent de le coller ici ? Non, le nonce est une valeur publique transmise en clair avec le texte chiffré, ce n'est pas la clé. Il s'agit néanmoins de données opérationnelles issues de vos journaux, donc l'outil traite tout dans l'onglet du navigateur et n'envoie rien. Fermez l'onglet et les données collées disparaissent.
Quelle est la vraie différence entre ChaCha20-Poly1305 et XChaCha20-Poly1305 ? La taille du nonce. ChaCha20-Poly1305 de la RFC 8439 utilise un nonce de 96 bits (12 octets). XChaCha20-Poly1305 ajoute une dérivation HChaCha20 pour gérer un nonce de 192 bits (24 octets). À 192 bits, la génération aléatoire n'entre quasiment jamais en collision, idéal pour les émetteurs incapables de tenir un compteur.
Quand une entrée est-elle marquée « longueur invalide » ? Quand le nombre de chiffres hex ne correspond pas à la variante choisie (24 caractères hex pour ChaCha20, 48 pour XChaCha20) ou contient des caractères non hexadécimaux. Les implémentations AEAD les rejettent d'emblée, donc une longueur invalide pointe souvent vers un bug d'extraction à examiner.
Puis-je coller des nonces avec préfixe 0x ou deux-points ?
Oui. Le préfixe 0x, les deux-points, les espaces et les tirets sont retirés automatiquement, et la comparaison ignore la casse. Collez vos lignes de journal telles quelles.
Que signifie le « nombre de messages sûrs » ? Pour des nonces aléatoires, c'est le nombre maximal de messages envoyables sous une clé avant que la probabilité de collision ne franchisse la cible. Pour des nonces de 96 bits, le plafond 2⁻³² avoisine 2³² messages. Au-delà, faites tourner la clé plutôt que de faire confiance au hasard.
Cela fonctionne-t-il pour des nonces à compteur (séquentiels) ? La détection des doublons et la vérification de longueur fonctionnent à l'identique. La borne d'anniversaire suppose une génération aléatoire ; avec un schéma à compteur strict, considérez le champ de probabilité comme indicatif et concentrez-vous sur la confirmation de zéro doublon.
📚 Le saviez-vous
Les échecs de réutilisation de nonce les plus cités sont les collisions de GCM trouvées dans diverses piles TLS et protocoles maison, et comme ChaCha20-Poly1305 partage la même structure AEAD, il hérite du même piège. C'est précisément pourquoi le déploiement de QUIC chez Google associe ChaCha20-Poly1305 à des nonces gérés par compteur strict plutôt que de s'en remettre au hasard.
Le « X » de XChaCha20 signifie extended : une étape HChaCha20 étend le nonce utilisable à 192 bits. libsodium l'a popularisé et il est devenu la réponse habituelle quand on cherche à utiliser ChaCha20 en toute sécurité sans gérer de compteur. Tirer 192 bits aléatoires est tout simplement moins risqué que de surveiller une séquence de 96 bits.