Salsa20

xifratges de flux desenvolupats per Daniel J. Bernstein

Salsa20 i el ChaCha estretament relacionat són xifratges de flux desenvolupats per Daniel J. Bernstein. Salsa20, el xifrat original, va ser dissenyat l'any 2005 i posteriorment enviat per Bernstein al procés de validació criptogràfica eSTREAM de la Unió Europea. ChaCha és una modificació de Salsa20 publicada el 2008. Utilitza una nova funció rodona que augmenta la difusió i augmenta el rendiment en algunes arquitectures.[1]

Funció de salsa rodona
Salsa20 quarterround

Tots dos xifratges es basen en una funció pseudoaleatoria basada en operacions d'addició-rotació-XOR (ARX): addició de 32 bits, addició per bits (XOR) i operacions de rotació. La funció bàsica mapeja una clau de 256 bits, un nonce de 64 bits i un comptador de 64 bits a un bloc de 512 bits del flux de claus (també existeix una versió Salsa amb una clau de 128 bits). Això dóna a Salsa20 i ChaCha l'avantatge inusual que l'usuari pot buscar de manera eficient qualsevol posició del flux clau en temps constant. Salsa20 ofereix velocitats d'entre 4 i 14 cicles per byte en programari en processadors x86 moderns [2] i un rendiment de maquinari raonable. No està patentat i Bernstein ha escrit diverses implementacions de domini públic optimitzades per a arquitectures comunes.[3]

Estructura modifica

Internament, el xifrat utilitza addició bit a bit ⊕ (OR exclusiu), addició mod 232 ⊞ de 32 bits i operacions de rotació a distància constant <<< en un estat intern de setze paraules de 32 bits. L'ús només d'operacions d'afegir-rotar-xor evita la possibilitat de cronometrar atacs en les implementacions de programari. L'estat intern està format per setze paraules de 32 bits disposades com una matriu de 4×4.

0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
 
Salsa20 ChaCha variant

Estàndards d'Internet modifica

S'ha publicat una referència d'implementació de ChaCha20 a RFC 739. La implementació de l'IETF va modificar l'algoritme publicat de Bernstein canviant el comptador de blocs de 64 bits i nonce de 64 bits a un comptador de blocs de 96 bits i de 32 bits.[4] El nom no es va canviar quan es va modificar l'algorisme, ja que és criptogràficament insignificant (tots dos formen el que un criptògraf reconeixeria com un nonce de 128 bits), però el canvi d'interfície podria ser una font de confusió per als desenvolupadors. A causa del comptador de blocs reduït, la longitud màxima del missatge que es pot xifrar amb seguretat per la variant de l'IETF és de 232 blocs de 64 bytes (256 GiB). Per a aplicacions on això no és suficient, com ara el xifratge de fitxers o discs,  proposa utilitzar l'algorisme original amb nonce de 64 bits.

Referències modifica

  1. «Salsa20 specification» (en anglès). [Consulta: 16 maig 2024].
  2. Daniel J. Bernstein. «Snuffle 2005: the Salsa20 encryption function» (en anglès), 16-05-2013.
  3. «Salsa20: Software speed» (en anglès), 11-05-2007.
  4. «ChaCha20 and Poly1305 for IETF protocols» (en anglès). [Consulta: 7 agost 2017].