GNU/Linux >> Linux Esercitazione >  >> Linux

Perché l'output di openssl passwd è diverso ogni volta?

> openssl passwd -1 "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/

Questo è il crypt(3) in stile Unix esteso sintassi dell'hash della password, in particolare la sua versione MD5.

Il primo $1$ identifica il tipo di hash, la parte successiva OKgLCmVl è il sale utilizzato per crittografare la password, quindi dopo il separatore $ carattere alla fine della riga è l'effettivo hash della password.

Quindi, se prendi la parte salina dalla prima crittografia e la usi con le successive, dovresti ottenere sempre lo stesso risultato:

> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/
> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/

Quando modifichi una password , dovresti sempre passare a un nuovo sale. Ciò impedisce a chiunque di scoprire a posteriori se la nuova password fosse effettivamente la stessa di quella vecchia. (Se si desidera impedire il riutilizzo di vecchie password, è ovviamente possibile eseguire l'hashing della nuova password candidata due volte:una volta con il vecchio salt e poi, se il risultato è diverso dalla vecchia password e quindi accettabile, di nuovo con una nuova sale.)

Se usi openssl passwd senza opzioni, ottieni il crypt(3) originale -hash compatibile, come descritto da dave_thompson_085. Con esso, il sale è costituito da due prime lettere dell'hash:

> openssl passwd "a"
imM.Fa8z1RS.k
> openssl passwd -salt "im" "a"
imM.Fa8z1RS.k

Non dovresti usare questo vecchio stile hash in nessuna nuova implementazione, poiché limita la lunghezza effettiva della password a 8 caratteri e ha troppo poco sale per proteggersi adeguatamente dai metodi moderni.

(Una volta ho calcolato la quantità di dati necessari per memorizzare un set completo di tabelle arcobaleno per ogni classico crypt(3) hashish. Non ricordo il risultato esatto, ma supponendo che i miei calcoli fossero corretti, era dell'ordine di "una modesta pila di dischi multi-terabyte". A mio parere, ciò lo colloca all'interno della gamma "i criminali organizzati potrebbero farlo".)


A differenza dei normali hash, password gli hash dovrebbero usare 'salt' e dovrebbe essere lento (di solito iterando) per impedire a un utente malintenzionato che ottiene gli hash di recuperare facilmente le password. Vedi canonical su security.SX e molti ad esso collegati.

La cripta(3) originale degli anni '70, ora chiamata DEScrypt per chiarezza, è (leggermente) salata :

sale è una stringa di due caratteri scelta dall'insieme [a-zA-Z0-9./]. Questa stringa viene utilizzata per perturbare l'algoritmo in uno dei 4096 modi diversi.

Lo schema MD5crypt leggermente più recente è salato e iterato, ma non all'altezza degli standard moderni. Entrambi questi e alcuni dei migliori schemi che li hanno sostituiti su Unix(es) sono dettagliati in https://en.wikipedia.org/wiki/Crypt_%28C%29 .


L'utente muru ha ragione. La password è salata.

Puoi aggiungere l'opzione -salt string te stesso e l'hash rimane lo stesso.

$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142
$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142

Linux
  1. Gestire gli utenti Linux con il comando passwd

  2. Come fare in modo che "data" produca l'ora da un fuso orario diverso?

  3. Perché Ls -l genera una dimensione diversa da Ls -s?

  4. Passare l'hash con Desktop remoto

  5. perché l'output di `du` è spesso così diverso da `du -b`

Perché ora è il momento migliore per usare GNOME

Forza una modifica della password al prossimo accesso

Utilizzando il comando passwd dall'interno di uno script di shell

Perché pr_debug del kernel Linux non fornisce alcun output?

qual è la lunghezza massima della password su un sistema unix/linux?

Come costringo un utente a cambiare una password al primo accesso utilizzando ssh?