Ho familiarità con il modo in cui le funzioni di derivazione delle chiavi possono essere utilizzate per rallentare gli attacchi di forza bruta contro le password richiedendo notevoli risorse computazionali e / o di memoria per calcolare la chiave finale.
Common KDF di cui sono a conoscenza sono bcrypt, PBKDF2 e scrypt, ma KeePass sembra utilizzare un algoritmo completamente diverso che non conosco. In base al Centro assistenza di KeePass :
To generate the final 256-bit key that is used for the block cipher, KeePass first hashes the user's password using SHA-256, encrypts the result N times using the Advanced Encryption Standard (AES) algorithm (called key transformation rounds from on now), and then hashes it again using SHA-256. For AES, a random 256-bit key is used, which is stored in the database file.
[...]
By default, KeePass sets N to 6000 encryption rounds (full encryptions are meant; N has nothing to do with the internal encryption rounds of AES). This number has been chosen in order to provide compatibility with portable device versions (PocketPC processors are slower, therefore the key computation takes longer).
L'uso di AES come KDF è sicuro? Ci sono dei grossi difetti con questo approccio? Sono sufficienti 6000 iterazioni per rallentare in modo significativo un aggressore determinato?
Questa linea sui "processori PocketPC" è un po 'preoccupante, poiché implica che questa decisione su quale KDF utilizzare sia stata fatta un po' di tempo fa, prima che esistessero i telefoni con processori più potenti (e, per estensione, in un tempo in cui i processori desktop non erano altrettanto potenti).