Estoy escribiendo una clase pequeña para agregar a mi aplicación que manejará cosas como los secretos de configuración. (No quiero entrar en este tema, ya que se han realizado muchas investigaciones sobre el enfoque que hemos decidido adoptar para esto).
Uno de los requisitos es cifrar los secretos de los archivos. (Piense en una clave de certificado TLS o una clave secreta PGP). Puedo generar (y descifrar) una clave secreta que se puede usar para cifrar / descifrar los archivos fuera de la aplicación mediante el servicio AWS KMS. (Vea esto para obtener información sobre lo que realmente devuelve: enlace )
Por lo tanto, a mi modo de ver, eso solo significa que necesito almacenar la versión cifrada de la clave junto con el archivo para poder descifrar la clave, usarla para descifrar el archivo cuando se usa.
Mi confusión proviene del uso de las funciones de cifrado / descifrado de openssl en los datos del archivo debido a la IV. He leído mucho sobre IV en los últimos días y entiendo su propósito general, pero me quedan varias preguntas que intentan conciliar esto con lo que veo en el "mundo real".
Cuando uso openssl desde una línea de comando para cifrar un archivo que he leído para usar esto:
openssl aes-256-cbc -salt -in secrets.txt -out secrets.txt.enc
Observe que no se ha pasado un IV, aunque el parámetro -salt puede tener un propósito similar.
Pero cuando descifro el mismo archivo, uso un comando como este:
openssl aes-256-cbc -d -in secrets.txt.enc -out secrets.txt.new
Observe que no hay ningún parámetro de sal, ningún IV ni nada de esa naturaleza, así que, ¿cómo puede descifrar el archivo sin esa información?
En las funciones de cifrado / descifrado de openssl en PHP, y otras discusiones en torno a IV, parece muy recomendable utilizar un IV al cifrar datos, lo que sugiere que necesito almacenar / usar el IV al descifrarlo también, pero esto no se está haciendo desde la línea de comandos, entonces, ¿cómo está funcionando? ¿Es la línea de comando de arriba menos segura para eso? ¿No necesito usar un IV basado en el hecho de que cada archivo tendrá su propia clave de cifrado segura?