Mi aplicación hace uso de la clase RijndaelManaged para encriptar datos. Como parte de este cifrado, uso un objeto SecureString cargado con una contraseña que get se convierte en una matriz de bytes y se carga en la clave del objeto administrado por Rajindael en el tiempo de ejecución.¿Almacenar de forma segura una contraseña en el código del programa?
La pregunta que tengo es el almacenamiento de este SecureString. Se puede ingresar una contraseña ingresada por el usuario en tiempo de ejecución, y eso puede cargarse "de forma segura" en un objeto SecureString, pero si no se ingresa una contraseña, el usuario debe establecer un valor predeterminado.
Así que en última instancia la quesiton se reduce a:
Si tengo que tener alguna conocida cadena o matriz de bytes para cargar en un objeto SecureString cada vez mis ejecuta la aplicación, ¿cómo puedo hacer eso? Los datos "encriptados" finalmente son descifrados por otra aplicación, por lo que incluso si ningún usuario ingresó una contraseña, aún necesito que los datos se cifren mientras pasa de una aplicación a otra. Esto significa que no puedo hacer que la contraseña predeterminada sea aleatoria, porque la otra aplicación no podrá descifrarla correctamente.
Una posible solución que estoy pensando es crear un dll que solo escupe una sola frase de contraseña, luego utilizo esa frase de contraseña y la ejecuto a través de un par de funciones de hashing/reorganización diferentes en tiempo de ejecución antes de alimentarlo finalmente objeto secureString ¿Sería esto lo suficientemente seguro?
Editar Para mayor claridad *: los datos cifrados se pasan a través de archivos entre máquinas. Piense en ello como un archivo Zip que siempre tiene una contraseña, se asume una predeterminada si el usuario no ingresa nada directamente.
He leído la pregunta como una alternativa a la codificación de la cadena en primer lugar. – Serapth
No es local para la máquina, los datos cifrados terminan en xml que luego se transfiere a una máquina diferente (sin embargo, no es posible la conexión directa). – Nick
+1 Estoy totalmente de acuerdo con Pidgin. – rook