Sembra che tu pensi che il sale e / o l'algoritmo di salatura e hashing debbano essere tenuti segreti. Loro non. Salt protegge solo contro scenari di minacce molto specifici.
Ricorda che il calcolo di un hash su un valore restituisce sempre lo stesso valore di hash (altrimenti sarebbe inutile.) Ma ciò significa che un utente malintenzionato può usare quella proprietà per testare i valori hash nel tuo database mediante ipotesi di hashing. Se la sua ipotesi ha lo stesso valore di un hash nel tavolo, la sua ipotesi era corretta e lui conosce quella password. Salting aiuta a prevenire che questo sia un problema in due modi.
-
Aggiungendo una password lunga saltuale alla password prima dell'hashing, essa protegge da qualcuno che pre-calcola i valori hash delle ipotesi di password. (Questo è chiamato "rainbow table attack", puoi andare online e acquistare un disco rigido da 1TB con miliardi di hash precomputer già in una tabella di ricerca.)
-
Usando un salt unico per ogni password, proteggi contro qualcuno che individua le collisioni nel tuo database. Senza usare un unico salt per ogni password, se la mia password era ABC e ha cancellato a 123, e se ti è capitato di usare ABC come password, sarebbe anche hash a 123. Chiunque guardi il database vedrebbe che entrambi condividiamo una password comune
In nessun caso l'algoritmo di salt and hashing deve essere tenuto segreto per preservare queste protezioni, quindi puoi open source tutto questo lavoro.
Per maggiore sicurezza, alcune persone aggiungono ciò che viene chiamato "pepe" in questo algoritmo; 'pepe' è un nome carino per un valore salato comune che viene applicato a tutte le password in un sistema e tenuto segreto.
Ciò che è importante anche per proteggere le tue password in uno scenario di violazione è che l'algoritmo di hashing delle password è costoso dal punto di vista computazionale. Questo aiuta a prevenire gli attacchi di forza bruta, perché l'attaccante in genere non può spendere abbastanza tempo della CPU per testare miliardi di ipotesi. Il modo in cui questo viene raggiunto è attraverso la ripetizione di un algoritmo di hashing crittograficamente sicuro. Un computer moderno con una scheda GPU può calcolare 10 s di miliardi di hash SHA-1 al secondo. Se hai usato SHA-1 come algoritmo di hashing della password, significa che un utente malintenzionato potrebbe testare 10 miliardi di tentativi di password al secondo. Usando una funzione di hashing della password come PBKDF2, si ripete l'hash migliaia di volte, assicurandosi che l'autore dell'attacco possa testare solo alcune centinaia di ipotesi al secondo.