Chiffrement Salsa20
Chiffrement par flot haute vitesse avec variante nonce étendu
Sécurité côté client
Salsa20 est un chiffre ARX sans tables de recherche, intrinsèquement à temps constant. La réutilisation de nonce est catastrophique. Utilisez XSalsa20 (nonce 192 bits) pour une génération de nonce aléatoire sécurisée.
Valeur initiale du compteur de bloc (généralement 0 pour le chiffrement, même valeur pour le déchiffrement)
À propos de Salsa20
Salsa20 est un chiffre de flux ARX conçu par Daniel J. Bernstein (2005). Il opère sur une matrice 4×4 de mots 32 bits (état total 512 bits) via addition (mod 2³²), rotation et XOR uniquement — sans S-box ni table de recherche. Le compteur de flux 64 bits permet un accès aléatoire à n'importe quelle position du flux de clé.
Salsa20 a été sélectionné pour eSTREAM Profile 1 (logiciel, 2008). XSalsa20 (Bernstein 2011) utilise HSalsa20 pour dériver une sous-clé de 256 bits depuis les 128 premiers bits d'un nonce 192 bits, permettant une génération aléatoire de nonce sans risque d'anniversaire. C'est la base du secretbox NaCl (XSalsa20-Poly1305).
Comparaison des algorithmes
| Algorithme | Tours | Longueur du nonce | Vitesse | Meilleur usage |
|---|---|---|---|---|
| Salsa20/20 | 20 | 64 bits (8 bytes) | Standard | Chiffrement session à nonces séquentiels; flux haute performance; déploiements certifiés eSTREAM |
| Salsa20/12 | 12 | 64 bits (8 bytes) | Rapide | Haute performance avec marge de sécurité suffisante; recommandation Bernstein |
| Salsa20/8 | 8 | 64 bits (8 bytes) | Le plus rapide | Benchmarking et recherche uniquement |
| XSalsa20 | 20 | 192 bits (24 bytes) | Standard | Applications à génération aléatoire de nonce; compatibilité NaCl/libsodium secretbox |
Comment fonctionne Salsa20
Salsa20 initialise une matrice 4×4 : 4 constantes (“expand 32-byte k”), 8×32 bits de la clé 256 bits, 2×32 bits compteur de flux, 2×32 bits nonce.
Le quart-tour sur (a,b,c,d): b⊕=(a+d)‹‹7; c⊕=(b+a)‹‹9; d⊕=(c+b)‹‹13; a⊕=(d+c)‹‹18. Un double tour = tour colonne + tour diagonal. Salsa20/20 = 10 doubles tours. Sortie = XOR de l'état transformé avec l'état initial.
Compteur 64 bits : 2⁶⁴ blocs × 64 octets = 2⁷² octets par (clé, nonce). Accès aléatoire à toute position. Parallélisation possible par blocs de 64 octets indépendants.
Variantes de tours
- Salsa20/20 (20 tours): marge de sécurité maximale, eSTREAM nominé, aucune attaque plein-tour connue. Recommandé pour toutes les applications critiques.
- Salsa20/12 (12 tours): ~35% plus rapide que /20, aucune attaque connue à 12 tours, recommandation de performance Bernstein, eSTREAM portfolio primaire.
- Salsa20/8 (8 tours): le plus rapide, attaques réduites connues (Aumasson 2008, 2²⁴⁹). Non recommandé pour les usages sécurisés. Benchmarking uniquement.
Caractéristiques principales
- Conception ARX : aucune S-box ni table. Temps d'exécution indépendant des données. Immunité intrinsèque aux attaques par canal auxiliaire de cache.
- Grand flux de clé : 2⁷² octets par (clé, nonce) via compteur 64 bits. Accès aléatoire à toute position sans retraitement.
- Nonce 64 bits (base Salsa20) : gestion stricte requise. Après 2³² messages même clé, probabilité de collision non négligeable. Utiliser XSalsa20 (192 bits) pour les clés longue durée.
- XSalsa20 (nonce 192 bits, 2011) : HSalsa20 dérive une sous-clé permettant une génération aléatoire de nonce. Standard secretbox NaCl.
- eSTREAM Profile 1 (logiciel, 2008): évaluation publique 4 ans. Sans attaque sur 12 ou 20 tours.
Considérations de sécurité
- Réutilisation de nonce catastrophique : révèle le XOR des plaintexts. Nonces uniques obligatoires. XSalsa20 à nonce 192 bits aléatoire élimine le risque d'anniversaire.
- Limite anniversaire nonce court : nonce 64 bits → ~2³² messages avant collision ~50%. Utiliser XSalsa20 (192 bits).
- Attaques sur tours réduits : aucune sur /20 ou /12. Salsa20/8 : distingueurs connus (Aumasson 2008). Seul /20 pour les usages critiques.
- Pas d'authentification : utiliser XSalsa20-Poly1305 ou ChaCha20-Poly1305 pour l'AEAD.
Utilisation réelle
- NaCl secretbox (XSalsa20-Poly1305) : primitive AEAD d'origine de NaCl, nonce 192 bits + authentication Poly1305 ; largement déployée via libsodium.
- eSTREAM Profile 1 (2008) : Salsa20/12 sélectionné comme chiffre logiciel principal lors de la compétition ECRYPT 2004-2008.
- Influence sur ChaCha20 : Bernstein a conçu ChaCha20 (2008) comme variante de Salsa20 avec diffusion améliorée par tour.
- Systèmes legacy : nombreux outils VPN, chiffrement de fichiers, messageries libsodium utilisaient XSalsa20-Poly1305 avant RFC 7539/8439. Encore supporté.
Références
Outils Connexes
Chiffrement ChaCha20
Chiffrement en flux moderne avec ChaCha20, ChaCha20-Poly1305 AEAD et variantes XChaCha20
Cryptage/Décryptage AES
Crypter et décrypter du texte en toute sécurité à l'aide de l'algorithme AES
Famille RC (RC4/RC5/RC6)
Chiffrements en flux et par blocs de la famille RC incluant RC4, RC4-Drop, RC5 et RC6 (finaliste AES)