Tenemos la mejor información que descubrimos en línea. Queremos que te resulte útil y si deseas aportar algo que nos pueda ayudar a crecer hazlo con libertad.
Solución:
Como puede ver en las otras respuestas, tener un IV único por archivo cifrado es crucial, pero ¿por qué?
Primero, revisemos por qué es importante un IV único por archivo cifrado. (Wikipedia en IV). El IV agrega aleatoriedad al inicio de su proceso de encriptación. Cuando se usa un modo de encriptación de bloques encadenados (donde un bloque de datos encriptados incorpora el bloque anterior de datos encriptados), nos queda un problema con respecto al primer bloque, que es donde entra el IV.
Si no tuviera IV y usara encriptación de bloques encadenados solo con su key, dos archivos que comienzan con texto idéntico producirán primeros bloques idénticos. Si los archivos de entrada cambiaron a la mitad, entonces los dos archivos encriptados comenzarían a verse diferentes desde ese punto y hasta el final del archivo encriptado. Si alguien notó la similitud al principio y supo con qué comenzó uno de los archivos, podría deducir con qué comenzó el otro archivo. Saber con qué comenzó el archivo de texto sin formato y cuál es su texto cifrado correspondiente podría permitirle a esa persona determinar el key y luego descifrar todo el archivo.
Ahora agregue el IV: si cada archivo usara un IV aleatorio, su primer bloque sería diferente. El escenario anterior se ha frustrado.
Ahora, ¿qué pasaría si el IV fuera el mismo para cada archivo? Bueno, tenemos el escenario del problema de nuevo. El primer bloque de cada archivo se cifrará con el mismo resultado. En la práctica, esto no es diferente de no usar la IV en absoluto.
Así que ahora vayamos a las opciones propuestas:
Opción 1. Incruste el IV codificado en la aplicación y guarde el key en el key expediente.
Opción 2. Incrustar codificado key dentro de la aplicación y guardar el IV en el key expediente.
Estas opciones son prácticamente idénticas. Si dos archivos que comienzan con el mismo texto producen archivos cifrados que comienzan con el mismo texto cifrado, está perdido. Eso sucedería en ambas opciones. (Asumiendo que hay un maestro key utilizado para cifrar todos los archivos).
Opción 3. Guarde ambos key y el IV en el key expediente.
Si usas un aleatorio IV para cada key archivo, eres bueno. No dos key los archivos serán idénticos, y cada archivo encriptado debe tener su key expediente. Una diferente key archivo no funcionará.
PD: una vez que elija la opción 3 y los IV aleatorios, comience a investigar cómo determinará si el descifrado fue exitoso. Tomar un key archivo de un archivo e intente usarlo para descifrar un archivo de cifrado diferente. Puede descubrir que el descifrado continúa y produce resultados basura. Si esto sucede, comience a investigar sobre el cifrado autenticado.
Lo importante de una IV es nunca debes usar el mismo IV para dos mensajes. Todo lo demás es secundario: si puede garantizar la singularidad, la aleatoriedad es menos importante (¡pero sigue siendo algo muy bueno!). El IV no necesita ser (y de hecho, en modo CBC no poder ser) secreto.
Como tal, no debe guardar el IV junto con el key – eso implicaría que usa el mismo IV para cada mensaje, lo que anula el punto de tener un IV. Por lo general, simplemente antepondría el IV al encriptado archivo, en claro.
Si va a implementar sus propios modos de cifrado como este, lea los estándares relevantes. El NIST tiene un buen documento sobre modos de cifrado aquí: http://dx.doi.org/10.6028/NIST.SP.800-38A La generación IV está documentada en el Apéndice C. La criptografía es un arte sutil. No caiga en la tentación de crear variaciones de los modos de cifrado normales; El 99% de las veces crearás algo que mira más seguro, pero es Realmente menos seguro.
Cuando usa un IV, lo más importante es que el IV debe ser lo más único posible, por lo que en la práctica debe usar un IV aleatorio. Esto significa que incrustarlo en su aplicación no es una opción. Yo guardaría el IV en el datos archivo, ya que no daña la seguridad siempre que el IV sea aleatorio/único.
Eres capaz de añadir valor a nuestro contenido contribuyendo tu experiencia en las interpretaciones.