Criptografia Salsa20
Cifra de fluxo de alta velocidade com variante de nonce estendido
Segurança do Lado do Cliente
Salsa20 é uma cifra ARX sem tabelas de pesquisa — intrinsecamente de tempo constante. Reutilização de nonce é catastrófica. Use XSalsa20 (nonce 192 bits) para geração aleatória segura.
Valor inicial do contador de bloco (geralmente 0 para criptografia, mesmo valor para descriptografia)
Sobre o Salsa20
Salsa20 é uma cifra de fluxo ARX projetada por Daniel J. Bernstein (2005). Opera sobre uma matriz 4×4 de palavras de 32 bits (estado 512 bits) com adição (mod 2³²), rotação e XOR apenas — sem S-boxes ou tabelas. O contador de fluxo de 64 bits permite acesso aleatório a qualquer posição do fluxo de chave.
Salsa20 foi selecionado para eSTREAM Profile 1 (software, 2008). XSalsa20 (Bernstein 2011) usa HSalsa20 para derivar uma subchave de 256 bits, habilitando geração aleatória de nonce sem risco de aniversário. Base do secretbox NaCl (XSalsa20-Poly1305).
Comparação de Algoritmos
| Algoritmo | Rodadas | Comprimento do Nonce | Velocidade | Melhor Uso |
|---|---|---|---|---|
| Salsa20/20 | 20 | 64 bits (8 bytes) | Padrão | Criptografia de sessão com nonces sequenciais; alto desempenho; implantações certificadas eSTREAM |
| Salsa20/12 | 12 | 64 bits (8 bytes) | Rápido | Alto desempenho com margem suficiente; recomendação Bernstein |
| Salsa20/8 | 8 | 64 bits (8 bytes) | Mais rápido | Apenas benchmarking e pesquisa |
| XSalsa20 | 20 | 192 bits (24 bytes) | Padrão | Aplicações com geração aleatória de nonce; compatibilidade NaCl/libsodium secretbox |
Como o Salsa20 Funciona
Salsa20 inicializa uma matriz 4×4: 4 constantes (“expand 32-byte k”), 8×32 bits da chave 256 bits, 2×32 bits contador de fluxo, 2×32 bits nonce.
Quarto de rodada em (a,b,c,d): b⊕=(a+d)‹‹7; c⊕=(b+a)‹‹9; d⊕=(c+b)‹‹13; a⊕=(d+c)‹‹18. Rodada dupla = coluna + diagonal. Salsa20/20 = 10 rodadas duplas. Saída = XOR do estado transformado com o inicial.
Contador 64 bits: 2⁶⁴ blocos × 64 bytes = 2⁷² bytes por (chave, nonce). Acesso aleatório via contador. Paralelização em blocos independentes de 64 bytes.
Variantes de Rodadas
- Salsa20/20 (20 rodadas): margem de segurança máxima, eSTREAM nominado, sem ataques de rodada completa. Recomendado para todas as aplicações críticas.
- Salsa20/12 (12 rodadas): ~35% mais rápido que /20, sem ataques conhecidos a 12 rodadas, recomendação de desempenho Bernstein.
- Salsa20/8 (8 rodadas): mais rápido, ataques reduzidos conhecidos (Aumasson 2008). Não recomendado para uso seguro. Apenas benchmarking.
Características Principais
- Projeto ARX: sem S-box nem tabelas. Tempo de execução independente de dados. Imunidade intrínseca a ataques de canal lateral de cache.
- Grande fluxo de chave: 2⁷² bytes por (chave, nonce) via contador 64 bits. Acesso aleatório sem reprocessamento.
- Nonce 64 bits: gerenciamento estrito de unicidade necessário. Após 2³² mensagens mesma chave, probabilidade de colisão não desprezível. Usar XSalsa20 (192 bits) para chaves de longa duração.
- XSalsa20 (nonce 192 bits, 2011): HSalsa20 deriva subchave para geração aleatória segura. Padrão secretbox NaCl.
- eSTREAM Profile 1 (software, 2008): avaliação pública 4 anos. Sem ataques em 12 ou 20 rodadas.
Considerações de Segurança
- Reutilização de nonce catastrófica: revela XOR dos plaintexts. Nonces únicos obrigatórios. XSalsa20 nonce 192 bits aleatório elimina risco de aniversário.
- Limite de aniversário nonce curto: nonce 64 bits → ~2³² mensagens antes de colisão ~50%. Usar XSalsa20 (192 bits).
- Ataques de rodadas reduzidas: nenhum sobre /20 ou /12. Salsa20/8: distinguidores conhecidos. Apenas /20 para usos críticos.
- Sem autenticação: usar XSalsa20-Poly1305 ou ChaCha20-Poly1305 para AEAD.
Uso no Mundo Real
- NaCl secretbox (XSalsa20-Poly1305): primitiva AEAD original do NaCl; nonce 192 bits + Poly1305; amplamente implantada via libsodium.
- eSTREAM Profile 1 (2008): Salsa20/12 selecionado na competição ECRYPT 2004-2008.
- Influência no ChaCha20: Bernstein projetou ChaCha20 (2008) como variante do Salsa20 com difusão melhorada por rodada.
- Sistemas legacy: ferramentas VPN, criptografia de arquivos, mensageiros libsodium usavam XSalsa20-Poly1305 antes de RFC 7539/8439.
Referências
Ferramentas Relacionadas
Criptografia ChaCha20
Cifra de fluxo moderna com ChaCha20, ChaCha20-Poly1305 AEAD e variantes XChaCha20
Criptografia/Descriptografia AES
Criptografe e descriptografe texto com segurança usando o algoritmo AES
Família RC (RC4/RC5/RC6)
Cifras de fluxo e bloco da família RC incluindo RC4, RC4-Drop, RC5 e RC6 (finalista AES)