Ten kompleksowy przewodnik bada zaawansowane koncepcje szyfrowania, algorytmy i protokoły używane we współczesnych systemach bezpiecznej komunikacji. Idealny dla programistów i specjalistów ds. bezpieczeństwa.
Algorytmy szyfrowania symetrycznego
AES (Advanced Encryption Standard)
Złoty standard szyfrowania symetrycznego, przyjęty przez rząd USA w 2001 roku.
Kluczowe cechy
- Rozmiary klucza: 128, 192 lub 256 bitów
- Rozmiar bloku: 128 bitów
- Rundy: 10, 12 lub 14 w zależności od rozmiaru klucza
- Wydajność: Wysoce zoptymalizowany, dostępna akceleracja sprzętowa
Popularne tryby
- GCM (Galois/Counter Mode): Szyfrowanie uwierzytelnione, zalecane w większości przypadków
- CBC (Cipher Block Chaining): Tradycyjny tryb, wymaga osobnego MAC
- CTR (Counter): Możliwość równoległego przetwarzania, używany w niektórych protokołach
ChaCha20
Nowoczesny szyfr strumieniowy zaprojektowany przez Daniela J. Bernsteina, coraz bardziej popularny jako alternatywa dla AES.
Zalety
- Szybszy niż AES na urządzeniach bez akceleracji sprzętowej
- Implementacja o stałym czasie (odporność na ataki czasowe)
- Prosty projekt, łatwiejszy do bezpiecznej implementacji
- Używany z Poly1305 do szyfrowania uwierzytelnionego
Szyfrowanie asymetryczne
RSA (Rivest-Shamir-Adleman)
Szeroko stosowany do wymiany kluczy i podpisów cyfrowych.
Kluczowe zagadnienia
- Minimalny rozmiar klucza: 2048 bitów (zalecane 4096 bitów dla długoterminowego bezpieczeństwa)
- Wydajność: Obliczeniowo kosztowny w porównaniu do szyfrowania symetrycznego
- Schematy dopełniania: Używaj OAEP do szyfrowania, PSS do podpisów
- Zagrożenie kwantowe: Podatny na komputery kwantowe (algorytm Shora)
Elliptic Curve Cryptography (ECC)
Bardziej wydajna alternatywa dla RSA z równoważnym bezpieczeństwem przy mniejszych rozmiarach kluczy.
Popularne krzywe
- Curve25519: Zaprojektowana do wymiany kluczy ECDH, szeroko stosowana
- Ed25519: Do podpisów cyfrowych, używana w SSH, GPG
- P-256 (secp256r1): Standard NIST, szeroko wspierany
- P-384, P-521: Wyższe poziomy bezpieczeństwa
Zalety w porównaniu z RSA
- 256-bitowy ECC ≈ bezpieczeństwo 3072-bitowego RSA
- Szybsze obliczenia
- Mniejsze klucze i podpisy
- Niższe wymagania dotyczące przepustowości i pamięci
Protokoły wymiany kluczy
Diffie-Hellman (DH)
Umożliwia dwóm stronom ustanowienie wspólnego sekretu przez niezabezpieczony kanał.
Warianty
- Klasyczny DH: Oryginalna implementacja
- ECDH: Wersja z krzywymi eliptycznymi (bardziej wydajna)
- X25519: Nowoczesny ECDH używający Curve25519
Perfect Forward Secrecy (PFS)
Zapewnia, że przeszła komunikacja pozostaje bezpieczna nawet jeśli długoterminowe klucze zostaną skompromitowane.
Implementacja
- Generuj efemeryczne pary kluczy dla każdej sesji
- Niszcz klucze sesji po użyciu
- Używany w TLS 1.3, Signal Protocol itp.
Funkcje skrótu
Rodzina SHA-2
- SHA-256: 256-bitowe wyjście, szeroko stosowany
- SHA-384, SHA-512: Wyższe poziomy bezpieczeństwa
- Zastosowania: Podpisy cyfrowe, walidacja certyfikatów, haszowanie haseł (z odpowiednimi technikami)
SHA-3 (Keccak)
- Inna konstrukcja niż SHA-2 (funkcja gąbkowa)
- Odporny na ataki rozszerzenia długości
- Odpowiedni do aplikacji wymagających wysokich marginesów bezpieczeństwa
BLAKE2/BLAKE3
- Szybszy niż SHA-2 i SHA-3
- Kryptograficznie bezpieczny
- BLAKE3: Wysoce równoległy, doskonały dla dużych danych
Key Derivation Functions (KDFs)
PBKDF2 (Password-Based Key Derivation Function 2)
- Cel: Wyprowadzanie kluczy kryptograficznych z haseł
- Iteracje: Minimum 100 000 (zalecenie OWASP)
- Przypadek użycia: Przechowywanie haseł, wyprowadzanie kluczy
Argon2
Zwycięzca Password Hashing Competition (2015), zalecany dla nowych aplikacji.
Warianty
- Argon2id: Hybrydowy (zalecany w większości przypadków)
- Argon2i: Zoptymalizowany przeciwko atakom kanału bocznego
- Argon2d: Maksymalna odporność na ataki GPU
scrypt
- Funkcja wymagająca pamięci (odporna na ataki sprzętowe)
- Używany przez Litecoin, Tarsnap
- Dobra równowaga bezpieczeństwa i kompatybilności
Message Authentication Codes (MACs)
HMAC (Hash-based MAC)
- Łączy funkcję skrótu z tajnym kluczem
- Zapewnia uwierzytelnienie i integralność
- Popularne: HMAC-SHA256, HMAC-SHA512
Poly1305
- Jednorazowy autentykator
- Używany z ChaCha20 do szyfrowania uwierzytelnionego
- Szybki i o stałym czasie
Authenticated Encryption
Dlaczego to ważne
Same szyfrowanie nie gwarantuje integralności. Atakujący może modyfikować zaszyfrowany tekst bez wykrycia. Szyfrowanie uwierzytelnione rozwiązuje ten problem.
AEAD (Authenticated Encryption with Associated Data)
- AES-GCM: Najszerzej wspierany
- ChaCha20-Poly1305: Lepszy na urządzeniach mobilnych
- AES-CCM: Używany w niektórych protokołach bezprzewodowych
Podpisy cyfrowe
Podpisy RSA
- Dopełnienie: Używaj PSS (Probabilistic Signature Scheme)
- Funkcja skrótu: SHA-256 lub wyższa
- Rozmiar klucza: Minimum 2048 bitów
ECDSA (Elliptic Curve Digital Signature Algorithm)
- Mniejsze podpisy niż RSA
- Wymaga starannego generowania nonce (słaby RNG = skompromitowany klucz)
- Zalecany wariant deterministyczny (RFC 6979)
Ed25519
- Deterministyczny (nie wymaga RNG)
- Szybkie generowanie i weryfikacja podpisu
- Małe podpisy (64 bajty)
- Odporny na ataki kanału bocznego
Nowoczesne protokoły
Signal Protocol
Najnowocześniejszy protokół szyfrowania end-to-end używany przez Signal, WhatsApp, Facebook Messenger.
Kluczowe cechy
- Double Ratchet: Ciągła aktualizacja kluczy
- Perfect Forward Secrecy: Przeszłe wiadomości pozostają bezpieczne
- Post-Compromise Security: Odzyskiwanie po kompromitacji klucza
- Asynchroniczny: Działa nawet gdy odbiorca jest offline
TLS 1.3
Najnowsza wersja protokołu Transport Layer Security.
Ulepszenia
- Usunięto słabe algorytmy i zestawy szyfrów
- Zawsze zapewnia forward secrecy
- Szybszy handshake (1-RTT, opcja 0-RTT)
- Zaszyfrowane Server Hello
Noise Protocol Framework
Nowoczesny framework protokołu kryptograficznego do budowania bezpiecznych systemów komunikacji.
Zastosowania
- WireGuard VPN
- Lightning Network
- I2P messaging
Kryptografia postkwantowa
Zagrożenie
Komputery kwantowe mogą złamać RSA i ECC używając algorytmu Shora. Algorytmy symetryczne są mniej dotknięte, ale wymagają większych kluczy.
Kandydaci postkwantowi NIST
- Kyber: Enkapsulacja klucza oparta na kratach
- Dilithium: Podpisy cyfrowe oparte na kratach
- SPHINCS+: Podpisy oparte na funkcjach skrótu
Strategia przejścia
- Podejście hybrydowe: Łączenie algorytmów klasycznych i postkwantowych
- Zwiększenie rozmiaru kluczy symetrycznych do 256 bitów
- Monitorowanie procesu standaryzacji NIST
- Planowanie elastyczności algorytmów
Najlepsze praktyki implementacji
Nie twórz własnej kryptografii
Używaj sprawdzonych, recenzowanych bibliotek:
- libsodium: Wysokopoziomowa, łatwa w użyciu
- OpenSSL: Kompleksowa, szeroko wspierana
- BoringSSL: Fork OpenSSL od Google
- Ring: Biblioteka kryptograficzna Rust
Zarządzanie kluczami
- Używaj sprzętowych modułów bezpieczeństwa (HSM) dla krytycznych kluczy
- Wdrażaj polityki rotacji kluczy
- Nigdy nie umieszczaj kluczy na stałe w kodzie źródłowym
- Używaj wyprowadzania kluczy do wielu celów
- Bezpiecznie usuwaj klucze z pamięci po użyciu
Bezpieczne generowanie liczb losowych
- Używaj kryptograficznie bezpiecznego RNG (CSPRNG)
- Nigdy nie używaj standardowych funkcji rand()
- RNG systemu operacyjnego: /dev/urandom (Linux), CryptGenRandom (Windows)
- Specyficzne dla języka: crypto.randomBytes (Node.js), moduł secrets (Python)
Zapobieganie atakom czasowym
- Używaj porównania o stałym czasie dla sekretów
- Unikaj rozgałęzień opartych na tajnych danych
- Miej świadomość ataków czasowych cache
- Używaj bibliotek zaprojektowanych z odpornością na ataki czasowe
Testowanie i walidacja
Audyty bezpieczeństwa
- Regularne testy penetracyjne
- Przeglądy kodu przez ekspertów bezpieczeństwa
- Audyty bezpieczeństwa przez strony trzecie
- Programy bug bounty
Zgodność
- FIPS 140-2/3: Standard rządu USA
- Common Criteria: Międzynarodowa certyfikacja bezpieczeństwa
- PCI DSS: Wymagania branży kart płatniczych
Zasoby do dalszej nauki
Książki
- "Cryptography Engineering" autorstwa Fergusona, Schneiera i Kohno
- "Serious Cryptography" autorstwa Jean-Philippe'aAumassona
- "Applied Cryptography" autorstwa Bruce'a Schneiera
Zasoby online
- Cryptopals Crypto Challenges
- Kursy kryptografii Stanford (Coursera)
- IACR ePrint Archive
- Crypto Stack Exchange