Ataki na funkcje haszujące: Ataki na właściwości *Klasyczne właściwości -pre-image attack -2nd pre-image attack -collision attack *k-way attacks -k-way collision attack -k-way 2nd pre-image attack ataki na metodologie *Brute force -birthday attack *kryptoanalityczne ataki -ogolne: =joux attack =herding attack =meet in the middle attack =lenght extension attack =generic 2nd pre-image attacks based on fixed points correcting block attacks -szczegółowe: =rotacyjna kryptoanaliza =liniowa kryptoanaliza =różnicowa kryptoanaliza =attack on underlying encryption algorithm Atak brute force Polega na łamaniu skrótu z wykorzystaniem wszystkich możliwości kombinacji liczbowych, z jakich może się składać. Jest ona bardzo czasochłonna i zużywa bardzo dużo zasobów przez dużą złożoność obliczeniową. Teoretycznie może służyć do odgadnięcia każdego klucza. W praktyce ma sens tylko przy stosunkowo krótkich kluczach, gdzie proces obliczeniowy i weryfikujący otrzymane dane nie jest na tyle skomplikowany, że nie podchodzi pod niemożliwy. Atak tego rodzaju w przypadku funkcji skrótu polega na przeszukiwaniu losowego zbioru kombinacji cyfr, liter oraz innych znaków i porównywaniu z określoną wartością danego skrótu. Istotą takiego ataku jest znalezienie dowolnej wiadomości, która po zastosowaniu funkcji skrótu wykaże zadany skrót. Atak urodzinowy Atak urodzinowy jest rodzajem ataku siłowego. Oparty jest na możliwości znalezienie dowolnej pary wiadomości, dla których skróty utworzone od tych wiadomości będą ze sobą tożsame. Innymi słowy chodzi w tym przypadku o znalezienie kolizji funkcji haszującej. Jego nazwa związana jest z leżącym u podstaw tego ataku tzw. paradoksem dnia urodzin. Paradoks ten daje odpowiedź na pytanie dotyczące liczby osób, która musi znaleźć się w losowej próbce, aby prawdopodobieństwo znalezienia tam dwójki ludzi urodzonych tego samego dnia wynosiło więcej niż ½. Odpowiedź (23 osoby) pozwala domniemywać, że kolizja dla funkcji haszującej może zostać znaleziona dużo szybciej niż wskazuje na to rozmiar zbioru wartości funkcji. Atak ten polega na wygenerowaniu odpowiedniej liczby skrótów, która zawsze będzie dużo mniejsza niż pełny zbiór wszystkich skrótów, aby z 50% prawdopodobieństwem trafić na dwa takie same skróty. 64-bitowe wartości funkcji skrótu, są niewystarczające dla odparcia ataku urodzinowego. Zaleca się stosowanie funkcji dających wyniki powyżej 128 bitów, gdyż dla algorytmu MD 5 (128 bitów) udany atak może nastąpić już przy wygenerowaniu 1,1774 * 264 skrótów, przy całkowitej liczbie 2128 możliwych kombinacji. Atak różnicowy Jest to bardziej efektywna metoda niż w przypadku ataku brutalnego. W kryptoanalizie różnicowej dokonuje się analizy porównawczej pary kryptogramów, które wygenerowane zostały w efekcie zaszyfrowania wielu par wiadomości jawnych o ustalonych różnicach. Metoda różnicowa wykorzystuje prawdopodobieństwo zniwelowania różnicy wewnątrz funkcji kompresującej już po kilku rundach, poprzez zmianę paru bitów w analizowanym przekazie. Idea tego ataku polega na wykorzystaniu niedoskonałości zastosowanej w algorytmie funkcji kompresującej i wskazaniu dwóch różnych wiadomości dających ten sam skrót. Różnica określana jest funkcją logiczną xor. Pre-image attack Preimage resistance to właściwość funkcji skrótu H taka, że znając jakiś skrót h nie istnieje żadna szybka metoda znalezienia wiadomości m takiej że H(m) = h. Jest to najsłabsza kryptograficzna właściwość funkcji skrótu. Funkcje które nie są preimage resistant nie mają praktycznie zastostowań kryptograficznych, za to samo preimage resistance nie jest właściwością wystarczającą dla wielu zastosowań. 2nd preimage attack Second preimage resistance (odporność na znalezienie drugiego przeciwobrazu) – właściwość funkcji kryptograficznej H, taka że dla danej wiadomości m1 nieznana jest żadna szybka metoda znalezienia takiego m2 różnego od m1, że ich skróty są sobie równe. Brak second preimage resistance implikuje brak odporności na kolizje. Brak preimage resistance implikuje brak second preimage resistance. Obie implikacje są tylko w jedną stronę. Jeśli funkcja nie jest preimage resistant, to nie jest też second preimage resistant – dla danej wiadomości m1 liczymy hasz h, po czym go odwracamy, znajdując takie m2, że H(m2) = h = H(m1). Ponieważ przestrzeń wiadomości jest o wiele większa od przestrzeni haszy, z prawdopodobieństwem bliskim 1 m1 i m2 są różne. W ten sam sposób możemy znajdować kolizję funkcji haszującej która nie jest preimage resistant – losujemy m1, liczymy h=H(m1), po czym obliczamy m2, takie że H(m1)=h=H(m2). Rainbow table Tabela tęczy to wstępnie obliczona tabela do buforowania wyników kryptograficznych funkcji skrótu, zwykle do łamania skrótów haseł. Tabele są zwykle używane do odzyskiwania funkcji wyprowadzania klucza (lub numerów kart kredytowych itp.) o określonej długości składającej się z ograniczonego zestawu znaków. Jest to praktyczny przykład kompromisu czasoprzestrzennego, wykorzystujący mniej czasu przetwarzania przez komputer i więcej pamięci niż atak brute-force, który oblicza hash przy każdej próbie, ale więcej czasu przetwarzania i mniej pamięci niż prosta funkcja wyprowadzania klucza z jednym wpisem za hasz. Użycie kluczowej pochodnej, która wykorzystuje sól, sprawia, że ten atak jest niewykonalny. Tęczowe tablice zostały wynalezione przez Philippe'a Oechslina[1] jako zastosowanie wcześniejszego, prostszego algorytmu Martina Hellmana.[2] Jak zabezpieczyć się przed rainbow table Wartość soli nie jest tajna i może być generowana losowo i przechowywana z hashem hasła. Duża wartość soli zapobiega atakom polegającym na wykonywaniu obliczeń wstępnych, w tym tablicach tęczowych, zapewniając unikatowe zaszyfrowanie hasła każdego użytkownika. Oznacza to, że dwóch użytkowników z tym samym hasłem będzie miało różne skróty haseł (zakładając, że używane są różne sole). Aby odnieść sukces, atakujący musi wstępnie obliczyć tabele dla każdej możliwej wartości soli. Sól musi być wystarczająco duża, w przeciwnym razie atakujący może stworzyć tabelę dla każdej wartości soli. W przypadku starszych haseł Unix, które używały 12-bitowej soli, wymagałoby to 4096 tabel, co oznacza znaczny wzrost kosztów dla atakującego, ale nie jest to niepraktyczne w przypadku terabajtowych dysków twardych. Metody SHA2-crypt i bcrypt — używane w systemach Linux, BSD Unix i Solaris — mają 128-bitowe sole.[4] Te większe wartości soli powodują, że ataki oparte na obliczeniach wstępnych na te systemy są niewykonalne dla prawie każdej długości hasła. Nawet gdyby atakujący mógł wygenerować milion tabel na sekundę, nadal potrzebowałby miliardów lat, aby wygenerować tabele dla wszystkich możliwych soli. MD5 Funkcja ta została zaprezentowana już w 1991 roku, a prace nad nią wynikały ze świadomości słabości poprzedniczki. Jednak już dwa lata później znalezione zostają tzw. pseudokolizje dla tej funkcji, a w roku 1995 wykazane zostają kolizje dla jej funkcji kompresującej. Kolejne słabości ujawniono w 2004 roku (metoda otrzymania kolizji dla dwublokowych wiadomości) i w 2006, kiedy to miała miejsce publikacja algorytmu precyzującego kolizje z wykorzystaniem tzw. tunelowania. Na znalezienie kolizji wystarczyła w tym przypadku zaledwie minuta. SHA 0/ SHA 1/ SHA 2 Pierwsza generacja funkcji z rodziny SHA (Secure Hash Algorithm), algorytmów aprobowanych przez National Institute of Standards and Technology i wykorzystywanych przez administrację USA. SHA 0 powstał w roku 1993. Publikowane z upływem lat informacje dotyczące wykazywania kolizji o coraz lepszych stopniach złożoności sprowokowały powstanie nowych generacji tej funkcji. SHA 1, która zastąpiła SHA 0, także wykazała się brakiem odporności na ataki, co sprowokowało do dalszych prac nad ulepszaniem algorytmu. SHA 2 przedstawiona została w 2001 roku. Posiadała trzy wersje generujące skróty o długości 256, 384 i 512 bitów. Ponieważ nie wykazano żadnych skutecznych prób złamania funkcji, w 2002 roku SHA 2 stała się zalecanym standardem (FIPS PUB 180-2). Biorąc jednak pod uwagę to, iż znalezienie kolizji może być jedynie kwestią czasu, w 2007 roku NIST rozpisała konkurs na opracowanie nowej funkcji skrótu pod roboczą nazwą SHA 3. Atak roznicowy • Śledzimy różnice pomiedzy dwoma egzemplarzami funkcji którym podano dwie wiadomości różniące się w określony sposób • Atak różnicowy podzielony na dwie fazy: znajdowanie ścieżki i znajdowanie warunków do jej zaistnienia • W pierwszym etapie analizuje się uproszczone modele funkcji i szuka ścieżki różnicowej o dużym prawdopodobieństwie • W drugim etapie określa się zbiór warunków, które zapewniają propagację różnicy według ścieżki i szuka rozwiązania Jednoczesne śledzenie różnic XOR i modularnych (śledzenie różnic binarnych ze znakiem) • Metoda “modyfikowania wiadomości” która usprawnia znajdowanie wiadomości spełniających warunki na ścieżkę różnicową