¿Qué es Nonce?
Un nonce (number used once, número usado una sola vez) es un valor único, normalmente aleatorio o secuencial, que se usa exactamente una vez en una operación criptográfica para garantizar que entradas idénticas produzcan salidas diferentes, evitando los ataques de repetición y el análisis de patrones.
También conocido como: number used once, cryptographic nonce
Si cifras el mismo texto plano con la misma clave y sin nonce, obtienes un texto cifrado idéntico cada vez. Un atacante que observe varios mensajes podría detectar patrones: los textos cifrados idénticos revelan que se envió el mismo mensaje, incluso sin descifrarlo. Un nonce elimina este problema introduciendo un valor único en cada operación de cifrado, garantizando que el mismo texto plano cifrado con la misma clave produzca siempre un texto cifrado diferente.
Los requisitos de seguridad de los nonces varían según el algoritmo. Algunos algoritmos (como AES-GCM) exigen que un nonce nunca se reutilice con la misma clave: la reutilización puede comprometer de forma catastrófica tanto la confidencialidad como la autenticación. Para estos algoritmos, los nonces aleatorios deben ser lo bastante grandes como para que una colisión accidental sea insignificantemente improbable. Un nonce aleatorio de 96 bits (como el que se usa en AES-GCM) proporciona suficiente resistencia a colisiones para hasta aproximadamente 2^32 cifrados bajo una sola clave.
Los nonces aparecen a lo largo de los protocolos criptográficos bajo distintos nombres. En AES-GCM se llaman vectores de inicialización, en la autenticación de desafío-respuesta son desafíos y en la blockchain son nonces de minería. El denominador común es la unicidad: el valor no debe repetirse dentro del contexto en el que se usa.
Cómo usa Vaulted Nonce
Cada secreto cifrado con Vaulted usa un nonce aleatorio único de 12 bytes (96 bits), generado por el generador de números aleatorios criptográficamente seguro de la Web Crypto API. Este nonce sirve como vector de inicialización para el cifrado AES-256-GCM. Se almacena junto al texto cifrado en el servidor y se transmite al destinatario para el descifrado. Como cada secreto usa un par de clave y nonce recién generado, la reutilización del nonce no es una preocupación práctica ni siquiera a escala.