Ya que genera las claves específicas del usuario, también puede guardar una copia de estas claves en algún lugar (en algún lugar seguro , preferiblemente) y usarlas cuando sea necesario.
Alternativamente, puede generar las claves con un sistema de derivación criptográfica que usa una "superclave" y la identidad del usuario. Por ejemplo, considere lo siguiente:
- La superclave es K .
- Un usuario se identifica por su nombre / inicio de sesión / correo electrónico u .
- La clave para el usuario u se calcula como: Ku = HMAC K ( u )
I.e. utiliza HMAC , usando K como clave, para calcular la clave específica del usuario. Dado que HMAC es determinista, siempre puede hacer el mismo cálculo nuevamente, siempre que conozca la "superclave".
Por supuesto , la "superclave" es sensible; nunca debe ser conocido por nadie más que el superadmin. En particular, NO DEBE "ocultar" la superclave dentro de algún código de aplicación que vaya a la máquina del usuario. Esto puede ser un problema si se supone que la generación de la clave de usuario suceda en la máquina del usuario (es decir, lo hace "usted" en el sentido de que es "su aplicación", pero aún en la computadora o teléfono inteligente del usuario, por lo tanto dentro del rango de ingeniería inversa ).
Este mecanismo basado en HMAC es, en realidad, un tipo de método de compresión eficiente para el mismo modelo inicial, es decir, se guarda una copia de las claves de los usuarios. (Si esa frase te parece poco clara, entonces no sabes lo suficiente (aún) para tratar con seguridad la criptografía).