http://www.win.tue.nl/hashclash/rogue-ca/
Úgy veszem ki a fenti linket átolvasva, hogy az MD5 algoritmussal az a probléma, hogy -habár megfelelően állít elő hash-t egy bemeneti értékből-, a probléma mégis az, hogy nem tartalmaz módszert a kezdeti bit sorozatok egyedi beállításához, ami miatt sikeresen előállítottak olyan "ütköztetett" bemeneti bit stringet, amelyek különbözőek, mégis egyforma hash-t produkáltak az MD5 algoritmussal. Ezt pedig a gyakorlatban úgy tudják használni, hogy olyan gondosan előkészített publikus kulcsot preparálnak, amely éppen olyan bitsort tartalmaz ("collison block"-nak hívják), amelynek van ilyen "párja", tehát magyarul megfogalmazva, tudnak két olyan publikus kulcsot preparálni, amelyek ujjlenyomata megegyezik!
Mondjuk ez olyan szinten aggaszt, hogy a GPG kulcsok ujjlenyomata is MD5 alapján generálódik (semmi extra, csak bele tesz még egy fejlécet a publikus kulcshoz, aztán sima MD5 hajtódik végre rajta, így meg is van a 128 bit-es ujjlenyomat). Márpedig a gyakorlatban ujjlenyomat alapján azonosítunk.
De ha 2004-es a felfedezés, akkor miért van még mindig sok helyen implementálva?
Szerk.: Ez itt az érdekes:
"In 2004 Xiaoyun Wang and Hongbo Yu presented a collision for MD5 consisting of 2 input blocks, neglecting padding. ... Their method works for any value of the initial IHV0.
In other words, their method produces on input of any 128 bit IHV0 a pair {{M1,M2}, {M1',M2'}}, each consisting of two 512 bit input blocks, such that {M1,M2} ≠ {M1',M2'}, and
IHV0 = IHV0'
IHV1 = CF(IHV0,M1) ≠ IHV1' = CF(IHV0',M1')
IHV2 = CF(IHV1,M2) = IHV2' = CF(IHV1',M2')
Due to the iterative structure of MD5 and to the fact that IHV0 can have any 128 bit value, such collisions can be combined into larger inputs. Namely, for any given prefix P and any given suffix S a pair of "collision blocks" {C,C'} can be computed such that MD5(P||C||S) = MD5(P||C'||S). We use the term "collision block" for a specially crafted bit string that is inserted into another bit string to achieve a collision. One collision block may consist of several input blocks, even including partial input blocks. The collision blocks of [WY] consist of precisely two consecutive input blocks."