Hasze kryptograficzne

Hasz kryptograficzny jest to algorytm operujący na pliku (ciągu bajtów) o dowolnej długości. Wynikiem działania tego algorytmu będzie ciąg bajtów o następującej charakterystyce:

  • Jest on stałej długości. Haszowany plik może mieć wielkość 1 bajtu lub 15 terabajtów, a hash zawsze będzie miał tę samą długość. Obecnie stosuje się hasze o długości od 128 do 512 bitów.
  •   Odwrócenie algorytmu jest praktycznie niemożliwe, czyli posiadając hasz nie jest możliwe odtworzenie danych, które były użyte do jego wygenerowania.
  • Nie jest możliwa zmiana danych źródłowych be zmiany haszu.
  • Nie ma praktycznej możliwości odnalezienie dwóch plików o tym samym haszu.

Możliwość zastosowania haszu na dowolnym pliku i stałą długość wyniku operacji zapewnia się poprzez podział pliku na bloki i przeprowadzenia operacji cyklicznej na wszystkich blokach po kolei. Wynik operacji na pierwszym bloku jest poddawany operacji z drugim blokiem, a wynik tej operacji z kolejnym i tak dalej. Pętla może być dowolnej długości i będzie trwałą dopóki ostatni blok nie zostanie dodany.

Każda zmiana w danych spowoduje totalną zmianę haszu. Zmiana nawet jednego bitu w gigabajtowym pliku, zmieni hasz wyjściowy, zwany również skrótem, w zupełny sposób.

W praktyce możliwe jest istnienie dwóch plików o innej zawartości ale takim samym haszu. Jest to tak zwana kolizja. Zadaniem dobrego algorytmu haszującego jest to żeby kolizja była pseudolosowa. Pseudolosowa czyli, jej prawdopodobieństwo powinno być równe lub zbliżone do siły algorytmu. Aby stworzyć kolizję trzeba będzie wykonać atak brute force  o ogromnej liczbie kombinacji. Pamiętajmy jednak, że istnieje w tym wypadku tak zwany paradoks dnia urodzin. Ile osób musi być w pokoju, żeby prawdopodobieństwo, że co najmniej dwie mają urodziny w tym samym dniu wynosiło 50%? Jedynie 23. To samo dotyczy haszy. Prawdopodobieństwo, że w zbiorze miliarda plików, istnieją dwa o takim samym haszu jest o wiele większe niż 2 do potęgi 128 (2^128) (dla MD5). Bez obaw jednak – jest ono ciągle bardzo małe.

Rodzaje haszy

Istnieje wiele rodzajów haszy. Poniżej przedstawię to najczęściej używane.

CRC32

Cyclic Redundancy Check, to nie hasz kryptograficzny, ale podobny algorytm, używany często w tym samym celu co hasze. Jest to algorytm 32 bitowy, używany zwykle do zapewnienia integralności danych przechowywanych na nośnikach lub transportowanych przez dane medium. 32 bity daje nam 4 294 967 296 możliwości. Nie da to nam wystarczającej siły do użycia w poważnej kryptografii, ale jest on wystarczająco mocny do kontroli błędów transferu czy też nośników. CRC nie jest ponadto odporny na kolizje. Kryptoanalityk, bez trudu stworzy dwa pliki o tym samym CRC. Można go więc stosować tylko wtedy, gdy nie oczekujemy ataków.

MD5

Ciągle jeden z powszechniejszych i najbardziej znanych algorytmów. Jest on 128-bitowy. Oznacza to 340 282 366 920 938 463 463 374 607 431 768 211 456 możliwości. Jak widać paradoks dnia urodzin rzeczywiście nie może mu za bardzo zagrozić. Od czasu do czasu pojawiają się w mediach informacje o jego złamaniu. Pamiętajmy jednak, że w kryptoanalizie złamanie algorytmu oznacza zwiększenie prawdopodobieństwa odnalezienia wyniku o dowolnie małą liczbę. Zmniejszenie liczby kombinacji do 2^127 będzie złamaniem haszu, ale ciągle zostanie 170 141 183 460 469 231 731 687 303 715 884 105 728 możliwości. Każdą informacje o złamaniu należy więc dokładnie przeanalizować, w celu sprawdzenia,czy rzeczywiście ma to wpływ na nasze zastosowania.

SHA

Rodzina haszy SHA (Secure Hash Algotithm) jest zestawem algorytmów publikowanych w Stanach Zjednoczonych  przez NIST (National Institute of Standards and Technology). Jest on tam akredytowany do użycia w administracji rządowej, Istnieją 3 generacja SHA – SHA-1, SHA-2 i SHA-3.

Najstarszy SHA-1 ma  160 bitów, czyli, jak łatwo wyliczyć 1 461 501 637 330 902 918 203 684 832 716 283 019 655 932 542 976 kombinacji.

SHA-2 ma kilka wersji bitowych: 224, 256,384 i 512. Liczba kombinacji jest odpowiednio większa.

SHA-3 opublikowany w 2012, czyli całkiem niedawno, ma te same wersje bitowe: 224, 256,384 i 512 plus dodatkowo można tworzyć hasze o dowolnej wybranej długości.

Zastosowanie haszy

Informatyka śledcza

W informatyce śledczej, będziemy używali haszy przede wszystkim do zapewnienia integralności zebranych dowodów. Forensic image będzie chroniony haszem. Jeżeli dowód zostanie zmieniony w najmniejszym stopniu również hasz ulegnie zmianie. Haszy będziemy także używać w celu znalezienia duplikatów plików na nośnikach lub w celu odfiltrowania plików systemowych.

Hasła

Każdy kto zajmował się programowaniem kont użytkowników, może poza programistami Sony i wielu innych korporacji, wie że w bazie danych użytkowników nie należy przechowywać haseł. Należy zapisywać tam hashe haseł. Jeżeli moje hasło to “haslo11” w bazie można przechować MD5 hasz 8f0b680e2dec82b678a9665b3d9953ac. Następnym razem w trakcie logowania, wpiszę hasło “haslo11”, system wygeneruje hasz i sprawdzi, czy jest on taki sam co w bazie danych. Haker, który dostanie się do bazy danych, będzie miał dostęp tylko do bazy haszy. Nie będzie się mógł więc zalogować, bo hasze są jednostronne. Crakerzy znaleźli na to pewien sposób, a mianowicie rainbow tables. Rainbow table tworzy się poprzez generację haszy dla danego słownika brute force i zapisuje je w specjalnej bazie danych, w tak zwanych tablicach tęczowych. Tworzymy więc na przykład hasze MD5 dla bilionów haseł.  Może to potrwać kilka miesięcy, ale kiedy w nasze ręce wpadnie baza danych z haszami haseł, po prostu sprawdzamy czy nie ma danego hashu w naszej tablicy i już mamy hasło.

Aby zapobiec tęczowym atakom programiści zaczęli solić hasła. Oznacza to, że zaczęli oni dodawać do nich przed haszowaniem sekretny ciąg znaków tak zwaną sól lub też salt po angielsku. Po posoleniu moje hasło mogło by wyglądać tak “haslo11G75Rt@#&HLKjjY^&”. Na tę technikę tęczowe tablice już nie pomogą, chyba oczywiście, że uda nam się poznać wartość soli. Tworzenie jednak tęczowej tablicy dla unikatowej wartości soli nie ma większego sensu.

Podpis elektroniczny

Podpis elektroniczny to kombinacja asymetrycznej kryptografii i haszy. Podpisywana wiadomość jest haszowana, a hasz szyfrowany kluczem prywatnym.

W celu weryfikacji podpisu, hasz odszyfrowujemy kluczem publicznym i sprawdzamy czy zgadza się on z haszem wiadomości.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *