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