Przejdź do treści

~/cyberbezpieczenstwo cat funkcja-skrotu-kryptograficznego.md

Funkcja skrótu kryptograficznego: jak działa, właściwości i zastosowania

Funkcja skrótu kryptograficznego zamienia dowolne dane w krótki, unikalny odcisk. Poznaj jej właściwości, różnice między MD5, SHA-1, SHA-2 i SHA-3 oraz zastosowania.

CZCzarek Zawolski--aktualizacja=--czas=7 min--dział=Cyberbezpieczeństwo
Ilustracja danych przekształcanych przez funkcję skrótu w krótki ciąg znaków
tldr.txt — W skrócie

~ xad tldr funkcja-skrotu-kryptografi…

  • Funkcja skrótu kryptograficznego zamienia dane dowolnej długości w skrót o stałej długości, np. 256 bitów dla SHA-256. Z tego skrótu nie da się odtworzyć danych.
  • Dobra funkcja skrótu jest jednokierunkowa, odporna na kolizje, a najmniejsza zmiana danych całkowicie zmienia wynik (efekt lawinowy).
  • MD5 i SHA-1 są złamane pod względem kolizji i nie nadają się do podpisów ani certyfikatów. Bezpieczne są SHA-2 (np. SHA-256), SHA-3 i BLAKE2/BLAKE3.
  • Skrót to nie szyfrowanie: nie ma klucza i nie da się go „odszyfrować”. Do haseł używa się wolnych funkcji z solą: Argon2id, bcrypt, scrypt lub PBKDF2.
  • Skróty służą do sprawdzania integralności plików, podpisów cyfrowych, HMAC, przechowywania haseł, Gita i blockchainu.
$ tree --spis-tresci

Funkcja skrótu kryptograficznego (ang. cryptographic hash function) to algorytm, który z danych o dowolnej długości — hasła, pliku czy całego dysku — oblicza krótki ciąg o stałej długości, nazywany skrótem lub hashem. Ten sam plik zawsze daje ten sam skrót, a najmniejsza zmiana danych daje zupełnie inny wynik. Z samego skrótu nie da się odtworzyć danych wejściowych.

Dzięki tym cechom skrót działa jak cyfrowy odcisk palca: pozwala sprawdzić, czy plik nie został zmieniony, podpisać dokument, bezpiecznie przechowywać hasła czy łączyć bloki w blockchainie. Poniżej wyjaśniamy, jakie właściwości musi mieć dobra funkcja skrótu, które algorytmy są dziś bezpieczne, a których nie wolno już używać.

Jak działa funkcja skrótu — przykład

Najłatwiej zobaczyć to na przykładzie. Oto skróty SHA-256 dwóch napisów, które różnią się jedną kropką:

SHA-256("Ala ma kota")  = 124bfb6284d82f3b1105f88e3e7a0ee02d0e525193413c05b75041917022cd6e
SHA-256("Ala ma kota.") = 9b9ae722342758f4bb6a5dd94470ddfab3c95cda15186231f53bb4666e657605

Oba wyniki mają dokładnie 256 bitów (64 znaki szesnastkowe), niezależnie od tego, czy na wejściu jest 11 bajtów, czy 11 GB. I choć dane różnią się minimalnie, skróty nie mają ze sobą nic wspólnego. Ten efekt nazywa się efektem lawinowym: zmiana jednego bitu wejścia zmienia średnio połowę bitów wyniku.

Wewnętrznie funkcja dzieli dane na bloki (w SHA-256 po 512 bitów) i przepuszcza je kolejno przez funkcję kompresji, która wielokrotnie miesza bity operacjami logicznymi, przesunięciami i dodawaniem. Wynik ostatniego bloku to skrót całej wiadomości.

Właściwości bezpiecznej funkcji skrótu

Nie każda funkcja skrótu jest kryptograficzna. Suma kontrolna CRC32 czy szybkie hashe typu xxHash świetnie wykrywają przypadkowe błędy, ale nie chronią przed celową manipulacją. Funkcja kryptograficzna musi dodatkowo spełniać trzy warunki:

WłaściwośćCo oznaczaDlaczego to ważne
Odporność na przeciwobraz (jednokierunkowość)mając skrót h, nie da się znaleźć danych m, dla których hash(m) = hnie da się „odwrócić” skrótu hasła
Odporność na drugi przeciwobrazmając dane m1, nie da się znaleźć innych m2 o tym samym skrócienikt nie podmieni pliku na inny o tej samej sumie
Odporność na kolizjenie da się znaleźć żadnej pary różnych danych o tym samym skróciepodpis jednego dokumentu nie pasuje do innego

Kolizje istnieją zawsze — danych jest nieskończenie wiele, a skrótów skończenie wiele. Chodzi o to, by ich znalezienie było obliczeniowo niewykonalne. Z paradoksu dnia urodzin wynika, że dla skrótu n-bitowego kolizję znajduje się średnio po około 2^(n/2) próbach. Dlatego 128-bitowy MD5 daje w najlepszym razie 64 bity odporności na kolizje (za mało), a SHA-256 — 128 bitów (wystarczająco).

MD5, SHA-1, SHA-2, SHA-3, BLAKE — które algorytmy są bezpieczne

AlgorytmDługość skrótuStatus w 2026 r.
MD5128 bitówzłamany — kolizje generuje się w sekundy; nie używać do celów bezpieczeństwa
SHA-1160 bitówzłamany — praktyczna kolizja (SHAttered, 2017) i kolizje z wybranym prefiksem (2020); wycofywany
SHA-224 / SHA-256224 / 256 bitówbezpieczny, najpopularniejszy standard (TLS, podpisy, Bitcoin)
SHA-384 / SHA-512384 / 512 bitówbezpieczny, szybszy niż SHA-256 na procesorach 64-bitowych bez akceleracji SHA
SHA-3 (SHA3-256, SHA3-512)224–512 bitówbezpieczny, standard FIPS 202 oparty na Keccaku
BLAKE2 / BLAKE3zwykle 256 bitówbezpieczne i bardzo szybkie, popularne w oprogramowaniu (np. narzędziach do kopii zapasowych)
RIPEMD-160160 bitówużywany niszowo (m.in. w adresach Bitcoin), nie wybieraj go do nowych projektów

MD5 i SHA-1 nadal spotkasz w starszych systemach i jako sumy kontrolne do wykrywania uszkodzeń transmisji — tam, gdzie nikt nie próbuje celowo podrobić pliku. Do podpisów, certyfikatów i wszystkiego, gdzie przeciwnikiem jest człowiek, wybieraj SHA-256 lub nowsze.

Atak przedłużenia wiadomości

MD5, SHA-1 i SHA-256 opierają się na konstrukcji Merkle-Damgårda. Ma ona słabość: znając hash(sekret + wiadomość) i długość sekretu, można obliczyć skrót wiadomości z doklejonym fragmentem bez znajomości sekretu. Dlatego naiwne „podpisywanie” przez sha256(klucz + dane) jest błędem. Do uwierzytelniania wiadomości kluczem służy HMAC, który jest odporny na ten atak. SHA-3, BLAKE2/3 oraz obcięte warianty SHA-512/256 nie mają tej słabości.

Funkcja skrótu a szyfrowanie i kodowanie

To częste źródło nieporozumień, także w wielu poradnikach:

Funkcja skrótuSzyfrowanieKodowanie (np. Base64)
Celintegralność, odcisk danychpoufnośćzmiana formatu zapisu
Kluczbrak (wyjątek: HMAC)takbrak
Odwracalnenietak, z kluczemtak, przez każdego
Długość wynikustałazbliżona do danychzbliżona do danych
PrzykładySHA-256, SHA-3AES, ChaCha20, RSABase64, hex

Skrótu nie da się „odszyfrować”. Kiedy słyszysz o „łamaniu hashy”, chodzi o zgadywanie: atakujący liczy skróty miliardów kandydatów na hasło i porównuje je z wykradzionym skrótem. Tak działa np. Hashcat. Różnicę między szyfrowaniem z jednym kluczem a funkcjami skrótu dobrze widać też w tekście o szyfrowaniu symetrycznym.

Zastosowania funkcji skrótu kryptograficznego

Sprawdzanie integralności pobranych plików

Producenci obrazów systemów (np. dystrybucji Linuksa) publikują sumy SHA-256 plików. Po pobraniu liczysz skrót u siebie i porównujesz:

# Windows (PowerShell)
Get-FileHash .\obraz.iso -Algorithm SHA256

# Windows (wiersz poleceń)
certutil -hashfile obraz.iso SHA256
# Linux
sha256sum obraz.iso
sha256sum -c SHA256SUMS      # sprawdza wszystkie pliki z listy

# macOS
shasum -a 256 obraz.iso

Ważne: Suma kontrolna chroni przed uszkodzeniem lub podmianą pliku na serwerze lustrzanym tylko wtedy, gdy samą sumę pobierasz z zaufanego źródła. Jeśli atakujący przejmie stronę, podmieni i plik, i sumę — dlatego projekty dodatkowo podpisują listy sum kluczem GPG.

Podpisy cyfrowe i certyfikaty

Algorytmy podpisu, takie jak RSA czy ECDSA, nie podpisują całego dokumentu, tylko jego skrót. Jeśli funkcja skrótu ma kolizje, można podsunąć do podpisu niewinny dokument, a potem dołączyć ten sam podpis do drugiego, złośliwego. Właśnie dlatego certyfikaty TLS podpisane SHA-1 zostały wycofane przez przeglądarki, a dziś standardem jest SHA-256.

HMAC i uwierzytelnianie wiadomości

HMAC łączy funkcję skrótu z tajnym kluczem i pozwala sprawdzić, że wiadomość pochodzi od kogoś, kto zna klucz, i nie została zmieniona. Używają go m.in. TLS, podpisy webhooków, tokeny JWT (algorytm HS256) oraz kody jednorazowe — więcej w tekście o OTP, HOTP i TOTP.

Przechowywanie haseł

Serwis nie powinien znać Twojego hasła — przechowuje tylko jego skrót i przy logowaniu porównuje skrót wpisanego hasła. Ale zwykłe SHA-256 to za mało: jest tak szybkie, że karta graficzna sprawdza miliardy haseł na sekundę. Do haseł stosuje się celowo wolne funkcje wyprowadzania klucza z unikalną solą dla każdego użytkownika:

  • Argon2id — zalecany wybór dla nowych systemów,
  • scrypt i bcrypt — sprawdzone, szeroko dostępne,
  • PBKDF2 z dużą liczbą iteracji — gdy wymagana jest zgodność z FIPS.

Szczegóły — czym jest sól, a czym pieprz i jak to wdrożyć — opisaliśmy w poradniku o hashowaniu z solą.

Git, blockchain i deduplikacja

Git identyfikuje każdy obiekt (plik, katalog, commit) jego skrótem. Historycznie był to SHA-1 z dodatkową ochroną przed znanymi atakami kolizyjnymi, a nowsze wersje Gita obsługują już repozytoria w formacie SHA-256. W Bitcoinie bloki są łączone podwójnym SHA-256, a „kopanie” to szukanie danych, których skrót zaczyna się od odpowiednio wielu zer. Systemy kopii zapasowych i magazyny danych używają skrótów do wykrywania duplikatów — identyczne bloki mają identyczne skróty.

Jak policzyć skrót w Pythonie

Moduł hashlib z biblioteki standardowej obsługuje wszystkie popularne algorytmy:

import hashlib

print(hashlib.sha256(b"Ala ma kota").hexdigest())
print(hashlib.sha3_256(b"Ala ma kota").hexdigest())
print(hashlib.blake2b(b"Ala ma kota", digest_size=32).hexdigest())

# skrót dużego pliku bez wczytywania go w całości do pamięci
with open("obraz.iso", "rb") as f:
    print(hashlib.file_digest(f, "sha256").hexdigest())   # Python 3.11+

Do haseł nie używaj sha256() — w Pythonie sięgnij po bibliotekę argon2-cffi albo hashlib.scrypt.

Którą funkcję skrótu wybrać

  • Integralność plików, podpisy, certyfikaty: SHA-256 (lub SHA-384/SHA-512 przy wyższych wymaganiach).
  • Nowy projekt, w którym liczy się szybkość: BLAKE3 lub BLAKE2, jeśli nie obowiązują Cię normy wymagające algorytmów NIST.
  • Uwierzytelnianie wiadomości kluczem: HMAC-SHA-256, nigdy hash(klucz + dane).
  • Hasła: Argon2id, scrypt, bcrypt lub PBKDF2 — nigdy „gołe” MD5, SHA-1 czy SHA-256.
  • Wykrywanie przypadkowych błędów (bez przeciwnika): CRC32 lub xxHash wystarczą i są szybsze.

Komputery kwantowe nie zmieniają tego obrazu radykalnie: algorytm Grovera w teorii osłabia odporność na przeciwobraz o połowę bitów, więc SHA-256 nadal zapewnia zapas bezpieczeństwa. Znacznie większe zmiany czekają kryptografię klucza publicznego niż funkcje skrótu.

~/narzedzia/hash

$ ./hash --interaktywnie

Generator skrótów SHA

Policz SHA-1, SHA-256, SHA-384 i SHA-512 dowolnego tekstu, opcjonalnie z solą. Zmień jedną literę i zobacz efekt lawinowy.

Sól jest doklejana przed tekstem (sól + tekst). Do przechowywania haseł nie używa się samych funkcji SHA — tylko wolnych algorytmów, takich jak Argon2id czy bcrypt. MD5 nie jest dostępne w Web Crypto i nie powinno być już używane do celów bezpieczeństwa.

~ man faq

Najczęściej zadawane pytania

Co to jest funkcja skrótu kryptograficznego?

To algorytm, który z danych dowolnej długości oblicza krótki ciąg o stałej długości, nazywany skrótem lub hashem. Jest jednokierunkowy i odporny na kolizje, więc skrót działa jak cyfrowy odcisk palca danych.

Czy funkcja skrótu to szyfrowanie?

Nie. Szyfrowanie jest odwracalne przy użyciu klucza, a funkcja skrótu nie używa klucza i z założenia nie da się jej odwrócić. Hasła w bazach danych powinny być hashowane, a nie szyfrowane.

Czy MD5 jest jeszcze bezpieczny?

Nie do zastosowań kryptograficznych. Kolizje MD5 da się wygenerować na zwykłym komputerze, więc nie wolno go używać do podpisów, certyfikatów ani haseł. Nadaje się co najwyżej do wykrywania przypadkowych uszkodzeń plików.

Czym różni się SHA-256 od SHA-3?

SHA-256 należy do rodziny SHA-2 i opiera się na konstrukcji Merkle-Damgårda, a SHA-3 na zupełnie innej konstrukcji gąbki (Keccak). Obie są dziś bezpieczne. SHA-3 jest dodatkowo odporna na atak przedłużenia wiadomości.

Jak sprawdzić sumę SHA-256 pliku?

W Windows użyj w PowerShell polecenia Get-FileHash plik.iso -Algorithm SHA256, w Linuksie sha256sum plik.iso, a w macOS shasum -a 256 plik.iso. Wynik porównaj z sumą opublikowaną przez autora pliku.

Ten artykuł jest częścią tematu

CZ

$ whoami

Czarek Zawolski

Założyciel i redaktor XAD.pl. Pisze o sieciach, bezpieczeństwie IT, administracji systemami Windows i Linux oraz o sprzęcie, który sprawia ludziom problemy na co dzień.

~ ls ../podobne