Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Adminie… Czy znamy Twoje grzechy? ;-) Sprawdź!
Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Adminie… Czy znamy Twoje grzechy? ;-) Sprawdź!
Na początku października 2025 r. badacze bezpieczeństwa z firmy Botanica Technologists opublikowali raport z analizy audytu OSS (Open Source Software) Elliptic Curve. Wyniki badań są niepokojące, ponieważ został wykryty szereg błędów kryptograficznych, związanych z nieprawidłową implementacją krzywej eliptycznej FourQ w bibliotece CIRCL (Cloudflare Interoperable, Reusable Cryptographic Library). Jeden z błędów mógł nawet doprowadzić do ujawnienia klucza prywatnego w protokole ECDH (Elliptic Curve Diffie-Hellman).
TLDR:
Biblioteka kryptograficzna CIRCL została opracowana i rozwijana przez zespół Cloudflare Research jako projekt open source. Zawiera implementację popularnych algorytmów i protokołów kryptograficznych, w tym rozwiązań postkwantowych (m.in.: Kyber, Dilithium) oraz klasycznej kryptografii bazującej na krzywych eliptycznych (FourQ). Krzywa eliptyczna FourQ została zaprojektowana przez Microsoft Research, głównie pod kątem opracowania efektywnego rozwiązania, dedykowanego do wymiany kluczy ECDH i podpisów cyfrowych. Oferuje poziom bezpieczeństwa na poziomie 128 bitów. Została zdefiniowana w postaci skręconej krzywej Edwardsa (twisted Edwards) nad ciałem GF(p2), gdzie p = 2127 – 1 jest liczbą pierwszą Mersenne’a. Wzór definiującą krzywą wygląda następująco:
E: -x2 +y2 = 1 + dx2y2
Liczby Marsenne’a charakteryzują się efektywną arytmetyką modularną, co sprawia że znalazły szerokie zastosowanie w kryptografii. Ich specjalna postać binarna (2p – 1) znacząco przyspiesza operacje modularne w stosunku do krzywych eliptycznych postaci NIST.
Tak jak często bywa, błędem nie okazała się matematyka, jednak problemy implementacyjne. W tym przypadku weryfikacja punktu na krzywej eliptycznej, przed rozpoczęciem drugiego etapu protokołu ECDH, czyli ustalenie wspólnego sekretu. Zanim jednak wyjaśnimy jakie ten błąd ma znaczenie, należy wspomnieć o arytmetyce na krzywej eliptycznej.
Operacjami realizowanymi na krzywych eliptycznych są dodawanie, podwojenie oraz wyznaczanie krotności punktu, czyli iteracyjne dodawanie do siebie tego samego punktu. Wszelkie operacje realizowane są w ciele liczb skończonych, a co za tym idzie, dodając do siebie ten sam punkt n razy, mamy pewność, że żaden punkt się nie powtórzy i za każdym razem otrzymamy inne wartości. Świadczy o tym parametr zdefiniowany jako rząd punktu. W tym momencie należy rozróżnić rząd grupy punktów na krzywej eliptycznej od rzędu krzywej eliptycznej. Rząd krzywej eliptycznej jest parametrem mówiącym ile punktów rzeczywiście znajduje się na krzywej eliptycznej. Warto jeszcze dodać, że rząd grupy punktów na krzywej eliptycznej FourQ składa się z 392*q, gdzie q jest dużym czynnikiem pierwszym reprezentującym bezpieczną podgrupę punktów.
Po zdefiniowaniu operacji arytmetycznych na krzywych eliptycznych, można przystąpić do opisu protokołu ECDH. Protokół ECDH służy do ustalenia wspólnego sekretu pomiędzy stronami A i B. Składa się z dwóch etapów, w pierwszy kroku zarówno strona A jak i strona B wyznaczają klucz publiczny postaci: QA=[kA]G oraz QB=[kB]G. Kluczem prywatnym jest odpowiednio kA oraz kB. W następnym kroku strony wymieniają się kluczami publicznymi, a następnie realizują analogiczną operację na punktach otrzymanych od rozmówcy. W tym momencie przeprowadzając operację:
Strona A: Q=[kA]QB=[kA*kB]G=(xk,yk,1),
Strona B: Q=[kB]QA=[kB*kA]G=(xk,yk,1),
strony otrzymają ten sam punkt – wspólny sekret. Dzieje się tak na skutek przemienności operacji mnożenia.
Przechodząc do sedna, może się okazać, że grupa punktów krzywej eliptycznej o rzędzie n składa się z podgrup, będących dzielnikami rzędu n. W kontekście ataków z użyciem nieprawidłowych punktów, atakujący może wybrać punkt należący do krzywej eliptycznej o innej strukturze grupowej, składającej się z małych czynników pierwszych. W tej sytuacji, używając punktu generującego tę podgrupę można częściowo odzyskać tajny klucz metodą brute force, a następnie korzystając z Chińskiego Twierdzenia o Resztach odzyskać sekret.
Implementacja arytmetyki na krzywej eliptycznej FourQ była właśnie podatna na tego typu atak (w obecnej wersji podatność ta została załatana). Atakujący mógł skonstruować specjalny punkt postaci (0,y), który nie należał do krzywej eliptycznej FourQ, ale był błędnie akceptowany przez funkcje walidacyjne. W efekcie podczas drugiego etapu protokołu ECDH, wyznaczanie k-tej krotności punktu (0, yk), spowodowało ujawnienie częściowej informacji o kluczu prywatnym. Powtarzając powyższą czynność l-razy, atakujący był w stanie odtworzyć tajny sekret.
W tym momencie warto wspomnieć o specjalnej postaci punktu użytego do przeprowadzenia ataku. Krzywa FourQ została zdefiniowana w postaci Edwardsa, a co za tym idzie formuły matematyczne do dodawania punktu, związane są ze współrzędna x jako zmienną użytą w wielu miejscach. Założenie, że x=0 skutkuje uproszczeniem formuły dodawania punktu, a wyznaczenie k-tej krotności sprowadza się do obliczenia yk. Biorąc pod uwagę powyższy fakt, wynikowym punktem jest punkt (0,yk), a co za tym idzie zamiast wykonywania złożonych operacji związanych z wyznaczaniem logarytmu dyskretnego w grupie punktów krzywej eliptycznej, atakujący operuje w grupie multiplikatywnej ciała skończonego o stosunkowo niskim rzędzie, podatnym na ataki typu brute force.
Oprócz ww. błędu wykryto jeszcze inne nieprawidłowości, związane z:
Wykryta podatność została zgłoszona w marcu 2025 r. poprzez program BugBounty w serwisie HackerOne. Niestety, reakcja zespołu nie była zbyt entuzjastyczna. Dopiero nawiązanie bezpośredniego kontaktu z Cloudflare spowodowało podjęcie prac nad wdrożeniem poprawek. Obecnie, w wersji 1.6.1 biblioteki CIRCL błędy zostały wyeliminowane. Wykryte luki bezpieczeństwa otrzymały identyfikator CVE-2025-8556.
Co ciekawe, podatność otrzymała stosunkowo niską ocenę CVSS 3.7 (low), mimo iż teoretycznie pozwala na odzyskanie klucza prywatnego. Najprawdopodobniej wynik ten jest podyktowany wysoką złożonością ataku oraz konieczności aktywnego udziału napastnika w procesie negocjacji klucza. W praktyce luka ta jest trudna do wykorzystania, jednak jej skutki mogą być się poważne.
Źródło: botanica.software, github/cloudflare
~_secmike
Znowu MS i rzekome błędy implementacyjne. Ufacie jeszcze jakiemukolwiek implementującemu kryptografię z usa?