0Pricing
Cryptology Academy · Lekcja

ECDH: krzywe eliptyczne do wymiany kluczy

Zastosować skalarne mnożenie punktów na krzywej eliptycznej do uzgadniania kluczy ECDH

ECDH: krzywe eliptyczne do wymiany kluczy to bezpłatna lekcja Cryptology Academy 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 Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Wprowadzenie

ECDH zastępuje grupę multiplikatywną DH grupą krzywej eliptycznej. Rezultat: porównywalny poziom bezpieczeństwa przy kluczach 10× mniejszych i operacjach 10× szybszych.

Operacje w grupie EC

W ECDH „mnożenie” oznacza mnożenie skalarne na krzywej eliptycznej: pomnożenie punktu P przez skalar k oznacza dodanie P do siebie k razy: k×P. Jest to analog operacji g^k mod p w grupie EC.

Protokół ECDH

Uzgadniają krzywą E i punkt bazowy G (publiczne). Alice: klucz prywatny a, klucz publiczny A = a×G Bob: klucz prywatny b, klucz publiczny B = b×G Alice: S = a×B = a×b×G Bob: S = b×A = b×a×G Oboje wyprowadzają ten sam punkt S.

ECDLP

Mając A = a×G na krzywej eliptycznej, znajdź a. Jest to problem logarytmu dyskretnego na krzywej eliptycznej. Dla ogólnych krzywych nie jest znany żaden algorytm podwykładniczy, dlatego ECDLP jest trudniejszy niż DLP przy kluczach o tej samej długości.

Curve25519

Zaprojektowana przez Bernsteina w 2005 roku. Postać Montgomery’ego: y²=x³+486662x²+x nad ciałem o charakterystyce będącej liczbą pierwszą 2^255-19. Zaprojektowana z myślą o szybkości i odporności na błędy implementacji. Używana w WireGuard, Signal i SSH.

Wymiana kluczy X25519

X25519 to funkcja ECDH wykorzystująca Curve25519. Używana jest tylko współrzędna x wspólnego punktu (mnożenie przez współczynnik grupy obsługuje przypadki brzegowe). RFC 7748 standaryzuje X25519 i X448.

ECDH w Pythonie

from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey alice_priv = X25519PrivateKey.generate() bob_priv = X25519PrivateKey.generate() alice_pub = alice_priv.public_key() bob_pub = bob_priv.public_key() shared_alice = alice_priv.exchange(bob_pub) shared_bob = bob_priv.exchange(alice_pub) assert shared_alice == shared_bob

Od wspólnego punktu do klucza symetrycznego

Surowy wspólny punkt nie jest używany bezpośrednio jako klucz (nie ma rozkładu jednostajnego). Użyj HKDF, aby wyprowadzić właściwy klucz symetryczny: from cryptography.hazmat.primitives.kdf.hkdf import HKDF key = HKDF(SHA256, 32, salt, info).derive(shared_secret)

Rozmiary kluczy ECDH a DH

Poziom bezpieczeństwa 128 bitów: - DH: liczba pierwsza 3072-bitowa - ECDH: krzywa 256-bitowa Stosunek rozmiarów kluczy: około 12:1. Klucz publiczny ECDH: 32 bajty (Curve25519). Klucz publiczny DH: 384 bajty. Operacje ECDH z kluczem prywatnym są około 50× szybsze.

Atak z wykorzystaniem współczynnika grupy na wadliwych krzywych

Ataki na małe podgrupy wykorzystują krzywe z nietrywialnymi współczynnikami grupy. Curve25519 ma współczynnik grupy równy 8, ale X25519 prawidłowo sobie z tym radzi. Krzywe P NIST mają współczynnik grupy równy 1. Zawsze używaj standaryzowanych implementacji.

ECDH w TLS 1.3

TLS 1.3 obsługuje: X25519, X448, P-256, P-384, P-521 do wymiany kluczy. X25519 jest używany najczęściej — jest szybki, bezpieczny i działa w stałym czasie. Obaj uczestnicy generują efemeryczne klucze dla każdej sesji.

Szybki test

Jaka jest główna zaleta ECDH w porównaniu z klasycznym Diffie-Hellmanem?

Podsumowanie

ECDH jest już opanowane! Następnie poznamy forward secrecy i dowiemy się, dlaczego efemeryczna wymiana kluczy jest niezbędna w TLS.

Często zadawane pytania

Czy lekcja „ECDH: krzywe eliptyczne do wymiany kluczy” jest bezpłatna?

Tak — pełny tekst „ECDH: krzywe eliptyczne do wymiany kluczy” 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 Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „ECDH: krzywe eliptyczne do wymiany kluczy”?

Zastosować skalarne mnożenie punktów na krzywej eliptycznej do uzgadniania kluczy ECDH Ćwiczysz Cryptology Academy 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ąć Cryptology Academy?

Nie wymagamy żadnego doświadczenia. Cryptology Academy 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 „ECDH: krzywe eliptyczne do wymiany kluczy”?

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 Cryptology Academy?

Tak. Każda lekcja Cryptology Academy 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

  1. Problem dystrybucji kluczy
  2. Matematyka wymiany kluczy Diffiego-Hellmana
  3. ECDH: krzywe eliptyczne do wymiany kluczy
  4. Forward secrecy i efemeryczna wymiana kluczy
← Powrót do Cryptology Academy