¿Qué es Vector de inicialización?
Un vector de inicialización (IV) es un valor aleatorio o pseudoaleatorio que se usa como entrada adicional de un algoritmo de cifrado junto a la clave, garantizando que un texto plano idéntico cifrado con la misma clave produzca un texto cifrado diferente en cada operación.
También conocido como: IV, initialisation vector
Un vector de inicialización cumple el mismo propósito fundamental que un nonce: introduce unicidad en cada operación de cifrado. Los términos se usan a menudo de forma intercambiable, aunque «IV» es más común en el contexto de los modos de cifrado de bloque (CBC, GCM, CTR), mientras que «nonce» se usa de forma más amplia. En AES-GCM en concreto, el IV es un valor de 12 bytes que inicializa el contador utilizado en el modo Galois/Counter.
El IV no necesita ser secreto: normalmente se almacena o transmite en texto plano junto al texto cifrado. Su contribución a la seguridad proviene de la unicidad, no del secreto. Sin embargo, dependiendo del modo de cifrado, el IV puede necesitar ser impredecible (como en el modo CBC) o simplemente único (como en el modo GCM). Usar un IV predecible con el modo CBC habilita ataques específicos, mientras que GCM solo requiere que el IV nunca se reutilice con la misma clave.
La reutilización del IV con AES-GCM es catastrófica: permite a un atacante recuperar la clave de autenticación y falsificar textos cifrados válidos, y filtra información sobre el texto plano a través del XOR de los dos flujos de texto cifrado. Por eso las implementaciones deben usar un generador de números aleatorios criptográficamente seguro para la generación del IV y nunca deben construir ni reutilizar IV manualmente.
Cómo usa Vaulted Vector de inicialización
Vaulted genera un IV nuevo de 12 bytes usando crypto.getRandomValues() de la Web Crypto API para cada secreto. El IV se envía al servidor junto al texto cifrado y se almacena en Redis como parte del registro cifrado. Cuando el destinatario recupera el secreto, el IV se devuelve junto al texto cifrado para que el navegador pueda reconstruir los parámetros de descifrado de AES-256-GCM. Como Vaulted también genera una clave única por secreto, el par clave-IV es siempre único.