Podemos descifrar un archivo cifrado con la contraseña correcta. Pero, ¿cómo puede saber el vector de inicialización correcto durante el descifrado? ¿No se genera aleatoriamente durante el cifrado?
OpenPGP realmente no usa un vector de inicialización (se define como todo a cero). En su lugar, utiliza un bloque de datos aleatorios posteriormente, que asume la función del vector de inicialización en el modo OpenPGP CFB específico de OpenPGP.
De RFC 4880, OpenPGP, 13.9. Modo OpenPGP CFB :
El modo OpenPGP CFB usa un vector de inicialización (IV) de todos los ceros, y prefija el texto sin formato con BS + 2 octetos de datos aleatorios, de modo que los octetos BS + 1 y BS + 2 coinciden con los octetos BS-1 y BS. Hace un CFB resincronización después de cifrar esos octetos BS + 2.
Con otras palabras: con cada mensaje cifrado se incluye una construcción similar al vector de inicialización, mientras que el vector de inicialización se define como constante. Así que sí, algo así como el vector de inicialización se genera durante el cifrado, pero se almacena en los encabezados de cifrado y se utiliza para el descifrado.
Hecho de lado: la repetición de algunos octetos permite la detección temprana de claves de sesión incorrectas, ya que se usa cuando se intenta descifrar un mensaje sin un destinatario denotado (utilizando esta técnica, las implementaciones de OpenPGP pueden omitir las claves no coincidentes antes de descifrar el mensaje completo). Por otro lado, se abre para un ataque de texto cifrado elegido esotérico como lo describe Mister an Zuccherato ( An Attack en el cifrado de modo CFB utilizado por OpenPGP ). Uno de los principios criptográficos básicos se rompe aquí: no se repita, podría abrir vectores de ataque inesperados.
En el momento del cifrado, el IV se almacena junto al texto cifrado.
Lea otras preguntas en las etiquetas encryption gnupg pgp openpgp