title: Salsa20
text: # Salsa20
  
  Salsa20 est un chiffrement de flux proposé au projet eSTREAM par Daniel Bernstein. Il est architecturé autour d'une fonction pseudo-aléatoire basée sur des opérations d'addition sur 32 bits, d'addition exclusive (XOR) et de rotations sur les bits, qui transforme une clé de 256 bits, un nombre pseudo aléatoire de 64 bits, et une position de flux sur 64 bits en un bloc de données en sortie de 512 bits. Cela donne la possibilité à l'utilisateur de se positionner n'importe où dans le flux de sortie. Ses performances sont de 8 à 14 cycles par octet sur les microprocesseurs modernes d'architecture x86, et raisonnables par ailleurs en mode hardware. Ce procédé n'est pas breveté et Bernstein a écrit de nombreuses mises en œuvre pour le domaine public, optimisées pour les architectures courantes.
  
  La méthode et famille de chiffrement ChaCha, qui a des fonctionnalités similaires, mais une fonction de tour à tour différente, est proposé par Bernstein en 2008 et améliore ses performances. C'est un standard proposé en juin 2016 à IETF pour TLS sous le RFC7905.
  
  ## Fonctionnement
  
  Le fonctionnement interne du chiffrement, à base d'opérations binaires et de rotations sur 16 mots de 32 bits, évite les possibilités d'attaque temporelle dans les mises en œuvre logicielles.
  
  Salsa20 accomplit 20 étapes de mélange de ses données en entrée ; cependant des versions réduites existent sous les appellations de Salsa20/8 et Salsa20/12 utilisant, respectivement, 8 et 12 étapes initiales. Ces variantes furent introduites pour compléter l'offre du Salsa20 originel, déjà performant, afin d'être plus compétitif pour les tests au banc d'essai du projet eSTREAM.
  
  ## Historique
  
  En 2005, Paul Crowley exposa une attaque par cryptanalyse différentielle en $2^{165}$ opérations sur Salsa20/5 et remporta le prix de 1 000 dollars de « la cryptanalyse la plus intéressante de Salsa20 ». En 2006, Fischer, Meier, Berbain, Biasse et Robshaw montrèrent une attaque en $2^{177}$ opérations sur Salsa20/6.
  
  Salsa20 a été sélectionné en phase 2 en vue d'approfondissement (Phase 2 Focus) pour la partie logicielle (profile 1) et en phase 2 pour la partie matérielle (profile 2) du projet eSTREAM.
  
  Aucune cryptanalyse n'a encore été reconnue sur Salsa20, Salsa20/12 ou Salsa20/8, en cette fin d'année 2006.
  
  ## Chacha
  
  La famille de chiffrement Chacha est dérivée de Salsa 20. Elle améliore la diffusion par tour en proposant des performances similaires voire légèrement supérieures. Différents tests de la suite de bancs d'essais d'eSTREAM ont été diffusés en 2008, concernant Chacha8, Chacha12 et Chacha20. Elle a été proposée sous le nom ChaCha20-Poly1305 à l'IETF en juin 2016 via la RFC7539 puis rendu obsolète par la RFC8439 publié en juin 2018.
  
  