Funkcja skrótu

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, szukaj

Funkcja skrótu, inaczej: funkcja mieszająca lub funkcja haszująca – jest to funkcja, która przyporządkowuje dowolnie dużej liczbie krótką, zwykle posiadającą stały rozmiar, nie specyficzną, quasi-losową wartość, tzw. skrót nieodwracalny.

W informatyce funkcje skrótu pozwalają na ustalenie krótkich i łatwych do weryfikacji sygnatur dla dowolnie dużych zbiorów danych. Sygnatury mogą chronić przed przypadkowymi lub celowo wprowadzonymi modyfikacjami danych (sumy kontrolne), a także mają zastosowania przy optymalizacji dostępu do struktur danych w programach komputerowych (tablice haszujące).

Spis treści

[edytuj] Bezpieczne funkcje skrótu

Szczególną podgrupą funkcji skrótu są funkcje uznawane za bezpieczne do zastosowań kryptologicznych (jak np. SHA, RIPEMD-160). Kryptograficzna funkcja skrótu powinna spełniać następujące kryteria:

  1. Brak praktycznej możliwości wygenerowania wiadomości o takim samym skrócie jak zadana wiadomość (Preimage resistance, Second preimage resistance)
  2. Brak praktycznej możliwości wygenerowanie dwóch wiadomości o takim samym skrócie (Kolizje). Warto zauważyć, że w związku z atakiem urodzinowym problem ten jest istotnie łatwiejszy niż poprzedni. Własność ta nie jest wymagana w niektórych zastosowaniach.
  3. Brak możliwości wnioskowania o wiadomości wejściowej na podstawie wartości skrótu (jednokierunkowość). Zmiana dowolnego pojedynczego bitu wiadomości powinna zmieniać średnio połowę bitów skrótu w sposób, który nie jest istotnie podatny na kryptoanalizę różnicową.

Należy zauważyć, że uznanie funkcji za bezpieczną do zastosowań kryptograficznych opiera się zawsze wyłącznie na domniemanej odporności na znane ataki kryptoanalityczne, nie zaś na matematycznych dowodach gwarantujących niemożność złamania. W szczególności bezpieczna funkcja skrótu musiałaby być funkcją jednokierunkową, a istnienie takich funkcji nie zostało dotychczas dowiedzione. Poważne słabości znaleziono w wielu funkcjach skrótu, które historycznie uchodziły za bezpieczne - m.in. w MD2, MD4, SHA, MD5.

Niekiedy zamiast wyspecjalizowanych funkcji skrótu do realizacji podobnych funkcji bezpieczeństwa stosuje się algorytmy zbudowane na bazie szyfrów blokowych – zwłaszcza w kodach uwierzytelniania wiadomości (MAC).

[edytuj] Ataki na funkcje skrótu

Nawet bezpieczne funkcje skrótu mogą być obiektem ataków kryptograficznych, wykorzystujących miejsce gdzie funkcje te są wykorzystywane w strukturach danych. Wiele struktur danych działa bardzo efektywnie w przeciętnym przypadku, ale słabo w przypadku pesymistycznym. Atakujący może za pomocą niewielkiej ilości specjalnie w tym celu przygotowanych danych przeciążyć system (atak DoS).

[edytuj] Przykład

Załóżmy, że serwer trzyma pewne dane w tablicy mieszającej – ma k kubełków (buckets), i w każdym trzyma te dane, dla których ostatnie kilka cyfr wartości funkcji skrótu jest równe numerowi kubełka.

Wyszukiwanie wśród danych odbywa się bardzo szybko - jeśli liczba kubełków jest proporcjonalna do ilości danych, to przeciętnie wyszukiwanie odbywa się w czasie stałym.

Jeśli potrafimy jednak znaleźć serię danych, dla których ostatnie cyfry wartości funkcji skrótu używanej przez serwer są identyczne, możemy zmusić serwer do wrzucenia wszystkich danych do tego samego kubełka. Wtedy każde wyszukiwanie będzie wymagać przeszukania wszystkich danych. Już niezbyt duża ilość danych potrafi spowolnić serwer tak bardzo, że nie będzie w stanie wypełniać swojej funkcji. Jest to szczególnie groźne, jeśli serwer ten miał znaczenie dla bezpieczeństwa (IDS, firewall, serwer SSH).

[edytuj] Zabezpieczenia

Możliwe zabezpieczenia przed atakami to między innymi:

  • używanie struktur danych o lepszej złożoności pesymistycznej, pomimo gorszych wyników przeciętnych (np. drzew czerwono-czarnych zamiast tablic mieszających)
  • wykrywanie ataków tego typu lub uniemożliwienie ich powstawania przez odrzucanie patologicznych danych
  • używanie kryptograficznie bezpiecznych funkcji skrótu dodatkowo wzmocnionych przeciwko takim atakom (np. funkcji skrótu z kluczem jak HMAC-MD5, HMAC-SHA1)
  • randomizacja skrótów (NIST SP 800-107)

[edytuj] Zalecenia

Amerykański instytut NIST publikuje zalecenia dotyczące stosowania poszczególnych funkcji skrótu w zależności od pożądanego czasu ochrony informacji. Zgodnie z tymi wytycznymi od 1999 roku nie powinna być stosowana funkcja MD5, zaś funkcja SHA-1 powinna być stosowana co najwyżej do 2010 roku[1].

Aktualnie zalecane do nowych aplikacji są funkcje z rodziny SHA-2. W toku jest konkurs NIST na nową funkcję skrótu (SHA-3)[2]

Przypisy

  1. Aktualny poziom bezpieczeństwa funkcji skrótu. Security Standard, 20 marca 2009.
  2. Trzydziestu kandydatów do SHA-3. IPSec.pl, 4 listopada 2009.

[edytuj] Zobacz też

[edytuj] Bibliografia

[edytuj] Linki zewnętrzne

Osobiste
Przestrzenie nazw
Warianty
Działania
Nawigacja
Dla czytelników
Dla wikipedystów
Drukuj lub eksportuj
Narzędzia
W innych językach