Sale (crittografia)
Per capire la differenza tra il cracking di una singola password e un insieme di esse, considerate un file con gli utenti e le loro password hash. Diciamo che il file non è salato. Allora un attaccante potrebbe scegliere una stringa, chiamarla tentativo, e poi calcolare hash(tentativo). Poiché le funzioni hash sono uno-a-uno, ne consegue che ogni utente il cui hash è hash(attempt) deve avere come password attempt. Così, ogni corrispondenza incrina una password utente, e la probabilità di una corrispondenza aumenta con il numero di password nel file. Al contrario, se si usano i sali, l’attaccante dovrebbe calcolare l’hash(tentativo || sale), confrontare con la voce A, poi l’hash(tentativo || sale), confrontare con la voce B, e così via. Questo impedisce a qualsiasi tentativo di craccare più password (solo quando si evita il riutilizzo del sale).
I sali combattono anche l’uso di tabelle precompilate per craccare le password. Tale tabella potrebbe semplicemente mappare le password comuni ai loro hash, o potrebbe fare qualcosa di più complesso, come memorizzare i punti di inizio e fine di una serie di catene di hash precalcolate. In entrambi i casi, la salatura può difendere contro l’uso di tabelle precomputate allungando gli hash e facendoli attingere da set di caratteri più grandi, rendendo meno probabile che la tabella copra gli hash risultanti. In particolare, una tabella precalcolata dovrebbe coprire la stringa piuttosto che semplicemente .
Il moderno sistema di shadow password, in cui gli hash delle password e altri dati di sicurezza sono memorizzati in un file non pubblico, mitiga un po’ queste preoccupazioni. Tuttavia, rimangono rilevanti nelle installazioni multi-server che usano sistemi centralizzati di gestione delle password per spingere le password o gli hash delle password su più sistemi. In tali installazioni, l’account di root su ogni singolo sistema può essere trattato come meno fidato degli amministratori del sistema centralizzato di gestione delle password, quindi vale la pena assicurarsi che la sicurezza dell’algoritmo di hashing delle password, compresa la generazione di valori di sale unici, sia adeguata.
Un altro (minore) beneficio di un sale è il seguente: due utenti potrebbero scegliere la stessa stringa come password, o lo stesso utente potrebbe scegliere di usare la stessa password su due macchine. Senza un sale, questa password verrebbe memorizzata come la stessa stringa di hash nel file delle password. Questo rivelerebbe il fatto che i due account hanno la stessa password, permettendo a chiunque conosca una delle password dell’account di accedere all’altro account. Saldando le password con due caratteri casuali, anche se due account usano la stessa password, nessuno può scoprirlo semplicemente leggendo gli hash.