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:
-
¿Cómo debo generar las claves? ¿Deben ser cadenas aleatorias?
-
¿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.