Chaque fois que vous envoyez un message, effectuez un paiement en ligne ou vous connectez à un service sécurisé, le chiffrement travaille en arrière-plan pour préserver la confidentialité de vos données. L’un des algorithmes qui accomplissent cette tâche aujourd’hui est ChaCha20 : un chiffrement rapide, sûr et léger, auquel font confiance aussi bien les géants de la tech que les experts en sécurité. Voici ce que c’est et comment il protège vos données.

ChaCha20

Comprendre l’algorithme ChaCha20

Pour comprendre l’algorithme ChaCha20, il est utile de le décomposer en ses éléments essentiels : son origine, le processus qu’il utilise pour produire des données chiffrées, ainsi que le rôle de sa clé, de son nonce et de son compteur. Chacune de ces parties contribue ensemble à la vitesse, à l’efficacité et à la sécurité, ce qui fait de ChaCha20 une option solide dans de nombreux protocoles de chiffrement modernes.

Qui a développé ChaCha20 et pourquoi ?

ChaCha a été développé en 2008 par Daniel J. Bernstein, un mathématicien, informaticien et cryptographe américano-allemand. Il repose sur sa conception antérieure, Salsa20.

L’une des principales raisons de la création de ChaCha20 était de fournir une alternative solide aux chiffrements largement utilisés comme Advanced Encryption Standard (AES). Bien que l’AES soit très sûr, il fonctionne le plus rapidement sur les appareils qui prennent en charge l’accélération matérielle : des instructions CPU spéciales, comme les Advanced Encryption Standard New Instructions (AES-NI) d’Intel, qui accélèrent ses opérations. De nombreux appareils plus anciens, mobiles ou à faible consommation n’ont pas ce support matériel, ce qui rend l’AES plus lent et plus gourmand en batterie lorsqu’il est implémenté uniquement par logiciel.

ChaCha20 a été conçu pour éviter ce problème. Il n’utilise que des opérations simples qui s’exécutent rapidement sur presque n’importe quel processeur. Cette conception légère le rend particulièrement adapté aux smartphones, aux systèmes embarqués et à d’autres environnements contraints. Aujourd’hui, ChaCha20 est recommandé dans des protocoles modernes tels que Transport Layer Security (TLS) 1.3 comme une option fiable aux côtés de l’AES.

Comment fonctionne ChaCha20

Disons que vous souhaitez chiffrer ce message à l’aide de ChaCha20 : « ExpressVPN protège ma vie privée en ligne et m’aide à garder mes données en sécurité. » Voici comment cela se fait, étape par étape.

1. Convertissez le message en octets.

Les ordinateurs travaillent avec des octets, qui sont des unités de 8 bits pouvant stocker un nombre de 0 à 255. Un texte comme notre phrase est stocké en associant chaque caractère (« E », « x », espace, « . », etc.) à 1 octet. Notre phrase fait 66 octets, il faudra donc un peu plus d’un morceau (bloc) de 64 octets pour la chiffrer.

2. Ensuite, vous avez besoin d’une clé secrète.

ChaCha20 est un chiffrement symétrique, ce qui signifie que le même secret sert à chiffrer et à déchiffrer. Ce secret est une clé de 256 bits (32 octets). Vous pouvez le considérer comme un long mot de passe aléatoire que seuls l’émetteur et le destinataire connaissent. Pourquoi 256 bits ? C’est assez grand pour qu’il soit pratiquement impossible de la deviner par essais et erreurs.

3. Vous avez également besoin d’un nonce (nombre utilisé une seule fois).

Un nonce est un nombre public et unique choisi pour chaque message que vous chiffrez avec une clé donnée.

Dans la version Internet Engineering Task Force (IETF) de ChaCha20, le nonce fait 96 bits (12 octets). Il n’a pas besoin d’être secret, mais il ne doit jamais se répéter avec la même clé. Réutiliser une paire clé–nonce révélerait votre message.

4. ChaCha20 produit un flux de clés.

ChaCha20 appartient à la famille des « chiffrements par flot ». Au lieu de brouiller directement votre message, il produit d’abord un flux d’octets pseudo-aléatoires appelé flux de clés (keystream). Vous combinez ensuite ce flux de clés avec les octets de votre message à l’aide d’une opération simple appelée OU exclusif (XOR) .

Comment ChaCha20 produit-il le flux de clés ?

Construire un état interne

ChaCha20 conserve une petite zone de travail appelée l'état, organisée sous forme d'une grille 4×4 de nombres. Chaque nombre de la grille est un mot, ce qui signifie ici un entier non signé de 32 bits (4 octets) comme, par exemple, 00000000 00000000 00000111 01001001.

Les 16 mots de la grille sont remplis avec :

  • 4 constantes fixes (elles identifient simplement l'algorithme),
  • 8 mots provenant de la clé de 256 bits (puisque 8 × 4 octets = 32 octets),
  • 1 compteur de blocs (expliqué ensuite),
  • 3 mots provenant du nonce (3 × 4 octets = 12 octets).

ChaCha internal state

Le compteur de blocs

Le flux de clés est produit par blocs de 64 octets à la fois.

Pour rendre chaque bloc de 64 octets différent, ChaCha20 utilise un compteur de 32 bits à l'intérieur de l'état qui commence à 0 pour le premier bloc, 1 pour le bloc suivant, et ainsi de suite.

Mélanger l'état (le cœur ARX)

ChaCha20 mélange de façon répétée les 16 mots de la grille en n'utilisant que trois opérations : l'addition (modulo 2³²), la rotation (rotation bit à bit de mots de 32 bits) et le XOR (qui compare deux bits et produit 1 s'ils sont différents et 0 s'ils sont identiques).

Ce mélange, fondé sur des opérations d'addition, de rotation et de XOR (ARX), s'effectue en tours (ChaCha20 en fait 20). L'essentiel est que ces opérations simples et rapides brouillent complètement l'état de manière difficilement réversible sans la clé.

Produire 64 octets de suite chiffrante

Après le mélange, ChaCha20 ajoute l'état d'origine à l'état mélangé (mot par mot), puis produit le résultat sous forme de 64 octets de suite chiffrante. C'est un bloc de suite chiffrante.

5. Produire autant de blocs de suite chiffrante que nécessaire

Votre message peut avoir n'importe quelle longueur. ChaCha20 utilise simplement counter = 0 pour produire les 64 premiers octets de suite chiffrante, counter = 1 pour les 64 octets suivants, counter = 2 pour les 64 octets suivants, et ainsi de suite. Comme le compteur change, chaque bloc de suite chiffrante est unique (même avec la même clé et le même nonce).

6. Aligner la suite chiffrante avec votre message

Notre message d'exemple fait 67 octets, donc le bloc 0 couvre les octets 0–63 du message (64 octets), et le bloc 1 couvre les octets 64–66 du message (les 3 derniers octets). Nous n'utilisons que les 3 premiers octets du second bloc de suite chiffrante et ignorons le reste.

7. Combiner le message avec la suite chiffrante à l'aide de XOR

XOR est une opération octet par octet dotée d'une propriété élégante : effectuer le même XOR deux fois vous ramène au point de départ :

Chiffrement (par octet) : texte en clair XOR suite chiffrante = texte chiffré

Déchiffrement (par octet, même suite chiffrante) : texte chiffré XOR suite chiffrante = texte en clair

Comparer ChaCha20 avec d'autres algorithmes de chiffrement

Bien que ChaCha20 soit largement utilisé aujourd'hui, ce n'est pas le seul algorithme de chiffrement en jeu. D'autres chiffrements, comme AES et Rivest–Shamir–Adleman (RSA), sont également courants, mais ils fonctionnent de manières différentes et conviennent à des tâches différentes. Les comparer permet de montrer où se situe ChaCha20 et pourquoi certains protocoles le choisissent plutôt que les alternatives.

ChaCha20 vs. AES

ChaCha20 et AES sont tous deux des algorithmes de chiffrement à clé symétrique, ce qui signifie que la même clé est utilisée pour le chiffrement et le déchiffrement. Pour mieux comprendre diverses techniques cryptographiques, y compris les différences entre le chiffrement et le hachage, vous pouvez consulter cette explication de hachage vs. chiffrement.

La principale différence entre ChaCha20 et AES réside dans la façon dont ils traitent les données. AES est un chiffrement par blocs, qui chiffre les données en blocs de taille fixe, tandis que ChaCha20 est un chiffrement par flot, qui génère un flux de clés continu combiné aux données.

AES bénéficie souvent de l'accélération matérielle sur les processeurs modernes, ce qui le rend extrêmement rapide dans ces environnements. ChaCha20, en revanche, est conçu pour offrir des performances constantes même sans prise en charge matérielle spécialisée, ce qui en fait un choix solide pour les appareils mobiles et les systèmes à faible consommation. C'est pourquoi ExpressVPN utilise à la fois AES-256 et ChaCha20 pour son protocole Lightway, en basculant automatiquement vers celui le mieux adapté à votre appareil (vous pouvez également choisir l'un ou l'autre manuellement).

Une autre différence pratique concerne l'implémentation. AES peut être plus complexe à coder de manière sécurisée, car il peut être vulnérable aux attaques temporelles s'il n'est pas implémenté avec soin. ChaCha20 utilise des opérations ARX simples qui s'exécutent naturellement en temps constant, ce qui contribue à réduire ce risque.

Les deux chiffrements sont considérés comme sûrs lorsqu'ils sont correctement implémentés, et les protocoles modernes comme TLS 1.3 prennent en charge chacun d'eux. Le choix entre eux dépend du matériel de l'appareil et des exigences de performance plutôt que de considérations de sécurité.

Fonctionnalité ChaCha20 AES
Type de chiffrement Chiffrement par flot Chiffre par blocs
Accélération matérielle Rapide sur tous les appareils Idéal avec AES‑NI (instructions matérielles dédiées)
Facilité de mise en œuvre Opérations plus simples, en temps constant Plus complexe, nécessite un codage soigné
Vitesse sans AES‑NI (instructions matérielles dédiées) Très rapide Plus lent

ChaCha20 vs. RSA

ChaCha20 et RSA ne sont pas des concurrents directs : ils remplissent des fonctions différentes dans la communication sécurisée.

RSA est un algorithme de chiffrement asymétrique, ce qui signifie qu'il utilise une paire de clés : une publique et une privée. Il est généralement utilisé au début d'une connexion sécurisée pour échanger des clés de chiffrement ou vérifier des identités. En TLS, l'algorithme à clé symétrique est souvent AES, l'échange de clés étant sécurisé par RSA.

Parce que RSA implique des mathématiques plus complexes et fonctionne avec des tailles de clés plus importantes, il est plus lent et moins efficace pour le chiffrement continu des données.

ChaCha20, en revanche, est un chiffrement de flux symétrique. Il utilise une seule clé partagée pour le chiffrement et le déchiffrement, ce qui le rend plus rapide et mieux adapté au transfert continu de données.

En pratique, de nombreux protocoles sécurisés combinent les deux approches : RSA (ou un autre algorithme asymétrique) pour le handshake initial et ChaCha20 ou un autre chiffrement symétrique pour le reste de la session.

Avantages de ChaCha20

ChaCha20 est populaire non seulement parce qu'il est sécurisé, mais aussi parce qu'il fonctionne bien dans des situations réelles. Il est rapide sur tous types d'appareils, même les téléphones et gadgets moins puissants. Sa conception est simple, ce qui permet d'éviter les erreurs courantes susceptibles d'affaiblir le chiffrement.

Vitesse et performances sur les appareils mobiles et à faible consommation

ChaCha20 est conçu pour fonctionner efficacement sur tous types de matériel, pas seulement sur les processeurs haut de gamme. Sur les appareils sans accélération matérielle AES, comme de nombreux smartphones, tablettes ou appareils IoT, il peut s'exécuter de manière nettement plus rapide.

Simplicité et résistance aux attaques temporelles

ChaCha20 repose sur de simples opérations ARX. Celles-ci s'exécutent en temps constant, ce qui signifie que la vitesse d'exécution ne change pas en fonction des données traitées : toutes les opérations prennent exactement le même temps.

Cette conception facilite une implémentation sécurisée et aide à se protéger contre les attaques temporelles, qui tentent d'extraire des informations en mesurant le temps que prennent les étapes de chiffrement.

Quelles sont les limitations connues de ChaCha20 ?

ChaCha20 a été étudié pendant des années, et aucune attaque réelle contre la version complète à 20 tours n'a été publiée. Dans l'ensemble, c'est aujourd'hui l'alternative à AES la plus exhaustivement testée. Cependant, il présente certaines limites claires que les développeurs doivent garder à l'esprit. L'utiliser en dehors de ces limites peut affaiblir sa protection.

  • La réutilisation du nonce constitue un risque grave : Utiliser le même nonce avec la même clé compromet instantanément la confidentialité. Chaque paire nonce–clé doit être unique.
  • Pas d'authentification intégrée : ChaCha20 ne fait que chiffrer les données. Pour vérifier que les données n'ont pas été altérées, il doit être utilisé avec Poly1305.
  • Limite des données chiffrées par clé/nonce : ChaCha20 peut traiter jusqu'à 2³² blocs de 64 octets (environ 256 GB) avec la même clé et le même nonce. Dépasser cette limite entraînerait une réutilisation du flux de clés et compromettrait complètement la sécurité du chiffrement.

ChaCha20-Poly1305 expliqué

ChaCha20‑Poly1305 est l'association de deux composants cryptographiques qui travaillent ensemble pour protéger les données :

  • ChaCha20 chiffre les informations avec une clé secrète partagée, transformant le texte lisible en quelque chose qui ressemble à des données aléatoires pour quiconque n'a pas la clé. Cependant, il ne détecte pas les altérations.
  • Poly1305 produit un code d'authentification de message (MAC) qui permet au destinataire de confirmer que les données n'ont pas été altérées et qu'elles proviennent de la bonne source.

Ensemble, ils forment ce que l'on appelle Authenticated Encryption with Additional Data (AEAD). Cela signifie que le processus de chiffrement non seulement masque le contenu du message, mais vérifie également son intégrité.

Poly1305 n’est pas la seule option, mais c’est le choix le plus courant lorsque ChaCha20 est utilisé dans les protocoles modernes. C’est parce que ChaCha20‑Poly1305 a été normalisé par l’IETF (RFC 8439) et est largement pris en charge dans TLS, SSH, WireGuard et d’autres protocoles, c’est donc le de facto standard.

ChaCha20 en 2025 : où il est utilisé dans les systèmes modernes

ChaCha20 est devenu un choix standard dans de nombreuses applications axées sur la sécurité. En matière de sécurité Internet, il est utilisé dans les connexions TLS, souvent avec Poly1305, pour protéger le trafic HTTPS, en particulier sur les appareils qui ne disposent pas de prise en charge matérielle d’AES. Les principaux navigateurs comme Chrome et Firefox, ainsi que les serveurs web tels que nginx et Apache, prennent en charge cette suite de chiffrement.

ChaCha20 used in modern systems

Il est également largement utilisé dans les réseaux privés virtuels (VPN). Le protocole VPN WireGuard, par exemple, définit ChaCha20‑Poly1305 comme valeur par défaut pour sécuriser les données tout en maintenant des performances élevées sur les appareils mobiles et embarqués. La prise en charge est également intégrée aux principaux systèmes d’exploitation, notamment Linux, Android, iOS et Windows.

Résumé

ChaCha20 est un algorithme de chiffrement par flot moderne, adapté aux implémentations logicielles, créé par Daniel J. Bernstein comme alternative rapide et sécurisée à AES, en particulier sur les appareils mobiles et à faible consommation sans accélération matérielle. Il chiffre les données à l’aide d’une clé de 256 bits, d’un nonce unique de 96 bits et d’un compteur de blocs pour générer un flux de clés pseudo-aléatoire, qui est combiné au texte en clair par XOR. Sa conception ARX (Addition‑Rotation‑XOR) est simple, efficace et naturellement résistante aux attaques temporelles. ChaCha20 est symétrique (même clé pour le chiffrement et le déchiffrement) et se distingue des chiffrements par blocs comme AES et des algorithmes asymétriques comme RSA, généralement utilisés uniquement pour l’échange de clés ou l’authentification. Bien qu’il soit considéré comme hautement sécurisé et largement déployé dans TLS, les VPN et les principales plateformes, ChaCha20 doit être utilisé avec une unicité stricte du nonce et une limite de données par paire clé/nonce, et il n’offre aucune authentification intégrée — il est donc généralement combiné avec Poly1305 dans la construction AEAD normalisée ChaCha20‑Poly1305 afin d’assurer à la fois la confidentialité et l’intégrité.

FAQ : questions fréquentes sur ChaCha20

Google utilise-t-il ChaCha20 ?

Oui. Google a adopté ChaCha20 avec Poly1305 en 2014 dans le cadre de ses protocoles Transport Layer Security (TLS) / Secure Sockets Layer (SSL). L’objectif était d’améliorer les performances et la sécurité des appareils mobiles et des serveurs dépourvus d’accélération matérielle Advanced Encryption Standard (AES), afin de rendre les connexions sécurisées plus rapides et plus efficaces dans ces environnements.

ChaCha20 est-il résistant à l'informatique quantique ?

Oui. Les chiffrements symétriques, comme ChaCha20, sont généralement considérés comme sûrs face à l'informatique quantique, à condition d'utiliser des clés suffisamment longues (par ex. 256 bits).

ChaCha20 peut-il être utilisé pour le chiffrement de fichiers ?

Oui. ChaCha20 peut être utilisé dans des outils de chiffrement de fichiers pour protéger les données sensibles stockées sur des appareils. Sa vitesse et son efficacité le rendent adapté aussi bien aux fichiers volumineux qu'aux appareils à puissance de traitement limitée.

ChaCha20 peut-il être cassé ?

Il n'existe aucune attaque réelle publiée capable de casser le chiffrement ChaCha20 complet à 20 tours. Les experts en sécurité continuent de l'étudier et, lorsqu'il est utilisé correctement dans ses limites, il est considéré comme sûr pour les besoins de chiffrement modernes.