Perché utilizzare PBKDF2 su più iterazioni di un'altra funzione di hash crittografica?

3

Le persone spesso consigliano PBKDF2 sull'uso diretto delle funzioni di hash, ma in genere confrontano PBKDF2 con un singolo hash non salato. Quali vantaggi ci sono nell'usare PBKDF2 su più iterazioni di una funzione crittografica con la password e il sale aggiunti all'hash precedente ad ogni iterazione?

pseudo-codice:

password="mypass0rd";
salt=random();
hash = password;
for (int i=0;i<1000;i++){
    hash = sha512(hash+password+salt);
}
    
posta gluefan 21.03.2014 - 20:13
fonte

2 risposte

5
  1. Non tirare la tua cripto. Generalmente, se stai chiamando direttamente (al contrario di specificare il nome di) qualche primitiva crittografica (SHA-512, AES, ecc.), Allora stai violando questa regola. Se pensi che i bug di implementazione di crypto non siano difficili da evitare, ti suggerisco di dare una sfide cripto di Matasano una prova.
  2. Meno righe di il tuo codice. Questo significa meno possibilità di far incasinare qualcosa. Significa anche un codice più pulito e più gestibile.
  3. Conteggi iterazione configurabili. Sicuro di poter cambiare la variabile di iterazione nel tuo codice, ma per quanto riguarda tutti gli hash che hai già in giro? Una libreria che implementa PBKDF2 avrà un modo integrato per archiviare e recuperare il conteggio delle iterazioni per ogni hash.
  4. Evita i bug RNG. Il tuo codice effettua una chiamata a random() , ma i PRNG incorporati nella maggior parte delle lingue non sono crittografici. Ottieni una libreria che ti consente di generare sale e eviti il fastidio e i possibili bug.
  5. Portabilità. Hai bisogno di aggiornare o cambiare il tuo back-end? Probabilmente puoi semplicemente copiare (database di esportazione / importazione) i record degli utenti e i vecchi hash nel nuovo framework. Altrimenti devi riscrivere l'algoritmo di hashing personalizzato per il nuovo framework, eseguendo le differenze di implementazione:
    • L'output di sha512 byte grezzo o hex?
    • Quale codifica dei caratteri hai utilizzato per le password?
    • È salt una stringa o un numero e come viene convertito in byte per l'input in sha512 ?
risposta data 21.03.2014 - 22:24
fonte
1

Una differenza importante tra la tua costruzione e PBKDF2 è che PBKDF2 usa una funzione pseudo-casuale (prf), tipicamente HMAC, invece di un hash direttamente. SHA1 e SHA2 sono non prfs, quindi alcune prove di sicurezza non si applicano a loro.

Un problema teorico con la tua costruzione è che puoi colpire collisioni interne o catene corte. Siccome il tuo sale e la password rimangono in ogni iterazione, se produci sempre lo stesso hash due volte, allora finirai in un ciclo di hash. (PBKDF2 soffre anche di una variante di questo, ma illustra il tipo di cose da cercare.)

Quindi faresti meglio con il tuo loop che assomiglia a

hash = hmac-sha512(i + salt + password, hash)

ma per tutti i motivi che altri hanno sottolineato, si sta ancora meglio usando PBKDF2, verruche e tutto, invece di far girare il proprio.

Alternative PBKDF2

scryp t è superiore a PBKDF2 per quasi tutte le situazioni. Ma è più difficile imparare a usare correttamente. PBKDF2 è superiore a bcrypt.

Si noti inoltre che PBKDF2 è stato progettato per la derivazione della chiave, non per l'hashing della password. Quindi ha alcune caratteristiche e caratteristiche che non sono proprio ciò di cui hai bisogno. (E ha un bug in quel componente che conta solo per la derivazione della chiave, e solo in circostanze molto insolite).

Per quanto io stia criticando PBKDF2, penso ancora che sia meglio usarlo piuttosto che farlo da solo. I problemi particolari con esso non sono qualcosa che si incontrerà con l'hashing della password.

Un successore di PBKDF2 / scrypt / bcrypt

Potresti voler seguire gli sviluppi del Concorso di hashing delle password . Questo è un tentativo di trovare un successore adatto a PBKDF2, scrypt, bcrypt per l'hashing della password. Ma per il momento, basta usare scrypt se disponibile per te o PBKDF2.

    
risposta data 22.03.2014 - 18:31
fonte

Leggi altre domande sui tag