Sta usando 100.000 iterazioni di sha256 abbastanza buone per l'archiviazione delle password? [duplicare]

2

Sto creando un'app Web e mi chiedevo se sarebbe stato sicuro utilizzare 100.000 iterazioni di sha256 per memorizzare le password? So che esistono algoritmi come scrypt e bcrypt, tuttavia, mi chiedevo se sarebbe stato possibile utilizzare 100.000 iterazioni di sha256 per l'archiviazione delle password.

Sono un principiante e l'aiuto sarebbe molto apprezzato.

    
posta Matt 10.02.2018 - 21:37
fonte

4 risposte

4

Per rispondere al titolo: no.

La premessa della tua domanda non è corretta in primo luogo. Le ripetute iterazioni di SHA256 non sono un algoritmo adatto per l'archiviazione delle password.

Dovresti utilizzare Argon2 se la tua lingua ha un'associazione disponibile. Se utilizzi PHP puoi utilizzare la funzione incorporata password_hash con PASSWORD_ARGON2I bandiera. Per le applicazioni .NET è disponibile un'implementazione completamente gestita . È disponibile un'associazione per Java . C'è un fantastico articolo di Paragon su memorizzazione sicura delle password , che ha un esempio codice per un sacco di lingue.

Se non puoi assolutamente usare Argon2, anche se non vedo ragioni per cui non potresti (ci sono collegamenti per quasi tutte le lingue ora!), allora dovresti usare scrypt, bcrypt o PBKDF2-SHA256, in quell'ordine di preferenza . Di nuovo quasi ogni lingua ha associazioni o librerie per questi.

    
risposta data 11.02.2018 - 02:18
fonte
3

Rompiamo la domanda in due elementi:

1) Sta utilizzando 100.000 iterazioni sufficienti per la memorizzazione delle password?

Dipende! Dovresti sempre usare un numero di operazioni / un fattore di iterazione elevato come il tuo sistema può gestire con risposte ragionevoli, comprendendo che la tua parte sarà single thread (hashing quella fornita password), mentre l'attacker sarà parallelo (provando molte password possibili simultaneamente ).

Quindi, determina quanto tempo puoi permetterti di spendere per ogni hash; se le regole sono l'hashing può richiedere non più di 1/10 di secondo, e ci si aspetta 16 accessi al secondo su un box di 8 core, quindi il conteggio dell'iterazione hash / fattore di lavoro dovrebbe richiedere 1/20 di secondo.

2) Sta usando SHA-256 abbastanza buono per la memorizzazione delle password?

Di per sé, no. Come parte di un costrutto che include un sale, sì, assolutamente. Il costrutto che stai cercando utilizza SHA-256 è PBKDF2-HMAC-SHA-256, che usa le iterazioni di HMAC-SHA-256, che è semplicemente HASH (tasto XOR opad, HASH (tasto XOR ipad, testo)) dove ipad e opad sono valori fissi (dimensionati per SHA-256).

PBKDF2 (RFC2898) le itera come tali:

           U_1 = PRF (P, S || INT (i)) ,
           U_2 = PRF (P, U_1) ,
           ...
           U_c = PRF (P, U_{c-1}) .

È importante notare che il costrutto HMAC è il PRF.

Risposta: Sì, se usi PBKDF2-HMAC-SHA-256 con 100.000 iterazioni E non puoi adattarti di più al tempo disponibile

Puoi trovare una varietà di implementazioni PBKDF2 nel mio repository Github , incluse una varietà di lingue e da- implementazioni scratch come pure OpenSSL e PolarSSL e altre implementazioni basate su librerie, inclusi i vettori di test.

Confronta la velocità di qualunque cosa tu scriva e qualsiasi altra cosa sia disponibile per te - per l'hashing sicuro delle password devi usare la tua implementazione più veloce

    
risposta data 11.02.2018 - 18:41
fonte
1

Quale algoritmo?

Vedi: Come password di hash sicure?

quante iterazioni?

Vedi: Parametri per PBKDF2 per l'hashing della password

    
risposta data 11.02.2018 - 19:11
fonte
-5

Potresti farlo, ma onestamente, qual è il guadagno? Spenderai molte risorse preziose per farlo, in ogni tipo di implementazione che riesco a pensare. Inoltre, dopo alcune migliaia di iterazioni, non otterrai molto in termini di sicurezza. Se vuoi usare sha fai una bella implementazione con sale unico per ogni utente e magari hash di nuovo due o tre volte se questo ti fa sentire più sicuro. Non c'è bisogno di più iterazioni. Dopodiché, puoi utilizzare un algoritmo migliore o migliorare altri aspetti delle implementazioni di sicurezza.

    
risposta data 10.02.2018 - 22:29
fonte

Leggi altre domande sui tag