No entiendo cómo la derivación de clave KeePass aumenta la seguridad de la contraseña db en absoluto. Primero, intentaré explicar lo que entendí de la derivación clave que se describe aquí . Usaré un pseudo código:
const WORKFACTOR = 6000;
var userKey = UserEnteresPassword();
var userKeyHash = SHA256(userKey);
var randomKey = GetStoredSecureRandomKey();
var tmpKey = userKeyHash;
for(i = 0; i < WORKFACTOR; i++)
{
tmpKey = AES(tmpKey, randomKey);
}
var finalKey = SHA256(tmpKey);
Luego usa el finalKey
final para cifrar la base de datos de contraseñas. Esto se almacena en el disco duro.
Si ahora quiero descifrar la base de datos de contraseñas, ¿por qué tendría que usar esta función de derivación de claves? Simplemente podría adivinar directamente el finalKey
en lugar de adivinar userKey
y hacer que se ejecute a través de esta función. Por lo tanto, ahorraría todo el tiempo que de otro modo necesitaría para esta función de derivación de claves.
Soy consciente de que, si simplemente adivino finalKey
, no podré obtener userKey
, pero no lo necesitaré ya que ya tengo finalKey
, simplemente puedo descifrar la contraseña db con. No estoy interesado en userKey
en absoluto.
¿O es esto completamente acerca de los ataques de diccionario para evitar que un ataque use palabras / contraseñas conocidas y simplemente vea si la db se descifra?