Let me just use an answer to explain differences between key-stretching and hashing, even though this isn't an answer to your question.
I'm not going to use a real-world example of collisions, because I don't know what they are, so my hash examples will be purely random.
Imagine your password is pass123, let sha1Result = sha1('pass123')
.
A collision is when bksdajfdjfaskf can also be used, where sha1Result also = sha1('bksdajfdjfaskf')
.
A KDF is a feedback loop, where sha1Result2 = sha1(sha1Result)
and sha1Result3 = sha1(sha1Result2)
and so on n number of times.
The below example KDF()
function will be KDF(password, hash-algorithm, iteration-count)
Let kdfResult = KDF('pass123', SHA1, 100,000)
.
Let kdfResult also = sha1('jadfjlkdfjasldfjskdf')
because we have a collision, sort-of, but not really.
Because in order for you to log into my system, you must pass through my KDF()
, just having a sha1()
collision of my KDF()
does not help you, because I do not sha1()
your supplied cleartext in order to authenticate you, I KDF()
your supplied cleartext, and KDF('jadfjlkdfjasldfjskdf', SHA1, 100,000)
does not match KDF('pass123', SHA1, 100,000)
.
This is a different use-case for a KDF than for HDD encryption. For HDD encryption, the KDF is not used to authenticate, but its used as a key for the encryption of the data.
However, that might be what you should reform your question around. Are the SHA1 collision vulnerabilities still a vulnerability when iterated 103,696 times?
Also, the statement that the underlaying hash function doesn't matter is completely false because there are security requirements that must be fulfilled by the hash function in order to the key derivation to be secure. Otherwise, there will be no need for cryptography and we can stick with 30 years old hash functions like MD4!! Anyway, in such security topics, one must carefully check any statement or information before endorsing it or using it.
– user284148 Jan 15 '15 at 16:00