Hash
Hash (ang. hash, pol. skrót lub wartość mieszająca) – w informatyce i kryptografii jest to wynik działania funkcji mieszającej (ang. hash function) na danych wejściowych dowolnej długości, którego długość jest stała i znacznie krótsza niż wejście. Dzięki temu hash pozwala w efektywny sposób identyfikować, porównywać i przechowywać duże ilości danych.
Definicja
Funkcja kryptograficzna lub algorytm hashujący przyjmuje dowolny ciąg bajtów i zwraca ciąg o stałej długości, zwany wartością hash lub skrótem. Typowy wynik ma postać ciągu szesnastkowego, np. 5d41402abc4b2a76b9719d911017c592 (hash MD5 słowa „hello”).
Historia
Pierwsze praktyczne zastosowania funkcji mieszających pojawiły się w latach 1970–1980 w kontekście szybkiego wykrywania duplikatów plików i optymalizacji baz danych. W 1991 roku powstał algorytm MD5, a w 1995 – rodzina SHA‑1, które stały się podstawą nowoczesnych systemów bezpieczeństwa.
Rodzaje funkcji hash
- Funkcje kryptograficzne – zapewniają jednokierunkowość, silną odporność na kolizje i trudność odwrócenia. Przykłady: SHA‑256, SHA‑3, BLAKE2.
- Funkcje niekryptograficzne – projektowane pod kątem szybkości i równomiernego rozkładu w strukturach danych. Przykłady: MurmurHash, CityHash, CRC.
Właściwości funkcji hash
- Deterministyczność – identyczne dane wejściowe zawsze dają ten sam hash.
- Jednokierunkowość (dotyczy funkcji kryptograficznych) – odwrócenie procesu jest praktycznie niemożliwe.
- Rozproszenie – małe zmiany w danych wejściowych powodują drastyczną zmianę wyniku (efekt lawiny).
- Niska kolizyjność – ryzyko powstania dwóch różnych danych o tym samym hash jest minimalne.
Zastosowania
Przechowywanie haseł
W systemach Linux i Windows hasła użytkowników nie są przechowywane w postaci jawnej, lecz jako hash wraz z solą, co zwiększa bezpieczeństwo przed atakami typu „brute‑force”.
Sprawdzanie integralności danych
Hash jest wykorzystywany do weryfikacji integralności plików (np. przy pobieraniu oprogramowania) oraz w protokołach TLS do zapewnienia integralności transmisji.
Struktury danych
W bazach danych i językach programowania hash służy do implementacji tablic mieszających, które umożliwiają szybkie wyszukiwanie, wstawianie i usuwanie elementów (średnia złożoność O(1)).
Systemy kontroli wersji
System Git identyfikuje każdy obiekt (commit, drzewo, blob) przy pomocy SHA‑1 (obecnie przechodzi na SHA‑256). Dzięki temu można łatwo wykrywać zmiany i rozwiązywać konflikty.
Technologie blockchain
W blockchain hash łączy kolejne bloki w łańcuch, zapewniając nieodwracalność i odporność na manipulacje.
Wyszukiwanie tekstu
Algorytm Rabin‑Karp używa hash do szybkiego porównywania podciągów w dużych tekstach.
Popularne algorytmy
- MD5 – 128‑bitowy skrót, obecnie uznawany za niebezpieczny ze względu na łatwe kolizje.
- SHA‑1 – 160‑bitowy, stopniowo wycofywany w systemach bezpieczeństwa.
- SHA‑256 – 256‑bitowy skrót, szeroko stosowany w certyfikatach i blockchain.
- SHA‑3 – najnowszy standard NIST, oparty na konstrukcji Keccak.
- BLAKE2 – wysokowydajny, bezpieczny i szybki zamiennik SHA‑2.
- CRC (Cyclic Redundancy Check) – prosty, niekryptograficzny kod wykrywania błędów.
- MurmurHash – szybka funkcja niekryptograficzna używana w systemach bazodanowych.
Implementacje i biblioteki
W językach programowania dostępne są gotowe biblioteki:
- Python:
hashlib– obsługa MD5, SHA‑1, SHA‑256, SHA‑3 i innych. - Java:
java.security.MessageDigest– interfejs do funkcji hash. - C/C++: biblioteka
OpenSSLorazlibsodium(BLAKE2, SHA‑2). - JavaScript:
crypto.subtlew przeglądarkach oraz pakietcryptow Node.js.
Zagrożenia i słabości
Choć hash jest potężnym narzędziem, niewłaściwy wybór algorytmu może prowadzić do:
- Kolizji – sytuacji, w której dwa różne wejścia dają identyczny hash (np. w MD5 i SHA‑1).
- Ataków słownikowych i tęczowych (rainbow tables) – umożliwiających szybkie odgadnięcie haseł przy braku sali.
- Użycia przestarzałych funkcji – co osłabia bezpieczeństwo systemów operacyjnych i aplikacji internetowych.
Przyszłość i alternatywy
Wraz ze wzrostem mocy obliczeniowej rozwijane są nowe funkcje, które łączą wysoką bezpieczeństwo z dużą wydajnością, np. BLAKE3 oraz SHA‑3. W systemach rozproszonych i technologiach blockchain rośnie zapotrzebowanie na hash‑funkcje odporniejsze na ataki kwantowe.
Powiązane pojęcia
Więcej informacji można znaleźć w następujących artykułach encyklopedycznych: