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.