Curba STARK pare o alegere rezonabilă pentru ECDSA.
The Curba STARK definit peste $\mathbb{F}_p$ cu $p = 2^{251} + 17*2^{192} +1$ cu ecuația Weierstrass scurtă
$$y^2 = x^3 + A x + B$$
cu
- $A = 1$, și
- $B = 3141592653589793238462643383279502884197169399375105820974944592307816406665$
Detalii din parametrii dați |
Ordinea grupului de curbe (numărul punctelor) este $n = \#E(\mathbf{F}_p )$ este $n= 3618502788666131213697322783095070105526743751716087489154079457884512865583$
Și acesta este o indicație de număr prim că
Fiecare element, cu excepția identității ( $\mathcal{O})$ poate fi un generator.Numărul nimic din mâneca acestei curbe (mulțumesc Ariei pentru că a arătat), provine din $\pi$.
Asa de Starks are O oarecare rigiditate cel putin pentru moment.
În cele din urmă, numărul nimic în mâneca mea este mai degrabă fiziologic.
Co-factor este $h=1$ aceasta înseamnă că nu există o reprezentare Montgomery a curbei, ca urmare, nu există o scară rapidă Montgomery (necesită un element de ordinul 2, adică 2|co-factor), Scara Joyce este încă posibil cu o performanță mai lentă. În ECDSA, acest lucru este util în calculul $[k]G$ din moment ce numai $x$ se utilizează coordonatele.
Nu există niciun atac de grup mic de luat în considerare, deși aceasta nu este o problemă pentru utilizatorii legitimi ai ECDSA. Dacă utilizatorii nu sunt legitimi, atunci pot folosi acest lucru pentru a cheltui dublu monede, așa cum a făcut în Curv25519 cu toate acestea, acesta nu este cazul curbei STARK.
Grupul de curbe este izomorf la $\mathbb{Z_n}$
The $n$ are o reprezentare binară pe 252 de biți și asta înseamnă că are în jur $126$-biți de securitate împotriva celor mai bune probleme clasice de logaritm discret.
Dimensiunea curbei nu dă nicio coliziune de $k$ dacă se folosește un generator bun de numere aleatorii. Dacă cineva încă se teme de acest lucru, se poate folosi ECDSA determinist dat în rfc-6979.
Twist security (nu are legătură cu ECDSA); răsucirea pătratică a acestei curbe este $$y^2 = x^3 + 5^2*x +B*5^3$$ *
- Cardinalitatea răsucirii = "618502788666131213697322783095070105623107215331596699973092056135872020481"
- Factorii grupului de răsucire = "499669 * 26023817775804638430931 * 278275836047110893120702478691334736277272165979" și aceasta oferă 15 biți de securitate. Nivel moderat.
Și avem $2*p+2 = Ord(E) + Ord(\text{E_quaratic_twist})$
$n \neq p$ prin urmare nu este o curbă anormală unde jurnalul discret poate fi rezolvat rapid.
a = 1
b = 3141592653589793238462643383279502884197169399375105820974944592307816406665
p = 2^251 + 17*2^192 +1
E = Curba eliptică(GF(p), [0,0,0,a,b])
imprimare(E)
Et = E. răsucire_quadratică()
print(Et)
print("E abelian =", E.abelian_group())
print("E twist a = ", Et.abelian_group())
card = E.cardinalitate()
cardEt = Et.cardinalitate()
print("cardinalitate E =",card)
print("cardinalitate E răsucire =",card)
print("factorii E", factor(card))
print("factori Et ",factor(cardEt))
Partea #Generator nu este pentru răsucirea pătratică.
#G = E(874739451078007766457464989774322083649278607533249481151382481072868806602,152666792071518830868575557812948353041420400780739481342941381225525861407)
#n = G.order()
#print("Ordinea generatorului =", n)
print(log(card,2).n()+1)
assert(2*p+2 == card + cardEt)
*Răsucirea pătratică s-a format cu QNR 5, din păcate, nu a funcționat conform intenției. Mulțumesc lui Poncho pentru a sublinia acest lucru. Păstrez ecuația ca să se vadă problema. În schimb, am folosit răsucire_quadratică
Funcția SageMath destul de lentă.