Problem dystrybucji kluczy
Symmetriczna szyfrowanie, takie jak AES, jest szybkie i bezpieczne, ale wymaga od obu stron wcześniejszego współdzielenia klucza. Przed internetem wymiana kluczy oznaczała spotkanie osobiście lub zaufanie kurierowi – niemożliwe dla milionów serwerów komunikujących się z miliardami przeglądarek. W 1976 roku Whitfield Diffie i Martin Hellman opublikowali "New Directions in Cryptography", protokół umożliwiający dwóm stronom uzyskanie identycznego sekretu poprzez wymianę wyłącznie publicznej informacji, bez konieczności przesyłania klucza.
Mieszanie farb, dokonane precyzyjnie
Klasyczne rozumowanie: mieszanie farb jest proste, a "rozmieszanie" ich trudne. Alice i Bob ustalają publicznie liczbę pierwszą p oraz generator g. Alice wybiera sekret a, Bob wybiera sekret b, a następnie każdy oblicza wartość publiczną przy użyciu potęgowania o modularnych współczynnikach:
p = 23, g = 5 (publiczne — Ewa zna również te wartości) Alice: a = 6 (sekret) → A = 5⁶ mod 23 = 8 (wysyła A) Bob: b = 15 (sekret) → B = 5¹⁵ mod 23 = 19 (wysyła B) Alice oblicza: s = B^a mod p = 19⁶ mod 23 = 2 Bob oblicza: s = A^b mod p = 8¹⁵ mod 23 = 2 ← ten sam sekret! (g^a)^b mod p = (g^b)^a mod p = g^(ab) mod p Obie strony osiągają tę samą wartość, ponieważ potęgowanie w arytmetyce modularnej jest przemienne — Alice oblicza (gᵇ)ᵃ, Bob oblicza (gᵃ)ᵇ i są to identyczne. Rzeczywiste DH używa liczb pierwszych o długości 2048-4096 bitów, a nie zabawkowe wartości jak 23.
p = 23, g = 5 (public — Eve knows these too) Alice: a = 6 (secret) → A = 5⁶ mod 23 = 8 (sends A) Bob: b = 15 (secret) → B = 5¹⁵ mod 23 = 19 (sends B) Alice computes: s = B^a mod p = 19⁶ mod 23 = 2 Bob computes: s = A^b mod p = 8¹⁵ mod 23 = 2 ← same secret! (g^a)^b mod p = (g^b)^a mod p = g^(ab) mod p
Dlaczego jest tak trudno co do odwracania: problem logarytmu dyskretnego
Ewa zna p, g, A i B. Aby złamać wymianę, potrzebuje znaleźć a takie, że gᵃ ≡ A (mod p) – to jest problem logarytmu dyskretnego (DLP). Dla zwykłych liczb całkowitych jest to trivialne (jeśli 5⁵ = 3125, to wyraźnie a = 5), ale modularne "przeliczanie" niszczy wzorzec i nie istnieje znany wydajny algorytm klasyczny do rozwiązywania go z dużymi liczbami pierwszymi. Z p = 23, Ewa mogłaby przeprowadzić przeszukiwanie brute-force a w milisekundach; z prawdziwym liczebnikiem o długości 2048 bitów, najlepsza znana metoda – General Number Field Sieve – zajęłaby więcej czasu niż wiek wszechświata.
Pułapka: brak uwierzytelniania
Prosty algorytm wymiany klucza Diffie-Hellmana posiada jedną krytyczną słabość – zapewnia on poufność, ale nie uwierzytelnia. Jeśli Ewa przechwyci połączenie na samym początku, może przeprowadzić dwa oddzielne wymiany DH, udając Boba Alicji i Alicję Bobowi, a oba "bezpieczne" kanały faktycznie będą przechodzić przez nią. Dlatego HTTPS łączy DH z certyfikatem: podpis od zaufanej Służby Certyfikacji potwierdzający, że klucz publiczny serwera rzeczywiście należy do domeny, którą próbujesz odwiedzić. Nowoczesne TLS 1.3 nakłada wymóg stosowania zestawów szyfrujących opartych na DH (zwykle krzywoliniowych ECDH) ze względu na zapewnienie prywatności w przypadku ataku – każdy kanał generuje świeżą, tymczasową parę kluczy, dzięki czemu nagrywanie ruchu z dzisiejszego dnia i późniejsze kradzież długoterminowego klucza serwera nie pozwalają na odszyfrowanie starych sesji.
Często zadawane pytania
Jak Diffie-Hellman pozwala dwojgu stronom osiągnąć porozumienie co do sekretu bez jego przesyłania?
Obie strony łączą współdzielony publiczny podstawnik z ich własnym prywatnym numerem za pomocą potęgowania modularnego, wymieniają tylko wyniki i następnie każdy podnosi publiczny wynik drugiej strony do swojej prywatnej potęgi. Ponieważ (g^a)^b mod p równa się (g^b)^a mod p, obie strony osiągają identyczną wartość gab mod p bez wysyłania jej przez kanał.
Dlaczego Diffie-Hellman jest trudny do złamania?
Słuchacz, który zna g, p i oba publiczne wartości A i B, musiałby rozwiązać problem logarytmu dyskretnego – znaleźć a taki, że g^a ≡ A (mod p) – aby odzyskać klucz prywatny. Nie istnieje znany wydajny algorytm klasyczny do tego z dużymi liczbami pierwszymi; najlepsza znana metoda, General Number Field Sieve, zajęłaby więcej czasu niż wiek wszechświata dla liczb pierwszych o długości 2048 bitów.
Czy Diffie-Hellman sam chroni przed atakiem typu man-in-the-middle?
Nie. Prosty Diffie-Hellman zapewnia poufność, ale nie uwierzytelnianie – atakujący przechwytujący połączenie na początku może przeprowadzić dwa oddzielne wymiany, udając każdą stronę drugiej stronie. Rzeczywisty HTTPS łączy Diffie-Hellmana z certyfikatem podpisany przez zaufaną Certyfikowaną Stację Wydającą (CA) w celu zweryfikowania tożsamości.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz the simulation i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację the simulation