Consentitemi di utilizzare una risposta per spiegare le differenze tra l'allungamento delle chiavi e l'hashing, anche se questa non è una risposta alla vostra domanda.
Non ho intenzione di utilizzare un esempio di collisione reale, perché non so cosa siano, quindi i miei esempi di hash saranno puramente casuali.
Immagina che la tua password sia pass123 , lascia sha1Result = sha1('pass123')
.
Una collisione si ha quando bksdajfdjfaskf può anche essere usato, dove sha1Result also = sha1('bksdajfdjfaskf')
.
Un KDF è un ciclo di feedback, dove sha1Result2 = sha1(sha1Result)
e sha1Result3 = sha1(sha1Result2)
e così via n numero di volte.
La seguente funzione KDF()
sarà KDF(password, hash-algorithm, iteration-count)
Lascia kdfResult = KDF('pass123', SHA1, 100,000)
.
Consenti kdfResult also = sha1('jadfjlkdfjasldfjskdf')
perché abbiamo una collisione, sort-of, ma non proprio.
Perché per accedere al mio sistema, devi passare attraverso il mio KDF()
, solo avere una collisione sha1()
del mio KDF()
non ti aiuta, perché non lo faccio sha1()
del testo in chiaro fornito per poterti autenticare, I KDF()
del testo in chiaro fornito e KDF('jadfjlkdfjasldfjskdf', SHA1, 100,000)
non corrisponde a KDF('pass123', SHA1, 100,000)
.
Questo è un caso d'uso diverso per un KDF che per la crittografia HDD. Per la crittografia HDD, KDF non viene utilizzato per l'autenticazione, ma è utilizzato come chiave per la crittografia dei dati.
Tuttavia, potrebbe essere quello che dovresti riformare la tua domanda. Le vulnerabilità di collisione SHA1 rappresentano ancora una vulnerabilità quando viene iterata a 103,696 volte?