MD5

MD5
Ilustracja
Rodzaj algorytmu

kryptograficzna funkcja skrótu

Data stworzenia

1992

Autorzy

Ron Rivest

Liczba rund

4

Data złamania

2004[1]

Złamany przez

Xiaoyun Wang, Dengguo Fen, Xuejia Lai i Hongbo Yu

MD5 (z ang. Message-Digest algorithm 5) – algorytm kryptograficzny, opracowany przez Rona Rivesta (współtwórcę RSA) w 1991 roku, będący popularną kryptograficzną funkcją skrótu, która z ciągu danych o dowolnej długości generuje 128-bitowy skrót.

W 2004 znaleziono sposób na generowanie kolizji MD5, co obniża jego bezpieczeństwo w niektórych zastosowaniach (np. podpisywaniu plików).

Z powodu znanych ataków kryptoanalitycznych funkcja MD5 zdecydowanie nie powinna być używana w zastosowaniach wymagających odporności na kolizje, na przykład w podpisie cyfrowym. W innych, takich jak HMAC, nadal może zapewniać satysfakcjonujący poziom bezpieczeństwa choć stosowanie jej w nowych rozwiązaniach nie jest zalecane[2].

Przykłady

Skrót obliczony dla krótkiego tekstu:

MD5("Ala ma kota") = 91162629d258a876ee994e9233b2ad87

Nawet niewielka zmiana w tekście (w tym przypadku zamiana a na y) powoduje (z bardzo dużym prawdopodobieństwem) powstanie zupełnie innego skrótu MD5

MD5("Ala ma koty") = 6a645004f620c691731b5a292c25d37f

Dość powszechnym zastosowaniem MD5 jest generowanie skrótów wszelkiego rodzaju plików udostępnianych publicznie (najczęściej w Internecie), dzięki czemu osoba, która pobrała dany plik z sieci może od razu zweryfikować (generując skrót MD5 na swojej kopii i porównując wyniki) czy jest to ten sam plik, który został zamieszczony przez jego autora lub czy nie nastąpiły przekłamania podczas samego procesu pobierania danych. Publikowana w takim przypadku wartość ma postać 32-znakowej liczby w zapisie szesnastkowym.

Wynik MD5 dla archiwum "linux-2.6.10.tar.bz2" o wielkości 35 MB: cffcd2919d9c8ef793ce1ac07a440eda

Historia

MD5 jest jednym z serii algorytmów zaprojektowanych przez profesora Rona Rivesta z MIT (Rivest, 1994). Poprzednikiem był algorytm MD4, który w wyniku analizy przeprowadzonej przez Hansa Dobbertina okazał się zbyt mało bezpieczny. Jego bezpiecznym następcą był MD5 opracowany w 1991.

W 1996 Dobbertin zaprezentował analizę kolizji algorytmu MD5. Chociaż nie był to jeszcze pełny atak na funkcję skrótu to jednak wystarczył, aby specjaliści w dziedzinie kryptografii zaczęli stosować silniejsze odpowiedniki, takie jak SHA-1 lub RIPEMD-160.

W marcu 2004 powstał rozproszony projekt nazywany MD5CRK (ang.)(ang.). Twórcą projektu był Jean-Luc Cooke i jego współpracownicy. Miał on na celu wykazanie, że możliwe jest wyznaczenie wiadomości różnej od zadanej, która ma taką samą wartość skrótu. Do tego celu wykorzystano sieć Internet oraz dużą liczbę komputerów biorących udział w projekcie. Projekt wykazał, że dysponując bardzo dużą mocą obliczeniową możliwe jest podrabianie generowanych podpisów.

Dopiero prace badawcze chińskich naukowców Xiaoyun Wang, Dengguo Fen, Xuejia Lai i Hongbo Yu w pełni wykazały słabość algorytmu. 17 sierpnia 2004 opublikowali oni analityczny algorytm ataku, dzięki któremu do podrobienia podpisu wystarczyła godzina działania klastrowego komputera IBM P690.

W marcu 2005 Arjen Lenstra, Xiaoyun Wang i Benne de Weger zaprezentowali metodę umożliwiającą znalezienie kolizji dla algorytmu MD5 i przeprowadzenie ataku polegającego na wysłaniu dwóch różnych wiadomości chronionych tym samym podpisem cyfrowym. Kilka dni później Vlastimil Klima[3] opublikował algorytm[4], który potrafił znaleźć kolizję w ciągu minuty, używając metody nazwanej tunneling.

Pod koniec 2008 roku niezależni kalifornijscy specjaliści ds. bezpieczeństwa, we współpracy z ekspertami z Centrum voor Wiskunde en Informatica, Technische Universiteit Eindhoven oraz Ecole Polytechnique Fédérale de Lausanne odkryli lukę w MD5 umożliwiającą podrobienie dowolnego certyfikatu SSL w taki sposób, że zostanie on zaakceptowany przez wszystkie popularne przeglądarki internetowe. Do podrobienia certyfikatu wystarczyła moc obliczeniowa 200 konsol do gier PlayStation 3[5].

Od lat 90. MD5 nie jest uważany za bezpieczny do większości zastosowań i w jego miejsce zaleca się stosowanie algorytmów z rodziny SHA-2[6] lub SHA-3.

Algorytm

Schemat algorytmu MD5

Algorytm MD5 jest następujący:

  1. Doklejenie do wiadomości wejściowej bitu o wartości 1
  2. Doklejenie takiej ilości zer, by ciąg składał się z 512-bitowych bloków i ostatniego niepełnego – 448-bitowego
  3. Doklejenie 64-bitowego (zaczynając od najmniej znaczącego bitu) licznika oznaczającego rozmiar wiadomości; w ten sposób otrzymywana wiadomość złożona jest z 512-bitowych fragmentów
  4. Ustawienie stanu początkowego na 0123456789abcdeffedcba9876543210
  5. Uruchomienie na każdym bloku funkcji zmieniającej stan (istnieje przynajmniej jeden blok nawet dla pustego wejścia)
  6. Zwrócenie stanu po przetworzeniu ostatniego bloku jako obliczony skrót wiadomości

Funkcja zmiany stanu ma 4 cykle (64 kroki). Stan jest traktowany jako 4 liczby 32-bitowe. W każdym kroku do jednej z tych liczb dodawany jest jeden z 16 32-bitowych fragmentów bloku wejściowego, pewna stała zależna od numeru kroku oraz pewna prosta funkcja boolowska 3 pozostałych liczb. Następnie liczba ta jest obracana (przesuwana cyklicznie z najstarszymi bitami wsuwanymi w najmłodsze pozycje) o liczbę bitów zależną od kroku, oraz jest dodawana do niej jedna z pozostałych liczb.

Funkcje te to:

  • W krokach 1 do 16 (cykl 1) funkcja F(x,y,z) = (x and y) or (neg x and z)
(jeśli to w przeciwnym wypadku )
  • W krokach 17 do 32 (cykl 2) funkcja G(x,y,z) = (x and z) or (y and neg z)
(jeśli to w przeciwnym wypadku )
  • W krokach 33 do 48 (cykl 3) funkcja H(x,y,z) = (x xor y xor z)
(suma argumentów modulo 2, lub innymi słowy: czy występuje nieparzysta liczba jedynek w argumentach)
  • W krokach 49 do 64 (cykl 4) funkcja I(x,y,z) = (y xor (x or neg z))
(jeżeli ( i ) wtedy y, w przeciwnym wypadku nie y)

Aby otrzymać wartość stałej w i-tym kroku, należy wziąć 32 najstarsze bity z części ułamkowej wyrażenia

Podobną budowę mają funkcje skrótu MD4, SHA0 i SHA-1 – różnią się one jedynie postacią funkcji zmieniającej stan, oraz rozmiarem stanu (160 bitów, czyli 5 32-bitowych rejestrów w SHA i SHA1, wobec 128 w MD4 i MD5).

Skróty 128-bitowe są zbyt krótkie, żeby zabezpieczyć przed generowaniem kolizji w oparciu o atak urodzinowy. Z tego powodu do większości zastosowań lepiej jest używać skrótów co najmniej 160-bitowych.

Zobacz też

Przypisy

  1. Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu. Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD. „Cryptology ePrint Archive Report 2004/199”, 16 Aug 2004. [dostęp 2010-06-25]. 
  2. RFC 6151 ↓.
  3. Vlastimil Klima.
  4. Vlastimil Klima: Tunnels in Hash Functions: MD5 Collisions Within a Minute.
  5. MD5 considered harmful today.
  6. Aktualny poziom bezpieczeństwa funkcji skrótu. Security Standard, 20 marca 2009. [dostęp 2009-04-14]. [zarchiwizowane z tego adresu (2013-05-28)].

Linki zewnętrzne

Media użyte na tej stronie

MD5 algorithm.svg
Autor: Surachit, Licencja: CC BY-SA 3.0
One MD5 operation