(Nota: originalmente publicado en SO: se recomienda publicar en SSE)
Con respecto al cifrado de Rijndael, ¿cuáles (si las hay) son las mejores prácticas (y las consecuencias) con respecto a la modificación periódica de uno o más de estos valores (específicamente en una aplicación web de C # .NET):
- sal
- Vector de inicialización (IV)
- frase de paso
¿Es una práctica común (o de hecho es necesario) cambiar alguno de estos valores durante la vida útil de una aplicación? (Por ejemplo, si uno o más están comprometidos, o simplemente como parte de una política general).
Si es así, ¿cuál será el impacto sobre los datos existentes en una base de datos que se cifró con los valores originales (anteriores)? Al cambiar estos valores, se podría pensar que el descifrado de los datos existentes ya no "funcionará" (¿o devolverá información falsa?).
(Imagino que el alcance de esta pregunta podría incluir la forma en que se almacenan tales valores, por ejemplo, utilizando mecanismos de almacenamiento de terceros o seguros), por lo que inicialmente digamos que los valores mencionados anteriormente se almacenan actualmente en texto sin formato en una clase. nombrado RijndaelCryptography, y continuar desde allí.)
Para ilustrar mi pregunta, consulte el siguiente enlace: Cómo: Encriptar y descifrar datos usando una clave simétrica (Rijndael) (C # / VB.NET)
¿Es este ejemplo en particular una buena práctica (arreglar el pase / sal / IV a nivel de código)?
Actualización 1
- Se eliminó "AES" de la pregunta.
Actualización 2
- Leí que Microsoft recomienda utilizar AES en lugar de Rijndael:
"La clase Rijndael es la antecesora del algoritmo Aes. Debe usar el algoritmo Aes en lugar de Rijndael. Para obtener más información, consulte la entrada Las diferencias entre Rijndael y AES en el blog de seguridad de .NET". ( Enlace : vea hasta la mitad de la página)