Il valore del sale non è nella sua segretezza, è nella sua differenziazione e nella complessità aggiunta. L'hai toccato un po '.
In primo luogo, due hash delle password con diversi sali hanno diversi hash risultanti. Pertanto, un utente malintenzionato non può visualizzare una tabella delle password e scoprire utenti che condividono la stessa password.
In secondo luogo, mentre scrivi, una tabella arcobaleno potrebbe essere pre-calcolata per un ampio set di input per password, consentendo un recupero veloce della password, O (1). Tuttavia, questo è spesso per le password non salate.
In terzo luogo, l'hash di salt per una password è univoco per quell'hash e dovrebbe avere la stessa dimensione (lunghezza del bit) dell'algoritmo di hash. Una singola tabella arcobaleno è la dimensione di tutti gli input della password. Supponendo password di 8 caratteri, caratteri alfanumerici maiuscole e minuscole (diciamo 10 extra), quindi 72 caratteri. 8 * log2 (72) è di circa 50 bit. Pertanto, la memoria della tabella arcobaleno per le password hash sha-1 è 50 + 160 o 2 ^ 210 bit.
A 2 ^ 202 byte di spazio di archiviazione, questo è già più grande di tutto lo spazio di archiviazione attuale sul pianeta. Penso che possiamo concludere due cose: 1) non tutte le password sono posizionate in una tabella arcobaleno e 2) le tabelle arcobaleno non salate sono già abbastanza grandi.
Ora, creare arcobaleni per ogni sale possibile significa richiedere 210 * 160 o 2 ^ 33600 bit di memoria. Dove mettere tutti quei dati (altri universi) impallidisce rispetto al tempo richiesto per crearli (oltre la fine del nostro universo).
Le tabelle arcobaleno per sale non accadrà.
L'attacco corretto consiste nell'acquisire il database delle password ed eseguire un attacco dizionario contro singole voci usando i sali non segreti e specifici per la password.