Qual è il vantaggio dell'utilizzo di PBKDF2 vs SHA256 per generare una chiave di crittografia AES da una passphrase?

61

Sto guardando due software comparabili che crittografano i dati su disco usando una passphrase. Uno utilizza PBKDF2 per generare la chiave di crittografia da una passphrase, mentre l'altra utilizza due round di SHA256. Qual è la differenza? Si preferisce l'altro?

    
posta Andrey Fedorov 22.06.2012 - 02:59
fonte

3 risposte

70

La differenza è questa:

  • PBKDF2 in base alla progettazione è lento
  • SHA256 è una buona funzione di hash; non è lento, per progettazione

Quindi, se qualcuno dovesse provare un sacco di differenti passphrase, dire l'intero dizionario, poi ogni parola con una cifra aggiunta, quindi ogni parola con una diversa maiuscola, quindi due parole del dizionario, ecc. allora questo processo sarebbe molto più lento con PBKDF2.

Ma se la passphrase è veramente sicura, è molto lunga, piuttosto casuale e fuori dalla portata di qualsiasi processo di enumerazione sistematica, quindi non fa alcuna differenza pratica, tranne che un utente malintenzionato può spendere più risorse cercando di infrangere la passphrase (o forse meno se decidono di rinunciare prima).

    
risposta data 22.06.2012 - 04:07
fonte
43

Gli algoritmi di hashing della password come PBKDF2, bcrypt e scrypt sono pensati per l'uso con password e sono volutamente lenti. Gli algoritmi di hashing crittografici sono veloci. Il digiuno è buono nella maggior parte delle situazioni, ma non qui. Rallentando l'algoritmo (di solito con l'iterazione) il lavoro dell'aggressore diventa molto più difficile. Gli hash delle password aggiungono anche un valore salt a ciascun hash per renderlo univoco in modo che un utente malintenzionato non possa attaccare più hash contemporaneamente.

Gli aggressori cercheranno di recuperare le password eseguendo attacchi di tipo "brute-force" dove indovinano le password tagliandole e confrontandole con la password memorizzata per determinare se corrispondono. Con le normali funzioni di hash crittografico (ad esempio MD5, SHA256), un utente malintenzionato può indovinare miliardi di password al secondo. Con PBKDF2, bcrypt o scrypt, l'utente malintenzionato può effettuare solo alcune migliaia di tentativi al secondo (o meno, a seconda della configurazione).

Questo significa che ogni password è molto più potente se vengono utilizzati PBKDF2, bcrypt o scrypt invece di una normale funzione di hash.

Inoltre, PBKDF2, bcrypt e scrypt utilizzano tutti valori "salt" casuali di grandi dimensioni per assicurarsi che la password di ciascun utente sia hash in modo univoco. Attaccare 100 hash delle password richiederà 100 volte più a lungo che attaccare un hash. Attaccare un milione richiederà un milione di volte più a lungo, ecc. Con SHA256, l'attaccante può tentare di crackare migliaia o milioni di hash allo stesso tempo con un minimo rallentamento.

Dovresti sempre utilizzare un hash della password o una "formula di derivazione della chiave" per le password piuttosto che un normale hash crittografico. È molto difficile selezionare password sufficientemente forti da resistere a uno sforzo di cracking dedicato se sono sottoposte a hash con qualcosa come SHA o MD5. Con PBKDF2, bcrypt o scrypt, le password possono essere di soli 7 o 8 caratteri, ma con MD5 o SHA devono avere almeno 13-14 caratteri.

    
risposta data 23.06.2012 - 06:57
fonte
9

Ci sono buone risposte sopra, ma la ragione immediata è che sha256 non è salato e due round sono pietosamente deboli nello stesso modo in cui le password a 4 cifre sono deboli, computazionalmente:

  • Una moderna configurazione GPU può facilmente calcolare tutti gli hash sha256 a 4 cifre non salati (in millisecondi)
risposta data 27.06.2012 - 21:52
fonte

Leggi altre domande sui tag