Come sapere quale lunghezza di output richiedere da PBKDF2?

5

Mi sento come se stessi facendo una domanda abbastanza ovvia qui, ma essendo così facile fare errori in questo spazio, ecco qui.

Da wikipedia :

DK = PBKDF2(PRF, Password, Salt, c, dkLen)

dkLen is the desired length of the derived key

Come decido qual è la "lunghezza desiderata"?

    
posta user50849 10.03.2014 - 22:24
fonte

2 risposte

6

La lunghezza di output per PBKDF2 è ciò che ti serve . Ma ci sono dettagli.

PBKDF2 è una funzione di derivazione chiave : produce una sequenza di byte di lunghezza configurabile , il cui scopo è quello di essere utilizzato come chiave per un algoritmo di crittografia simmetrica (o un MAC). Quindi, una prima risposta è: se si desidera utilizzare un algoritmo di crittografia simmetrica che prevede, ad esempio, una chiave da 19 byte, allora si vogliono 19 byte da PBKDF2.

Ora per i dettagli:

  • PBKDF2 ha uno svantaggio, che è che produce dati per blocchi, e ha un costo proporzionale al numero di blocchi che gli stai chiedendo. Ad esempio, se si utilizza PBKDF2 con HMAC / SHA-1 come PRF interno (è il solito caso), si ottengono byte per blocchi di 20. Se si desidera, diciamo, 24 byte, PBKDF2 dovrà produrre due blocchi, e questo sarà due volte più costoso di quanto si desideri avere 20 byte o meno.

    Questo è un peccato perché PBKDF2 è intenzionalmente lento, al fine di sconfiggere la ricerca esauriente sulla password. Tuttavia, a seconda di come si utilizza l'output PBKDF2, l'autore dell'attacco potrebbe essere in grado di "testare" una password solo sul primo blocco dell'uscita PBKDF2; in effetti, questo può dare un potenziamento delle prestazioni x2 o x3 all'attaccante, che è controproducente.

    Il work-around suggerito è quello di produrre un one blocco di output con PBKDF2 (diciamo, 20 byte), quindi espandere questi 20 byte con un altro KDF veloce, nel numero di byte desiderato. HKDF è un KDF veloce con buona reputazione.

  • PBKDF2 viene spesso abusato in hashing della password . Con l'hashing della password, non si utilizza realmente l'output, è sufficiente memorizzarlo per un ulteriore confronto. Per tale uso, è necessario archiviare un numero sufficiente di byte in modo che gli aggressori non "siano fortunati": trovare un risultato corrispondente a ciò che è stato archiviato dovrebbe essere assolutamente improbabile. Se si utilizza PBKDF2 per l'hashing della password, 12 byte di output dovrebbero essere corretti, con un margine di sicurezza non trascurabile.

risposta data 21.05.2014 - 20:18
fonte
4

Se stai utilizzando l'output per l'hashing della password, allora la lunghezza dell'output:

  • Deve essere nient'altro che la dimensione dell'output dell'hash nativo
    • SHA-1 è 20 byte, SHA-224 è 28 byte, SHA-256 è 32 byte, SHA-384 è 48 byte, SHA-512 è 64 byte
  • Non deve essere inferiore alla tua tolleranza al rischio. In pratica, direi che meno di 20 byte (dimensione dell'output nativo SHA-1) è troppo piccolo.

Se si sta utilizzando l'output direttamente come solo una singola chiave di crittografia:

  • Dovrebbe essere uguale alla dimensione della chiave di crittografia che ti serve
    • Idealmente non è altro che la dimensione dell'output dell'hash nativo (vedi sopra)

Se si utilizza l'output sia come chiave di crittografia e MAC, o in qualsiasi altro caso in cui si sta utilizzando l'output per più di uno scopo:

Il motivo per "non più della dimensione di output dell'hash nativo" è la RFC2898 sezione 5.2, nel Definizione PBKDF2, specifica che se vengono richiesti più byte di output (dkLen) rispetto alla funzione di hash nativa, esegui un conteggio completo per la prima dimensione hash nativa, quindi un altro conteggio completo per il secondo e continua finché non hai finito oppure devi troncare l'output perché il resto di ciò che ti serve è inferiore alla dimensione di output nativo.

    
risposta data 22.03.2014 - 17:53
fonte

Leggi altre domande sui tag