Grandi risposte finora, ma una cosa che penso dovrebbe essere menzionata anche perché non è molto chiara dall'articolo a cui si fa riferimento. La funzione di hashing viene eseguita contro il sale concatenato insieme alla password e quindi il sale viene nuovamente concatenato con l'hash risultante dalla funzione e quella stringa è ciò che è memorizzato nel database delle password come / etc / shadow.
Un vero esempio
Questo esempio mostra cosa succede quando un utente sceglie la sua password su un sistema Unix, come viene memorizzato in / etc / shadow e come viene controllata la password quando l'utente esegue il login. Utilizzerò invece esempi reali di nomi variabili o stringhe come foobar. Ignorerò anche cose come pam per renderlo un po 'più semplice.
- Utente 'monroe' esegue il programma passwd e sceglie la password 'HorseStapler + 5'
- Il programma passwd riceve la password, la controlla (per le regole di validità), quindi determina quale algoritmo deve utilizzare per l'hashing, (DES, MD5, SHA-256, SHA-512) Diciamo che il sistema sceglie SHA- 512 per il suo algoritmo di hashing.
- L'algoritmo SHA-512 utilizza una stringa casuale di 16 caratteri per il suo sale composto da caratteri alfanumerici + '.' e '/' . Il sistema genera una stringa salt casuale "BohpaS.aul0Qua / t".
- Il sistema ora concatena il sale sulla password come questo 'HorseStapler + 5BohpaS.aul0Qua / t'. Questo è il "nuovo" testo in chiaro che verrà in realtà sottoposto a hash e memorizzato. Lo rende più unico in modo che chiunque usi la password "HorseStapler + 5" a causa della sua popolarità non risulti nello stesso hashtext nel database delle password. Protegge anche dagli attacchi dei tavoli arcobaleno.
- Il sistema esegue l'algoritmo hash sulla nuova stringa SHA512 ('HorseStapler + 5BohpaS.aul0Qua / t') e ottiene l'output hashtext 'IVUen1dSKZ634jM.KLQ1Am / WPh..DSO2MYI53qffac2IFzESKwIufyVjzQGlxNenOXGehMTCdSoL9DLPe6Zfm1'
- In modo che il sistema possa autenticare l'utente in futuro, memorizza il sale e un indicatore per il tipo di hashing utilizzato nel file / etc / shadow come la seguente stringa nel secondo campo (campo crittografato) per quello la voce dell'utente come questa '$ 6 $ BohpaS.aul0Qua / t $ IVUen1dSKZ634jM.KLQ1Am / WPh..DSO2MYI53qffac2IFzESKwIufyVjzQGlxNenOXGehMTCdSoL9DLPe6Zfm1'
La voce completa in / etc / shadow è la seguente:
monroe:$6$BohpaS.aul0Qua/t$IVUen1dSKZ634jM.KLQ1Am/WPh..DSO2MYI53qffac2IFzESKwIufyVjzQGlxNenOXGehMTCdSoL9DLPe6Zfm1:15196:0:99999:7:::
La parte $ 6 $ indica che si trattava di hash SHA-512. La parte tra il 2 ° e il 3 ° carattere '$' memorizza il sale che è stato usato. Questo campo nel file shadow è chiamato campo crittografato. Ad alcune persone questo nome non piace perché è hash, non crittografato. Crittografato implica che può essere decodificato, cosa che non può. Tuttavia, mi riferirò ad esso come il campo della password crittografato.
Re-autenticazione
- La volta successiva che l'utente monroe accede al sistema, invia la password "HorseStapler + 5".
- Il sistema ricerca l'utente in / etc / shadow e trova la stringa completa sopra. Il sistema prende la parte salt di esso (la parte tra il 2 ° e il 3 ° '$') e poi la concatena con la password come sopra. Quindi blocca quello usando l'algoritmo SHA-512 come indicato dall'algoritmo designatore '6' tra il 1 ° e il 2 ° '$'.
- Il sistema confronta quindi l'hashtext risultante con la stringa dopo il terzo '$' nel campo della password crittografata del file shadow.
Si spera che questo dimostri perché l'algoritmo di hashing deve essere solo un algoritmo a senso unico e come viene usato esattamente il sale.
Il motivo del file shadow è perché il file / etc / password deve essere leggibile da un mondo su un sistema unix. Hanno usato per memorizzare la password crittografata (e molto tempo fa la password cleartext anche) nel 2 ° campo del file / etc / password. Lo hanno spostato nel file shadow e hanno dato solo l'accesso come root a quel file e il meccanismo di autenticazione ha bisogno dei privilegi di root per autenticarti.
Bene, questo ha finito per essere molto più lungo di quanto pensassi.