Message-Digest algorithm
Message-Digest algorithm je v kryptografii rodina hašovacích funkcí, která z libovolného vstupu dat vytváří výstup fixní délky, který je označován jako hash (česky někdy psán i jako haš), otisk, miniatura a podobně (anglicky fingerprint). Jeho hlavní vlastností je, že malá změna na vstupu vede k velké změně na výstupu, tj. k vytvoření zásadně odlišného otisku.
MD5
editovatAlgoritmus MD5 se prosadil do mnoha aplikací (např. pro kontrolu integrity souborů nebo ukládání hesel). MD5 je popsán v internetovém standardu RFC 1321 a vytváří otisk o velikosti 128 bitů. Byl vytvořen v roce 1991 Ronaldem Rivestem, aby nahradil dřívější hašovací funkci MD4.
Historie a dešifrování
editovatMD5 je jednou ze série kryptografických hašovacích funkcí, které navrhl profesor Ronald L. Rivest pracující v institutu MIT (Rivest, 1994). Když analytická práce ukázala, že předchozí verze MD4 není pravděpodobně již dostatečně bezpečná, byl v roce 1991 naprogramován nový algoritmus MD5 (slabé stránky byly v MD4 opravdu později nalezeny Hansem Dobbertinem).
V roce 1993, Den Boer a Bosselaers přinesli brzký, ačkoli limitovaný výsledek hledání "pseudo-kolize" v MD5 kompresní funkci. To znamená, že nalezli dva různé inicializační vektory, které produkují stejný výsledek.
Dobbertin v roce 1996 oznámil kolizi kompresní funkce MD5 (Dobbertin, 1996). Zatímco to nebyl útok na kompletní MD5 hash funkci, bylo to dost podstatné pro kryptografy, aby doporučili přechod na náhradu, například SHA-1 nebo RIPEMD-160.
Velikost hashe (128 bitů) je dost malá na to, aby bylo možné uvažovat o použití narozeninového útoku. Distribuovaný projekt MD5CRK byl zahájen v březnu 2004 s cílem demonstrovat, že MD5 je prakticky nebezpečný tím, že najde kolizi s použitím narozeninového útoku.
MD5CRK skončilo krátce po 17. srpnu 2004, když Xiaoyun Wang, Dengguo Feng, Xuejia Lai a Hongbo Yu oznámili kolize pro úplný MD5. Podali zprávu, že jejich analytický útok trval pouze jednu hodinu na IBM p690 klastru.
Arjen Lenstra, Xiaoyun Wang, a Benne de Weger dne 1. března 2005 prokázali výstavbu dvou X.509 certifikátů s rozdílnými veřejnými klíči a stejnou MD5 hash funkci. Konstrukce obsahuje soukromé klíče pro oba veřejné klíče. O několik dní později, Vlastimil Klíma popsal vylepšený algoritmus, schopný provádět MD5 kolize během několika hodin na jediném notebooku. Dne 18. března 2006, Klíma publikoval algoritmus, který může najít kolizi během jedné minuty na jednom notebooku, tuto metodu pojmenoval tunelování.
V roce 2009 United States Cyber Command použilo MD5 hash ve svém svého oficiálním znaku (na vnitřním kroužku).
24. prosince 2010, Tao Xie a Dengguo Feng oznámil první publikovaný blok MD5 kolize (dvě 64bajtové zprávy se stejnou MD5 hash byly dány do little endian zápisu). Objevy předchozích kolizí spoléhaly na multi-blokové útoky. Z "bezpečnostních důvodů", Xie a Feng nezveřejnili nové metody útoku. Kryptografická komunita učinila nabídku 10.000$ prvnímu, kdo objeví jinou 64bajtovu kolizi před 1. lednem 2013. V roce 2011 RFC schválila aktualizaci bezpečnostních otázek ohledně RFC 1321 (MD5) a RFC 2104 (HMAC-MD5).
Bezpečnost
editovatV roce 1996 byla objevena vada v návrhu MD5, a přestože nebyla zásadní, kryptologové začali raději doporučovat jiné algoritmy, jako je například SHA (i když ani ten již dnes není považován za bezchybný). V roce 2004 byly nalezeny daleko větší chyby a použití MD5 se zásadně nedoporučuje.
Příklad kontrolního součtu MD5
editovatOtisk 43bytového znakového řetězce (vyjádřený v hexadecimálním zápisu):
MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6
Stačí malá změna vstupního řetězce, aby byl otisk úplně odlišný (např. změňme d na c):
MD5("The quick brown fox jumps over the lazy cog") = 1055d3e698d289f2af8663725127bd4b
MD5 součet prázdného řetězce je d41d8cd98f00b204e9800998ecf8427e
.
Zvýšení bezpečnosti
editovatMD5 se dříve často používalo pro ukládání hesel. Přidáním soli k heslu se ztěžují útoky na získání hesla a účinnost slovníkových útoků s využitím předpočítaných tabulek (anglicky rainbow table attack). Tento postup lze použít i pro jakékoli kryptografické hašovací funkce, které lze dopředu "předpočítat", jejich výsledný haš uložit, a pak rychleji vyhledat v databáze srovnáváním s hašem, na který se útočí.
hash = MD5 (heslo . sul)
Pro jisté zvýšení bezpečnosti je možné kombinovat například heslo a uživatelské jméno, v takovém případě pokud dva uživatelé použijí totožné heslo, otisk (haš) jejich hesel bude zásadně odlišný, protože jejich uživatelská jména se určitě budou lišit. Další možností částečného zvýšení bezpečnosti je použití více hašovacích algoritmů najednou, například kombinace MD5 a SHA. Postup zajistí vyšší odolnost chráněné informace v případě, že bude při jedné z funkcí nalezena kolize. Například:
SHA1(MD5("login").MD5("heslo"))
Použití v praxi
editovatMD5 se používá v celém softwarovém světě, aby poskytovala jistotu, že přenášený soubor dorazí beze změny. Například souborové servery často nabízejí předem spočítanou hodnotu MD5 (známé jako md5sum), kterou je uživatel schopný porovnat s opravdu staženými daty. Unixové operační systémy obsahují aplikace pro výpočet MD5 sumy v jejich distribučních balíčcích, zatímco uživatelé Windows jsou nuceni použít aplikace třetích stran.
Avšak nyní, když je celkem jednoduché generovat MD5 kolize je možné vytvořit dva soubory se stejným otiskem, čehož lze využít v různých útocích. V některých případech také nelze věřit kontrolním součtům (například pokud je kontrolní součet získán přes stejný kanál, jako stahovaný soubor). V tomto případě MD5 nabízí pouze kontrolu chyb: MD5 bude rozpoznávat přerušené, nebo nedokončené stahování, které je pravděpodobnější během stahování velkých souborů.
MD5 se také často používá pro ukládání hesel. MD5 a další hashovací funkce se často používají v oblasti elektronických objevů, aby poskytovaly jedinečný identifikátor pro každý dokument, který se mění během právního procesu objevování. Tato metoda může být použita, aby nahradila Bates stamp číselný systém, který se po desetiletí využívá při výměně papírových dokumentů.