TLDR; SHA256 è abbastanza buono
Per rispondere a questo abbiamo bisogno di guardare perché saltiamo, cancelliamo e usiamo più iterazioni dell'hash, in primo luogo;
-
Perché saltiamo? Per proteggere gli utenti che hanno entropia della password debole dall'avere la propria password incrinata (ad esempio, le tabelle arcobaleno o due utenti con la stessa password). Questo non è un problema perché UUID4 avrà 122 bit di entropia 1 .
Se volessimo creare una tabella arcobaleno di tutti i valori UUIDv4 che sono stati sottoposti all'hash SHA256 e potremmo fare 1 trilione di hash un secondo 2 . Ci vorrebbero 168,6 quadrilioni di anni per creare la tavola dell'arcobaleno. Quindi non dobbiamo preoccuparcene.
-
Perché abbiamo hash? per impedire che copie di testo in chiaro della password vengano archiviate. Questa sembra una buona idea. Non vuoi che qualcuno che possa leggere il tuo database 3 possa impersonare gli utenti.
-
Perché utilizziamo più iterazioni? per rallentare gli attacchi di forza bruta. Come accennato prima UUID4 avrà 122 bit di entropia. Il crack di questi hash è impossibile anche ad alta velocità.
[1] 128 bit - 6 bit che sono predeterminati
[2] Le attuali velocità di hashing più veloci sono concatenate continuamente, quindi non mi preoccuperò di provare a trovare la velocità più recente che sarà superata in pochi mesi.
[3] Potrebbe trattarsi di SQL Injection o di una copia trapelata da un backup o da un insider o altro.