Almacene de forma segura dos valores por usuario en SQL

2

He encontrado la necesidad en mi aplicación web de almacenar dos valores para cada usuario. Estos valores deberían ser recuperables de un valor almacenado en una URL. Preferiría no almacenar ninguno de los valores en texto plano.

Me he estado preguntando si habría una manera de utilizar una técnica de cifrado bidireccional en la que generaría un valor que se enviaría en una URL que se generaría en mi aplicación, que se entregaría al usuario y luego se eliminaría. . La aplicación podría entonces desencriptar el valor dentro del PHP del enlace para la URL.

¿Alguna sugerencia?

    
pregunta Undo 08.04.2013 - 03:30
fuente

1 respuesta

2

La pregunta que debe hacerse es: ¿debería el servidor poder acceder al valor?

Si el servidor debe poder acceder al valor, el "cifrado para el almacenamiento" es solo una ilusión. Un atacante que obtenga el control del servidor podrá leer los valores, ya que dicho atacante puede hacer lo que el servidor puede hacer. Es posible que desee aplicar algo de "cifrado" en la base de datos si considera que la base de datos es "menos segura" (o "claramente segura") que el servidor (es decir, imagina a un atacante que obtiene un vistazo de solo lectura en la base de datos). , por ejemplo, robando una cinta de respaldo); en ese caso, es mejor que aplique un sistema de encriptación de toda la base de datos, que será más completo, más simple y más eficiente, que concentrarse simplemente en sus dos valores (en el servidor SQL de Microsoft, esto se llama Encriptación transparente de datos ).

Si el servidor no debe poder acceder al valor, entonces la aplicación cliente debe realizar el cifrado y el descifrado, lo que plantea el problema de la administración de claves. La aplicación cliente debe tener una clave específica del usuario que almacena y luego utiliza para descifrar y cifrar los datos. Aquí hay un amplio margen para errores, por lo que es mejor elegir un protocolo y un formato bien comprobados para eso. Una forma es cifrar los datos con una clave derivada de una contraseña de usuario; El formato OpenPGP tiene algo de soporte para eso.

    
respondido por el Thomas Pornin 08.04.2013 - 15:01
fuente

Lea otras preguntas en las etiquetas