Stai confondendo hash crittografici con gli hash delle password. Un hash crittografico prende un input e dà un output dall'aspetto casuale. Un hash delle password richiede una password e un salatissimo e molto lentamente fornisce un output dall'aspetto casuale .
Ciò di cui sei preoccupato qui sono gli attacchi preimage . Vuoi assicurarti che, conoscendo un hash y
, l'autore dell'attacco non possa trovare un valore x
tale che h(x) = y
. 80 bit di complessità sono ancora generalmente considerati "buoni" (sebbene non "grandi", e probabilmente vulnerabili a un aggressore ben finanziato come uno stato-nazione). Ciò significa che vuoi un hash in cui il miglior attacco preimage ha una complessità di oltre 80 bit.
Analisi
Iniziamo con MD5
poiché è una sorta di poster di un bambino per la crittografia obsoleta. L'attacco preimage più conosciuto su MD5
è 116.9 bit , ben oltre 80. Ma vuoi proteggere 1 trilioni , che consente all'aggressore di fare alcune ottimizzazioni.
Supponiamo che l'autore dell'attacco sia in grado di utilizzare una tabella hash (e molti terabyte di RAM) per verificare se un hash corrisponde a uno qualsiasi dei 1 trilione in O(1)
. Con 1 trilione di segreti questo riduce la complessità per rompere un singolo segreto mediante log 2 (10 12 ) ≈ 40 bit, che porta MD5
a circa 76 bit. Ancora non terribile, ma preoccupante se stai affrontando uno stato-nazione o vuoi mantenere questi segreti per molti anni.
Ma stai facendo la cosa giusta e usando SHA256
. Il miglior attacco di pre-immagine che ho trovato su SHA256
era per i passi ridotti e presentava ancora una complessità superiore a 250 bit, quindi in questo caso stai considerando oltre 210 bit di complessità. In questo caso, un utente malintenzionato eseguirà alcuni problemi con la fisica .