Controllare un hash salato contro una password conosciuta?

0

Ho creato un dump mysql dei miei utenti e password e li ho avvistati in una forma presentabile:

Password:

'6cc5db1c282daa071b0cf80982d19ec0f2e21976a4c39c0c7a3ab30f102b33e2780fd56f4d507e4873630eeb5ba1a8ad8d338bb8abcf64a513630a0dea7044db'
'1927f6acb76f53106a29015ba787e6f7c826f939a64be656a669f78515ffbb2447bee266e5f57751d98f4990f71d131bcb11575199b8e717a0ad91c381df43ca'
'dfd3b2e6478c0ca15102e74251a300abba96296662686f9eeba1f2ebbb9353ad9f91546d0c02ececd5e205c0a94e083a3f63eeec9642f69ad24fd674927c6a3d'

Sali:

'ecb2796f-e69d-4ad6-858f-832170b00b5c'
'a46a3486-79dd-428b-88a8-558303fe8dc8'
'02b6fedc-6932-4893-8725-cd4c8a191d57'

Con la prima voce su una corrispondente alla prima sull'altra. La password per la prima voce è la password. Sto usando sha512whirlpool come algoritmo di hashing.

Voglio usare un'utilità per cancellare una stringa ("password" in questo caso) usando lo stesso algoritmo e salandolo e confrontandolo con la password con hash. Qualcuno ha qualche idea di quale utilità potrebbe essere buona per questo? Speravo di usare mkpasswd, ma ho ricevuto un errore lì:

mkpasswd -m sha-512 password ecb2796f-e69d-4ad6-858f-832170b00b5c

E questo è l'errore:

Wrong salt length: 36 bytes when 8 <= n <= 16 expected.

Stavo facendo qualcosa di sbagliato qui? Qualche consiglio?

Nota: ho trasferito qui la domanda dallo stack overflow.

    
posta user2167980 08.03.2016 - 21:11
fonte

1 risposta

5

SHA-512 e Whirlpool sono due funzioni hash distinte, quindi si deve presumere che si stia utilizzando uno di essi, non entrambi. Non esiste una funzione hash chiamata "sha512whirlpool"; questo sarebbe un ibrido molto empio.

Le funzioni hash crittografiche non utilizzano i sali. Le funzioni di hashing Password sono costruzioni complicate che possono essere costruite con funzioni hash crittografiche o altri elementi. mkpasswd è un'interfaccia della riga di comando per la funzione di libreria C crypt() (che riguarda l'hashing della password e non con la crittografia, nonostante il suo nome). Sui sistemi Linux, crypt() supporta un numero di configurazioni di hashing delle password, una delle quali usa ripetutamente SHA-512, mescolando la password e il sale in vari passaggi. Questo non è in alcun modo l'unica costruzione di hashing delle password da una funzione di hash sottostante, quindi non c'è alcuna garanzia che gli esempi che hai a disposizione abbiano realmente utilizzato quella funzione.

Le costruzioni di hashing delle password tendono a funzionare su bytes , sia per il sale che per la password. Ma agli umani piace leggere personaggi . C'è quindi una certa traduzione tra i due, e, ancora una volta, non esiste una convenzione universale. I tuoi sali, come "ecb2796f-e69d-4ad6-858f-832170b00b5c", ricordano la tradizionale codifica delle stringhe di UUID . Un UUID è un identificatore a 128 bit, cioè una sequenza di 16 byte, ma la rappresentazione del carattere utilizza esadecimale con alcuni trattini in più, per un totale di 36 caratteri. Quando invochi mkpasswd , lo strumento tenta di convertire la stringa salt fornita non interpretandola come UUID in esadecimale-con-trattini, ma mappando ciascun carattere nel suo codice ASCII, trasformando così la stringa di 36 caratteri in un 36 -sale sale Quindi ti rimprovera di fornire un sale da 36 byte, mentre la funzione interna si aspetta una quantità di sale da 8 a 16 byte solo.

Poiché lo strumento da riga di comando mkpasswd si aspetta che il sale sia una "stringa", il passaggio di byte arbitrari può essere complicato nel caso in cui si desideri fornire byte che non corrispondono a caratteri stampabili. La funzione crypt() si aspetta un salt che consiste in byte diversi da zero. Potrebbe essere necessario ricorrere alla programmazione ...

    
risposta data 09.03.2016 - 00:39
fonte

Leggi altre domande sui tag