Come viene codificato l'hash della password nel file della password shadow?


11

Sto imparando a conoscere la sicurezza delle password di Linux (più curiosità di ogni altra cosa utile) e capisco che la vera password è sottoposta a hash e memorizzata nel file delle password shadow. Ciò di cui non sono sicuro, e che non sono riuscito a trovare nel mio breve Google, è la codifica utilizzata per codificare il valore con hash (e il valore del salt). Ovviamente non è esadecimale, ed è ovviamente testo, escluso il :personaggio. Qualcuno qui può dirmi cos'è quella codifica?

Modifica: capisco l'hashing (MD5, SHA-X), il salt e l'identificatore di hashing. Quello che sto cercando è il metodo di conversione dei risultati hash (un array di byte (byte [])) nella sequenza di caratteri che vedo nel file, ovvero: la codifica.


La tua domanda è molto legata a questa domanda.
Broam,

Risposte:


11

Nel caso di MD5 crypt (), il sale è solo una stringa casuale di massimo 8 caratteri da [a-zA-Z0-9./].

Il salt e la password vengono quindi hashed insieme, passati attraverso una funzione di rafforzamento, quindi codificati usando una variante su Base64:

  • lo stato MD5 (128 bit) viene mischiato e suddiviso in 6 gruppi, ciascuno contenente 3 byte (il gruppo finale include 2 byte di zero-padding)
  • ogni gruppo di 3 byte viene quindi suddiviso in 4 blocchi di 6 bit ciascuno
  • infine, ogni gruppo a 6 bit viene mappato su un carattere nell'intervallo [a-zA-Z0-9./]

8

Se vuoi solo sapere come viene codificata la password, crypt () usa uno speciale tipo di codifica Base64.

La codifica Base64 utilizza il seguente set di caratteri: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

Mentre la codifica crypt () utilizza questo set di caratteri: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Inoltre, a differenza di Base64, non esiste alcuna imbottitura "=".

D'altra parte, le implementazioni crypt () di MD5, SHA-X, ecc. Fanno molto di più che generare semplicemente un salt casuale, eseguire la funzione hash e codificarla usando la precedente codifica.

Consiglio di leggere questi due grandi post: "Hash password con MD5-crypt in relazione a MD5" e "Implementazione di SHA512-crypt vs MD5-crypt" , per una spiegazione più completa.



2

Stai cercando l'algoritmo utilizzato?

Tradizionalmente Unix e le prime varianti di Linux utilizzavano un DES indebolito basato su un massimo di 8 caratteri della password. La maggior parte delle installazioni Linux moderne utilizzano hash MD5 per le password e alcuni supportano SHA. Inoltre, è stato mostrato un supporto più modulare per algoritmi aggiuntivi, tra cui Blowfish. La libc GNU utilizzata dalla maggior parte di Linux supporta DES, MD5 e SHA, offrendoti un paio di opzioni.

Il tipo specifico di algoritmo hash utilizzato viene specificato come inizio della password come $ DIGIT $. Ad esempio, $ 1 $ è MD5.

Puoi ottenere dettagli più approfonditi da Wikipedia (vedi la pagina su Crypt_ (Unix) ) o google per "crypt unix" o "crypt linux".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.