Czym jest funkcja haszująca?
Jedna funkcja haszująca przekształca dowolną treść — zdanie, program, kopię zapasową o wielu gigabajtach — w ciąg o stałej długości zwany odciskiem lub digest. Trzy właściwości ją definiują: wynik ma zawsze ten sam rozmiar, niezależnie od wejścia, ta sama treść zawsze daje ten sam odcisk, a przejście od odcisku do wejścia musi być w praktyce niemożliwe. To trzeci punkt odróżnia hash kryptograficzny od sumy kontrolnej, takiej jak CRC32.
W praktyce dwa zastosowania wyczerpują większość przypadków. Sprawdzanie integralności : wydawca publikuje odcisk swojego pliku, Ty go ponownie obliczasz, a zgodność dowodzi, że pobranie nie zostało zmienione. Porównywanie treści : zamiast przechowywać same dokumenty, przechowuje się ich odciski — identyczne odciski oznaczają identyczne treści, nie zdradzając nic o ich naturze.
Jaki algorytm wybrać dziś?
SHA-256 jest domyślną odpowiedzią: ustandaryzowany przez NSA, potem przyjęty wszędzie, zaimplementowany w każdym języku programowania i bez znanej kolizji. SHA-512 sprawdza się przy dużych wolumenach, gdy procesor jest 64-bitowy — często szybszy od swojego kuzyna na tego typu architekturze. SHA-384 nie wnosi niczego ponad dłuższą wariantę. Do podpisu wiadomości z kluczem HMAC-SHA-256 jest odniesieniem: łączy klucz tajny z hashem, dzięki czemu tylko posiadacz klucza może wyprodukować tę samą wartość.
Z kolei MD5 i SHA-1 pozostają przydatne przy kontrolach niewrażliwych — indeks, cache, wykrywanie duplikatów — gdzie liczy się szybkość, a nie odporność. CRC32, z kolei, nie jest hashem kryptograficznym: wykrywa przypadkowe uszkodzenia, ale celową zmianę można stworzyć w kilka sekund.
Dlaczego MD5 i SHA-1 uznaje się za złamane?
Ponieważ badacze stworzyli dla każdego z nich dwa różne dokumenty o tym samym odcisku. W przypadku MD5 dowód pochodzi z 2004 roku; dla SHA-1 realną kolizję uzyskano w 2017 roku pod nazwą SHAttered. Jedna kolizja wystarcza, aby złamać podpis: jeśli atakujący wybiera dokument, a wydawca tylko go haszuje, może uzyskać podpis dla zupełnie innej treści. Z tego powodu certyfikaty TLS, aktualizacje oprogramowania i podpisy pakietów porzuciły te algorytmy.
Czego hash nie robi
Hashowanie to nie szyfrowanie: odcisk jest z założenia nieodwracalny, ale nie chroni treści, czyniąc ją nieczytelną. Hash niczego nie szyfruje, nie zastępuje ani TLS, ani klucza szyfrującego i nie chroni samego hasła — to zadanie dla bcrypt, scrypt lub Argon2, zaprojektowanych tak, aby były wolne. Poza tym hashowanie dwukrotnie niczego nie wzmacnia: łączenie algorytmów dodaje tylko kruchą warstwę tam, gdzie wystarczy jedna nienaruszona funkcja.
Zalecane dla
Administratorów systemów i dyrektorów IT weryfikujących sumy kontrolne dystrybucji, programistów uszczelniających artefakty lub uwierzytelniających webhooki, auditorów i specjalistów od zgodności sprawdzających integralność kopii zapasowych, dziennikarzy i analityków porównujących dokumenty bez ich rozpowszechniania, studentów kryptografii operujących pojęciami odciska, kolizji i soli — oraz każdego, kto chce zahashować treść szybko i bez śladu, a uzupełnieniem jest generator haseł, a kodulator i dekodulator Base64, a dekodulator JWT, a tester regex i licznik znaków.