Come creare una password con hash SHA-512 per shadow?


62

Le precedenti domande SF che ho visto hanno portato a risposte che producono password con hash MD5.

Qualcuno ha un suggerimento per produrre una password con hash SHA-512? Preferirei una riga anziché una sceneggiatura ma, se una sceneggiatura è l'unica soluzione, va bene lo stesso.

Aggiornare

Sostituendo le versioni precedenti di py2 con questa:

python3 -c "import crypt;print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"

4
SHA e MD5 non sono crittografia. Sono algoritmi di hashing. La differenza cruciale è che i dati con hash non sono recuperabili. Che cosa devi fare?
SmallClanger,

Grazie. Modificata la domanda. man 5 shadowsi riferisce ad esso come "password crittografata", quindi ho seguito quel termine.
Belmin Fernandez,

2
Mi scuso se è stato un po 'snarky. Stai cercando di generare manualmente hash di password compatibili con Shadow? In tal caso, dai un'occhiata ai tuoi /etc/shadowcontenuti. Vedrai $x$salt$hash. xdenota l'algoritmo usato da crypt, 6tipico dei moderni linux, che è sha512 (vedi man 3 crypt). Entrambe le risposte seguenti produrranno lo stesso hash, purché tu gli dia lo stesso sale.
SmallClanger,

2
Oh no, per niente snarky. Hai chiarito qualcosa di cui ero confuso, quindi sono molto grato signore!
Belmin Fernandez,

1
Grazie! Quello basato su passlib è l'unico che sono stato in grado di far funzionare su OS X.
Stig Brautaset

Risposte:


65

Ecco una fodera:

python -c 'import crypt; print crypt.crypt("test", "$6$random_salt")'

Python 3.3+ include mksaltin crypt , il che rende molto più semplice (e più sicuro) l'uso:

python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'

Se non si fornisce un argomento di crypt.mksalt(poter accettare crypt.METHOD_CRYPT, ...MD5, SHA256, e SHA512), si utilizzerà il più forte disponibile.

L'ID dell'hash (numero dopo il primo $) è correlato al metodo utilizzato:

  • 1 -> MD5
  • 2a -> Blowfish (non in mainline glibc; aggiunto in alcune distribuzioni Linux)
  • 5 -> SHA-256 (dal glibc 2.7)
  • 6 -> SHA-512 (dal glibc 2.7)

Ti consiglierei di cercare quali sono i sali e tali e come per i piccoli commenti commentare la differenza tra crittografia e hash.

Aggiornamento 1: la stringa prodotta è adatta per gli script shadow e kickstart. Aggiornamento 2: avviso. Se stai usando un Mac, vedi il commento sull'uso di questo in Python su un Mac in cui non sembra funzionare come previsto.


5
Sostituire random_saltcon un sale casuale effettivo.
Belmin Fernandez,

6
Non riesco a farlo funzionare in Yosemite. Questo è ciò che sputa: $6asQOJRqB1i2- non sembra abbastanza lungo per essere corretto!
Stig Brautaset,

3
Lascia che il modulo cripta ti python -c 'import crypt; print crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512))'
dia

2
per impostazione predefinita glibc utilizza solo 5000 round, che è abbastanza debole in questi giorni. È possibile specificare il numero di giri con l'aggiunta di "$ giri = ###", per esempio: crypt.crypt("test", "$6$rounds=200000$random_salt"). 200000 impiega circa 100 ms sul mio attuale laptop.
srparish,

2
Questo non dovrebbe essere usato, almeno su un Mac. Su un Mac (10.13.5) questo restituisce sempre lo stesso risultato errato.
Oskarpearson,

37

Su Debian puoi usare mkpasswd per creare password con diversi algoritmi di hashing adatti per / etc / shadow. È incluso nel pacchetto whois (secondo apt-file)

mkpasswd -m sha-512
mkpasswd -m md5

per ottenere un elenco dei tipi di algoritmi di hashing disponibili:

mkpasswd -m help 

HTH


3
Quale pacchetto lo fornisce? C'è anche un mkpasswdprogramma (parte di aspettarsi) sotto Fedora, ma è inutile per questo scopo.
Cristian Ciupitu

Come ha detto, la versione di mkpasswdcui sta parlando è per Debian / Ubuntu. La mkpasswdsu Fedora (almeno fino a 14) non contiene l' -minterruttore.
slm

3
Curiosamente, è il pacchetto whois, eredità di Debian. Vedi, dpkg -S /usr/bin/mkpasswdnon ci potevo credere: D
Rbjz, il

Per controllare una password, se la prima cifra è 6, usa la parte tra il secondo e il terzo dollaro come sale. Per esempio per la root:$6$AbCdE$xyz:...si dovrebbe usare: mkpasswd -m sha-512 -S AbCdE. Con la password corretta, dovresti ottenere lo stesso hash.
Luc,

24

Migliore risposta: grub-cripta

Usage: grub-crypt [OPTION]...
Encrypt a password.

-h, --helpPrint this message and exit
-v, --version           Print the version information and exit
--md5                   Use MD5 to encrypt the password
--sha-256               Use SHA-256 to encrypt the password
**--sha-512             Use SHA-512 to encrypt the password (default)**

1
Soluzione semplice ... ha funzionato per me su CentOS 6.
Banjer

4
Sui sistemi che hanno il grub-cryptcomando, questo è davvero il modo più sicuro e conveniente per farlo. Non ha senso giocare manualmente con i sali quando potresti rovinarlo. Il problema è che sempre più sistemi moderni hanno GRUB2 e quindi non includeranno questo comando.
risposta

11

Ecco un breve codice C per generare la password SHA-512 su vari sistemi operativi di tipo Unix.

File: passwd-sha512.c

#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  if ( argc < 3 || (int) strlen(argv[2]) > 16 ) {
    printf("usage: %s password salt\n", argv[0]);
    printf("--salt must not larger than 16 characters\n");
    return;
  }

  char salt[21];
  sprintf(salt, "$6$%s$", argv[2]);

  printf("%s\n", crypt((char*) argv[1], (char*) salt));
  return;
}

compilare:

/usr/bin/gcc -lcrypt -o passwd-sha512 passwd-sha512.c

utilizzo:

passwd-sha512 <password> <salt (16 chars max)>

Questa domanda ha 3 anni ...
Grumpy,

Questo commento non è poi così vecchio. App carina ci sei arrivato, è solo una risposta lì 1up anche mentre sembra un esempio di pagina man :)
Sampo Sarrala,

4

Perl soluzione one-liner per generare password con hash SHA-512:

perl -le 'print crypt "desiredPassword", "\$6\$customSalt\$"'

Ha lavorato su RHEL 6


2

Perché non eseguire i seguenti controlli e modifiche ai computer Centos / RHEL per assicurarsi che tutti gli hash delle password per / etc / shadow vengano eseguiti con sha512. Quindi puoi semplicemente impostare il tuo passworkd normalmente con il comando passwd

#Set stronger password hasing
/usr/sbin/authconfig --test | grep sha512 > /dev/null
if [ $? -ne 0 ]; then
echo "Configuring sha512 password hashing"
sudo /usr/sbin/authconfig --enableshadow --passalgo=sha512 --updateall
fi

2

Ecco un one-liner che utilizza i comandi di shell per creare una password con hash SHA-512 con un salt casuale:

[root @ host] mkpasswd -m sha-512 MyPAsSwOrD $ (openssl rand -base64 16 | tr -d '+ =' | head -c 16)

Appunti

  1. Potrebbe essere necessario installare il pacchetto "whois" (Debian, SuSE, ecc.), Che fornisce "mkpasswd".
  2. Vedi crypt (3) per i dettagli sul formato delle linee in "/ etc / shadow".

Sfortunatamente il whoispacchetto di Fedora 18 non ne fornisce mkpasswd.
Cristian Ciupitu

1
In Arch Linux: / usr / bin / mkpasswd è di proprietà di prevedono 5.45-3
Nowaker

Lo stesso su Fedora 20 e fa qualcos'altro.
Cristian Ciupitu,

2
Sfortunatamente il comando suggerito ha due problemi: 1) La password fornita è ora memorizzata nella cronologia della shell ed è visibile a chiunque abbia il comando 'history' o simile. 2) Non è necessario fornire il salt casuale dalla riga di comando - e penso che dovresti lasciare che mkpasswd lo faccia per te invece di usare i trucchi funky di openssl. (Nota che questo è vero almeno su Ubuntu Quantal. Puoi testarlo eseguendo "mkpasswd -m sha-512 pippo" più volte. Vedrai i cambiamenti di sale. Il sale è il valore tra il 2 ° e il 3 ° carattere $. )
Oskarpearson,

2

Leggi il commento qui sotto per conoscere le implicazioni di sicurezza di questa risposta

Per quelli della mentalità Ruby ecco un one-liner:

'password'.crypt('$6$' + rand(36 ** 8).to_s(36))

1
Ciò non è corretto: la funzione rand di Ruby non è sicura: utilizza un PRNG, quindi questo genererà risultati che possono essere retroingegnerizzati in base a un'ipotesi del tempo / stato del momento in cui è stato eseguito.
Oskarpearson,

1

Questo script ha funzionato per me su Ubuntu 12.04 LTS: https://gist.github.com/JensRantil/ac691a4854a4f6cb4bd9

#!/bin/bash
read -p "Enter username: " username
read -s -p "Enter password: " mypassword
echo
echo -n $username:$mypassword | chpasswd -S -c SHA512

Ha le seguenti caratteristiche che mancano ad alcune delle altre alternative:

  • Genera il suo sale in modo sicuro. Nessuno dovrebbe fare affidamento sul farlo manualmente. Mai.
  • non memorizza nulla nella cronologia delle shell.
  • per chiarezza, stampa la password dell'utente generata che può essere utile quando si generano le password di molti utenti.

2
Nota che funzionerà solo se hai chpasswdsul tuo sistema.
Matt Sanders,

FYI: chpasswd non supporta -S in shadow-utils-4.1.5.1
Saustrup

0

Gli algoritmi HASH sono per la produzione di digest MESSAGGIO, non sono mai adatti per le password, che dovrebbero usare un qualche tipo di HKDF ( http://tools.ietf.org/rfc/rfc5869.txt ) - vedi PBKDF2 o BCrypt


Buon punto, ma man cryptmi dice che PBKDF2 non è supportato.
Huygens,

0
#!/usr/bin/env python

import getpass

from passlib.hash import sha512_crypt

if __name__ == "__main__":
    passwd = getpass.getpass('Password to hash: ')
    hash = sha512_crypt.encrypt(passwd)

    print hash

Puoi clonarlo dal mio repository github se vuoi: https://github.com/antoncohen/mksha


0

Non è una fodera, ma potrebbe aiutare qualcuno:

import crypt, getpass, pwd, string, sys, random
randomsalt = ""
password = getpass.getpass()
choices = string.ascii_uppercase + string.digits + string.ascii_lowercase
for _ in range(0,8):
    randomsalt += random.choice(choices)
print crypt.crypt(password, '$6$%s$' % randomsalt)

randomnon è crittograficamente sicuro, os.urandomdovrebbe essere usato. Anche 8 caratteri del dizionario di 56 caratteri sono troppo piccoli. Concatenare una puntura più e più volte in pitone è anche una cattiva forma (ha una complessità O (n ^ 2))
Hubert Kario

0
$ htpasswd -c /tmp/my_hash user1
New password: 
Re-type new password: 
Adding password for user user1
$ cat /tmp/my_hash
user1:$apr1$oj1ypcQz$4.6lFVtKz2nr8acsQ8hD30

Ovviamente, prendi semplicemente il secondo campo e puoi eliminare il file dopo averlo aggiunto a shadow o per usarlo con sudo (ancora molto probabilmente shadow).


0

Dai un'occhiata alla pagina man di crypt (3) e penso che scoprirai che lo strumento crypt è stato aggiornato per usare glibc e sha256 ($ 5) e sha512 ($ 6), più round, sale molto più grande e così via .

Chiaramente SHA512 è rilevante per come funziona / etc / shadow.

Detto questo, questa pagina web è stata molto utile, in particolare MKPASSWD, poiché questo ha risolto il MIO problema.

Data una password potenzialmente "persa", posso usare MKPASSWD e il salt, per generare l'hash SHA512 e confermare / negare un elenco di password candidate.

Vorrei usare John The Ripper - ma almeno sul mio hardware (Raspberry Pi) e sul mio budget (niente) - John non può farlo (non sembra supportare le funzionalità avanzate di crypt / glibc nella versione gratuita di raspbian.

Intendiamoci, dato che ho abbastanza permessi per leggere / scrivere / etc / shadow, potrei semplicemente sovrascrivere l'hash e andare avanti con la vita ... questo è un esercizio accademico.


NOTE Note di Glibc La versione glibc2 di questa funzione supporta algoritmi di crittografia aggiuntivi.

   If salt is a  character  string  starting  with  the  characters
   "$id$" followed by a string terminated by "$":

          $id$salt$encrypted

   then instead of using the DES machine, id identifies the encryp‐
   tion method used and this then determines how the  rest  of  the
   password  string is interpreted.  The following values of id are
   supported:

          ID  | Method
          ─────────────────────────────────────────────────────────
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

   So  $5$salt$encrypted  is  an  SHA-256  encoded   password   and
   $6$salt$encrypted is an SHA-512 encoded one.

0

Se hai bisogno di un'alternativa a una riga scritta in perl / python, mkpasswd è una buona corrispondenza. Mentre è incluso nel pacchetto whois Debian, manca nei sistemi CentOS / RHEL. Ho modificato la versione Debian di mkpasswd e ho incluso un meccanismo di generazione del sale più forte basato su OpenSSL. Il binario risultante conserva completamente tutti i parametri della riga di comando della versione di Debian. Il codice è disponibile su github e dovrebbe essere compilato su qualsiasi tipo di Linux: mkpasswd


-4

Non sono sicuro di come sia correlato SHA-512 /etc/shadow. Queste password sono state modificate crypt.

Ma se vuoi una password con hash con SHA-512 puoi farlo echo -n the_password | sha512sum. Non è possibile utilizzare l'output per / etc / shadow.


2
echo -n the_passwordquindi non stai cancellando la nuova riga. </pedant>
SmallClanger

Le password in shadownon sono più crypt () ed è da anni. I sistemi moderni utilizzano almeno md5.
Alexander Janssen,

6
In realtà le password shadowsono ancora modificate, crypt()ma la funzione è stata aggiornata per supportare diversi algoritmi. Indipendentemente da ciò, il metodo descritto in questa risposta non produce hash adatto per /etc/shadow. L'algoritmo è più complesso di un singolo hash round SHA-512.
scatto il
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.