Estoy utilizando certificados TLS de cliente de usuario (de tarjetas inteligentes) para autenticarme en un programa web. Los usuarios almacenan datos en el servidor y me gustaría cifrar los datos almacenados para proteger la información si la base de datos está comprometida. Me gustaría no almacenar los datos en texto plano.
¿Cuáles son los métodos recomendados para cifrar o proteger los datos en reposo? No creo que pueda utilizar la clave privada de la tarjeta inteligente para descifrar los datos, ya que está bloqueada en el lado del cliente y es inaccesible para el servidor. El único método de autenticación de los usuarios es mediante tarjeta inteligente, por lo que no puedo usar una "contraseña de usuario" normal como clave de cifrado. Estoy utilizando Go como el servidor web, pero una solución en cualquier idioma es buena.
ACTUALIZACIÓN: el tipo de compromiso en el que estoy pensando es que un atacante obtenga un volcado completo de la base de datos. Me gustaría cifrar los datos en una base de datos de Redis en el nivel del "valor" del almacenamiento de clave / valor. Un ejemplo sería cifrar ciertos datos confidenciales utilizando la contraseña del usuario (si estuviera usando contraseñas) de modo que solo la contraseña provista por el usuario descifre los datos con éxito.
No estoy buscando un sistema operativo o un cifrado de toda la base de datos, ya que la base de datos está alojada por un tercero. El usuario accede a la aplicación web a través de HTTPS y el programa de aplicación web se comunica con la base de datos. Sé que IE tiene el complemento S / MIME que permite el uso de la tarjeta inteligente del cliente para descifrar el correo electrónico en Outlook en línea, pero eso es básicamente un programa del lado del cliente.
¿Alguna sugerencia?
Las plataformas de usuario a las que se dirige son Windows, OS X, Linux
Los navegadores de los usuarios son IE, Chrome