configuration - tipos - Almacenamiento de claves de encriptación: ¿mejores prácticas?
metodos de encriptacion y desencriptacion (5)
¿Es posible ingresar una contraseña interactivamente cada vez que se inicia la aplicación? De esta manera, no tiene que almacenar la clave, o al menos cualquier clave (ya sean simétricas o privadas) se puede cifrar con esta contraseña de "arranque".
De lo contrario, almacene su clave secreta en un archivo y modifique sus permisos para que sea accesible solo para el usuario que ejecuta la aplicación web.
Estos enfoques son independientes de la plataforma. Para sugerencias más concretas, la información sobre su plataforma sería útil.
Por cierto, un vector de inicialización debe usarse solo para un mensaje. Y los IV no deben mantenerse en secreto, por lo que podría almacenarlos en cualquier lugar, pero almacenarlos con el único mensaje que lo usa es habitual.
Tengo una aplicación web que usa un algoritmo de encriptación simétrico.
¿Cómo almacenarías la clave secreta y el vector de inicialización? Almacenar como un literal en el código parece una mala idea. ¿Qué hay de la configuración de la aplicación? ¿Cuál es la mejor práctica aquí?
Esto debería ayudar ...
http://msdn.microsoft.com/en-us/library/ms998280.aspx
Pero, realmente debería considerar ir a PKI si realmente quiere proteger sus datos.
He utilizado un enfoque donde mi aplicación requiere una clave simétrica cuando se inicia y la busca en un determinado archivo. Una vez que la aplicación se ha iniciado, elimino el archivo. Una copia del archivo se guarda de forma remota para cualquier reinicio requerido. Obviamente, este enfoque no es viable si su aplicación tiene reinicios frecuentes.
Otra alternativa sería un administrador de certificados como Windows Certificate Store. Puede almacenar certificados y sus claves de forma segura y también es posible marcar llaves privadas como no exportables, por lo que requeriría de una piratería seria para sacar la llave. Su aplicación podría cargar su certificado desde el Almacén de certificados y poder llamar a operaciones para firmar solicitudes o generar nuevas claves simétricas. Además, puede asignar permisos a diferentes tiendas de certificados para que solo ciertas cuentas con privilegios puedan acceder al certificado.
Un enfoque estándar en el mundo de las aplicaciones web es dividir la clave y colocarla en diferentes lugares. Por ejemplo, puede dividir la clave y poner parte de ella en el sistema de archivos (fuera del directorio ''webapps''), parte de ella en la configuración JNDI (o equivalente en .net) y parte de ella en la base de datos. Obtener una sola pieza no es particularmente difícil si estás comprometido, por ejemplo, examinando medios de copia de seguridad o inyección SQL, pero obtener todas las piezas requerirá mucho más trabajo.
Puede dividir una clave XOR-ing con números aleatorios del mismo tamaño. (¡Use un generador de números aleatorios criptográficamente fuerte!) Puede repetir este proceso varias veces si desea dividir la clave en varias partes. Al final del proceso desea, por ejemplo, tres teclas parciales tales que p1 ^ p2 ^ p3 = tecla. Es posible que necesite codificar64 base algunas de las claves parciales para que puedan almacenarse correctamente, por ejemplo, en una propiedad JNDI.
(Hay formas más sofisticadas de dividir una clave, por ejemplo, un algoritmo n-of-m donde no se requieren todas las piezas para recrear la clave, pero eso es mucho más allá de lo que necesita aquí).
Si puede solicitar al usuario que ingrese activamente la contraseña, existen algoritmos PBE (encriptación basada en contraseña) que convierten una contraseña en una buena clave simétrica. Desea encontrar uno que también requiera un archivo externo. De nuevo, es un caso en que las copias de seguridad en cinta o la contraseña en sí misma no son suficientes, necesita ambas. También puede usar esto para dividir la contraseña en dos partes con JNDI; puede usar una frase de contraseña de texto claro en JNDI y un archivo de inicialización en algún lugar del sistema de archivos.
Finalmente, hagas lo que hagas asegúrate de poder "volver a aplicar" tu aplicación con bastante facilidad. Un enfoque es utilizar la contraseña obtenida anteriormente para descifrar otro archivo que contiene la clave de cifrado real. Esto hace que sea fácil cambiar la contraseña si cree que se ha visto comprometida sin requerir una nueva recopilación masiva de todos los datos, solo vuelva a cifrar su clave real.
pegarlo en la web.config y encriptar esa sección
Esta pregunta SO habla más sobre el cifrado web.config