Una forma de evitar un desastre si el usuario pierde su clave es usar una clave de respaldo que se puede usar para descifrar los datos sin la contraseña del usuario. Cuando el usuario se encripta con su clave de encriptación principal, también debe encriptar en la clave de respaldo.
La segunda clave puede ser un par de claves asimétricas, de modo que el usuario (o atacante) solo tenga acceso a la clave pública para cifrar sus datos para que la clave privada de respaldo pueda descifrarla, pero no puede proporcionar la clave privada a cualquier otra persona (accidental o no).
Si sus datos son grandes, también puede introducir una clave de cifrado de datos (DEK). En lugar de cifrar los datos utilizando la clave derivada de la contraseña del usuario, crea un DEK para cifrar los datos y cifrar el DEK con los datos con la clave derivada de la contraseña del usuario. También cifraría una segunda copia del DEK con la clave de copia de seguridad.
Ahora el problema es cómo proteger esta clave de copia de seguridad. Varios modelos de amenazas dan varias soluciones a esto. Algunas opciones posibles:
- Use un módulo de seguridad de hardware, con un registro de auditoría sólido. Debería asegurarse de que el HSM físico se encuentre en un centro de datos seguro. El HSM asegura que los secretos nunca salgan del HSM sin que lo sepa. Necesitaría un proceso organizativo para auditar los registros regularmente.
- Use la división secreta / compartir secreto para dividir la segunda clave a varias personas. Un intercambio secreto como el intercambio secreto de Shamir le permite dividir un N secreto y requiere al menos M partes para reconstruir el secreto. Puede dar una parte al usuario, una parte guardada por el administrador del sistema, una parte es guardada por un tercero en el que ambos confían; para descifrar sin contraseña, necesita al menos dos partes para revelar su parte del secreto.
- O simplemente dígale al usuario que escriba / imprima la clave de respaldo y la guarde en un lugar realmente seguro.