Haszowanie i integralność danych
Nauczą się Państwo, jak SHA-256, MD5 i HMAC tworzą skróty o stałej długości, które potwierdzają, że dane nie zostały zmienione podczas przesyłania ani przechowywania.
Haszowanie i integralność danych to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Czym jest funkcja skrótu?
Kryptograficzna funkcja skrótu to algorytm matematyczny, który przyjmuje dane wejściowe o dowolnym rozmiarze i generuje wynik o stałej długości, nazywany skrótem, wartością skrótu lub odciskiem. Funkcje skrótu są jednokierunkowe: mając skrót, powinno być obliczeniowo niewykonalne ustalenie pierwotnych danych wejściowych. Są też deterministyczne: te same dane wejściowe zawsze generują ten sam skrót. Funkcje skrótu stanowią podstawę weryfikacji integralności danych, podpisów cyfrowych, przechowywania haseł i wielu innych mechanizmów bezpieczeństwa.
Właściwości bezpiecznych funkcji skrótu
Bezpieczna kryptograficzna funkcja skrótu musi mieć cztery kluczowe właściwości. Odporność na preimage: mając wynik funkcji skrótu, nie można w praktyce obliczeniowej znaleźć danych wejściowych, które go wygenerowały. Odporność na second preimage: mając dane wejściowe, nie można w praktyce znaleźć innych danych o tym samym skrócie. Odporność na kolizje: nie można w praktyce znaleźć dwóch różnych danych wejściowych generujących ten sam wynik funkcji skrótu. Efekt lawinowy: zmiana choćby jednego bitu danych wejściowych powoduje całkowicie inny wynik funkcji skrótu, dzięki czemu można wykryć manipulację.
# Avalanche effect demonstration
echo -n 'Hello' | sha256sum
# 185f8db32... (completely different when one char changes)
echo -n 'Hello!' | sha256sum
# 334d016f7... (entirely different hash)
# Same input ALWAYS produces same hash (deterministic)
echo -n 'Security+' | sha256sum
echo -n 'Security+' | sha256sum
# Both outputs are identicalMD5: złamany i wycofany
MD5 (Message Digest 5) generuje 128-bitowy skrót i był niegdyś powszechnie używany. W 2004 roku badacze zademonstrowali jednak ataki kolizyjne na MD5 — oznacza to, że można znaleźć dwa różne dane wejściowe generujące ten sam skrót. Ma to katastrofalne skutki dla weryfikacji integralności: atakujący mógłby podmienić plik zawierający złośliwy kod na taki, który ma ten sam skrót MD5 co oryginał. MD5 jest całkowicie złamany jako mechanizm bezpieczeństwa kryptograficznego i nie wolno go używać do weryfikacji integralności, podpisów cyfrowych ani haszowania haseł. Czasami nadal spotyka się go w niezwiązanych z bezpieczeństwem sumach kontrolnych (na przykład do weryfikacji starszych plików), co jest dopuszczalne wyłącznie do wykrywania przypadkowego uszkodzenia danych.
Rodzina SHA: SHA-1, SHA-256, SHA-3
Rodzina Secure Hash Algorithm (SHA) to najważniejszy zestaw funkcji skrótu dla Security+. SHA-1 (160-bitowy) przez wiele lat był standardem, jednak w 2017 roku został złamany za pomocą praktycznego ataku kolizyjnego (projekt SHAttered firmy Google) i obecnie jest wycofany. SHA-256 (należący do rodziny SHA-2, generujący wynik o długości 256 bitów) jest obecnym standardem branżowym dla podpisów cyfrowych, certyfikatów TLS i weryfikacji integralności plików. SHA-3 (Keccak) to alternatywny algorytm NIST, zapewniający odporność na ataki wymierzone w strukturę SHA-2, choć SHA-256 pozostaje dominującym wyborem w większości zastosowań.
# Common hash computations
echo -n 'password123' | sha256sum
# a665a4592...64 hex chars = 256 bits
echo -n 'password123' | sha512sum
# b109f3bb...128 hex chars = 512 bits (SHA-512)
# File integrity check
sha256sum /path/to/downloaded_file.iso > file.sha256
sha256sum -c file.sha256
# file.iso: OKFunkcje skrótu do przechowywania haseł
Przechowywanie haseł w postaci zwykłego tekstu jest niedopuszczalne. Gdy użytkownik tworzy hasło, w bazie danych przechowywany jest skrót, a nie samo hasło. Podczas logowania wprowadzone hasło jest haszowane, a następnie porównywane z zapisanym skrótem. Jednak standardowy SHA-256 jest zbyt szybki do przechowywania haseł — atakujący używają procesorów GPU do testowania miliardów skrótów na sekundę względem wykradzionych baz haseł. Specjalizowane funkcje haszujące hasła, takie jak bcrypt, PBKDF2 i Argon2, zwiększają koszt obliczeniowy (parametry pracy) oraz wymagania dotyczące pamięci, przez co masowe łamanie haseł staje się niepraktyczne.
# bcrypt hash example (Python-style pseudocode)
import bcrypt
password = b'mySecretPassword'
# Hash with work factor of 12 (2^12 = 4096 iterations)
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
# Stored in DB: $2b$12$H0qS/LkPkAiH8KlxJb3lFuK...
# Verify (never compare raw hashes for bcrypt)
bcrypt.checkpw(password, hashed) # Returns TrueSolowanie: udaremnianie ataków z użyciem tablic tęczowych
Tablica tęczowa to wstępnie obliczona tabela mapująca popularne hasła na ich skróty — dzięki niej atakujący może natychmiast odszukać skrót i znaleźć pierwotne hasło. Aby udaremnić ataki z użyciem tablic tęczowych, skróty haseł muszą być solone. Sól to losowa wartość dodawana do hasła przed haszowaniem, dzięki czemu skrót każdego użytkownika jest unikatowy, nawet jeśli dwóch użytkowników ma takie samo hasło. Sól jest przechowywana razem ze skrótem (nie musi być utrzymywana w tajemnicy). Nawet jeśli atakujący zdobędzie całą bazę haseł, wstępnie obliczone tablice tęczowe są bezużyteczne, ponieważ do obliczenia każdego skrótu użyto innej soli.
# Salt demonstration
# Without salt: same password = same hash (rainbow table attack works)
# SHA256('password123') = always the same hash
# With salt: same password + random salt = unique hash
# SHA256('password123' + 'aBc8xZ') = unique hash for this user
# SHA256('password123' + 'mK2pYq') = completely different hash
# The salt is stored in the database alongside the hashed value
# Format: $salt$hash or combined as in bcrypt outputHMAC: dodawanie uwierzytelniania do haszowania
HMAC (Hash-based Message Authentication Code) to konstrukcja, która wykorzystuje funkcję skrótu i tajny klucz do wygenerowania kodu uwierzytelniającego. W przeciwieństwie do zwykłego skrótu kod HMAC może zostać obliczony i zweryfikowany wyłącznie przez strony znające tajny klucz. Zapewnia to zarówno integralność (wykrywanie zmian), jak i uwierzytelnianie (potwierdzenie, że wiadomość pochodzi od osoby posiadającej klucz). HMAC-SHA256 jest szeroko stosowany w uwierzytelnianiu API (do podpisywania żądań API), tokenach JWT oraz operacjach MAC w TLS. Uniemożliwia atakującemu, który przechwycił wiadomość, zastąpienie jej spreparowaną alternatywą.
# Compute HMAC-SHA256 with OpenSSL
openssl dgst -sha256 -hmac 'my-secret-api-key' -hex api_request.json
# Output: HMAC-SHA256(api_request.json)= 3d4e2f...
# Only someone with 'my-secret-api-key' can generate or verify this HMAC
# Used in AWS Signature V4 for API authentication
# Used in JWT HS256 algorithm for token integrityFunkcje skrótu w podpisach cyfrowych
Funkcje skrótu odgrywają kluczową rolę w podpisach cyfrowych. Podczas podpisywania dużego dokumentu nie szyfruje się całego dokumentu kluczem prywatnym, ponieważ byłoby to wyjątkowo wolne. Zamiast tego: (1) oblicza się skrót dokumentu (szybko, uzyskując niewielką wartość o stałej długości), a następnie (2) podpisuje się ten niewielki skrót kluczem prywatnym. Podpis jest po prostu zaszyfrowanym skrótem. Weryfikacja przebiega według tego samego schematu: odszyfrowuje się podpis, aby uzyskać skrót, niezależnie haszuje dokument i porównuje oba wyniki. SHA-256 jest wymagany we wszystkich nowoczesnych certyfikatach PKI, a SHA-1 jest zabroniony w nowych certyfikatach.
Monitorowanie integralności plików (FIM)
Monitorowanie integralności plików (FIM) wykorzystuje funkcje skrótu do wykrywania nieautoryzowanych zmian w krytycznych plikach systemowych. W ramach tworzenia poziomu bazowego narzędzie FIM oblicza skróty wszystkich monitorowanych plików i bezpiecznie je przechowuje. Okresowo (lub stale) ponownie oblicza skróty plików i porównuje je z poziomem bazowym. Każda niezgodność oznacza, że plik został zmodyfikowany — potencjalnie przez złośliwe oprogramowanie lub w wyniku nieautoryzowanego działania administratora. Narzędzia FIM, takie jak Tripwire, AIDE (Linux) oraz wbudowane w system Windows mechanizmy sprawdzania integralności, wykorzystują skróty SHA-256. FIM jest wymagany przez standardy zgodności, takie jak PCI-DSS, do ochrony środowisk przetwarzających dane posiadaczy kart.
# AIDE (Advanced Intrusion Detection Environment) - Linux FIM
# Initialize baseline database
aide --init
# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# Check for changes (run via cron daily)
aide --check
# Output shows any files that were added, changed, or deleted
# File: /etc/passwd changed
# MD5 : old_hash != new_hashSumy kontrolne a kryptograficzne funkcje skrótu
Ważne jest rozróżnienie między sumami kontrolnymi a kryptograficznymi funkcjami skrótu. Sumy kontrolne, takie jak CRC32, służą do wykrywania przypadkowego uszkodzenia danych podczas transmisji — są szybkie i proste, ale atakujący może je łatwo sfałszować. Kryptograficzne funkcje skrótu (SHA-256) są projektowane tak, aby zapewniać odporność na kolizje i wykrywanie manipulacji, nawet w obliczu celowych ataków. Należy używać sum kontrolnych, gdy trzeba jedynie sprawdzić, czy pobieranie nie spowodowało uszkodzenia danych, a kryptograficznych funkcji skrótu, gdy trzeba zweryfikować, że przeciwnik nie zmodyfikował celowo pliku.
Ataki kolizyjne na funkcje skrótu w praktyce
Ataki kolizyjne na funkcje skrótu mają rzeczywisty wpływ. W 2017 roku badacze utworzyli dwa różne pliki PDF o tym samym skrócie SHA-1, pokazując, że certyfikaty SHA-1 można fałszować. W 2008 roku badacze wykorzystali kolizje MD5 do utworzenia fałszywego certyfikatu CA, który wyglądał na autentyczny. Z tego powodu przeglądarki odrzucają certyfikaty MD5 i SHA-1, a urzędy certyfikacji muszą używać co najmniej SHA-256. Zrozumienie ataków kolizyjnych pomaga wyjaśnić, dlaczego podejmuje się decyzje o wycofywaniu algorytmów oraz dlaczego argument „ale ten algorytm nadal generuje skrót” nie wystarcza, aby uzasadnić używanie złamanych algorytmów.
Szybki sprawdzian
Sprawdź swoją znajomość zagadnień CompTIA Security+ (SY0-701) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji dowiedział się Pan/dowiedziała się Pani, że: funkcje skrótu generują skróty o stałej długości na potrzeby weryfikacji integralności; MD5 i SHA-1 są złamane i wycofane; SHA-256 jest obecnym standardem; solenie udaremnia ataki z użyciem tablic tęczowych; a HMAC dodaje uwierzytelnianie do haszowania za pomocą współdzielonego tajnego klucza. Następnie omówimy wymianę kluczy i szyfrowanie hybrydowe.
Często zadawane pytania
Czy lekcja „Haszowanie i integralność danych” jest bezpłatna?
Tak — pełny tekst „Haszowanie i integralność danych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Haszowanie i integralność danych”?
Nauczą się Państwo, jak SHA-256, MD5 i HMAC tworzą skróty o stałej długości, które potwierdzają, że dane nie zostały zmienione podczas przesyłania ani przechowywania. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Haszowanie i integralność danych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Algorytmy szyfrowania symetrycznego
- Szyfrowanie asymetryczne i pary kluczy
- Haszowanie i integralność danych
- Wymiana kluczy i szyfrowanie hybrydowe