CoderTools

Cifrado Salsa20

Cifrado de flujo de alta velocidad con variante de nonce extendido

Seguridad del lado del cliente

Salsa20 es un cifrado ARX sin tablas de búsqueda, intrínsecamente de tiempo constante. La reutilización de nonce es catastrófica. Use XSalsa20 (nonce 192 bits) para generación aleatoria segura.

Salsa20/20: 256 bits clave, nonce 64 bits, 20 rondas; eSTREAM Profile 1; 2⁷² bytes máx; sin ataques de ronda completa.

Valor inicial del contador de bloque (normalmente 0 para cifrado, mismo valor para descifrado)

Opciones de formato
🔒 100% Procesamiento localLos datos que introduce se procesan completamente en su navegador. No se envían a ningún servidor.

Acerca de Salsa20

Salsa20 es un cifrado de flujo ARX diseñado por Daniel J. Bernstein (2005). Opera sobre una matriz 4×4 de palabras de 32 bits (estado 512 bits) con adición (mod 2³²), rotación y XOR únicamente — sin S-boxes ni tablas. El contador de flujo de 64 bits permite acceso aleatorio a cualquier posición del flujo de clave.

Salsa20 fue seleccionado para eSTREAM Profile 1 (software, 2008). XSalsa20 (Bernstein 2011) usa HSalsa20 para derivar una subclave de 256 bits desde los primeros 128 bits de un nonce de 192 bits, habilitando generación aleatoria de nonce sin riesgo de cumpleaños. Fundamento del secretbox NaCl (XSalsa20-Poly1305).

Comparación de algoritmos

Algoritmo Rondas Longitud de Nonce Velocidad Mejor uso
Salsa20/20 20 64 bits (8 bytes) Estándar Cifrado de sesión con nonces sequenciales; alto rendimiento; despliegues certificados eSTREAM
Salsa20/12 12 64 bits (8 bytes) Rápido Alto rendimiento con margen suficiente; recomendación Bernstein
Salsa20/8 8 64 bits (8 bytes) Más rápido Solo benchmarking e investigación
XSalsa20 20 192 bits (24 bytes) Estándar Aplicaciones con generación aleatoria de nonce; compatibilidad NaCl/libsodium secretbox

Cómo funciona Salsa20

Salsa20 inicializa una matriz 4×4: 4 constantes (“expand 32-byte k”), 8×32 bits de la clave 256 bits, 2×32 bits contador de flujo, 2×32 bits nonce.

El cuarto de ronda sobre (a,b,c,d): b⊕=(a+d)‹‹7; c⊕=(b+a)‹‹9; d⊕=(c+b)‹‹13; a⊕=(d+c)‹‹18. Ronda doble = ronda columna + diagonal. Salsa20/20 = 10 rondas dobles. Salida = XOR del estado transformado con el estado inicial.

Contador 64 bits: 2⁶⁴ bloques × 64 bytes = 2⁷² bytes por (clave, nonce). Acceso aleatorio a cualquier posición. Paralelización posible en bloques de 64 bytes independientes.

Variantes de rondas

  • Salsa20/20 (20 rondas): máximo margen de seguridad, nominado eSTREAM, sin ataques de ronda completa. Recomendado para aplicaciones críticas.
  • Salsa20/12 (12 rondas): ~35% más rápido que /20, sin ataques conocidos a 12 rondas, recomendación de rendimiento Bernstein, primario eSTREAM portfolio.
  • Salsa20/8 (8 rondas): el más rápido, ataques reducidos conocidos (Aumasson 2008, 2²⁴⁹). No recomendado para uso seguro. Solo benchmarking.

Características principales

  • Diseño ARX: sin S-box ni tablas. Tiempo de ejecución independiente de datos. Inmunidad intrínseca a ataques de canal lateral de caché.
  • Gran flujo de clave: 2⁷² bytes por (clave, nonce) via contador 64 bits. Acceso aleatorio sin reprocesamiento.
  • Nonce 64 bits: gestión estricta requerida. Tras 2³² mensajes misma clave, probabilidad de colisión no despreciable. Usar XSalsa20 (192 bits) para claves de larga duración.
  • XSalsa20 (nonce 192 bits, 2011): HSalsa20 deriva subclave para generación aleatoria segura de nonce. Estándar secretbox NaCl.
  • eSTREAM Profile 1 (software, 2008): evaluación pública 4 años. Sin ataques en 12 o 20 rondas.

Consideraciones de seguridad

  • Reutilización de nonce catastrófica: revela XOR de plaintexts. Nonces únicos obligatorios. XSalsa20 nonce 192 bits aleatorio elimina riesgo de cumpleaños.
  • Límite de cumpleaños nonce corto: nonce 64 bits → ~2³² mensajes antes de colisión ~50%. Usar XSalsa20 (192 bits).
  • Ataques de rondas reducidas: ninguno sobre /20 o /12. Salsa20/8: distinguidores conocidos. Solo /20 para usos críticos.
  • Sin autenticación: usar XSalsa20-Poly1305 o ChaCha20-Poly1305 para AEAD.

Uso en el mundo real

  • NaCl secretbox (XSalsa20-Poly1305): primitiva AEAD original de NaCl, nonce 192 bits + Poly1305; ampliamente desplegada vía libsodium.
  • eSTREAM Profile 1 (2008): Salsa20/12 seleccionado en competición ECRYPT 2004-2008.
  • Influencia en ChaCha20: Bernstein diseñó ChaCha20 (2008) como variante de Salsa20 con difusión mejorada por ronda.
  • Sistemas legacy: herramientas VPN, cifrado de archivos, mensajería libsodium usaban XSalsa20-Poly1305 antes de RFC 7539/8439.

Referencias

Menú Rápido

Sin herramientas recientes