„Bezpieczny” skrót to skrót, który uważa się za trudny do „sfałszowania” w formalny, powtarzalny sposób bez uprzedniej wiedzy o komunikacie użytym do utworzenia skrótu. Ponieważ informacje te są ogólnie tajne, stąd potrzeba skrótu, jest to dobra właściwość funkcji skrótu przeznaczonej do użycia w uwierzytelnianiu.
Hash jest ogólnie uważany za „bezpieczny”, jeśli biorąc pod uwagę komunikat M, hash funkcji hash () i wartość skrótu H wytworzoną przez hash (M) o długości w bitach L, żadna z poniższych czynności nie może być wykonana w mniej niż Czas O (2 L ):
- Biorąc pod uwagę hash () i H, produkujemy M. (odporność na preimage)
- Biorąc pod uwagę hash () i M, produkujemy inny M 2, taki że hash (M 2 ) == H. (słaby opór zderzenia)
- Biorąc pod uwagę hash (), produkuj dowolne M 1 i M 2, tak aby hash (M 1 ) == hash (M 2 ). (duża odporność na zderzenia)
Dodatkowo „bezpieczny” skrót musi mieć długość skrótu L taką, że 2 Lnie jest wykonalną liczbą kroków, aby komputer mógł wykonać dany bieżący sprzęt. 32-bitowa liczba całkowita może mieć tylko 2,1 miliarda wartości; podczas gdy atak preimage (znalezienie wiadomości, która generuje określony skrót H) zająłby trochę czasu, nie jest to niemożliwe dla wielu komputerów, szczególnie tych znajdujących się w rękach agencji rządowych, które mają za zadanie łamanie kodów. Ponadto algorytm, który tworzy i przechowuje losowe wiadomości i ich skróty, według prawdopodobieństwa, miałby 50% szans na znalezienie duplikatu każdej nowej wiadomości po wypróbowaniu tylko 77 000 wiadomości i miałby 75% szansy na trafienie zduplikowane już po 110 000. Nawet skróty 64-bitowe nadal mają 50% szans na zderzenie po wypróbowaniu zaledwie około 5 miliardów wartości. Taka jest siła urodzinowego ataku na małe hasze. Natomiastliczby decylionowe (1,5 * 10 34 ).
Większość zademonstrowanych ataków na kryptograficzne skróty to ataki kolizyjne, które wykazały zdolność do generowania kolidujących wiadomości w czasie krótszym niż 2 l (większość nadal była czasem wykładniczym, ale zmniejszenie wykładnika o połowę jest znaczącym zmniejszeniem złożoności, ponieważ powoduje 256-bitowy skrót tak łatwy do rozwiązania jak 128-bitowy, 128-bitowy tak łatwy do rozwiązania jak 64-bitowy itp.).
Oprócz małego rozmiaru skrótu, innymi czynnikami, które mogą sprawić, że skrót jest wyraźnie niepewny, są:
Niska praca - skrót zaprojektowany do użycia przez tablicę skrótów lub do innych celów typu „suma kontrolna” jest zwykle zaprojektowany tak, aby był niedrogi obliczeniowo. To znacznie ułatwia atak z użyciem siły.
„Sticky State” - Funkcja skrótu jest podatna na wzorce danych wejściowych, w których bieżąca wartość skrótu wszystkich dotychczasowych danych nie zmienia się, gdy otrzyma się określony dodatkowy bajt danych wejściowych. Posiadanie „stanu lepkiego” ułatwia znajdowanie kolizji, ponieważ po zidentyfikowaniu wiadomości, która generuje skrót „stanu lepkiego”, generowanie innych wiadomości o tym samym haszu jest trywialne przez dołączanie bajtów wejściowych, które utrzymują skrót w jego „lepkim stanie” „.
Dyfuzja - każdy bajt wejściowy wiadomości powinien być rozdzielony między bajty wartości skrótu w równie złożony sposób. Niektóre funkcje skrótu powodują przewidywalne zmiany w niektórych bitach skrótu. To znowu sprawia, że tworzenie kolizji jest trywialne; biorąc pod uwagę komunikat, który tworzy skrót, można łatwo utworzyć kolizje, wprowadzając do komunikatu nowe wartości, które wpływają tylko na bity zmieniające się w przewidywalny sposób.