Consejos sobre el uso de cifrado para la aplicación de autoaprendizaje

2

Estoy auto entrenado en el uso de cifrado. Soy un desarrollador de php y en mi tiempo libre estoy creando una aplicación en línea que proporciona funciones básicas de cms para ayudarme a entender más el diseño de cifrado. Estoy usando el cifrado para proteger los datos en caso de robo y tenerlos a disposición del público como lo que le sucedió a adobe.

Mis restricciones para esta aplicación son:

  1. Los usuarios finales usarán esta aplicación y no se puede confiar en que recuerden su contraseña todo el tiempo, por lo que su contraseña no se puede usar en el proceso de encriptación ya que habrá una alta probabilidad de que necesiten restablecer su contraseña en alguna etapa.

  2. No se puede permitir el software de administración de clave de proveedor o hsm.

  3. No se pueden cargar usuarios en una clave al iniciar sesión en cms para cifrar o descifrar datos durante la sesión. De hecho, los usuarios no tendrán acceso a las claves utilizadas, ya que no se puede confiar en ellas para mantenerlas seguras. Además, los usuarios externos como contratistas tendrán acceso a cms. Así que todas las claves se gestionan por aplicación debajo de las cubiertas.

Los datos serán almacenados en un db encriptado. El código cifrará los datos ya que no estoy usando el cifrado nativo de mysql.

Los datos se cifrarán utilizando una clave simétrica.

La clave simétrica se almacenará en otro servidor con cortafuegos y solo se podrá llamar a través de cms ip. El CMS cuando necesita una clave simétrica particular llamará al servidor que almacena las claves simétricas y pasará un valor de hash que se utilizará para buscar la clave simétrica correcta. Cuando se localice la clave, la enviará de vuelta a la cms y la cms almacenará la clave en memcached.

Ahora pensaba que tenía que proteger las claves simétricas, así que lo que pensé que debía hacer era cifrar las claves simétricas con una clave pública asimétrica y almacenar la clave simétrica cifrada en una base de datos en el servidor que no es cms. la clave que utiliza la clave privada almacenada en el servidor cms para descifrarla.

Yesh!

Es como pollo / huevo!

Me preguntaba si alguien me puede dar alguna orientación sobre cómo hacer esto correctamente. Mi objetivo para este proyecto es proteger los datos si la db es robada.

Creo que es malo almacenar la clave privada en el servidor cms porque si el servidor no cms que almacena las claves simétricas utilizadas para cifrar los datos también se piratea, todas las claves están disponibles.

La aplicación también verificará las entradas para los intentos de inyección, Xss, utilizando la lista blanca de ip para acceder a cms, cifrando la cookie de sesión, limpiando los datos de entrada y otros elementos básicos de seguridad básicos.

    
pregunta user35032 04.12.2013 - 11:32
fuente

1 respuesta

4

¡Bienvenido a security.se y a la administración de claves!

Almacenar las claves siempre es el mayor problema con el cifrado del lado del servidor: por una parte, necesita un acceso fácil y transparente a la clave por parte de su aplicación y, por otra, necesita proteger sus datos de cualquier acceso no autorizado.

La respuesta habitual a esto es utilizar un módulo de seguridad de hardware (HSM). Este tipo de dispositivo de hardware (que va desde un simple dispositivo similar a una llave USB a un sistema montado en rack) tiene un almacenamiento especial a prueba de manipulaciones para su propia clave y manejará todas las operaciones criptográficas utilizando estas claves (descifrado y firma digital, cifrado y la validación se puede realizar fuera del dispositivo, ya que no necesita acceso a las claves privadas).

Usando este enfoque, asumiendo que implementó el cifrado correctamente, limita la forma en que se pueden filtrar los datos: incluso si alguien obtiene un volcado de su base de datos, no obtendrán acceso a los datos de texto claro a menos que roben físicamente el HSM (que es más fácil de proteger).

Sin embargo, este tipo de configuración es muy difícil de implementar de manera adecuada y eficiente. Si bien en teoría es bastante seguro, a menudo todavía es posible capturar datos de texto claro o incluso claves de cifrado simétricas (si usó el HSM para obtener acceso a estas claves) desde la memoria de proceso. Los lenguajes modernos de alto nivel como PHP, Java y C # son particularmente propensos a mantener ese tipo de información confidencial en la memoria durante un período prolongado de tiempo, ya que no hay forma de cero explícitamente y de memoria libre (e incluso si lo hace, a menudo hay un rastro dejado en el archivo de la página).

Además, todavía está abierto a cualquier tipo de inyección de código que permita el acceso a sus datos después de que se hayan descifrado (por ejemplo, si usa cifrado de datos transparente , no protegerá sus datos contra cualquier tipo de inyección de SQL en su propio programa).

    
respondido por el Stephane 04.12.2013 - 12:15
fuente

Lea otras preguntas en las etiquetas