Podstawy kryptografii klucza publicznego: bezpieczne udostępnianie
Poznaj podstawy kryptografii klucza publicznego i jak umożliwia bezpieczne udostępnianie. RSA, Diffie-Hellman wyjaśnione.
Kryptografia klucza publicznego — zwana też kryptografią asymetryczną — używa dwóch matematycznie powiązanych kluczy: publicznego, który możesz rozdawać swobodnie, i prywatnego, którego strzeżesz. Zaszyfruj coś moim kluczem publicznym, a tylko mój klucz prywatny może to odczytać. Rozwiązuje to najstarszy problem w kryptografii: jak dwie osoby, które nigdy się nie spotkały, mogą współdzielić sekret przez otwały kanał. Wynaleziona przez Diffiego i Hellmana w 1976 roku i spraktykalizowana przez RSA rok później, jest dziś fundamentem TLS 1.3, Signal, SSH, podpisywania kodu Ed25519 i każdej usługi transferu plików uwierzytelniającej użytkowników.
Matematyczna pułapka
Cała kryptografia klucza publicznego opiera się na funkcjach „z pułapką" — obliczeniach łatwych do wykonania w przód, ale efektywnie niemożliwych do odwrócenia bez dodatkowych informacji. Dominują dwie rodziny:
- Faktoryzacja liczb całkowitych (RSA): mnożenie dwóch dużych liczb pierwszych jest trywialne; faktoryzacja ich iloczynu jest wykładniczo trudna. Klucz RSA 2048-bitowy używa dwóch liczb pierwszych około 1024-bitowych. Najlepszy znany atak, General Number Field Sieve, wymaga około 2^112 operacji — poza zasięgiem.
- Logarytmy dyskretne na krzywych eliptycznych (ECDH, ECDSA, Ed25519): obliczanie mnożenia punktu na krzywej jest szybkie; odwrócenie go w celu znalezienia mnożnika jest trudne. Krzywe 256-bitowe jak Curve25519 dają bezpieczeństwo równoważne RSA 3072-bitowemu.
Oba problemy są łatwe dla komputerów kwantowych za sprawą algorytmu Shora, dlatego NIST standaryzował post-kwantowe zamienniki (ML-KEM i ML-DSA) w FIPS 203–205 w 2024 roku.
RSA w praktyce
Ron Rivest, Adi Shamir i Leonard Adleman opublikowali RSA w 1977 roku. Schemat jest elegancki:
- Wybierz dwie duże liczby pierwsze
piq. - Oblicz
n = p × q(modulus) iφ(n) = (p-1)(q-1). - Wybierz
ewzajemnie pierwsze zφ(n), powszechnie 65537. - Oblicz
dtak, bye × d ≡ 1 (mod φ(n)). - Klucz publiczny:
(n, e). Klucz prywatny:(n, d).
Szyfrowanie: szyfrogram = wiadomość^e mod n. Deszyfrowanie: wiadomość = szyfrogram^d mod n. Matematyka działa dzięki twierdzeniu Eulera.
Prawdziwe RSA używa dopełnienia OAEP (RFC 8017), by zapobiec atakom wybranego szyfrogramu. Podręcznikowe RSA jest katastrofalnie niepewne. RSA-2048 to aktualnie minimum dla nowych systemów; RSA-3072 lub 4096 dla czegokolwiek długowiecznego.
Diffie-Hellman: wspólne sekrety bez wysyłania kluczy
RSA pozwala szyfrować dla konkretnego odbiorcy. Diffie-Hellman robi coś subtelnie innego: pozwala dwóm stronom wyprowadzić wspólny sekret przez publiczny kanał, bez żadnej z nich nie wysyłając sekretu.
Klasyczna wersja (DH nad liczbami całkowitymi modulo duża liczba pierwsza):
- Obie strony uzgadniają dużą liczbę pierwszą
pi generatorg. - Alicja wybiera sekret
a, wysyłaA = g^a mod p. - Bob wybiera sekret
b, wysyłaB = g^b mod p. - Alicja oblicza
B^a mod p = g^(ab) mod p. - Bob oblicza
A^b mod p = g^(ab) mod p.
Obie strony dochodzą do g^ab mod p bez wysyłania a ani b. Podsłuchujący widzi g, p, A, B, ale obliczenie g^ab z A i B wymaga rozwiązania problemu logarytmu dyskretnego.
Nowoczesny DH używa krzywych eliptycznych (ECDH). X25519 to standardowy wybór: 32-bajtowe klucze, 32-bajtowe wspólne sekrety, implementacja odporna na ataki czasowe.
Krzywe eliptyczne i dlaczego wygrały
RSA brzmi staroświecko, bo w większości jest. Kryptografia krzywych eliptycznych zastąpiła go z trzech praktycznych powodów:
- Mniejsze klucze. Klucz EC 256-bitowy daje bezpieczeństwo klucza RSA 3072-bitowego. To 32 bajty zamiast 384 bajtów.
- Szybsze operacje. ECDH na Curve25519 zajmuje około 70 mikrosekund na nowoczesnym procesorze. Generowanie klucza RSA-3072 zajmuje sekundy.
- Lepsza odporność na słabą losowość. Ed25519 jest deterministyczny — podpisy nie wymagają losowych nonces per wiadomość, co zapobiega katastrofie ECDSA Sony PS3 z 2010 roku, gdzie stały nonce ujawnił klucz główny.
Krzywe NIST (P-256, P-384, P-521) są szeroko obsługiwane, ale historycznie nieufane przez niektórych kryptografów ze względu na niewyjaśnione stałe. Curve25519 i Ed25519, zaprojektowane przez Daniela Bernsteina, są nowoczesnymi standardami używanymi w TLS 1.3, WireGuard, Signal i SSH.
Podpisy: dowód autorstwa
Kryptografia asymetryczna potrafi coś, czego symetryczna nie może: udowodnić autorstwo. Podpisywanie odwraca role szyfrowania — „szyfrujesz" (podpisujesz) swoim kluczem prywatnym, a każdy posiadający Twój klucz publiczny może „odszyfrować" (zweryfikować). Jeśli weryfikacja się powiedzie, musiałeś posiadać klucz prywatny.
Prawdziwe podpisy używają funkcji skrótu do obsługi wiadomości o dowolnym rozmiarze:
- Oblicz
h = SHA-256(wiadomość). - Podpisz
hkluczem prywatnym (RSA-PSS, ECDSA lub Ed25519). - Weryfikator skróca odebraną wiadomość i porównuje z podpisem przy użyciu klucza publicznego.
Zastosowania: certyfikaty TLS (CA podpisuje klucz publiczny witryny), podpisywanie kodu (notaryzacja Apple, Microsoft Authenticode), podpisywanie commitów Git, menedżery pakietów oprogramowania (apt, Homebrew, npm).
Gdzie transfer plików używa kryptografii klucza publicznego
Dla transferów opartych na anonimowych łączach (SwissTransfer, HexaTransfer) kryptografia klucza publicznego często nie pojawia się bezpośrednio — losowy klucz symetryczny w fragmencie URL obsługuje wszystko. Jednak dla usług opartych na kontach klucze publiczne mają znaczenie:
- Uwierzytelnianie serwera TLS 1.3. Każde połączenie HTTPS zaczyna się od certyfikatu serwera zweryfikowanego względem łańcucha CA. Efemeryczna wymiana kluczy ECDHE wyprowadza klucz sesji.
- Szyfrowanie konto-konto. Tresorit, Proton Drive i Mega każdy dają użytkownikom parę kluczy przy rejestracji. Pliki udostępniane między kontami są opakowane kluczem publicznym odbiorcy.
- Podpisani klienci i aktualizacje. Aplikacje desktopowe weryfikują aktualizacje podpisami Ed25519 lub RSA, by zapobiec atakom na łańcuch dostaw.
- Uwierzytelnianie bez hasła. WebAuthn i Passkeys używają kluczy EC przechowywanych w bezpiecznym sprzęcie (Touch ID, Windows Hello, YubiKey).
Dystrybucja kluczy: pozostały trudny problem
Kryptografia klucza publicznego rozwiązuje jeden problem dystrybucji kluczy, ale tworzy inny: skąd wiesz, że klucz publiczny naprawdę należy do tego, za kogo się podaje? Trzy modele:
- PKI (Infrastruktura klucza publicznego). Urzędy certyfikacji podpisują klucze publiczne. Stosowane przez TLS z korzeniami w Chrome, Firefox, Safari.
- Sieć zaufania. Podejście PGP — użytkownicy podpisują nawzajem swoje klucze. Elastyczne, ale problemy ze skalowaniem ograniczyły adopcję.
- TOFU (Trust On First Use). Podejście SSH — akceptuj klucz za pierwszym razem, ostrzegaj jeśli się zmieni. Proste, ale podatne na przechwycenie inicjalne.
- Przejrzystość kluczy. Logi oparte na drzewach Merkle, gdzie wszystkie klucze publiczne są publicznie audytowalne. Używane przez WhatsApp, iMessage Contact Key Verification i nowoczesne systemy passkey.
Dla transferu plików z nieznanymi odbiorcami, udostępnianie przez fragment URL omija to całkowicie — nadawca przekazuje odbiorcy klucz bezpośrednio przez łącze, a autentyczność zależy od kanału użytego do udostępnienia łącza.
Co zmienia obliczenie kwantowe
Duży komputer kwantowy uruchamiający algorytm Shora łamie zarówno RSA, jak i kryptografię krzywych eliptycznych. Obecne szacunki określają horyzont czasowy na 10–20 lat, ale ryzyko jest natychmiastowe dla danych o długim czasie życia: ataki „zbieraj teraz, odszyfruj później" rejestrują dzisiaj zaszyfrowany ruch, by odszyfrować go w 2040 roku.
Standardy post-kwantowe NIST z 2024 roku:
- FIPS 203 (ML-KEM) — zastępuje Diffie-Hellman / ECDH do wymiany kluczy. Oparty na problemach sieciowych.
- FIPS 204 (ML-DSA) — zastępuje RSA/ECDSA do podpisów.
- FIPS 205 (SLH-DSA) — rezerwowy podpis oparty na skrótach.
Cloudflare i Google obsługują już ML-KEM w wymianie kluczy TLS 1.3. Usługi transferu plików będą podążać w ciągu najbliższych kilku lat. Szyfrowanie symetryczne (AES-256-GCM) jest w dużej mierze niezmienione — algorytm Grovera jedynie zmniejsza o połowę jego efektywną siłę.
Łącząc to wszystko
Dla wrażliwych udostępnień: TLS 1.3 z wymianą kluczy X25519 chroni połączenie, AES-256-GCM obsługuje masowe szyfrowanie, a dla usług opartych na kontach ECDH z Curve25519 opakuje klucze per plik. Usługi oparte na łączach pomijają warstwę kont, zyskując prostotę. Oba modele zapewniają silne bezpieczeństwo, gdy są prawidłowo zaimplementowane.
Wypróbuj na hexatransfer.com — bezpłatnie, bez konta, do 10 GB.
Wysyłaj duże pliki bezpiecznie z szyfrowaniem end-to-end
Przesyłaj pliki do 10 GB za darmo z szyfrowaniem end-to-end. Bez rejestracji. Twoje pliki są szyfrowane w przeglądarce przed przesłaniem — nikt inny nie może ich odczytać.
Wyślij plik