[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. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *