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
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)