Necesito almacenar la información confidencial de un usuario en un sitio web (como SSN) en una base de datos. Estos datos no pueden ser un hash unidireccional. Los datos, una vez ingresados en db, nunca se enviarán de nuevo a un sitio web ni a nadie que no sea de confianza, pero se pueden enviar a través de un servidor a otra API confiable, por lo que debo poder leerlos.
Supongamos que tenemos controles de acceso adecuados, que las claves se almacenan / administran adecuadamente y que toda la información se transmite de forma segura a través de HTTPS.
Por lo que he leído en línea, el método que parece tener más sentido es utilizar un cifrado de clave asimétrico público / privado. Entonces:
- Generar una clave pública / privada
- Dar la clave pública al cliente
- Cifre los datos con una clave pública en el cliente y envíelos al servidor
- Almacena datos encriptados en DB
- Descodificar con clave privada cuando sea necesario
Algunas preguntas:
- ¿Me faltan pasos aquí o entiendo mal algo?
- ¿Necesito generar una nueva clave pública para cada usuario en mi sitio web? ¿O está bien usar la misma clave pública cada vez que un usuario me envía un SSN?
- ¿Está bien almacenar los datos cifrados públicamente directamente en la base de datos? ¿O hay algo más que deba hacer antes de almacenarlo?
¡Gracias!