Krzywe eliptyczne (ang. elliptic curves, a cała dziedzina to Elliptic Curve Cryptography, w skrócie ECC) to rodzina obiektów matematycznych, na których opiera się dziś większość kryptografii klucza publicznego. Z krzywych eliptycznych korzystają portfele Bitcoina i Ethereum, połączenia HTTPS w Twojej przeglądarce, komunikatory szyfrowane end-to-end, klucze SSH, karty płatnicze i logowanie bez hasła.
Osobno opisuję w słowniku konkretną krzywą Bitcoina (secp256k1) i sam algorytm podpisu ECDSA. To hasło jest szerszym wprowadzeniem: czym w ogóle jest krzywa eliptyczna, skąd się wzięła w kryptografii, dlaczego wyparła RSA, jakie krzywe spotkasz w praktyce i gdzie leżą jej słabe punkty.
Co to są krzywe eliptyczne w prostych słowach
Krzywa eliptyczna to zbiór punktów (x, y), które spełniają równanie y² = x³ + ax + b, gdzie a i b to ustalone liczby. Z elipsą nie ma nic wspólnego, nazwa jest historyczna.
W kryptografii nie liczy się jednak na liczbach rzeczywistych, tylko nad ciałem skończonym. W praktyce oznacza to, że wszystkie działania wykonuje się „modulo p”, gdzie p to bardzo duża liczba pierwsza. Wynik po przekroczeniu p zawija się od zera, jak wskazówka zegara. Krzywa przestaje wtedy być ładną linią i zamienia się w chmurę rozrzuconych punktów, których jest skończenie wiele. Komputer liczy na nich dokładnie, bez zaokrągleń.
Dodawanie punktów i problem logarytmu dyskretnego
Najważniejsza właściwość krzywej to to, że punkty można do siebie „dodawać”. Intuicja geometryczna jest prosta: bierzesz dwa punkty P i Q, prowadzisz przez nie prostą, która przetnie krzywą w trzecim punkcie, i odbijasz ten punkt symetrycznie względem osi x. Wynik to P + Q. Nad ciałem skończonym nie ma już rysunku, ale wzory działają tak samo.
Skoro można dodawać, można też „mnożyć” punkt przez liczbę: k·G to punkt G dodany do siebie k razy. Komputer robi to błyskawicznie, nawet dla liczby k mającej 77 cyfr. I tu jest sedno:
- W jedną stronę łatwo. Znając k i G, wyliczasz punkt Q = k·G w ułamku milisekundy.
- W drugą stronę praktycznie niemożliwe. Znając tylko G i Q, nie da się w rozsądnym czasie odtworzyć k. To jest problem logarytmu dyskretnego na krzywej eliptycznej (ECDLP).
Liczba k to klucz prywatny, punkt Q to klucz publiczny. Dla krzywych 256-bitowych najlepsze znane klasyczne ataki wymagają około 2^128 operacji, co daje około 128 bitów bezpieczeństwa.
Krótka historia ECC
Kryptografię opartą na krzywych eliptycznych zaproponowali niezależnie od siebie w 1985 roku dwaj matematycy: Neal Koblitz i Victor Miller. Komercjalizacją zajęła się m.in. kanadyjska firma Certicom, która opracowała też standardy SEC, w tym parametry krzywych secp256k1 i secp256r1.
Przełomem był luty 2005 roku, gdy amerykańska NSA ogłosiła zestaw algorytmów Suite B, oparty na krzywych P-256 i P-384, do ochrony także informacji niejawnych. W 2015 roku Suite B zastąpił pakiet CNSA. Od tego czasu ECC stała się domyślnym wyborem w protokołach internetowych.
Dlaczego krzywe eliptyczne wygrały z RSA
Główna przewaga to rozmiar kluczy. Według tabeli porównawczej w zaleceniach NIST SP 800-57 klucz ECC o długości 256 bitów daje bezpieczeństwo porównywalne z kluczem RSA o długości 3072 bitów (oba odpowiadają 128 bitom bezpieczeństwa).
- Mniejsze klucze i podpisy. Klucz publiczny ECC ma 32–65 bajtów, podpis około 64 bajtów. W blockchainie każdy bajt kosztuje.
- Szybsze operacje. Generowanie kluczy i podpisywanie są znacznie szybsze, co ma znaczenie na telefonach, kartach i w sprzętowych portfelach.
Najważniejsze krzywe i gdzie ich używa
- secp256k1. Krzywa Bitcoina, Ethereum i wielu innych sieci. Ma bardzo proste parametry (y² = x³ + 7), co ogranicza podejrzenia o ukryte furtki.
- P-256 (secp256r1, prime256v1). Najpopularniejsza krzywa w świecie „tradycyjnym”: certyfikaty TLS, logowanie kluczami dostępu (passkeys), układ Secure Enclave w urządzeniach Apple, karty chipowe, dokumenty elektroniczne.
- Curve25519, X25519 i Ed25519. Krzywą Curve25519 zaprojektował Daniel J. Bernstein (praca z 2005 roku, opublikowana w 2006). X25519 to wymiana kluczy na tej krzywej, a Ed25519 (2011, Bernstein i współautorzy) to podpisy w jej odmianie Edwardsa. Używają ich m.in. Signal, WhatsApp, TLS 1.3, OpenSSH (od wersji 9.5 Ed25519 to domyślny typ nowego klucza), a w krypto Solana, Cardano, Stellar i Near.
- BLS12-381. Krzywa z tzw. parowaniem (pairing), zaprojektowana w 2017 roku dla Zcasha. Ethereum używa jej do podpisów BLS walidatorów, bo tysiące podpisów da się złączyć w jeden. Od aktualizacji Pectra (maj 2025 roku) smart kontrakty mają do niej wbudowane funkcje (precompile EIP-2537). Wykorzystuje się ją też w dowodach zk-SNARK.
- BN254 (alt_bn128). Starsza krzywa z parowaniem, dostępna w Ethereum jako precompile od aktualizacji Byzantium w 2017 roku. Na niej działa dużo systemów zero-knowledge i rollupów. Po nowych atakach z 2016 roku jej bezpieczeństwo szacuje się na około 100 bitów zamiast pierwotnych 128.
Do czego służą krzywe eliptyczne
- Podpisy cyfrowe. ECDSA (Bitcoin, Ethereum, TLS), EdDSA i Ed25519 (Solana, SSH), podpisy Schnorra (Bitcoin od Taproot) oraz podpisy BLS (walidatory Ethereum). Wszystkie dowodzą, że coś zatwierdził właściciel klucza prywatnego, bez ujawniania go.
- Wymiana kluczy (ECDH). Dwie strony wymieniają klucze publiczne i każda, łącząc je ze swoim kluczem prywatnym, dochodzi do tego samego wspólnego sekretu. Tak zestawiane jest szyfrowanie w HTTPS i komunikatorach.
- Adresy portfeli. Adres w Bitcoinie czy Ethereum to w praktyce skrót klucza publicznego wyliczonego na krzywej. Z frazy seed portfel generuje klucze prywatne, z nich punkty na krzywej, a z punktów adresy.
Kontrowersje i ataki
Sama matematyka ECC od 40 lat trzyma się dobrze. Problemy biorą się z parametrów i implementacji.
- Dual_EC_DRBG. Generator liczb losowych oparty na krzywych, promowany przez NIST, po ujawnieniu dokumentów Snowdena w 2013 roku uznano za furtkę NSA. W 2014 roku NIST zalecił odejście od niego i usunął go ze swoich zaleceń. Od tej pory wielu kryptografów nieufnie patrzy na stałe krzywych NIST (np. P-256), wygenerowane z niewyjaśnionego ziarna. Ataku na P-256 nikt nie pokazał, ale ta nieufność napędziła popularność Curve25519.
- Zła losowość. Klucz prywatny ze słabego generatora albo powtórzona liczba losowa w podpisie potrafią zdradzić klucz. Szczegóły i przykłady opisuję w haśle o ECDSA.
- Ataki na nieprawidłowe punkty (invalid curve). Jeśli program nie sprawdza, czy otrzymany punkt naprawdę leży na właściwej krzywej, napastnik może podsunąć punkt z innej, słabej krzywej i krok po kroku wyciągnąć klucz prywatny.
Krzywe eliptyczne a komputery kwantowe
Największe długoterminowe zagrożenie to algorytm Shora. Odpowiednio duży komputer kwantowy rozwiązywałby problem logarytmu dyskretnego szybko, a więc z klucza publicznego wyliczałby prywatny. Dotyczy to wszystkich krzywych z tego hasła i wszystkich opartych na nich podpisów. Taka maszyna dziś nie istnieje.
Następcami mają być algorytmy postkwantowe standaryzowane przez NIST w 2024 roku, m.in. ML-DSA i SLH-DSA do podpisów oraz ML-KEM do wymiany kluczy. W projekcie dokumentu NIST IR 8547 urząd proponuje wycofywanie algorytmów podatnych na kwanty, w tym ECC, do 2035 roku. Signal już łączy X25519 z ML-KEM, a Bitcoin i Ethereum dyskutują o własnych ścieżkach migracji, które opisuję w haśle o secp256k1.
Co to oznacza dla Ciebie
Nie musisz umieć liczyć na krzywych, żeby z nich bezpiecznie korzystać. Warto jednak rozumieć kilka rzeczy:
- Twój seed to Twój klucz prywatny. Matematyka krzywej chroni Cię tylko wtedy, gdy klucz prywatny pozostaje tajny. Ludzie tracą środki przez wycieki seeda i phishing, a nie przez łamanie krzywych.
- Wybieraj sprawdzone oprogramowanie. Słabe punkty ECC to niemal zawsze implementacja. Stawiaj na portfele z audytami.
- Nie panikuj z powodu kwantów. Z mojej perspektywy to temat na lata, który warto śledzić, a nie powód do nerwowych ruchów.
- Rozumiej różnice między sieciami. Inna krzywa oznacza inny typ klucza. Seed z Solany (Ed25519) i z Bitcoina (secp256k1) daje zupełnie różne adresy, dlatego nie każdy portfel obsługuje każdą sieć.
Ryzyka związane z krzywymi eliptycznymi
- Ryzyko kwantowe. Długoterminowe, ale dotyczy całej klasy algorytmów naraz.
- Ryzyko implementacji. Błędy w walidacji punktów, losowości i odporności na kanały boczne, czyli pomiar czasu lub poboru prądu.
- Ryzyko parametrów. Krzywe o niejasnym pochodzeniu stałych budzą nieufność, choć nie ma dowodu na furtkę w popularnych krzywych.
- Ryzyko starzenia się krzywej. Jak pokazał przykład BN254, postęp w atakach może obniżyć poziom bezpieczeństwa krzywej po latach używania.
Najczęstsze pytania o krzywe eliptyczne
Czy krzywą eliptyczną da się złamać?
Klasycznym komputerem nie, przy krzywych 256-bitowych i poprawnej implementacji. Zagrożeniem jest dopiero duży komputer kwantowy, którego dziś nie ma.
Czy ECC to to samo co ECDSA?
Nie. ECC to cała dziedzina kryptografii opartej na krzywych, a ECDSA to jeden konkretny algorytm podpisu w tej dziedzinie. Na tych samych krzywych działają też ECDH, EdDSA, Schnorr i BLS.
Czy 256 bitów ECC to mniej bezpieczne niż 3072 bity RSA?
Nie. Według NIST oba dają porównywalne bezpieczeństwo, około 128 bitów. Długości kluczy różnych algorytmów nie porównuje się wprost.
Podsumowanie
Krzywe eliptyczne to fundament współczesnej kryptografii: od kluczy w Twoim portfelu, przez HTTPS, po komunikatory i logowanie bez hasła. W porównaniu z RSA dają to samo bezpieczeństwo przy dużo krótszych kluczach, dlatego wygrały w blockchainie i urządzeniach mobilnych. Słabe punkty to implementacja, nieufność wobec niektórych stałych i w dłuższej perspektywie komputery kwantowe, przed którymi świat dopiero zaczyna migrację.


