O que é um nonce? Um número usado uma única vez
Um nonce é um número usado uma única vez, um valor incluído em uma requisição ou mensagem para garantir que ela seja recente e não possa ser reproduzida.
Um nonce, abreviação de "number used once" (número usado uma vez), é um primitivo de segurança simples, mas poderoso. Ao incluir um valor único e imprevisível em uma requisição ou operação criptográfica, os sistemas garantem que cada troca seja recente e que uma mensagem capturada não possa ser reproduzida. Nonces aparecem em protocolos de autenticação, políticas de segurança de conteúdo e esquemas de criptografia.
O problema do replay
Se um atacante captura uma requisição válida, ele pode reenviá-la para repetir uma ação, como um pagamento ou um login. Um nonce derrota isso: como cada requisição carrega um valor único que o servidor ainda não viu, uma requisição reproduzida é reconhecida e rejeitada.
Onde os nonces aparecem
- Handshakes de autenticação, para prevenir credenciais reproduzidas.
- Content Security Policy, para autorizar scripts inline específicos.
- Modos de criptografia, onde um nonce único mantém o texto cifrado imprevisível.
Nonces em criptografia
Muitos modos de criptografia exigem um nonce único por mensagem, de modo que criptografar o mesmo texto plano duas vezes não produza texto cifrado idêntico. Reutilizar um nonce nesses esquemas pode quebrar a criptografia de forma catastrófica, por isso a unicidade é inegociável.
Nonces em CSP
Uma Content Security Policy pode usar um nonce por resposta para permitir um script inline específico enquanto bloqueia todos os outros. O servidor gera um nonce novo a cada vez e o anexa à tag de script confiável, de modo que scripts injetados sem o nonce são recusados.
Nonces e CI/CD
Aplicações web que você constrói e implanta podem depender de nonces para CSP e proteção contra replay. Gerá-los corretamente (únicos, imprevisíveis, nunca reutilizados) faz parte da programação segura, e testes de segurança no CI podem verificar se os nonces de CSP são aplicados como esperado.
Acertando os nonces
Um nonce deve ser imprevisível e genuinamente único para seu escopo. Nonces previsíveis ou reutilizados minam a própria proteção que fornecem. Use uma fonte aleatória criptograficamente segura, nunca um contador que um atacante possa adivinhar.
Principais conclusões
- Um nonce é um valor único que garante atualidade e previne replay.
- Ele é usado em autenticação, CSP e modos de criptografia.
- Nonces devem ser imprevisíveis e nunca reutilizados, ou falham em seu propósito.