Almacenamiento de claves de cifrado en un servidor utilizando Node.js y MySQL

5

Estoy escribiendo un backend web / api para una aplicación de iOS usando Node.js y MySQL. En mi base de datos tengo una tabla para publicaciones. Me gustaría que el contenido de las publicaciones esté encriptado. Digamos que estoy usando esto AES para el cifrado.

Me gustaría poder cifrar y descifrar de forma segura los datos en el servidor. Los datos que se envían de ida y vuelta al cliente no estarán encriptados, pero se enviarán a través de HTTPS (¿es esta una buena idea)?

Mis preguntas:

  1. ¿Cómo debo generar las claves? ¿Deben ser cadenas aleatorias?

  2. ¿Dónde debo guardar las claves ya que habrá una clave diferente para cada mensaje?

Modelo de adversario
Me gustaría protegerme contra alguien que ya tiene acceso a mi servidor que ejecuta la API https (escrito en Node.js) y tiene acceso a mi base de datos MySQL. Me gustaría proyectar en contra de que esa persona pueda descifrar los datos cifrados en esa tabla. Por lo tanto, es importante que incluso si tienen una gran cantidad de datos cifrados, y cómo funciona el cifrado aún no se pueden descifrar los datos.

    
pregunta Jason Silberman 19.04.2014 - 01:51
fuente

1 respuesta

3

Espero que esté entendiendo esto correctamente. El cliente envía un mensaje al servidor a través de una conexión cifrada SSL. El servidor recibe el mensaje y lo almacena en una base de datos. Le preocupa que si alguien ingresa al servidor, puede leer la base de datos y ver todos los mensajes.

Por lo tanto, el cifrado parece un ajuste natural. Cifre los mensajes (cada uno con una clave diferente) antes de almacenarlos en la base de datos. El problema ahora es qué hacer con las llaves. No puede simplemente almacenarlos en el servidor ya que el atacante está en el servidor. Pueden encontrar fácilmente las claves, extraer toda la base de datos y descifrar todo.

Parece que sus mejores opciones son almacenar las claves en una máquina diferente y dejar que esa máquina realice el cifrado / descifrado. De esa manera, el atacante primero tendría que ingresar a su máquina y luego a la máquina de cifrado / descifrado. No es imposible, pero espero que sea mucho más difícil.

Otra opción sería algún hardware criptográfico. Esto está más allá de mi experiencia, pero las compañías venden hardware que realiza operaciones criptográficas, incluyendo almacenamiento de claves, cifrado y descifrado.

Aquí está la parte difícil. ¿Qué impide que el atacante consulte la otra máquina o el hardware criptográfico repetidamente hasta que haya descifrado todos los mensajes? Tendrás que construir algún tipo de detección allí o algo así.

En resumen, dado el modelo de tu adversario (atacante con privilegios de root en el cuadro), el problema es bastante difícil. Con suerte, una de estas dos opciones será útil para usted, o al menos generará algunas otras respuestas.

    
respondido por el mikeazo 25.04.2014 - 20:03
fuente

Lea otras preguntas en las etiquetas