¿Cómo almacenar información de usuario confidencial encriptada en la base de datos, que deberá ser descifrada en tiempo de ejecución? [duplicar]

1

Esta pregunta se ha vuelto a publicar desde StackOverflow de acuerdo con la sugerencia dada en los comentarios

Estoy creando una aplicación donde necesito almacenar la información del cliente (como sus Claves de API y API Secret para acceder a mi servicio, junto con otra información confidencial). / p>

Ahora, en la base de datos, quiero almacenarlos en el formato cifrado. En este sentido, decidí con criptografía de clave simétrica , AES en específico para cifrar los detalles.

Sin embargo, por motivos de seguridad, quiero usar una clave de cifrado AES diferente por cliente, de modo que incluso si la base de datos está comprometida, todos los datos no se pueden descifrar con una sola clave.

Sin embargo, debido a razones obvias, no quiero almacenar mis claves privadas en la base de datos con las informaciones cifradas.

Por lo tanto, parece que no puedo decidir cómo almacenar mis claves, especialmente porque necesito tener un enlace en el que la clave pertenece a cada cliente.

¿Cómo puedo lograr esto y cuál es el mejor enfoque en escenarios como este?

    
pregunta Ayush Gupta 30.12.2017 - 05:04
fuente

1 respuesta

1

Esta es una situación en la que usar KEK (Clave de cifrado de clave) y múltiples DEK (Claves de cifrado de datos) resulta útil. (La pregunta de fondo aquí ).

Lo que harías es cifrar la clave de cada cliente (estos serán los DEK) usando el KEK. Los DEK se almacenan (encriptan) en la base de datos. Cuando la aplicación se inicia, utiliza la tecla KEK (que es not almacenada en la base de datos) para descifrar los DEK, luego los DEK (descifrados) (que existen descifrados en el Aplicación, no en la base de datos) para realizar operaciones de cifrado. Cuando la aplicación se apaga, todos los DEK están encriptados de forma segura en la base de datos, a la espera de que el KEK los desbloquee nuevamente.

Este modelo puede permitirle separar las claves (DEK en la base de datos, KEK en un archivo del servidor de aplicaciones), para requerir intervención manual (KEK proporcionado a la aplicación en el momento de la puesta en marcha), o confiar en un HSM para el KEK. Todo esto proporciona más seguridad que simplemente rellenar los DEK del cliente en la base de datos sin protección.

    
respondido por el gowenfawr 31.12.2017 - 19:20
fuente

Lea otras preguntas en las etiquetas