2011-04-11 19 views
15

qué ruta tomar, cuál es los pros y los contras, lo que es más seguro ..cifrado de datos y gestión de claves en C#

1) Generar clave AES, cifrar los datos con él y luego cifrar la clave AES con RSA , guarde los datos cifrados y la clave AES cifrada en un archivo y el par de claves RSA en KeyContainer.

2) O utilice la clase DPAPI ProtectedData para cifrar los datos y guardarlo en un archivo y luego almacenar la entropía lo que he utilizado con ProtectedData.Protect() a algún lugar .. (tal vez allso cifrarlo con la República de Sudáfrica, almacenar el par de claves RSA para KeyContainer y la entropía encriptada al archivo con los datos?)

EDITAR: Solo para obtener más información: Necesitamos proteger nuestros usos del sistema de archivos de aplicaciones. De modo que cualquier archivo que la aplicación almacene en el sistema de archivos queremos que se encripte. Es muy probable que el archivo sea utilizado por la misma aplicación u otro componente de la misma pila de aplicaciones.

Respuesta

4

Si está buscando un esquema de cifrado para proteger los datos locales de las aplicaciones, su elección de API depende de si necesita compartir los datos cifrados entre diferentes servidores que ejecutan la misma aplicación.

Si solo un servidor necesita acceder a los datos, entonces DPAPI debería ser lo suficientemente bueno para sus propósitos. La seguridad es proporcionada por las credenciales del usuario, que en este contexto serán las credenciales que ejecutan su pila de aplicaciones. Puede proporcionar una entropía adicional (o 'sal') codificada en su aplicación para aumentar la seguridad de modo que no dependa solo de las credenciales del usuario final. Es simple de implementar y no necesita lidiar con exportar/importar claves.

Si varios servidores necesitarían acceder a los mismos archivos/datos, entonces el método RSA Key Container es mejor. La misma clave se puede exportar a varios servidores y pueden compartir los mismos archivos cifrados. La clave también se puede respaldar para fines de recuperación. No tienes esa opción con DPAPI.

La seguridad en un método no es mejor que la otra, ya que utilizan esquemas similares y ambas claves están protegidas al final con las credenciales del usuario. DPAPI utiliza credenciales para proteger las claves RSA internas que utiliza y Windows controlará el acceso a los Contenedores clave RSA mediante el uso de las credenciales también.

1

He utilizado DPAPI en el pasado y era bastante simple. El par de llaves de RSA me parece bastante manual. puede usar protección DPAPI según el nivel de Usuario/Máquina.

MSDN link on DPAPI

1

DPAPI restringe el descifrado de una clave que está unido a la máquina, o incluso para el usuario en esa máquina .

con AES y RSA no tiene una restricción de esa manera ... incluso se podría descifrar en una plataforma totalmente diferente + aquí que sepa cómo funciona el sistema ... en contraste con DPAPI

se quiere probablemente desee echarle un vistazo a this

1

Lo sentimos, pero su pregunta no contiene suficiente información para dar una buena respuesta a su pregunta. Debe describir más sobre la arquitectura de su aplicación y la estructura de los datos que utilizó.

¿La aplicación es el servicio de Windows o una aplicación EXE ejecutándose en el contexto del usuario? ¿A quién pertenece la información que desea encriptar: la aplicación, el usuario? ¿Los datos se comparten entre los usuarios? ¿Guarda los datos en el disco duro local o en el servidor (en mixto)?¿Guarda los datos como parte del perfil del usuario?

Lo más importante es la pregunta: donde va a mantener presionada la tecla? El problema es que la clave es como la llave de su casa: desea que solo usted (o sus amigos cercanos) tengan acceso a la llave, pero a nadie más. Sin embargo, con frecuencia se puede encontrar la llave cerca de la cerradura: debajo de la estera que está en la puerta. Uno hace esto porque hay otro problema: ¿qué se debe hacer si se pierde la llave? Todas las preguntas son parte de la "gestión de claves".

DPAPI tiene más de 10 años. La ventaja más importante es que ayuda a guardar la clave que posee el usuario, por lo que el usuario retiene la clave automáticamente y los datos cifrados se pueden descifrar en otra computadora de la red en caso de utilizar roaming profiles. Si tiene los mismos requisitos, DPAPI puede brindarle ventajas.

Disculpe por la respuesta tan general, pero en mi opinión es que la clave para encontrar la solución a su problema no es utilizar una u otra API. Lo más importante es la gestión de claves. Primero debe tener una idea clara de la administración de claves de su aplicación, incluidas las acciones sobre algunos problemas de soporte típicos, antes de comenzar a cifrar los datos de la aplicación.

Cuestiones relacionadas