Puncte:3

Problemă cu adăugarea de puncte despre [n-1]+[2]G și [n-1]+G pe Secp256k1

drapel cn

Îmi cer scuze anticipat pentru întrebarea mea. Încerc să-mi fac propriul calculator simplu Secp256k1, doar adunări și scăderi, și un lucru mă tot încurcă. Când adun 2 puncte și știu ce rezultat al adunării ar trebui să fie un număr mai mare decât $n$, și din câte am înțeles, rezultatul ar trebui să fie 0, deoarece este punctul de la infinit.

Cu toate acestea, calculatorul meu arată un rezultat diferit. De exemplu, adaug:

115792089237316195423570985008687907852837564279074904382605163141518161494336 + 2

si ia 1 ca rezultat. Același lucru se întâmplă și cu alte puncte a căror sumă este mai mare decât $n$.

Dar când adaug

115792089237316195423570985008687907852837564279074904382605163141518161494336 + 1

îmi arată calc 0.

Nu pot înțelege, calculatorul funcționează corect și este neînțelegerea mea în ECC? Sau este o greșeală în codul meu? Ce rezultat ar trebui să fie când adun două puncte cu sumă, mai mare decât $n$?

kelalaka avatar
drapel in
Bun venit la Cryptography.SE. Întrebarea ta nu este clară. Folosiți [legile grupului de adăugare de puncte](https://crypto.stackexchange.com/a/66296/18298)?
Franko avatar
drapel cn
Da, presupun.
kelalaka avatar
drapel in
Citind din nou întrebarea dvs., se pare că aveți o problemă în aritmetica punctului ECC. Puteți edita întrebarea pentru a arăta cum adăugați puncte? Matematic sau programatic, în ultimul caz ar trebui să fie minim!
Franko avatar
drapel cn
Am folosit cod de la https://onyb.gitbook.io/secp256k1-python/point-addition-in-python. When i add coordinates for 15792089237316195423570985008687907852837564279074904382605163141518161494336 point 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798b7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777 and add to this point 2 with coordinates c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a, i get coordinates of 1 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 as result.
kelalaka avatar
drapel in
Chiar nu înțeleg. Ce este $P=(Px,Py)$ și $Q=(Qx,Qy)$
Franko avatar
drapel cn
Să o facem puțin mai simplă. Ce răspuns corect pentru adăugarea de puncte pentru două puncte:115792089237316195423570985008687907852837564279074904382605163141518161494336 și 2?
kelalaka avatar
drapel in
Un punct în ECC în coordonate afine are două coordonate. Sigur ai inteles asta? Există un punct $$(2, 69211104694897500952317515077652022726490027694212560352756646854116994689233)$$ cu $x=2$ calculat și y...
Franko avatar
drapel cn
Îmi pare rău. Point 115792089237316195423570985008687907852837564279074904382605163141518161494336 G with coordinates x: 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 y: b7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777 and point 2G x: c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5 y :1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a
kelalaka avatar
drapel in
Cred că îți lipsesc conceptele. Punctul pe care l-ați apelat ar trebui să fie cheia privată și doriți să calculați cheia publică. Cheia privată este un număr întreg, iar cheia publică este un punct prin [multiplicarea scalară](https://crypto.stackexchange.com/q/68593/18298) $[k]G$
PrincePolka avatar
drapel cn
secp256k1 este o curbă de ordin prim N = 115792089237316195423570985008687907852837564279074904382605163141518161494337 ceas
Franko avatar
drapel cn
Mulțumiri!!! Aceasta înseamnă că toate funcționează corect. Dar este posibil să evitați cumva această adăugare de puncte din a doua rundă? Pentru a adăuga rezultate mai mari decât n. La urma urmei, rezultatul adunării, care este egal cu n (11579208923731619542357098500868790785283756427907490438260516314151816195423570985008687907852837564279074904382605163141518161494337) calculul poate fi mai mare decât n pentru alte rezultate.
kelalaka avatar
drapel in
Văd. Folosești o terminologie complet incorectă. Executați înmulțirea scalară. În acest caz, puteți utiliza această identitate. $[k]P = [ k \mod n]P$
Franko avatar
drapel cn
Multumesc, voi incerca.
kelalaka avatar
drapel in
Și nu uitați că modul StackExchange este să votați un răspuns dacă vă este util și să îl acceptați dacă vă satisface întrebarea. A se distra.
Puncte:4
drapel in

Există confuzie cu privire la terminologia curbei eliptice în această întrebare. Să ne ocupăm de unele dintre ele;

Curba eliptică

Din punct de vedere algebric, o curbă eliptică este

$$E(\mathbb{K}) := \{ (x, y) \in \mathbb{K}^2 \mid y^2+a_1xy+a_3y = x^3+a_2x^2+a_4x+a_6\ } \cup \{\mathcal O\}$$

$\{\mathcal O\}$ este punctul de la infinit adăugat ca extra care nu are reprezentare în forma geometrică a curbei.

Punctele sunt $(x,y)$ tupla asta satisface ecuația curbei deci nu sunt numere întregi!

Adăugarea punctelor

Adăugarea punctului are o semnificație geometrică foarte bine. În poza de mai jos $P,Q,R$ reprezintă punctele de pe curbă şi $\{\mathcal O\}$ este reprezentat ca $0$

Interpretarea geometrică a adunării pe o curbă Weierstrass

și extragem ecuații aritmetice de la aceasta ( regula acordurilor tangente). Pentru detalii despre extracție, uitați-vă la Capitolul 2 din cartea lui Washington.

Punctele unei curbe formează un grup abelian sub operatorul de adăugare de puncte cu elementul de identitate $\{\mathcal O\}$.

Înmulțirea scalară

Când adăugăm un punct $P$ la sine spunem dublarea unei persoane scrie ca $2P$, cu toate acestea, modalitatea comună și mai bună de a o scrie este $[2]P$. Asa de $[2]P = P + P$.

În mod similar, putem vorbi despre adăugarea de trei ori, de patru ori sau $t$ ori.

$$[t]P : = \underbrace{P + P + \cdots + P}_{t-time}$$

Aceasta este ceea ce numim înmulțirea scalară (de fapt un Z-Module pentru grupuri abeliene)

Generator

Un generator al unui grup ciclic este un element $G$ astfel încât când $G$ s-a adăugat din nou și din nou, va genera toate elementele grupului (Ne pare rău pentru teoreticianul grupului, literele majuscule se ciocnesc aici - un element $g$ a unui grup $G$ este generator dacă $\langle g \rangle = G$).

Ordin

Comanda are două utilizări în ECC

  1. Ordinea curbei eliptice $|\#E(\mathbb{K})|$ înseamnă numărul de elemente ale curbei

  2. Ordinea unui element.

    Când curba are ordinea primă ca în Secp256k1, atunci fiecare element are aceeași ordine ca și ordinea curbei și aceasta implică că fiecare element este un generator.

Înapoi la întrebarea ta

În Secp256k1, punctul de bază

G = (55066263022277343669578718895168534326250603453777594175500187360389116729240,
83121579216557378445487899878180864668798711284981320763518679672151497189239)

și ordinea punctului de bază $n$ este

n = 115792089237316195423570985008687907852837564279074904382605163141518161494337

Ordinul înseamnă că $[n]G = \mathcal{O}$ și putem folosi acest lucru pentru a deriva ecuația de mai jos

$$[k]P = [ k \bmod n]P$$

  • Deci ceea ce faci este cu $+2$ este

    $$[n-1]G + [2]G = [n-1+2]G = [n+1]G = [1]G = G$$

  • Deci ceea ce faci este cu $+1$ este

    $$[n-1]G + [1]G = [n-1]G = [n]G = \mathcal{O}$$


Să terminăm cu verificarea SageMath;

#secp256k1
p = Integer ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2F")
a = Integer ("0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
B = INTEGER ("0x0000000000000000000000000000000000000000000000000000000000000007")

K = GF(p)
E = Curba eliptică(K,[a,b])
imprimare(E)

G = E(Integer("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"),
      Număr întreg ("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8"))
print("\nG =",G)

n = G.ordine()

print("ordinea \nG =",n)

G2 = 2*G
Q = (n-1)*G + 2*G
print("\n[n-1]G+[2]G =",Q)
afirmă (Q == G)

R = (n-1)*G +G
print("\n[n-1]G+G =",Q)
imprimare(R)

iar ieșirea este

Curba eliptică definită de y^2 = x^3 + 7 peste câmp finit de dimensiune 11579208923731619542357098500868790785326998466564056403945758400790868636

G = (55066263022277343669578718895168534326250603453777594175500187360389116729240 : 32670510020758816978083085130507043184471273380659243275938904335757337482424 : 1)

Comanda lui G = 115792089237316195423570985008687907852837564279074904382605163141518161494337

[n-1]G+[2]G = (55066263022277343669578718895168534326250603453777594175500187360389116729240 : 32670510020758816978083085130507043184471273380659243275938904335757337482424 : 1)

[n-1]G+G = (55066263022277343669578718895168534326250603453777594175500187360389116729240 : 32670510020758816978083085130507043184471273380659243275938904335757337482424 : 1)
(0 : 1 : 0)
kelalaka avatar
drapel in
Da, puteți vorbi despre punctul ca un întreg în care întregul reprezintă scalarul care trebuia să se înmulțească cu $G$. Cu toate acestea, inversul este logaritmul discret, adică dat $P$ găsiți $t \in Z$ astfel încât $P = [t]G$, iar acesta este nucleul securității multor ECC și o problemă grea. Este obișnuit că putem păstra indicii ($t$ pentru fiecare $P$) pentru a accelera, totuși, de cele mai multe ori vi se oferă $P$ fără indice, ca în cheia Diffie-Hellman Curve eliptice Exchange (ECDH).
Franko avatar
drapel cn
Vă mulțumesc foarte mult pentru răspunsul atât de detaliat. Îmi pare rău pentru descrierea greșită a punctului, înțeleg ce punct este coordonatele x y, nu întreg, dar pentru mine este mai ușor să descriu punctul ca un întreg, deoarece arată numărul ce se află în spatele acestui punct. Și mulțumesc pentru calcul, acum văd clar ce se întâmplă când adaug aceste puncte. Dar am o întrebare nouă. Există o modalitate posibilă de a urmări ce rezultat al adunării de puncte este mai mare decât n și punctul rezultat se află în „a doua rundă”? Este posibil?
kelalaka avatar
drapel in
Dacă îmi dați $P$ și $Q$ cu coordonatele lor, atunci nu există nicio cale pentru mine, așa cum am menționat în comentariul anterior, aceasta este o nevoie să rezolv logaritmul discret pe Seckp256k1. Rețineți că, nu există o astfel de rotunjire atunci când luați în considerare $P+Q$, deoarece formula de adăugare nu trebuie să folosească indicele și punctul de bază.

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.