Aller au contenu
← Back to blog

Pourquoi XChaCha20-Poly1305 est le Futur du Chiffrement des Mots de Passe

chiffrementsecuritecryptographie

Quand nous avons construit VaultKeepR, nous avons dû prendre l'une des décisions les plus importantes de tout le projet : quel algorithme de chiffrement utiliser pour votre coffre. AES-256 est le standard de l'industrie. Approuvé par le NIST, largement déployé, avec des décennies de cryptanalyse derrière lui.

Nous avons choisi XChaCha20-Poly1305 à la place. Voici pourquoi.

Qu'est-ce que XChaCha20-Poly1305 ?

XChaCha20-Poly1305 est une construction de chiffrement authentifié avec données associées (AEAD). Décomposons :

  • XChaCha20 — Un chiffrement par flux conçu par Daniel J. Bernstein, étendu pour utiliser des nonces de 192 bits
  • Poly1305 — Un authentificateur à usage unique qui fournit intégrité et authenticité
  • AEAD — La combinaison fournit à la fois confidentialité (personne ne peut lire vos données) ET intégrité (personne ne peut les altérer) en une seule opération

La Généalogie

Salsa20 (2005, Bernstein)
  └── ChaCha20 (2008, diffusion améliorée)
       └── XChaCha20 (2018, nonce étendu)
            └── XChaCha20-Poly1305 (construction AEAD)

Pourquoi Pas AES-256 ?

AES-256 est sûr. Soyons clairs là-dessus. Mais il existe des raisons pratiques de préférer ChaCha20-Poly1305 pour un gestionnaire de mots de passe :

1. Temps Constant par Conception

AES s'appuie sur des boîtes de substitution (S-boxes) pour sa composante non linéaire. Sur les CPU sans instructions matérielles AES-NI, les implémentations logicielles d'AES sont vulnérables aux attaques par cache-timing :

  • Le CPU met en cache les lectures de S-boxes en mémoire
  • Un attaquant partageant le même matériel (VM, conteneurs) peut observer les motifs d'accès au cache
  • Ces motifs fuient des informations sur la clé de chiffrement

ChaCha20 n'utilise que des additions, rotations et opérations XOR (ARX). Ces opérations prennent le même temps quelle que soit la donnée d'entrée. Pas de tables de correspondance, pas de vulnérabilité cache-timing.

C'est particulièrement important sur :

  • Les appareils mobiles — Tous les chips ARM n'ont pas d'accélération AES
  • L'IoT et les systèmes embarqués — Support matériel limité
  • Les environnements cloud partagés — Où les attaques par canal auxiliaire sont pratiques

2. Nonces de 192 Bits : Collision Pratiquement Impossible

AES-GCM utilise des nonces de 96 bits. Avec une génération aléatoire, la borne d'anniversaire signifie un risque de collision après environ 2^48 chiffrements avec la même clé. Environ 281 mille milliards — cela semble beaucoup, mais :

  • Un gestionnaire synchronisant fréquemment sur plusieurs appareils peut générer des milliers de chiffrements
  • Si un nonce est réutilisé avec la même clé, la sécurité d'AES-GCM s'effondre complètement — l'authentification est compromise et le texte chiffré peut être forgé

Le nonce de 192 bits de XChaCha20 repousse la borne d'anniversaire à environ 2^96 — un nombre si grand que la collision est pratiquement impossible, même en chiffrant des billions de messages par seconde pendant des milliards d'années.

C'est pourquoi XChaCha20 est qualifié de « résistant au mésusage de nonce » en pratique. Vous pouvez générer des nonces aléatoires en toute sécurité sans maintenir de compteur, ce qui simplifie l'implémentation et réduit le risque de bugs.

3. Performance Sans Accélération Matérielle

Sur les appareils avec AES-NI (la plupart des CPU x86 modernes), AES-256-GCM est extrêmement rapide. Mais sur les appareils sans :

Type de CPUAES-256-GCMChaCha20-Poly1305
x86 avec AES-NI~1 Go/s~0,8 Go/s
x86 sans AES-NI~0,1 Go/s~0,8 Go/s
ARM sans accélération AES~0,05 Go/s~0,5 Go/s
WebAssembly (navigateur)VariableUniformément rapide

Pour un gestionnaire qui fonctionne dans les navigateurs, les extensions et les applications mobiles, des performances constantes sur toutes les plateformes sont critiques.

4. Construction Plus Simple, Moins de Pièges

AES-GCM est puissant mais comporte plusieurs « pièges » connus — des façons dont une implémentation en apparence correcte peut être catastrophiquement insecure :

  • Réutilisation de nonce → Échec complet de l'authentification
  • Troncature du texte chiffré → Le tag GCM doit être vérifié avant toute libération du texte en clair
  • Engagement de clé → AES-GCM n'est pas key-committing — le même texte chiffré peut se déchiffrer sous différentes clés en différents textes

XChaCha20-Poly1305 a moins de pièges d'implémentation, et VaultKeepR ajoute un schéma d'engagement HMAC-SHA256 par-dessus pour prévenir les attaques par substitution de texte chiffré.

Qui d'Autre Utilise ChaCha20-Poly1305 ?

Ce n'est pas un chiffrement académique obscur. Il est utilisé en production par certains des systèmes les plus critiques pour la sécurité :

  • WireGuard — Le protocole VPN moderne utilise exclusivement ChaCha20-Poly1305
  • Signal — La référence en matière de messagerie chiffrée
  • Cloudflare — Sert ChaCha20-Poly1305 aux clients mobiles par défaut
  • Google Chrome — Suite de chiffrement TLS pour les appareils sans AES-NI
  • OpenSSH — Chiffrement par défaut des nouvelles connexions depuis 2014
  • Noyau Linux — Utilisé dans le générateur de nombres aléatoires du noyau

Comment VaultKeepR Utilise XChaCha20-Poly1305

Dans l'architecture de VaultKeepR, XChaCha20-Poly1305 est l'étape finale de chiffrement d'un modèle de sécurité multicouche :

1. L'utilisateur saisit son mot de passe maître
2. Le wallet signe un message déterministe (EIP-191)
3. Argon2id(mot de passe + signature) → Clé maîtresse 256 bits
4. Nonce aléatoire de 192 bits généré
5. XChaCha20-Poly1305(clé maîtresse, nonce, JSON du coffre) → Texte chiffré
6. Engagement HMAC-SHA256 ajouté
7. Texte chiffré + nonce + engagement → IPFS

Les points clés :

  • Nonce aléatoire frais à chaque chiffrement — sûr grâce à l'espace de nonce de 192 bits de XChaCha20
  • KDF Argon2id — rend les attaques par force brute sur le mot de passe maître extrêmement coûteuses
  • Liaison par signature wallet — la clé de chiffrement dépend de quelque chose que vous connaissez (mot de passe) ET de quelque chose que vous possédez (wallet)
  • Engagement HMAC — empêche un attaquant de remplacer votre coffre chiffré par un autre texte chiffré valide

En Résumé

AES-256 n'est pas cassé. C'est toujours un choix parfaitement valide. Mais pour un gestionnaire de mots de passe qui doit :

  • Fonctionner dans les navigateurs, extensions et applications mobiles (matériel variable)
  • Utiliser des nonces aléatoires en toute sécurité sans gestion de compteur
  • Résister aux attaques par canal auxiliaire sur des plateformes diverses
  • Minimiser la complexité d'implémentation

XChaCha20-Poly1305 est le meilleur choix. C'est le chiffrement que les praticiens de la sécurité choisissent quand ils construisent de nouveaux systèmes de zéro — et c'est exactement ce qu'est VaultKeepR.

XChaCha20-Poly1305 vs AES-256-GCM : Face à Face

Si vous comparez des gestionnaires et voyez « AES-256 » vs « XChaCha20-Poly1305 », voici l'analyse technique complète :

PropriétéAES-256-GCMXChaCha20-Poly1305
Taille de clé256 bits256 bits
Taille de nonce96 bits192 bits
Borne d'anniversaire (collision nonce)~2^48 (~281 T)~2^96 (pratiquement jamais)
Chiffrement authentifiéOui (mode GCM)Oui (MAC Poly1305)
Temps constant par conceptionNon (lectures S-box)Oui (ARX uniquement)
Attaques cache-timingPossibles sans AES-NIImpossibles
Accélération matérielle requiseOui (AES-NI) pour pleine vitesseNon
Performance sur ARM mobileLente sans instructions AESUniformément rapide
Performance en WebAssemblyVariableUniformément rapide
Conséquence de réutilisation de nonceCatastrophique (auth cassée)Sûre (nonces aléatoires 192 bits)
Engagement de cléNon natif (superposition HMAC requise)Superposition HMAC-SHA256 (VaultKeepR)
StandardisationNIST FIPS 197 + SP 800-38DIETF RFC 8439 + draft XChaCha
Utilisé parLa plupart des gestionnaires (1Password, Bitwarden, LastPass, Keeper)Signal, WireGuard, Cloudflare, VaultKeepR

À retenir : AES-256-GCM est sûr quand il est implémenté parfaitement sur du matériel supportant AES-NI. XChaCha20-Poly1305 est sûr partout, sur chaque appareil, quel que soit le support matériel. Pour un gestionnaire qui fonctionne dans les navigateurs, les extensions, iOS, Android et WebAssembly, cette constance est une fonctionnalité de sécurité — pas seulement de performance.

Preuves de Sécurité et Cryptanalyse

ChaCha20 a été conçu par Daniel J. Bernstein (djb), l'un des cryptographes les plus respectés du domaine. Le Salsa20 original (2005) et son successeur ChaCha20 (2008) ont bénéficié d'une cryptanalyse approfondie :

  • Aucune attaque pratique n'existe contre le ChaCha20 complet à 20 rounds. La meilleure attaque connue est une attaque différentielle sur 7 rounds, laissant une large marge de sécurité.
  • Poly1305 est inconditionnellement sûr comme authentificateur à usage unique — sa sécurité ne dépend que de l'usage unique de la clé, pas d'hypothèses de calcul.
  • La construction AEAD (combinaison ChaCha20 + Poly1305) hérite des propriétés des deux : confidentialité du chiffrement par flux, intégrité du MAC.

La variante à nonce étendu (XChaCha20) utilise HChaCha20 (une étape de dérivation de clé) pour dériver une sous-clé des 128 premiers bits du nonce, puis utilise les 64 bits restants avec le ChaCha20 standard. Cette construction a été formellement analysée et est implémentée dans libsodium — la bibliothèque cryptographique dérivée de NaCl la plus utilisée, adoptée par des millions d'applications.

Pourquoi les Gestionnaires de Mots de Passe ont Spécifiquement Besoin de XChaCha20

Les gestionnaires de mots de passe ont un modèle de menace unique comparé aux autres systèmes de messagerie ou de stockage chiffrés :

  1. Le coffre est une cible unique de grande valeur — Si un attaquant obtient votre coffre chiffré, il peut le forcer hors ligne indéfiniment. Le chiffrement doit résister à des années d'attaques soutenues.
  2. Le coffre est petit — Typiquement quelques Ko à quelques Mo. La performance n'est pas la contrainte ; la marge de sécurité l'est.
  3. Le coffre est synchronisé fréquemment — Chaque ajout ou modification ré-encrypte le coffre. Avec le nonce de 96 bits d'AES-GCM, des milliers de chiffrements par jour font de la collision une préoccupation statistique avec le temps. Le nonce de 192 bits de XChaCha20 rend cela impossible.
  4. Le coffre fonctionne dans les navigateurs et applications mobiles — Tous les environnements n'ont pas AES-NI. WebAssembly, Safari mobile, anciens appareils Android — tous profitent des performances constantes de ChaCha20.
  5. Le coffre doit résister aux bugs d'implémentation — AES-GCM a des pièges connus (réutilisation de nonce, engagement de clé). XChaCha20-Poly1305 offre moins d'occasions de se tromper, et VaultKeepR ajoute une couche d'engagement HMAC pour la défense en profondeur.

Comment XChaCha20-Poly1305 se Compare aux Autres Chiffrements

vs AES-256-CBC (utilisé par d'anciens gestionnaires)

AES-CBC est plus ancien et nécessite un MAC séparé (comme HMAC-SHA256) pour fournir l'authentification. CBC est aussi vulnérable aux attaques par oracle de remplissage si le MAC n'est pas appliqué correctement. XChaCha20-Poly1305 fournit l'authentification nativement en une seule opération.

vs ChaCha20-Poly1305 (IETF RFC 8439)

La construction IETF standard utilise un nonce de 96 bits. XChaCha20 l'étend à 192 bits, rendant la génération aléatoire de nonces complètement sûre. VaultKeepR utilise la variante étendue précisément parce qu'elle élimine la gestion de compteurs de nonce.

vs AES-SIV

AES-SIV est résistant au mésusage de nonce comme XChaCha20, mais plus lent et nécessite deux opérations AES par bloc. C'est un bon choix pour l'enveloppement de clés mais moins pratique pour chiffrer des données de coffre synchronisées fréquemment.

Pour Aller Plus Loin


Vos mots de passe méritent le meilleur chiffrement disponible. VaultKeepR utilise XChaCha20-Poly1305 parce que votre sécurité ne devrait pas dépendre de l'appareil que vous utilisez.

En savoir plus sur la sécurité de VaultKeepR →

Share𝕏in

Ready to take control of your passwords?

VaultKeepR is the first decentralized password manager. Zero-knowledge. Wallet-native. Yours.

Try VaultKeepR →