Czym jest funkcja skrótu i do czego służy

Funkcja skrótu zamienia dane dowolnej długości w odcisk o stałej długości: 128 bitów w MD5, 256 w SHA-256. Wystarczy zmienić jedną literę, by odcisk zmienił się całkowicie, a z odcisku nie da się odtworzyć danych.

Dlatego skrótami sprawdza się, czy pobrany plik jest nienaruszony, identyfikuje dane bez ich przechowywania, podpisuje dokumenty, a z wolnymi algorytmami i solą przechowuje hasła. Git oznacza każdą wersję skrótem SHA-1, Bitcoin opiera się na SHA-256.

MD5 i SHA-1 nie są już bezpieczne: da się celowo zbudować dwa różne pliki o tym samym odcisku. Nadal przydają się przeciw błędom transmisji, ale do celów bezpieczeństwa potrzeba SHA-256 lub silniejszego.

Częste błędy

  • Porównywanie skrótu obliczonego z tekstu z dodatkowym znakiem nowej linii lub spacją: jeden niewidoczny znak zmienia wszystko.
  • Zapisywanie haseł samym MD5 lub SHA-256: są zbyt szybkie, by chronić przed masowym zgadywaniem. Potrzebne są wolne algorytmy, jak bcrypt czy Argon2.
  • Przekonanie, że skrót można odszyfrować: to nie jest szyfrowanie. Strony, które 'odwracają' skróty, szukają ich tylko w tablicach gotowych wartości.

Najczęstsze pytania

Czy mogę odzyskać tekst ze skrótu?

Nie. Dobrej funkcji skrótu nie da się odwrócić; można tylko zgadywać tekst i porównywać. Dlatego krótkie lub popularne hasła i tak zostają znalezione.

Jak sprawdzić pobrany plik?

Oblicz skrót pliku narzędziem systemowym (sha256sum w Linuksie, Get-FileHash w Windows) i porównaj z opublikowanym. Jeśli różni się choć jeden znak, plik jest inny.

Dlaczego ten sam tekst daje różne skróty w różnych programach?

Zwykle z powodu kodowania lub znaków końca wiersza: tekst zapisany z CRLF albo w Windows-1250 ma inne bajty niż ten sam tekst w UTF-8 z LF, a więc inny skrót.

Jak działa to obliczenie

Tekst jest najpierw zamieniany na bajty w UTF-8. SHA-1, SHA-256, SHA-384 i SHA-512 oblicza interfejs Web Crypto przeglądarki zgodnie z FIPS 180-4. MD5 działa według RFC 1321: dane są uzupełniane do wielokrotności 512 bitów wraz z ich długością, a każdy blok przechodzi 64 kroki dodawań, rotacji i funkcji logicznych na czterech słowach 32-bitowych.