Non capisco come la derivazione della chiave KeePass aumenti la sicurezza della password db. Innanzitutto cercherò di spiegare cosa ho capito dalla derivazione della chiave descritta qui . Userò qualche pseudo codice:
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);
Quindi utilizza l'ultimo finalKey
per crittografare il database delle password. Questo viene quindi memorizzato sul disco rigido.
Se ora voglio decifrare il database delle password, perché dovrei usare questa funzione di derivazione della chiave? Potrei semplicemente intuire il finalKey
invece di indovinare userKey
e farlo funzionare con questa funzione. Quindi vorrei risparmiare tutto il tempo che altrimenti avrei bisogno per questa funzione di derivazione dei tasti.
Sono consapevole che, se penso semplicemente a finalKey
, non potrò ottenere userKey
, ma non ne avrò bisogno visto che ho già finalKey
, posso semplicemente decifrare la password db con. Non mi interessa affatto userKey
.
O si tratta completamente di attacchi di dizionario per impedire a un attacco di usare parole / password passate e vedere semplicemente se il db decodifica?