[BSI] Kodowanie, hashowanie, szyfrowanie: Hashowanie

Część druga z czterech:

  1. Kodowanie.
  2. Hashowanie.
  3. Szyfrowanie.
  4. Przykłady zastosowań. Analiza istniejących rozwiązań.

2. Hashowanie (zwane też 'funkcja skrótu') – jest to przekształcanie ciągu bajtów w inny ciąg bajtów który NIE ZAWIERA żadnych informacji o źródle. Ze względu na praktyczne zastosowanie takich przekształceń, celem algorytmów hashujących jest przekształcenie dowolnej długość ciągu bajtów w ciąg o określonej długość (nie ważne czy będzie to hasło '123′ czy plik o wielkości 20 GB, funkcja skrótu zawsze zwróci ciąg o takiej samej długości). Najważniejszymi cechami są:
– wygenerowany ciąg nie może zawierać informacji o ciągu źródłowym (wiąże się to z 'jednokierunkowością' takich funkcji)
– wygenerowany ciąg musi być maksymalnie losowy względem ciągu wejściowego (np. '1′ -> 'c4ca4238a0b923820dcc509a6f75849b', '2′ -> 'c81e728d9d4c2f636f067f89cc14862c' = mała zmiana na wejściu daje duże i nie przewidywalne zmiany na wyjściu)
– dla tych samych danych źródłowych zawsze musi generować taki sam 'hash'

Wymyślaniem takich super algorytmów zajmują się różni geniusze, a cechą takich algorytmów jest to, że, aby 'złamać' (dowiedzieć się z jakiego ciągu znaków został wygenerowany) hash trzeba wpisywać po koleji (’1′, '2′, '3′, … ,’asdasdsad') ciągi znaków i generować ich hashe do czasu, aż się trafi taki sam hash jaki chcemy złamać. Dla starych i prostych algorytmów (32-40 znaków 'hasha') hashujących trwa to kilka dni na super komputerze. Dla nowoczesnych algorytmów generujących hashe (o długości 60-160 znaków) są to już lata lub tysiące lat generowania przy obecnych możliwościach komputerów.

Algorytmy hashujące stosowane w przeszłości:
– MD5 – długość hasha: 32 znaki w kodowaniu szesnastkowym – kiedyś bardzo popularny, ale aktualnie tak słaby, że można znaleźć/kupić w internecie bazę danych z wszystkimi możliwymi kombinacjami 32 znaków
– SHA1 – długość hasha: 40 znaków w kodowaniu szesnastkowym – zastąpił MD5, ale aktualnie jest również uznawany za słaby i w internecie są dostępne wielkie bazy wygenerowanych hashy
Używanie MD5 i SHA1 jest bezpiecznie jeśli używa się ich do weryfikacji zawartości plików lub przechowywania haseł wykorzystując 'sól', więcej o soli w hasłach w części czwartej artykułu 'Zastosowania'. Nie należy ich używać do przechowywania haseł 'wprost' ze względu na możliwość odczytania haseł.

Algorytmy hashujące stosowane aktualnie:
– SHA-2 – obsługuje różne długości generowanych hashy, popularne to 'SHA-256′ i 'SHA-512′ które mają długość hasha w kodowaniu szesnastkowym odpowiednio 64 i 128 znaków – dostępny w większości języków programowania
– SHA-3 – rozwiązanie przyszłościowe (zatwierdzone w 2012), wymaga instalowania dodatkowych bibliotek

Możliwe zastosowania:
przechowywanie haseł w bazie danych w formie zahashowanej nie pozwala nikomu (włącznie z administratorem) przeglądać haseł, jak się logować kiedy hasło w bazie jest zahashowane opiszę w części czwartej
sprawdzanie czy plik nie został zmodyfikowany – do dużych plików udostępnianych w internecie często są dołączane pliki .md5 lub .sha1 które zawierają hash danego pliku, korzystając ze specjalnych programów można szybko sprawdzić czy hash danego algorytmu wygenerowany z naszego pobranego pliku i ten który ktoś chciał nam wysłać są identyczne, zapobiega to problemom z błędami pojedyńczych bitów podczas transmisji w internecie, a także potencjalnym próbą przesłania nam zmodyfikowanego pliku przez hackera

Więcej informacji: http://pl.wikipedia.org/wiki/Funkcja_skr%C3%B3tu

Przykład algorytmu hashującego:

Zamień każdą literę w ciągu na wartość jej kodu w kodowaniu ANSI, np. dla hasła '123′ (daje to odpowiednio kody 51, 52, 53), teraz pomnóż przez siebie te liczby, da to wynik 140556, tak właśnie powstał 'hash' hasła '123′. Z wyniku '140556′ nie da się jednoznacznie ustalić z jakiego ciągu powstał (wykorzystałem funkcję/algorytm jednokierunkową/y), ale jego rozkład losowy jest bardzo słaby (taki sam hash daje np. '132′, '321′, '231′ ..). Tworzenie takiego hashowania jest przykładem 'złych praktyk' w dziedzinie kryptografii – tworzenia własnych algorytmów zakładając, że skoro znam je tylko ja to ciężko będzie je złamać. Lepiej zostawić to 'geniuszom'.

Ten wpis został opublikowany w kategorii PJWSTK - BSI. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *