Reutilizar un IV es una mala idea. Cada modo de encriptación tiene sus propios requisitos para la administración de IV, pero para la mayoría de ellos, las consecuencias de la reutilización de IV varían desde problemáticas hasta mortales. No hagas eso.
El método "normal" es usar una sola clave y un IV por registro: cada elemento cifrado obtendrá su propio IV, que se almacenará a lo largo del resultado del cifrado. Generar tanto la clave como la IV a partir de un secreto global y una "sal" por registro generalmente funciona (da como resultado una IV pseudoaleatoria, que está bien para la mayoría de los modos de encriptación), pero agrega complejidad, que es, en sí misma, algo malo. p>
Hacer el cifrado correctamente es un arte difícil, especialmente porque en la mayoría de los contextos que requieren cifrado, también se debe verificar la integridad. Su mejor apuesta sería un modo de encriptación autenticada , básicamente, GCM . GCM toma como entradas:
- Se recomienda un IV de tamaño nominalmente arbitrario, pero se recomienda un IV de 12 bytes.
- Una clave adecuada para AES (128, 192 o 256 bits)
- El mensaje m para cifrar.
La salida consiste entonces en c , el cifrado de m (con el mismo tamaño exacto), y t , la "etiqueta de autenticación ", que tiene el mismo tamaño que un bloque AES (128 bits, es decir, 16 bytes). Lo que luego debes almacenar es el IV, la salida encriptada c y t .
Al descifrar, el motor de descifrado usará el IV y c , y producirá t nuevamente, que luego tendrá que comparar con el t para ver si hay alteraciones.
Lo bueno de GCM es que el único requisito para la IV es no reutilizar . No es necesario que la IV sea aleatoria o impredecible, pero NO DEBE volver a utilizar la misma IV dos veces. Puede usar una marca de tiempo o un contador o un índice de fila de la base de datos, siempre que se asegure de no volver a utilizar un valor IV.