Podival jsem se na prvni uvadeny zdroj a podstata sdeleni je dle meho laickeho usudku takova, ze umeji docela rychle nachazet pary zprav se stejnou hodnotou hashe. Takze (alespon doufam :) snad nejde o primou moznost podvrzeni zpravy, ale asi o zjednoduseni (nevim ale jak podstatne) utoku hrubou silou. Pane Klimo, pokud to ctete: co je to initial value of MD5 ? Bezkoliznost tedy znamena, ze neumim (nemam algoritmus) nachazet pary zprav se stejnou hodnotou hashe ? Dekuji
I nalezení dvou kolizních zpráv je problém při podpisu. Představ si, že uděláš nějakou zprávu, která nemá žádný význam (třeba text A: "následující byty nemají smysl: " a druhou, která význam má (třeba text B: "dlužím panu X 50000Kč a následující byty nemají smysl: ". Pak vezmeš inicializační vektor po projití první zprávy hashovací funkcí, inicializační vektor po projití druhé zprávy hashovací funkcí a na základě algoritmu najdeš kolizi. Pak vezmeš text A připlácneš za jeho konec nalezenou kolizi a dáš to někomu podepsat (ten to podepíše, neboť je to neškodné tvrzení). Pak vezmeš text B a připlácneš za něj druhou část nalezené kolize, a máš podepsanou zprávu, kterou původce podepsat vůbec nechtěl, ve které tvrdí, že ti dluží 50000Kč.
OTOH toho, že když zkontroluji MD5 digest tarballu jádra s tím, co mám, a sedí, že je přesto podvrřený, se tedy [zatím] bát nemusím -- protože vytvořit modifikovaný tarball se stejným digestem zatím neumějí, a pokud nevěřím Linusovým umýslům, nebudu od něj předně používat žádné jádro...
Ne, ale můžeš jakýkoli kód poslat Linusovi s tím, že je to firmware k nějaké nové verzi nějaké karty, a s trochou sociálního inženýrství se ti ho do oficiálního jádra podaří dostat.
Problém by byl v tom, že jádro se mění velmi rychle a nevíš, co za další patche Linus do nové verze dá, takže by předem vypočtená kolize na to stejně nefungovala. Ale u méně-se měnících projektů, kde autor vydá verzi i s touhle jedinou změnou, je to problém.
Jasně, problém je v tom, že pokud můžeš do podesané zprávy podstrčit nějakou část ty sám, tak pak (s prolomenou hashovací funkcí) můžeš získat podpis jakékoli zprávy s nějakými náhodnými byty.
Získat podpis libovolné zprávy s tím nejde. Ale už tohle prolomení podpisu může být celkem podstatný problém.
Obojí jste pochopil správně.
V prvním případě opravdu nejde o možnost podvržení zprávy (k nějaké předem dané), ale nalezení libovolných kolizí jinak než hrubou silou (narozeninovým paradoxem). Ukazují, že to lze udělat velice efektivně.
V druhém případě jste bezkoliznost pochopil zcela správně, viz též odpovědi výše.
Initial value of MD5 je konstanta, pevně definovaná pro MD5. Je to počáteční obsah kontextu, s nímž se začíná hašovat jakákoliv zpráva. Lapidárně řečeno se vezme tento kontext a pomocí kompresní funkce se smíchá s první částí zprávy, vznikne nový kontext, k němu se přimíchá další část zprávy atd. Je to princip iterativních hašovacích funkcí, který je použit u všech moderních hašovacích funkcí (viz též přednáška na MFF v literatuře). Čínský útok [1] dokonce ukazuje, že jsou schopni kolize nalézat pro jakékoliv hodnoty IV, nejen pro ty, definované standardem. Toho využívají při konstrukci kolidujících zpráv. Dělí je na dvě části - první částí si jakoby vytvoří svoje IV a druhou částí dotlačí kontext ke kolizi. Je to ale hodně vágní vysvětlení.