Cykl wprowadzający do podstawowych zagadnień związanych z kryptografią.
14.08.2024
Kontynuując cykl o kryptografii na pewno warto zatrzymać się na chwilę nad czymś o czym już wcześniej wspominałem o tajemniczej nazwie: hash. Hash w kryptografii to wynik działania funkcji skrótu, a funkcje te odgrywają istotną rolę w otaczającym nas świecie.
Czym zatem są kryptograficzne funkcje skrótu?
Mogą być używane samodzielnie do weryfikacji integralności danych (np. chcemy sprawdzić czy dany plik nie został „ po drodze” przez kogoś zmodyfikowany), a także odgrywać kluczową rolę w podpisach cyfrowych czy uwierzytelnianiu wysyłanych wiadomości z wykorzystaniem prywatnego klucza tzw. HMAC (Hash-based Message Authentication Code czasem nazywane Keyed-Hash Message Authentication Code).
Dla przypomnienia podpisy cyfrowe pozwalają nam weryfikować integralność i autentyczność, a także zapewniają niezaprzeczalność, a kody HMAC pozwalają nam weryfikować integralność i autentyczność danych.
Brzmi mało zrozumiale… spokojnie, już tłumaczę.
Kryptograficzne funkcje skrótu mogą przekształcać dane wejściowe o dowolnej długości, w ciąg znaków o stałej długości, który jest znany właśnie jako hash.
I to jest bardzo ważne, bez względu jaką ilość danych przekształcamy, dostaniemy na wyjściu hash o takiej samej długości.
Dodatkowo jest to funkcja deterministyczną, kolejna ważna cecha. Oznacza to, że wynik dla tych samych danych wejściowych będzie zawsze taki sam.
I jeszcze jedno: Kryptograficzne funkcje skrótu są również jednokierunkowe, co oznacza, że nie jest możliwe ustalenie oryginalnych danych wejściowych przy użyciu tylko danych wyjściowych.
Przykład:
SHA-256 jest jedną z najpopularniejszych kryptograficznych funkcji skrótu, ale istnieje wiele innych przydatnych kryptograficznych funkcji skrótu jak w tabeli poniżej:
Nazwa | Długość wartości Hash | Siła |
---|---|---|
HMAC | Zmienna | Bardzo silna |
HAVAL | 128, 160, 192, 224, 256 | Silna |
MD2 | 128 | Słaba |
MD4 | 128 | Słaba |
MD5 | 128 | Słaba |
SHA-1 | 160 | Słaba |
SHA-224 | 224 | Silna |
SHA-256 | 256 | Bardzo silna |
SHA-384 | 384 | Bardzo silna |
SHA-512 | 512 | Bardzo silna |
Najważniejsze cechy:
Na pewno zauważyliście nie wszystkie z nich są opisane jako bardzo silne. Jeśli chcemy, aby nasze systemy były kryptograficznie bezpieczne, musimy użyć odpowiednich kryptograficznych funkcji skrótu. Co znaczy bezpiecznych?
Aby kryptograficzna funkcja skrótu była bezpieczna i użyteczna, musi posiadać każdą (tak, kazdą!) z poniższych właściwości:
- Musi być w stanie przyjmować dane wejściowe o zmiennej długości, niezależnie od tego, czy jest to tylko kilka bitów, czy duży plik.
- Musi zawsze generować ciągi o stałej długości. Na przykład, SHA-256 zawsze ma 256 bitów na wyjściu, bez względu na rozmiar danych wejściowych.
- Musi być szybka w obliczeniach.
- Musi być deterministyczna – te same dane wejściowe, zawsze wygenerują ten sam hash.
- Musi być odporny na kolizje, czyli różne dane wejściowe, muszą generować różne hashe. Funkcje które nie posiadają tej właściwości nie zapewniają odpowiedniego i bezpieczeństwa np.: MD2, MD4, DM5, czy SHA-1 – dla nich wykryto podatność polegająca na tym, iż można było wygenerować ten sam hash dla różnych danych….
- Jednokierunkowa – niewykonalne powinno być obliczenei danych wejściowych na podstawie wartości hasha.
Silna funkcja hashująca powinna się również harakteryzowac duża dyfuzją, a więc własciwoscią, która mówi iż zmiana jednego bitu w danych wejściowych powinna powodować zmianę co najmniej połowy bitów na wyjściu.
Jak to działa?
Zrozumienie kryptograficznych funkcji skrótu za pomocą powyższych właściwości może być trudne, więc przejdzmy kilka przykładów ich działania. Wykorzystajmy Jeśli przepuścimy pojedynczą liczbę, np. „0” przez algorytm SHA-256, otrzymamy następujący 256-bitowy skrót jako wynik:
5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9
Za każdym razem wpisując te samą liczbę otrzymamy ten sam hash. A czy jak wprowadzę więcej znaków, wpłynie to na długość hash’a? Sprawdźmy „BezpieczenstwoXD jest fajne!”
Wynik:
70c5c97d523e3f338995b842cbd0c83d08d9cd580a9f6a00c9b65b2d38dda106
Zobaczcie, inna wartość, ale długość hasha taka sama 256 znaków.
Moglibyśmy przepuścić przez algorytm całą encyklopedię i nadal otrzymać 256-bitowy ciąg znaków, w ten sam sposób, w jaki pojedyncza cyfra również dała 256-bitowy ciąg znaków. Pójdźmy o krok dalej i zmieńmy tylko jedną literę w naszym zdaniu „BezpieczeństwoXD jest fajne!„.
To daje nam:
2b657a163e406af0a4abb615b048387a7359fed659ac5c37638e6320937b1139
Dzięki tej subtelnej zmianie jednej litery otrzymujemy zupełnie inną wartość skrótu.
Gdzie wykorzystujemy funkcje skrótu?
We wcześniejszych artykułach z cyklu o kryptografii, pisałem o wykorzystaniu funkcji hashujacych w podpisach cyfrowych, integralności wiadomości czy ich uwierzytelnianiu. Właściwości funkcji skrótu sprawiają, że są one przydatne do weryfikacji integralności danych w wielu innych scenariuszach.
Jednym z przykładów o którym chyba nie wspominaliśmy jest dystrybucja oprogramowania.
Np. ściągając obraz Kali linux (oczywiście nie zapominając o założeniu kaptura… bo hakowanie ????) , widzimy możliwość weryfikacji integralności ściąganego obrazu w postaci sumy kontrolnej, czyli hash’a:
Dzięki temu po ściągnięciu oprogramowania możemy sprawdzić jego sumę kontrolną.
Przykład dla SHA256:
Windows wiersz poleceń:
certutil -hashfile .\kali-linux-2024.2-installer-amd64.iso sha256
SHA256 hash of .\kali-linux-2024.2-installer-amd64.iso:
5eb9dc96cccbdfe7610d3cbced1bd6ee89b5acdfc83ffee1f06e6d02b058390c
CertUtil: -hashfile command completed successfully.
Linux terminal:
sha256sum kali-linux-2024.2-installer-amd64.iso
5eb9dc96cccbdfe7610d3cbced1bd6ee89b5acdfc83ffee1f06e6d02b058390c kali-linux-2024.2-installer-amd64.iso
a następnie porównać wynik z tym wyświetlanym na naszej stronie internetowej.
Jeśli obydwa wyniki są zgodne, oznacza to, że kod pobrany przez użytkowników jest taki sam, jak kod przesłany przez nas, a atakujący nie ingerował w niego w celu rozprzestrzeniania złośliwego oprogramowania.
Podsumowanie
Nasza historia o kryptografii mocno się rozbudowała. Jest wiele jeszcze ciekawych aspektór kryptografii, o których moze uda się opowiedzieć w kolejnych artykułach! Do zobaczenia!
Daniel Wysocki
Daniel Wysocki to absolwent wydziału Inżynierii Mechanicznej i Robotyki na Akademii Górniczo-Hutniczej w Krakowie.
Jego kariera w branży IT trwa już dwie dekady, podczas których zdobył bogate doświadczenie i umiejętności.
Obecnie pełni funkcję Kierownika Działu Cyberbezpieczeństwa w firmie Advatech, lidera w dostarczaniu nowoczesnych rozwiązań technologicznych. Jako certyfikowany ekspert od cyberbezpieczeństwa (CISSP), nieustannie poszukuje i wprowadza w życie najnowocześniejsze i najskuteczniejsze rozwiązania do ochrony danych i infrastruktury IT. Korzysta z innowacyjnych osiągnięć branży cyberbezpieczeństwa, aby zapewnić najwyższy poziom zabezpieczeń i odporności na ataki.