CoderTools

Chiffrement ChaCha20

Chiffrement par flux moderne avec authentification optionnelle

Sécurité côté client

ChaCha20-Poly1305 (RFC 8439) est le mode AEAD recommandé. ChaCha20 seul n'offre pas d'intégrité — toujours utiliser avec Poly1305. Nonce 96 bits: unicité stricte obligatoire. XChaCha20-Poly1305 (192 bits) pour génération aléatoire sécurisée.

ChaCha20 (flux seul): 256 bits, nonce 96 bits, compteur 32 bits, 20 tours; sans authentification.

Valeur initiale du compteur (défaut : 0)

Options de format
🔒 100% Traitement localLes données que vous saisissez sont traitées entièrement dans votre navigateur et ne sont envoyées à aucun serveur.

À propos de ChaCha20

ChaCha20 est un chiffre de flux ARX de Bernstein (2008), variante améliorée de Salsa20. Même matrice 4×4 mais quarter-round redessiné avec rotations 16-12-8-7 (vs 7-9-13-18 pour Salsa20): diffusion complète en 2 tours au lieu de 4. IETF (RFC 8439): nonce 96 bits + compteur 32 bits (max 256 Go/nonce).

ChaCha20-Poly1305 (RFC 7539→RFC 8439): AEAD standardisé IETF. Clé Poly1305 dérivée des 32 premiers octets de ChaCha20 (compteur=0), puis chiffrement à compteur=1. Tag 128 bits. Déployé par Google en 2014 pour Android TLS. TLS 1.3 (RFC 8446): TLS_CHACHA20_POLY1305_SHA256 obligatoire.

Comparaison des algorithmes

Algorithme Authentification Longueur de clé Taille du nonce Cas d'utilisation
ChaCha20 Chiffrement par flux 256 bits 96 bits (12 bytes) Recherche protocole; streaming avec authentification niveau supérieur; benchmarking
ChaCha20-Poly1305 AEAD 256 bits 96 bits (12 bytes) TLS 1.3, WireGuard, SSH, QUIC, Signal; appareils sans AES-NI; services internet AEAD résistant timing
XChaCha20 Chiffrement par flux 256 bits 192 bits (24 bytes) Chiffrement fichiers/DB où unicité nonce par compteur impossible; libsodium secretstream; chiffrement sauvegardes nonces indépendants
XChaCha20-Poly1305 AEAD 256 bits 192 bits (24 bytes) Données au repos nécessitant nonce aléatoire + 128 bits auth; stockage libsodium; AEAD par défaut quand nonce non centralisable

Fonctionnement de ChaCha20

Initialisation 4×4: ligne 0=constantes “expa nd 32-byte k”, lignes 1-2=clé 256 bits (8×32), ligne 3=[compteur|nonce₀|nonce₁|nonce₂] (IETF). Quarter-round(a,b,c,d): a+=b; d^=a; d‹‹‹16; c+=d; b^=c; b‹‹‹12; a+=b; d^=a; d‹‹‹8; c+=d; b^=c; b‹‹‹7.

Double tour = quarter-round colonnes + diagonales. Rotations 16-12-8-7: diffusion complète en 2 tours (Salsa20: 4 tours). 10 doubles tours; sortie = XOR état transformé avec état initial.

AEAD : Chiffrement authentifié

ChaCha20-Poly1305 (RFC 8439): clé Poly1305 one-time dérivée des 32 premiers octets ChaCha20 (compteur=0); chiffrement à partir du compteur=1; MAC sur [AAD paddé||chiffré paddé||len(AAD)||len(chiffré)]; tag 16 octets.

XChaCha20-Poly1305: HChaCha20 dérive une sous-clé 256 bits des 128 premiers bits d'un nonce 192 bits + clé originale. 2^32 messages → probabilité collision 2^(-128). libsodium: crypto_aead_xchacha20poly1305_ietf_encrypt.

Caractéristiques principales

  • Meilleure diffusion que Salsa20: rotations 16-12-8-7 → diffusion complète en 2 tours (Salsa20: 4 tours). ChaCha20/8 ≈ Salsa20/16 en sécurité.
  • Standardisation IETF (RFC 8439, 2018): TLS 1.3, WireGuard, SSH, QUIC, Signal, Noise Protocol, Android TLS.
  • Performance sans AES-NI: 25-40% plus rapide qu'AES-GCM sur ARM Cortex-A53/A55, RISC-V, MIPS. Idéal IoT/mobile/embarqué.
  • Nonce 96 bits IETF: compteur 32 bits (max 256 Go/nonce). XChaCha20: 192 bits pour génération aléatoire sécurisée.
  • Aucune attaque connue sur ChaCha20/20 (2025). Meilleure analyse réduite: Shi et al. (2012) sur ChaCha20/6.

Considérations de sécurité

  • Réutilisation de nonce catastrophique en ChaCha20-Poly1305: XOR plaintexts exposé + clé Poly1305 révélée. TLS 1.3: nonce XOR numéro de séquence.
  • Limite compteur 32 bits: max 256 Go par (clé, nonce). TLS 1.3 re-keying via key_update avant dépassement.
  • Clé Poly1305 one-time: réutilisation nonce → réutilisation clé Poly1305 → attaque forgery (Bernstein 2005). RFC 8439 §2.8 prévient cela.
  • Tag tronqué interdit: RFC 8439 exige 16 octets. Troncature à 64 bits → résistance à 2^(-64), non conforme TLS 1.3.

Utilisation réelle

  • TLS 1.3 (RFC 8446): TLS_CHACHA20_POLY1305_SHA256 obligatoire. OpenSSL, BoringSSL, NSS, WolfSSL, mbedTLS.
  • WireGuard VPN: seul chiffre symétrique (Donenfeld 2017, Linux 5.6). Avec Curve25519, Poly1305, BLAKE2, SipHash.
  • Signal Protocol/Double Ratchet: ChaCha20-Poly1305 après X3DH. WhatsApp, Messenger secret, Matrix, Keybase.
  • OpenSSH chacha20-poly1305@openssh.com (6.5, 2014): deux instances ChaCha20 pour éliminer les fuites de timing.
  • Google Mobile TLS (2014): Langley+Duong. 3x plus rapide qu'AES-128-GCM sur Nexus 5 Cortex-A15. Influence IETF.

Références

Menu Rapide

Aucun outil récent