Qual è ' la differenza tra PBKDF e SHA e perché usarli insieme?

Ultimamente ho letto un po di hashing e secondo AgileBits , usano “ SHA512 allinterno di PBKDF2 ” nel loro nuovo file vault.

Ho cercato in Wikipedia entrambi i nomi e so che PBKDF2 è una funzione di derivazione della chiave e SHA è una crittografia funzione hash ma non riesco a capire veramente la differenza e il motivo per cui vengono utilizzati entrambi insieme luno nellaltro.

Qualcuno può spiegarlo a una persona senza esperienza in crittografia?

(Puoi presumere che io sappia solo di matematica, se necessario).

Commenti

  • PBKDF2 è di progettazione molto più lento di SHA, quindi è meglio adatto per lhashing delle password perché richiede molto più tempo per eseguire un dizionario o un attacco di forza bruta.
  • @puzzlepalace quindi fanno praticamente lo stesso e usano la composizione PBKDF2 (SHA (password)) quindi ci vuole più tempo per attaccanti?
  • Nella maggior parte dei casi PBKDF2 utilizza una primitiva chiamata HMAC come funzione psuedo-random, che a sua volta utilizza una funzione hash crittografica in ‘ s interni, in questo caso SHA512. Quindi la composizione sembra davvero più simile a PBKDF2(HMAC_SHA512, password, ...).
  • PBKDF2 è lauto, HMAC è il motore, SHA512 è il pistone
  • Questultimo parte della mia risposta a una domanda precedente affronta anche questo.

Risposta

SHA-512 è un hash crittograficamente sicuro , PBKDF2 è ciò che chiamiamo una funzione di derivazione della chiave basata su password. Se il segreto risultante non è usato come chiave ma come valore hash, viene anche chiamato hash della password . Gli hash delle password differiscono dagli hash sicuri nel senso che contengono un valore salt e un conteggio del fattore di lavoro / iterazione.

Sia gli hash crittografici che gli hash delle password sono funzioni unidirezionali progettate per creare un output breve e di dimensioni fisse da un dato input. Nel caso dellhash della password, linput sarebbe la password e il sale. La dimensione del sale e il conteggio delle iterazioni sono comunemente considerati parametri di configurazione; Entrambi ovviamente influenzano loutput dellhash della password.

Gli hash delle password sono generalmente costruiti sopra le funzioni pseudo-casuali o PRF. Una forma usuale di PRF è un codice di autenticazione del messaggio basato su HMAC o hash, che a sua volta utilizza un hash internamente. Quando vengono utilizzate PRF basate su hash come HMAC, il tipo / dimensione dellhash utilizzato è spesso configurabile. Tuttavia, gli hash delle password non hanno bisogno di essere creati utilizzando gli hash. Qualsiasi altro PRF, come quelli basati su cifrari simmetrici, può funzionare. bcrypt, ad esempio, è costruito su Blowfish, un cifrario a blocchi.

Gli hash delle password richiedono un salt in modo che password identiche non vengano mappate allo stesso hash. Pertanto impediscono anche le tabelle arcobaleno (contenenti password precalcolate / coppie di hash) dallessere utili. Inoltre contengono un fattore di lavoro / conteggio delle iterazioni in modo che un utente malintenzionato debba eseguire più lavoro per calcolare lhash di ogni possibile password. Ciò è necessario perché la maggior parte delle password non sono abbastanza casuali. Senza il fattore di lavoro il lattaccante sarebbe in grado di testare enormi quantità di possibili password utilizzando la forza bruta o un attacco del dizionario.

Commenti

  • molte più informazioni qui … tuttavia ‘ non rientra nello spazio delle risposte.

Risposta

Per parafrasare la mia risposta a una domanda precedente , PBKDF2 è un algoritmo generico di alto livello che chiama internamente una funzione pseudocasuale (PRF) per elaborarne linput. La specifica PBKDF2 non impone alcun particolare PRF, quindi gli implementatori sono liberi di scegliere qualsiasi PRF che desiderano (purché soddisfi la definizione di PRF sicura e possa accettare linput fornito da PBKDF2).

In effetti, la scelta di gran lunga più comune di PRF per PBKDF2 è HMAC , che è unaltra costruzione di alto livello che utilizza internamente una funzione hash crittografica . Ancora una volta, le specifiche HMAC non impongono alcuna funzione hash particolare, * quindi gli implementatori sono liberi di scegliere qualsiasi hash desiderino. Probabilmente la scelta più comune oggi è quella della famiglia di hash SHA-2 , che include SHA-256 e SHA-512.

Quindi “SHA512 allinterno di PBKDF2” significa quasi certamente che “stanno utilizzando PBKDF2 con HMAC come PRF e con SHA-512 come hash allinterno di HMAC. **

Ciò che può creare confusione è che, a un colpo docchio, questo PBKDF2-with-HMAC-with-SHA512 potrebbe sembrare che stia facendo qualcosa di molto simile al semplice SHA-512: entrambi prendono una password arbitraria come input e la trasformano in una stringa di bit pseudocasuale da cui la password originale non può essere facilmente ricostruito.Tuttavia, in realtà ci sono molte differenze, la più importante è che:

  • SHA-512 è veloce. Molto veloce. PBKDF2 è deliberatamente lento da calcolare e la sua lentezza può essere controllata regolando il parametro di conteggio delle iterazioni.

  • Come conseguenza diretta della sua velocità, SHA -512 da solo è vulnerabile agli attacchi di forza bruta che indovinano le password utilizzando software come hashcat , che genera semplicemente molte password e le sottopone a hash finché non ne trova una che produce un hash corrispondente . Una singola CPU moderna può facilmente eseguire lhashing di milioni di password al secondo e le GPU sono ancora più veloci.

Inoltre, ci sono alcune altre piccole differenze con la nota:


*) La definizione originale HMAC e le prove di sicurezza presumono effettivamente che la funzione hash utilizzata sia di un particolare tipo noto come funzione hash Merkle – Damgård . In effetti, tutte le funzioni di hash crittografiche più popolari negli ultimi decenni, inclusa la famiglia SHA-2, sono state di questo tipo, quindi questa limitazione non è stata un grosso problema nella pratica. Questo potrebbe cambiare gradualmente con la standardizzazione di SHA-3 (noto anche come Keccak), che non è un hash Merkle – Damgård, ma convenientemente, viene fornito con la propria richiesta di protezione per HMAC-SHA3 .

**) Questa è una multa e la scelta tradizionale, per quanto riguarda. Non è resistente agli attacchi basati su GPU e ad altri attacchi paralleli come i KDF più moderni come scrypt o Argon2 lo sarebbe, ma è ancora molto meglio del semplice vecchio hashing non iterato. Detto questo, per valutare adeguatamente la sua sicurezza, avremmo anche bisogno di conoscere il conteggio delle iterazioni utilizzato per PBKDF2. Sfortunatamente, molte implementazioni di PBKDF2 tendono a utilizzare il vecchio “minimo consigliato” di 1000 iterazioni, che oggigiorno è poco più di un aumento di velocità. Personalmente, su una CPU moderna, preferirei qualcosa di più vicino a 1.000.000 o 1.000.000.000 di iterazioni .

Commenti

  • Domanda: PBKDF2 viene utilizzato solo per rallentare il numero di ipotesi (se la forza bruta)? O ci sono altre specifiche da tenere a mente?
  • @NaveenNiraula : Oltre a rallentare il calcolo della forza bruta, PBKDF2 ha lo scopo secondario di convertire le password di lunghezza e formato arbitrari in stringhe di bit uniformemente pseudocasuali. Ma anche il semplice hashing potrebbe ottenere questo risultato. Inoltre, il parametro salt consente di derivare più chiavi distinte dallo stesso password e previene alcuni attacchi utilizzando dizionari precalcolati come ” rainbow tables “. Ma ancora una volta, se non ‘ Non serve la forza bruta per indovinare la protezione di PBKDF2, potresti semplicemente usare il semplice HMAC per quello, o anche solo concatenare il sale con la password prima dellhashing it.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *