Ho intenzione di spiegare ogni livello di sicurezza per la password memorizzata nel database, forse questo aiuterà a chiarire l'importanza del sale.
Livello 1 : password memorizzata in chiaro nel database.
Questa è solo pura stupidità . Ma a volte, la grande azienda ottiene il loro database compromesso e, oh sorpresa, tutte le password sono archiviate in chiaro. Che peccato!
Livello 2 : password memorizzata utilizzando un algoritmo di hashing.
Questo è un passo verso una maggiore sicurezza. Se un utente malintenzionato ottiene la password con hash, non può ancora accedere utilizzando questa credenziale al servizio. Dovrà prima "disfare" la password utilizzando un Rainbow Table o brido forzante it .
Ciò significa che è necessario un po 'più di lavoro da parte dell'utente malintenzionato, ma è comunque possibile recuperare la password originale.
Livello 3 : password memorizzata utilizzando un algoritmo di hashing con un salt.
Questo inizia a essere interessante. Come abbiamo visto su Livello 2 , un utente malintenzionato che ha accesso alla password con hash può forzarlo o usare una tabella arcobaleno. L'aggiunta di una parola salt alla password originale rende la tabella di colori totalmente inutile perché non prende in considerazione il sale.
È ancora possibile ottenere la stringa originale usando una tabella arcobaleno, ma significherebbe che nella tabella arcobaleno esiste la password + sale. Dato che un sale è generalmente molto lungo, lo strano avere un valore hash di una stringa (40+) è quasi impossibile. L'unica soluzione rimasta è la forza bruta.
Livello 4 : password memorizzata utilizzando un algoritmo di hash con un salt e un peper.
Questo è molto interessante (è il motivo per cui sto postando la mia risposta dato che quelli attuali sono già interessanti).
Ti consiglio di usare un algoritmo di hashing come BCrypt, SCrypt o PBKDF2 dato che non sono corretti finora, e sono molto lenti nell'hack, aumentando il tempo necessario per romperne uno e poi un database completo di password.
La differenza tra sale e pepe è la loro posizione. Il sale viene generalmente memorizzato nel database ma il pepe si trova nel codice. Questo può sembrare strano, ma l'idea originale è che un database possa essere compromesso, ma non il codice, lasciando l'attacker a sale e un elenco di password hash inutili. Inoltre, aggiunge ancora più complessità alla password hash, rendendo le tabelle arcobaleno completamente inutili (se supponiamo che fossero ancora un po 'utili con un salt!).
Nel caso in cui solo il database sia compromesso, anche la forza bruta è quindi inutile poiché l'attaccante non sta cercando un valore (la password originale) ma per due valori (la password originale AND il pepe).