Wyobraź sobie, że możesz wziąć dowolny fragment danych — jedno słowo, powieść, 4 GB wideo — i zredukować go do krótkiego ciągu znaków o stałej długości, który jednoznacznie go identyfikuje. Zmień jeden przecinek w oryginale, a ciąg stanie się zupełnie inny. I nie ma sposobu, by odwrócić proces i odzyskać oryginalne dane.
Dokładnie to robi kryptograficzna funkcja haszująca. Jest jednym z najbardziej fundamentalnych elementów nowoczesnego bezpieczeństwa i po cichu chroni niemal wszystko, co robisz online.
Metafora odcisku palca
Hasz działa jak cyfrowy odcisk palca. Twój odcisk palca jednoznacznie Cię identyfikuje, ale nikt nie może na jego podstawie odtworzyć Twojej twarzy. Podobnie hasz kryptograficzny jednoznacznie identyfikuje fragment danych bez ujawniania, czym te dane są.
Podaj dowolne wejście do funkcji haszującej, a otrzymasz skrót (zwany też wartością hasz lub sumą kontrolną) — ciąg znaków szesnastkowych o stałej długości. SHA-256, jeden z najczęstszych algorytmów, zawsze generuje 64-znakowy wynik, niezależnie od rozmiaru wejścia.
| Wejście | Skrót SHA-256 (pierwsze 16 znaków) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Cały zrzut Wikipedii | (nadal 64 znaki) |
Cztery podstawowe właściwości
Funkcja kwalifikuje się jako hasz kryptograficzny tylko wtedy, gdy spełnia te właściwości:
- Deterministyczność. To samo wejście zawsze daje ten sam wynik, na dowolnej maszynie, w dowolnym czasie.
- Jednokierunkowość (odporność na odwrócenie). Mając hasz, jest obliczeniowo niewykonalne znalezienie oryginalnego wejścia. Nie da się „odhaszować" danych.
- Odporność na kolizje. Jest praktycznie niemożliwe znalezienie dwóch różnych wejść dających ten sam skrót. Dla SHA-256 szanse na przypadkową kolizję wynoszą mniej więcej 1 do 2^128 — liczba większa niż liczba atomów w obserwowalnym wszechświecie.
- Efekt lawinowy. Zmiana jednego bitu na wejściu zmienia mniej więcej połowę bitów na wyjściu. Nie ma wykrywalnego wzorca ani zależności między podobnymi wejściami.
Kluczowe rozróżnienie: Haszowanie to nie szyfrowanie. Szyfrowanie jest odwracalne za pomocą klucza; haszowanie jest celowo nieodwracalne. Szyfrujesz dane, by chronić je podczas przesyłania. Haszujesz dane, by zweryfikować ich integralność lub przechować dowód bez zachowywania oryginału.
Popularne algorytmy haszujące
MD5 (1991)
- Wyjście: 128 bitów (32 znaki szesnastkowe)
- Status: Kryptograficznie złamany. Badacze mogą generować kolizje w sekundach na laptopie.
- Wciąż spotykany w: Niezwiązanych z bezpieczeństwem sumach kontrolnych do pobierania plików i starszych systemach.
SHA-1 (1995)
- Wyjście: 160 bitów (40 znaków szesnastkowych)
- Status: Wycofany w kontekście bezpieczeństwa. Google zademonstrował praktyczną kolizję w 2017 roku (atak „SHAttered").
- Wciąż spotykany w: Starszych repozytoriach Git, niektórych starszych certyfikatach.
SHA-256 (2001)
- Wyjście: 256 bitów (64 znaki szesnastkowe)
- Status: Obecny standard. Brak znanych praktycznych ataków.
- Używany w: Certyfikatach TLS, Bitcoinie, haszowaniu haseł, podpisach cyfrowych, weryfikacji integralności plików.
SHA-3 (2015)
- Wyjście: Zmienny (najczęściej 256 bitów)
- Status: Najnowszy standard, oparty na zupełnie innej wewnętrznej architekturze (konstrukcja gąbki Keccak) niż rodzina SHA-2.
- Używany w: Systemach przyszłościowych, Ethereum, sytuacjach wymagających różnorodności algorytmów.
| Algorytm | Rozmiar wyjścia | Bezpieczny? | Szybkość |
|---|---|---|---|
| MD5 | 128 bitów | Nie | Bardzo szybki |
| SHA-1 | 160 bitów | Nie | Szybki |
| SHA-256 | 256 bitów | Tak | Umiarkowany |
| SHA-3-256 | 256 bitów | Tak | Umiarkowany |
Gdzie stosuje się haszowanie kryptograficzne
Przechowywanie haseł
Gdy tworzysz konto, dobrze zaprojektowany system nigdy nie przechowuje hasła w postaci jawnej. Przechowuje jego hasz. Gdy się logujesz, system haszuje to, co wpisujesz, i porównuje z zapisaną wartością. Nawet jeśli baza danych zostanie naruszona, atakujący otrzymują hasze — nie hasła.
Nowoczesne systemy idą dalej, dodając losową sól (dodatkowe dane dołączane przed haszowaniem) i używając celowo wolnych algorytmów, takich jak bcrypt, scrypt lub Argon2, aby uczynić zgadywanie siłowe niepraktycznym.
Weryfikacja integralności plików
Dystrybutorzy oprogramowania publikują sumy kontrolne SHA-256 obok swoich plików do pobrania. Po pobraniu obliczasz hasz pliku na swoim komputerze i porównujesz. Zgodność dowodzi, że plik nie został uszkodzony ani zmodyfikowany podczas przesyłu.
Podpisy cyfrowe
Gdy podpisujesz cyfrowo dokument, system najpierw go haszuje, a następnie szyfruje hasz kluczem prywatnym. Odbiorca odszyfrowuje go kluczem publicznym i porównuje z własnym haszem dokumentu. Jest to znacznie wydajniejsze niż szyfrowanie całego dokumentu i dowodzi zarówno autorstwa, jak i integralności.
Blockchain
Każdy blok w blockchainie zawiera hasz poprzedniego bloku, tworząc niezmienny łańcuch. Zmiana jakiejkolwiek przeszłej transakcji zmienia hasz jej bloku, co przerywa łańcuch od tego momentu, czyniąc manipulację natychmiast widoczną.
Dlaczego MD5 i SHA-1 są uważane za złamane
Algorytm haszujący jest „złamany", gdy ktoś może celowo stworzyć dwa różne wejścia dające ten sam hasz (kolizję). To podważa każde zastosowanie opierające się na unikalności.
- MD5: Kolizje można generować w sekundach. Badacze stworzyli dwa różne pliki PDF z identycznymi haszami MD5.
- SHA-1: Atak SHAttered z 2017 roku stworzył dwa różne pliki PDF z tym samym haszem SHA-1, wymagając około 6 500 lat obliczenia na jednym CPU (wykonalne z zasobami chmurowymi).
Praktyczna zasada: Nigdy nie używaj MD5 ani SHA-1 do niczego związanego z bezpieczeństwem — haseł, certyfikatów, podpisów cyfrowych ani kontroli integralności, w których może uczestniczyć przeciwnik. Zamiast tego użyj SHA-256 lub SHA-3.
Więcej informacji
Haszowanie jest jednym z tych pojęć, które stają się intuicyjne, gdy z nimi poeksperymentujesz. Spróbuj zahaszować zdanie, a potem zmień jeden znak i zaobserwuj efekt lawinowy na własne oczy.
- Jak generować i weryfikować hasze — samouczek krok po kroku
- Generator haszy — oblicz SHA-256, MD5, SHA-512 i inne natychmiast w przeglądarce
- Identyfikator haszy — wklej nieznany hasz i zidentyfikuj jego algorytm
