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?