Puncte:2

Putem inversa funcția curbă eliptică mul?

drapel cn

Am un sistem de curbe eliptice cu un singur punct P. Să presupunem că clientul A și serverul B generează un secret R1 și R2.

A trimite X1 = mul(R1, P) către B și B trimite X2 = mul(R2, P) către A atunci secretul partajat este același pentru ambele: S = X1R2 = X2R1

Sistemul are un singur punct și am X1,X2 și P. Încerc să calculez secretul partajat, calculând R1 și R2. Cu toate acestea, funcția de curbă este greu de inversat din cauza n = n // 2.

Functia :

#R este numărul privat generat de partea client/server
# P este punctul
def mul(R, P):
         
        Q = P.copie()
        Q2 = PointInf()
        în timp ce R > 0:
            dacă R % 2 == 1:
                Q2 = adăugați (Q2, Q)
            Q = adăugați (Q, Q)

            R //= 2
    
        întoarce Q2

Pe numărul mic n, putem inversa cu ușurință funcția și găsim R pentru că nu există multă iterație, astfel încât să putem face o aproximare și apoi forța brută, dar ce putem face pentru R mare (cazul meu este de 175 de iterații) .

Este posibil asta din punct de vedere matematic?

Puncte:2
drapel ng

Ceea ce descrii este Diffie-Hellman pe un grup cu neutru PointInf() [se notează în continuare $\infty$] și legea adăuga() [se notează în continuare $\boxplus$]. Declarația problemei nu spune care, dar titlul sugerează un grup de curbe eliptice pe un câmp finit. Funcţie mul(R, P) calculează înmulțirea scalară $R\boxtimes P=\underbrace{P\boxplus \ldots\boxplus P}_{R\text{ termeni}}$. Din asociativitatea lui $\boxplus$ urmează $R\boxtimes P$ este bine definit, și asta $R_1\boxtimes (R_2\boxtimes P)=(R_1\times R_2)\boxtimes P=(R_2\times R_1)\boxtimes P=R_2\boxtimes (R_1\boxtimes P)$ [Unde $\ori$ este înmulțirea întregului].

Încerc să calculez secretul partajat, prin calcul $R_1$ și $R_2$.

$R_2\boxtimes P$ și $R_1\boxtimes P$ sunt cunoscute, astfel încât un atacator trebuie doar să calculeze $R_1$ sau $R_2$ pentru a recupera cele partajate $S$.

Pe număr mic $n$, putem inversa cu ușurință funcția și găsim $R$ pentru că nu există multe iterații, așa că putem face o aproximare și apoi forța brută, dar ce putem face pentru mare $R$ (cazul meu este de 175 de iterații).

Dacă într-adevăr suntem pe o curbă eliptică peste un câmp finit, nu văd cum putem „face o aproximare”. Le voi presupune pe amândouă $R_i$ sunt aleatorii în $[0,n)$ cu $n\boxtimes P=\infty$ sau un interval similar și $\log_2(n)\aproximativ175$.

Putem inversa multiplicarea curbei eliptice?

Găsind $R$ dat $R\boxtimes P$ și $P$ este problema logaritmului discret. Este cel mai cunoscut general metoda de a gasi $S$. Cel mai cunoscut general metodele de rezolvare a DLP (de exemplu, rho-ul lui Pollard distribuit cu puncte distincte) au costuri de ordinul $2\sqrt n$ adăugiri, iar asta nu este la îndemână (cu excepția cazului în care se pot investi miliarde în proiectarea, producerea și funcționarea echipamentelor specializate). in orice caz

  • există algoritmi mult mai buni pentru unele curbe eliptice (de exemplu, supersingular sau când $n$ este compus).
  • poate unul dintre $R_i$ nu este chiar întâmplător
  • poate unele scurgeri de informații suplimentare (cum ar fi timpul necesar pentru calculul $R\boxplus P$, sau liniile cache ale CPU utilizate de acel calcul; ambele ar putea ajuta).
  • sau poate că acesta este un CTF deformat și problema nu necesită găsire $S$.
drapel cn
Bine. Multumesc pentru explicatie. Da, într-adevăr, R este complet aleatoriu și foarte mare, așa că da, ghicitul este complet imposibil. Voi verifica algoritmul supersingular și distribuirea lui Pollard pentru a verifica dacă acest lucru mă poate ajuta în problema mea (este într-adevăr un ctf ). Când spui Scurgeri de informații suplimentare, ce informații ne-ar putea ajuta să recuperăm R1 sau R2?
fgrieu avatar
drapel ng
@ThibaultPoncetta: vezi ultimul glonț actualizat. [actualizare: vezi penultimul punct]
drapel cn
ultimul glonț? Mai ai un cuvânt care să-l descrie? Nu găsesc o traducere a acestui ^^.
fgrieu avatar
drapel ng
În _butlast bullet (punct)_ al meu _butlast_ încearcă să însemne: înainte de ultimul (este comun în informatică, dar nu știu dacă este atestat în altă parte ca un singur cuvânt [actualizare: vezi comentariul de mai jos, are un sens diferit]). Și [_bullet_](https://en.wikipedia.org/wiki/Bullet_(typography)) este un termen tipografic, desemnând simbolul (adesea un disc negru) care introduce un element într-o listă. Nu sunt vorbitor nativ de engleză, așa că ai grijă la explicațiile mele despre asta!
drapel cn
bine! Mulțumiri. prima dată când văd un cuvânt ca acesta.
drapel us
Acest lucru devine în afara subiectului, dar ca vorbitor nativ de engleză americană care a studiat CS de peste 20 de ani, este prima dată când văd cuvântul „butlast”. Aș folosi „penultimul” pentru a însemna elementul $(n-1)$th dintr-o listă de $n$ articole sau chiar „penultimul” pentru a suna mai puțin elegant. O căutare rapidă (adică, s-ar putea să-mi lipsesc alte utilizări) arată că „butlast” este folosit pentru a însemna articolele de la 1 la $n-1$ -- toate articolele cu excepția ultimului -- mai degrabă decât doar $(n-1)$th articol.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.