Cifrado Salsa20
Cifrado de flujo de alta velocidad con variante de nonce extendido
Seguridad del lado del cliente
Todas las operaciones de cifrado y descifrado se realizan localmente en su navegador. Ningún dato se envía jamás a ningún servidor.
Valor inicial del contador de bloque (normalmente 0 para cifrado, mismo valor para descifrado)
Acerca de Salsa20
Salsa20 es un cifrado de flujo diseñado por Daniel J. Bernstein en 2005. Utiliza una clave de 256 bits y un nonce de 64 bits para generar un flujo de claves que se XOR con el texto plano para producir el texto cifrado. El cifrado está diseñado para alto rendimiento en implementaciones de software.
Salsa20 fue presentado al proyecto eSTREAM y seleccionado como finalista en el perfil de software. Forma la base de la familia de cifrados ChaCha.
Comparación de algoritmos
| Algoritmo | Rondas | Longitud de Nonce | Velocidad | Mejor uso |
|---|---|---|---|---|
| Salsa20/20 | 20 | 64 bits (8 bytes) | Estándar | Cifrado general, alta seguridad |
| Salsa20/12 | 12 | 64 bits (8 bytes) | Rápido | Aplicaciones críticas de rendimiento |
| Salsa20/8 | 8 | 64 bits (8 bytes) | Más rápido | Escenarios de máxima velocidad |
| XSalsa20 | 20 | 192 bits (24 bytes) | Estándar | Nonce aleatorio, NaCl/libsodium |
Cómo funciona Salsa20
Salsa20 opera en una matriz 4×4 de palabras de 32 bits (512 bits en total). El estado inicial consiste en la clave (256 bits), nonce (64 bits), contador (64 bits) y cuatro palabras constantes que forman la cadena 'expand 32-byte k'.
La función principal aplica 20 rondas de la operación quarterround, que utiliza solo operaciones de suma-rotación-XOR (ARX). Esto hace que Salsa20 sea eficiente en software y resistente a ataques de tiempo.
XSalsa20 extiende el nonce a 192 bits usando HSalsa20, una variante que deriva una subclave de los primeros 128 bits del nonce, dejando 64 bits para el nonce real. Esto permite la generación segura de nonce aleatorio.
Variantes de rondas
- Salsa20/20 (20 rondas) - La variante estándar que proporciona margen de seguridad completo. Recomendado para la mayoría de las aplicaciones.
- Salsa20/12 (12 rondas) - Selección del portafolio eSTREAM. Proporciona buen equilibrio entre velocidad y seguridad.
- Salsa20/8 (8 rondas) - Variante más rápida. Sin ataques prácticos conocidos, pero margen de seguridad reducido.
Características principales
- Alto rendimiento: Optimizado para software, logrando 3-4 ciclos por byte en CPUs modernos
- Diseño simple: Solo usa operaciones ARX, fácil de implementar sin tablas de búsqueda
- Tiempo constante: Resistente a ataques de canal lateral de tiempo de caché
- Contador grande: El contador de 64 bits permite cifrar hasta 2^70 bytes por par clave-nonce
- Nonce extendido: El nonce de 192 bits de XSalsa20 permite generación de nonce aleatorio
Consideraciones de seguridad
- Nunca reutilice un nonce con la misma clave - esto rompe completamente la seguridad
- Salsa20 proporciona solo cifrado, no autenticación - combine con Poly1305 para AEAD
- Para nonces aleatorios, use XSalsa20 para minimizar la probabilidad de colisión
- Use un KDF apropiado (HKDF, Argon2) para derivar claves de contraseñas
Uso en el mundo real
- NaCl/libsodium: XSalsa20-Poly1305 es la construcción AEAD predeterminada
- Herramientas de cifrado: Muchas utilidades de cifrado de archivos usan variantes de Salsa20
- Administradores de contraseñas: Algunos usan Salsa20 para cifrar credenciales almacenadas
- Motores de juegos: Usado para cifrado rápido en juegos en red
Referencias
- D.J. Bernstein - Especificación de Salsa20
- Proyecto eSTREAM - Portafolio de cifrado de flujo
- Wikipedia - Salsa20
- NaCl - Biblioteca de redes y criptografía
Preguntas frecuentes
¿Cuál es la diferencia entre Salsa20 y ChaCha20?
ChaCha20 es una modificación de Salsa20 con mejor difusión por ronda. ChaCha20 logra mejor seguridad por ronda, por eso se convirtió en el estándar IETF. Para nuevos proyectos, generalmente se prefiere ChaCha20.
¿Qué variante de rondas debería usar?
Use Salsa20/20 para máxima seguridad. Salsa20/12 es un buen equilibrio entre velocidad y seguridad. Solo use Salsa20/8 cuando el rendimiento es absolutamente crítico y su modelo de amenazas permite un margen de seguridad reducido.
¿Cuándo debería usar XSalsa20?
Use XSalsa20 cuando necesite generar nonces aleatorios. Su espacio de nonce de 192 bits hace que las colisiones sean virtualmente imposibles con generación aleatoria. El nonce de 64 bits del Salsa20 estándar requiere gestión cuidadosa del contador.
¿Es seguro Salsa20 sin autenticación?
Salsa20 solo proporciona confidencialidad, no integridad. Un atacante puede modificar el texto cifrado sin detección. Siempre combine con Poly1305 u otro MAC para cifrado autenticado.
¿Puedo usar esta herramienta en producción?
Esta herramienta es para propósitos educativos y de desarrollo. Aunque la implementación sigue la especificación, los sistemas de producción deberían usar bibliotecas criptográficas bien auditadas como libsodium, OpenSSL o APIs proporcionadas por la plataforma.
Herramientas Relacionadas
Cifrado ChaCha20
Cifrado de flujo moderno con ChaCha20, ChaCha20-Poly1305 AEAD y variantes XChaCha20
Cifrado/Descifrado AES
Cifrar y descifrar texto de forma segura usando el algoritmo AES
Familia RC (RC4/RC5/RC6)
Cifrados de flujo y bloque de la familia RC incluyendo RC4, RC4-Drop, RC5 y RC6 (finalista AES)