Una posibilidad a considerar desacopla la clave utilizada para cifrar los datos de la clave utilizada para acceder a los datos. Hecho con cuidado, esto le permite al usuario cambiar su contraseña tantas veces como lo desee, mientras que usted solo cambia un registro en la base de datos. Por separado, puede programar cambios en la (s) clave (s) cifrando sus datos cuando sea conveniente para usted.
¿Cómo funciona?
- cifra los datos D para el usuario U con una clave generada aleatoriamente, K U, D.
- a cifrar la clave K U, D con una clave K1 separada T, K generado a partir de una sal de azar, S1 T (que se mantiene un registro de) y la contraseña del usuario P1 T (que puede o no hacer un seguimiento de). La clave cifrada es E1 U.
- Usted almacena S1 U y K1 U, K listo para cuando el usuario quiere acceder a sus datos.
- Cuando el usuario U quiere acceder a sus datos, que le proporcionan su contraseña, P1 T, y miras hacia arriba S1 T y regenerar K1 T, K partir de esos datos, y usar eso para descifrar E1 U, dándole K U, D una vez más, con la que descifrar sus datos reales.
- Asegúrate de que puedes detectar cuando la contraseña dada es correcta para que no emitas galimatías binarios si los usuarios escriben una contraseña incorrecta.
La ventaja de este nivel de indirección se produce cuando el usuario desea cambiar su contraseña. Si no utiliza alguna técnica análoga a esto, deberá obtener y validar la contraseña anterior y la nueva, descifrar todos los datos con la contraseña anterior y volver a encriptarlo con la nueva contraseña.
Con el nivel de indirección, todavía se solicitará al usuario su contraseña antigua (P1 T) y su nueva contraseña (P2 T) y validarlos, pero sólo hay que descifrar E1 T y a continuación, vuelva a cifrarlo con una nueva clave K2 U, K generada a partir de una nueva sal S2 U y la nueva contraseña P2 U. No tiene que tocar los datos encriptados en absoluto.
Con el nivel de indirección, el sistema S también puede guardar una segunda copia encriptada de la clave de datos K U, D, cifrada con la contraseña del sistema. Si resulta necesario o deseable cambiar la clave utilizada para encriptar los datos, el sistema puede usar su copia encriptada de la clave para hacerlo. Puede mantener un registro de qué tecla fue grabada por última vez por el usuario en su clave, por lo que cuando el usuario vuelve a mirar los datos, puede organizar el cambio de la clave almacenada K2 U, D porque en ese momento, tiene su contraseña (el resto del tiempo, no)
Esta es una variación leve de algunas de las ideas en "Cryptography in the Database: The Last Line of Defense" de Kevin Kenan. Las claves Kn U, K son ejemplos de una KEK, una clave de cifrado de clave. También podría leer sobre las familias clave en el libro, lo que ayudaría con la administración de datos encriptados.
¿Dónde se almacenaría la clave cifrada? ¿En la memoria en el servidor de aplicaciones o en el almacenamiento físico en el servidor de la base de datos? – dimiguel
@dimgl Almacenado en un almacenamiento confiable y persistente, con copias de seguridad. Definitivamente no en la memoria. A menos que no le importe si el contenido es irrevocablemente destruido por un corte de energía. – erickson