Hace unos años, cuando me presentaron por primera vez a ASP.net y .NET Framework, construí un sistema de almacenamiento de archivos en línea muy simple. Este sistema utiliza el cifrado Rijndael para almacenar los archivos cifrados en el disco duro del servidor, y un HttpHandler para descifrar y enviar esos archivos al cliente.Encriptación AES y almacenamiento de claves?
Siendo uno de mis primeros proyectos con ASP.net y bases de datos, sin entender mucho sobre cómo funciona todo (además de caer en el same trap described by Jeff Atwood on this subject), decidí almacenar llaves y IVs recién generados junto con cada entrada de archivo en la base de datos.
Para hacer las cosas un poco más claras, el cifrado era solo para proteger los archivos del acceso directo al servidor, y las claves no se generaban mediante contraseñas ingresadas por el usuario.
Mi pregunta es, suponiendo que no quiero para mantener una clave para todos los archivos, cómo debería que almacenar claves de cifrado para la mejor seguridad? ¿Qué se considera la mejor práctica? (es decir: en un servidor diferente, en un archivo de texto sin formato, encriptado).
Además, ¿para qué sirve el vector de inicialización en este tipo de algoritmo de cifrado? ¿Debería ser constante en un sistema?
observación Menor : "AES es un cifrado de bloques, divide los datos en bloques y envía los resultados del último bloque de cifrado al bloque siguiente". Está describiendo [CBC] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28CBC.29) * a * método para usar AES de forma segura. Existen otras soluciones seguras, no todas requieren un vector de inicialización. – KovBal