Integralność danych czyli hasze kryptograficzne

0
157

Pojęcie integralności danych związane jest z kwestiami bezpieczeństwa i ochrony informacji. Integralność realizuje funkcje gwarantującą niezmienność przetwarzanej informacji – innymi słowy zapewnia, iż dany przekaz w żaden sposób nie został naruszony. Zmiany w przekazie mogą być kwestią przypadkowego błędu w transmisji, jak i celowych działań związanych z przemyślanym atakiem. Narzędziem pozwalającym zapewnić integralność danych i bezpieczeństwo przekazu są kryptograficzne funkcje skrótu (cryptographic hash function) zwane także haszami kryptograficznymi.

Charakterystyka kryptograficznych funkcji skrótu

Pod pojęciem funkcji skrótu rozumie się algorytm dokonujący przetworzenia wiadomości w celu wygenerowania stałej długości skrótu. Skrót taki będzie posiadał określona charakterystykę:
– będzie niezależny od długości wiadomości.
– jego odwrócenie nie powinno być w praktyce możliwe, tzn. odtworzenie danych, które wykorzystano do jego utworzenia nie może być wykonalne (jednokierunkowość).
– niemożliwa jest zmiana danych źródłowych bez zmiany skrótu.
– nie powinno być możliwe odnalezienie dwóch plików o tym samym haszu.
W praktyce możliwe jest jednak istnienie dwóch takich samych skrótów odnoszących się do różnych wiadomości. Sytuacje taką określamy terminem „kolizji” – i oczywiście jest to zdarzenie niepożądane. Znalezienie dowolnej pary różnych wiadomości posiadających taki sam hasz powinno być obliczeniowo bardzo trudne (silna bezkolizyjność). Podobnie wysoka trudność powinna dotyczyć znalezienia jakiejkolwiek wiadomości, której hasz byłby tożsamy z haszem innej wiadomości (bezkolizyjność słaba). W takich sytuacjach aby wytworzyć kolizję konieczne byłoby wykonanie ataku typu „brute force” o bardzo dużej liczbie kombinacji – złożoność obliczeniowa takiego procesu powinna być tak duża, że skuteczność przeprowadzenia tego typu ataku w rozsądnym czasie przy zakładanym poziomie technologicznym byłaby praktycznie zerowa.

Rodzaje haszów kryptograficznych

Najbardziej powszechne hasze kryptograficzne należą do dwóch typów algorytmów: MD (Message Digest) oraz SHA (Secure Hash Algorithm). Przedstawicielami pierwszej grupy są algorytmy MD4 oraz MD5, które jednak nie powinny być już brane pod uwagę gdyż obecnie znalezienie dla nich kolizji nie stanowi większego problemu. Do drugiej grupy należą algorytmy opracowane w standardzie FIPS 180-4. Obecnie rekomendowane jest używanie w tym standardzie przynajmniej 256. bitowej wartości funkcji skrótu.

CRC32 (Cyclic Redundancy Check) nie jest co prawda klasycznym haszem kryptograficznym ale zbliżonym charakterystyką algorytmem często stosowanym w rozwiązaniach zapewniających integralność danych magazynowanych na nośnikach. Jest to algorytm 32. bitowy, który nie ma wystarczającej „mocy” do zastosowań kryptograficznych sprawdzając się jednak w przypadku np. kontroli błędów transferu. CRC32 oczywiście nie jest odporny na kolizję. Nie jest trudne wykonanie dwóch plików o tym samym CRC, dlatego algorytm stosowany być powinien tylko w sytuacjach gdzie ewentualne ataki nie mogą zostać przeprowadzone.

RIPEMD jest funkcją skrótu opracowanego w latach 1988 – 1992 w ramach projektu Unii Europejskiej o nazwie RIPE (RACE Integrity Primitives Evaluation). Funkcja generowała skrót 128. bitowy. W 1996 roku powstała wersja 160. bitowa o nazwie RIPEMD-160. W 2004 roku przedstawiono wzór na znajdowanie kolizji funkcji RIPEMD (dwie pary wiadomości produkujących te same skróty). Funkcja RIPEMD-160 nie poddała się atakom, choć trzeba przyznać, że dzięki małej popularności nie jest ona należycie zbadana i przetestowana.

MD4 powstał w 1990 roku, jednak już rok 1992 przyniósł udany atak na dwie ostatnie rundy tego algorytmu. W roku 1997 wykazano, iż dwie pierwsze rundy nie są jednokierunkowe, a następnie przedstawiono algorytm wykrywania kolizji. Ostatecznie w 2004 roku złamano funkcję przedstawiając wzór na generowanie kolizji.

MD5 jest następcą MD4. Algorytm powstał w 1991 roku i był efektem niedoskonałości swego poprzednika. Jednak już dwa lata później natrafiono na kolizje dla jego funkcji kompresującej. W roku 2004 ujawniono kolejne słabości tej funkcji – znalezienie kolizji na maszynie klasy PC trwało około godziny. W 2006 roku opublikowano algorytm, który wykorzystując metodę zwaną „tunelowaniem” był w stanie odnaleźć kolizję w czasie około jednej minuty. Przekreśliło to użycie tego hasza w wielu zastosowaniach (np. podpisywaniu plików). W 2008 roku odkryta została luka umożliwiająca podrobienie certyfikatu SSL i uczynienie go akceptowalnym przez wszystkie przeglądarki internetowe. Obecnie nie jest on uważany za bezpieczny w większości zastosowań, a w jego miejsce poleca się używanie funkcji skrótów z rodziny SHA.

SHA (Secure Hash Algorithm) jest zestawem algorytmów aprobowanych przez NIST (National Institute of Standards and Technology) i wykorzystywanych przez organy administracji rządowej Stanów Zjednoczonych. Istnieje kilka generacji tego hasza.
SHA-0 był pierwszym algorytmem tej rodziny a jego publikacja miała miejsce w 1993 roku. Pojawiające się w kolejnych latach informacje dotyczące odnajdowania kolizji o coraz lepszych stopniach złożoności dla tej funkcji spowodowały powstanie nowych generacji tego hasza: SHA-1 (wersja 160 bitów), która również okazała się nieodporna na ataki i SHA-2,występująca w kilku wersjach bitowych: 224, 256, 384 i 512. W 2002 roku SHA-2 stała się standardem występującym pod nazwą FIPS PUB 180-2. Jak dotąd nie pojawiły się informacje o skutecznych sposobach złamania algorytmu. Pomimo tego w 2007 roku ogłoszono konkurs na kolejną funkcje skrótu mającą funkcjonować pod nazwą SHA-3. Zgłoszono 64 propozycje, które były eliminowane w kolejnych rundach. Do decydującej rozgrywki zakwalifikowano 5 algorytmów; zwycięzcą została funkcja Keccak proponująca zupełnie nowe podejście – konstrukcję gąbki – zdecydowanie odróżniające się od architektury algorytmów grup MD i SHA. W uzasadnieniu wyboru podkreślano wysoki poziom bezpieczeństwa, doskonałą wydajność w różnych implementacjach sprzętowych oraz elegancką konstrukcję algorytmu.

Zastosowania funkcji skrótu

Jak wspomniano na wstępie, funkcje skrótu znajdują zastosowania przy weryfikacji integralności komunikatów – zapewniają niemożność modyfikacji komunikatu oraz potwierdzenie autentyczności nadawcy.
Nadają się także doskonale do przechowywania haseł użytkowników w bazach danych – zamiast hasła przechowywana jest wartość funkcji skrótu. Nie czyni to haseł absolutnie zabezpieczonych (przy słabych hasłach zastosowanie tzw. ataku „słownikowego” inaczej zwanego „tęczowym” opartego na bazie haseł i odpowiadających im skrótów czyni możliwym odnalezienie odpowiedniego skrótu z bazy w słowniku i dopasowanie hasła) – znacznie jednak utrudnia ich odczytanie.
Innym zastosowaniem są schematy podpisu cyfrowego przyspieszające tryb podpisywania wiadomości. Zamiast kłopotliwego szyfrowania i deszyfrowania wiadomości wystarczy jedynie zaszyfrować sam hasz powstały przy użyciu funkcji skrótu (funkcja taka jest znacznie szybsza od algorytmów szyfrujących).
Wśród innych zastosowań haszów wymienić można sygnatury wirusów, różne uaktualnienia czy badanie integralności programów.
W informatyce śledczej funkcje skrótów wykorzystane zostają do zapewnienia integralności materiału dowodowego. Każdy dowód zostaje oznaczony haszem – w przypadku jego modyfikacji zmianie ulega także hasz.