Permítame usar una respuesta para explicar las diferencias entre el estiramiento de las teclas y el hash, aunque esta no sea una respuesta a su pregunta.
No voy a usar un ejemplo de colisiones en el mundo real, porque no sé qué son, por lo que mis ejemplos de hash serán puramente aleatorios.
Imagina que tu contraseña es pass123 , deja que sha1Result = sha1('pass123')
.
Una colisión es cuando también se puede utilizar bksdajfdjfaskf , donde sha1Result also = sha1('bksdajfdjfaskf')
.
Un KDF es un bucle de retroalimentación, donde sha1Result2 = sha1(sha1Result)
y sha1Result3 = sha1(sha1Result2)
y así sucesivamente n varias veces.
La siguiente función KDF()
de ejemplo será KDF(password, hash-algorithm, iteration-count)
Deje kdfResult = KDF('pass123', SHA1, 100,000)
.
Dejemos kdfResult also = sha1('jadfjlkdfjasldfjskdf')
porque tenemos una colisión, algo así como, pero no realmente.
Porque para que inicies sesión en mi sistema, debes pasar por mi KDF()
, solo tener una colisión sha1()
de mi KDF()
no te ayuda, porque no te cojo sha1()
. para autenticarlo, KDF()
su texto sin cifrar suministrado y KDF('jadfjlkdfjasldfjskdf', SHA1, 100,000)
no coincide con KDF('pass123', SHA1, 100,000)
.
Este es un caso de uso diferente para un KDF que para el cifrado HDD. Para el cifrado de HDD, el KDF no se usa para autenticar, pero se usa como una clave para el cifrado de los datos.
Sin embargo, eso podría ser lo que debería reformar alrededor de su pregunta. ¿Las vulnerabilidades de colisión SHA1 siguen siendo una vulnerabilidad cuando se repiten 103,696 veces?