Primul în definiția curbei Secp256k1
Primul $p$ face parte din proiectarea, analiza și definiția curbei care definesc $\mathbb{F_P}$. Dacă cineva folosește un alt $p$ apoi au curbe diferite care trebuie analizate apoi publicate și distribuite pentru a comunica cu această curbă.
Pentru a comunica $p$, ecuația curbei ( aici $(a,b)$), punctul de bază $G$, punctul de la infinit, ordinea curbei $n$, și co-factor $h$ sunt prevăzute în standard.
Acesta este sextupul $T = (p,a,b,G,n,h)$ si pentru Secp256k1 este;
- ''p'' = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
- = $2^{256} - 2^{32} - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1$
Curba $E: y^2 = x^3+ax+b$ peste $\mathbb{F}_p$ este definit de:
- „a” = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
- „b” = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007
Punctul de bază G în formă comprimată este:
- „G” = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
și în formă necomprimată este:
- ''G'' = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBD108FC 08E4817FBD4 08E4817FB48FD108FD4F8F81FD4
În cele din urmă, ordinea „n” a lui „G” și cofactorul sunt:
- ''n'' = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
- ''h'' = 01
The $a,b,p,G$ sunt suficiente pentru a comunica, cu toate acestea, nu este nevoie să recalculăm restul.
Un mic exemplu pentru a demonstra că sunt complet diferiți.
K = GF(19)
E = Curba eliptică(K,[0,7])
imprimare(E)
print(E.order())
print(E.abelian_group())
atunci $n = 12$ iar grupul curbei este izomorf la $\mathbb{Z}_6 \oplus \mathbb{Z}_2$
K = GF(31)
E = Curba eliptică(K,[0,7])
imprimare(E)
print(E.order())
print(E.abelian_group())
atunci $n = 21$ iar grupul curbei este izomorf la $\mathbb{Z}_{21}$
Desigur, este posibil să găsiți două tupluri, $(p_1,a_1,b_1)$ și $(p_2,a_2,b_2)$ astfel încât să aibă aceleași grupuri de puncte.Aceasta nu este preocupare, este nevoie doar de sextupul standardizat.
Suntem limitati la $\mathbb{F}_p$?
Dacă întrebați, ar trebui să folosim întotdeauna câmpul prim $\mathbb{F}_p$ atunci raspunsul este nu. Orice câmp finit $\mathbb{F}_{p^m}$ este bine atâta timp cât sigur și rapid. Vedea a lui Fgrieu raspunde pentru detalii.
Ordinea grupului de curbe
Unele curbe precum secp256k1 sunt proiectate pentru a avea ordine primă (adică numărul de puncte este prim). Alții precum Curve25519 și Curve448 nu au comenzi prime. Acest lucru îi ajută să aibă o reprezentare Montgomery care are o înmulțire scalară rapidă cu Montgomery Ladder. Alții pot avea o scară Joyce mai puțin eficientă.
Nu vrem ca ordinea curbei să fie egală cu $p$ în acest caz, curba este o curbă anormală și nu este sigură.
Modulul în înmulțirea scalară
The înmulțirea scalară $[k]P$ aceasta înseamnă de fapt adăugarea $P$ în sine $k$-ori. Mai formal;
lăsa $k \in \mathbb{N}\backslash\{ 0\}$
\begin{align}
[k]:& E \la E\
&P\mapsto [k]P=\underbrace{P+P+\cdots+P}_{\text{$k$ ori}}.\end{align}
și prin a fi identitate $[0]P = \mathcal{O}$.
Când calculăm acest lucru, folosim ordinea punctelor $P$, dacă curba are ordine primă ca secp256k1, atunci toate elementele, cu excepția identității, au aceeași ordine primă. Avem această egalitate
$$[k]P = [k \bmod \text{ord}(P)]P$$
iar noi folosim $P$este cu ordinul principal pentru a atenua atacurile.