I'm reading “Collision-Resistant Hashing? Towards Making UOWHFs Practical” and in the Section 2 it says:
Hash functions like MD5 or SHA-1 have no explicit key. But no notion of collision-freeness has been offered for such a keyless setting. To get a sense why this is so, suppose $f$ is a function $f:\sum^*\rightarrow\sum^c$ for some integer $c$. We would like to say it is collision-free if there is no efficient program that can find collisions in $f$ But in fact, no matter what is $f$, there is such a program. Clearly there exists a pair $M,M'$ which is a collision for $f$, and hence there exists a program which very quickly finds collisions, namely the program that has the description of $M,M'$ embedded in its code and just outputs $M,M'$. While in practice it may be difficult to explicitly find this program a formalization in terms of the existence of collision-finding programs is ruled out. It seems the natural way to get a meaningful notion of security is to talk about families of functions
I have the following questions:
Why does it say that SHA-1 has no explicit Key? I remember that SHA-1 has a initial value into code, then the answer could be: because no external key is passed by argument to SHA-1
I don't understand the relation between the example and why not be offered to SHA-1 and MD5 the notion: collision-freeness (maybe I don't understand the English in that paragraph)