Aller au contenu

ChaCha20-Poly1305 : Chiffrement par flot ChaCha20 combiné à l'authentificateur Poly1305 (RFC 8439)

Cryptographie

Algorithme de chiffrement authentifié avec données associées (AEAD) qui associe le chiffrement par flot ChaCha20 et l'authentificateur Poly1305, standardisé dans la RFC 8439. Il chiffre les données et produit une étiquette de 128 bits qui signale la moindre modification du message.

Chez l'émetteur, la clé et le nonce alimentent ChaCha20 avec un compteur qui vaut 0, puis 1, 2, 3. Le bloc 0 de ChaCha20 sert de clé à usage unique pour Poly1305. Les blocs suivants sont combinés par XOR avec le message clair, ce qui donne le chiffré. Le chiffré et les données associées passent ensuite dans Poly1305, qui calcule une étiquette de 128 bits. L'émetteur envoie au destinataire le nonce, le chiffré et l'étiquette. Si l'étiquette est valide, le destinataire remet le message clair à l'application. Sinon, il rejette le message sans le déchiffrer.

Deux pièces, une clé : ChaCha20 génère un flux pseudo-aléatoire à partir d'une clé de 256 bits, d'un nonce de 96 bits et d'un compteur de blocs, puis le combine au message par XOR. Le premier bloc de ce flux sert de clé à usage unique à Poly1305, qui calcule l'étiquette sur les données associées et sur le chiffré.

Rapide sans matériel dédié : L'algorithme n'utilise que des additions, des rotations et des XOR sur des mots de 32 bits : aucune table, donc aucune fuite par le cache, et de bonnes performances sur les processeurs dépourvus d'instructions AES. On le trouve donc dans TLS 1.3, WireGuard et OpenSSH.

Le nonce, jamais deux fois : Réutiliser un même couple clé et nonce expose le XOR de deux messages clairs et permet de forger des étiquettes. Tirer le nonce de 96 bits au hasard reste raisonnable jusqu'à environ 2^32 messages par clé. Au-delà, le paradoxe des anniversaires se charge de la démonstration, avec la discrétion habituelle des défauts crypto qui ne font aucun bruit avant d'avoir fait beaucoup de dégâts. XChaCha20-Poly1305 et son nonce de 192 bits lèvent cette contrainte.

Ce qui arrive si on s'en passe

Sans ChaCha20-Poly1305 ni AEAD équivalent, deux protections disparaissent. La première est la confidentialité : les données circulent ou sont stockées en clair, lisibles par quiconque accède au canal ou au support. La seconde est l'intégrité. ChaCha20 seul, sans l'étiquette Poly1305, reste malléable, car le chiffré n'est qu'un XOR entre le message et le flot de clé. Inverser un bit du chiffré inverse le même bit du clair. Un attaquant qui connaît la structure du message peut donc modifier un champ ou un montant sans connaître la clé. Le destinataire déchiffre alors un contenu altéré sans aucun signal d'alerte. Les données associées (en-têtes, numéros de séquence) ne sont plus liées au chiffré : elles peuvent être modifiées ou réutilisées pour un rejeu sans que rien ne le révèle, puisque aucune étiquette n'est vérifiée.

Explication de la marmotte

Imagine que tu envoies une lettre secrète à un ami. Il faut deux choses : que personne ne puisse la lire, et que personne ne puisse la modifier en route. Cette méthode fait les deux d'un coup. D'abord, elle mélange chaque lettre de ton message avec une longue suite de lettres tirées au hasard, que seul ton ami sait reproduire grâce à un secret que vous partagez. Ensuite, elle colle sur l'enveloppe un petit sceau calculé à partir du message brouillé. Si quelqu'un change ne serait-ce qu'une virgule, le sceau ne correspond plus et ton ami jette la lettre. En plus, elle fonctionne vite, même sur un vieux téléphone.

Où ce terme est utilisé

← Tout le glossaire