L'hashing di più volte (round) sembra una pratica standard nell'hash delle password per aumentare il fattore di lavoro.
Sicuramente, tutti saranno d'accordo nell'aumentare il fattore lavoro per calcolare l'hash della password è una buona cosa, ma mi chiedevo se non stessimo riducendo il fattore casuale dell'hash allo stesso tempo.
La mia teoria
Prendiamo un hash con un output a n bit.
È possibile che non si otterranno mai alcuni dei valori possibili di n bit quando si inseriscono tutti i possibili valori possibili di n-bit?
Ciò significherebbe che alcuni valori hash sono più probabili di altri poiché possono essere ottenuti da più valori di immissione. Significa anche che la funzione hash crea sottociclo che può essere molto brutto.
Il mio test
Volevo verificare se la mia teoria avesse dei meriti ma, ovviamente, non avevo la potenza di calcolo necessaria per analizzare una vera funzione di hash, quindi ne ho creato uno semplicistico.
La mia funzione emette i primi 8 bit di SHA512.
Ho quindi inserito tutti i possibili valori di 8 bit in questa funzione e salvato i risultati.
Definizioni
- Root: un valore a 8 bit che non si ottiene mai
- Percorso: tutti i possibili valori che puoi ottenere per la singola voce se hai cancellato più volte
- Ciclo: valori che si ripetono quando si hash più volte
I risultati
- Numero di radici: 97
- Percorso più lungo: 36
- Lunghezza media percorso: 17,21
- Numero di cicli: 5
- Ciclo più lungo: 6
- Numero di valori nei cicli: 13
- Percorso più lungo senza valori di ciclo: 30
- Lunghezza del percorso media senza valori del ciclo: 11,72
Conclusione allarmante
Questi risultati significano che se hai un hash una volta hai 159 possibilità, ma se hai hash 30 volte hai solo 13 possibilità.
Altri test
Ho aggiunto un sale che ho anteposto al valore ad ogni round. Ho pensato che potrebbe fare la differenza, ma ottengo risultati quasi simili con diversi valori di sale.
Le mie domande
So che il mio esperimento è troppo semplificato ma:
- E 'possibile che l'hashing più volte riduca la sicurezza di una funzione di hash se hai cancellato troppe volte?
- C'è qualche studio su questo argomento?