Puncte:2

Este curba STARK o curbă sigură?

drapel in

SafeCurves definește criterii pentru alegerea curbelor sigure în criptografia cu curbă eliptică.

Curba STARK definește o curbă eliptică Stark-friendly care poate fi utilizată cu ECDSA.

Mă întrebam: Curba STARK este o curbă sigură?

kelalaka avatar
drapel in
Nu este clar de ce este selectat acel $G$, numărul nimic în mânecă?
oberstet avatar
drapel in
Nu sunt sigur că înțeleg ce vrei să spui (nu sunt un expert EC) - vrei să spui că punctul generator specific utilizat în schema ECDSA pe care îl definește site-ul web STARK Curve ar putea fi selectat în mod special de Starkware (autorii), astfel încât un ascuns/ ușa din spate ascunsă se deschide în curbă?
kelalaka avatar
drapel in
Da asta e.
oberstet avatar
drapel in
bine, multumesc! are sens, iar aceasta este cu siguranță o întrebare pe care o voi dezvălui.este _de asemenea_ o întrebare - nu cea pe care am pus-o, dar una foarte bună, evident;) chiar dacă forma generală a curbei este sigură (dacă se poate spune așa), parametrii specifici s-ar putea să nu conducă la o curbă sigură de beton.
poncho avatar
drapel my
@kelalaka: de fapt, se poate demonstra că $G$ specific este la fel de puternic ca orice alt generator din acea curbă.
kelalaka avatar
drapel in
@poncho puternic în sensul cui? Poate că creatorul a generat un tabel de jurnal cât mai mult posibil pentru ei înșiși și încă merge. Ei bine, atunci când luăm în considerare dimensiunea curbei, avantajul lor nu va fi mai mult decât neglijabil, totuși, se consideră totuși că ar trebui să se dea motivul, așa cum este indicat pe curbele de siguranță (supravalorizate?). De ce nu primii $x$ ca în Curve25519? În cele din urmă, știm că numărul nimic în mâneca mea este fiziologic.
poncho avatar
drapel my
@kelalaka: în sensul puternic că, dacă puteți rezolva problema DLog (sau CDH) cu acel $G$ specific, puteți rezolva problema DLog (sau CDH) cu orice generator. Acest lucru este în contrast cu (să zicem) ecuația EC în sine; poate că au avut o slăbiciune specifică cu curbele $A=1$ în minte? Probabil: nu; pe de altă parte, nu avem nicio dovadă.
kelalaka avatar
drapel in
@poncho da, știu că putem converti orice bază dlog într-o altă bază pentru a rezolva acolo. Ceea ce vreau să spun, mai a implementat un index masiv dlog și cu mult înaintea oricui, apoi chiar și în acest caz, avantajul lor este neglijabil față de ceilalți atacatori. Da, pentru $A=1$, nu știm. Acest și altul motiv pentru a considera această curbă _oarecum rigidă_ Mic $A$ poate reduce unele calcule, ceea ce știu. Multumesc din nou.
poncho avatar
drapel my
@kelalaka: „Ce vreau să spun, mai a implementat un index dlog masiv și cu mult înaintea oricui”; acest lucru este adevărat independent de modul în care au selectat $G$; prin urmare, a avea o valoare non-NUMS nu o face mai probabil...
Puncte:3
drapel in
Concluzia

Curba STARK pare o alegere rezonabilă pentru ECDSA.

Curba STARK

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.

Codul SageMath
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ă.

oberstet avatar
drapel in
Fantastic =) Vă mulțumim foarte mult pentru analiza dumneavoastră profundă a unor proprietăți criptografice ale curbei STARK. Nu că înțeleg cu adevărat detaliile;) Dar cred că verifică (unele dintre) cele 11 steaguri pentru SafeCurves, ca în tabelul de prezentare generală de acolo. Oricum, am încercat să aflu alegerea lui G, am întrebat un tip de la Starkware: „Pentru alegerea generatorului, nu-mi amintesc... Pentru întrebări, o puteți întreba pe Daira Hopwood de la ZCash”: https://electriccoin .co/blog/people-behind-zcash-technology-daira-hopwood-engineer-and-protocol-designer/ https://github.com/daira
kelalaka avatar
drapel in
3 din listă sunt doar parametri, punctul de bază este despre rigiditate, nu totul este legat de securitate. Ladder întreabă despre Montgomery constant, cu toate acestea, Joyce ladder se ocupă de asta. Voi căuta punctul de bază, mulțumesc pentru indicare.
kelalaka avatar
drapel in
mai târziu, îi voi căuta pe ceilalți dacă pot...
oberstet avatar
drapel in
fwiw, iată mai multe fragmente din săpăturile mele: _cred_ că familia curbelor se numește "Barreto-Naehrig (BN)" https://eprint.iacr.org/2010/429.pdf. Nu am putut găsi parametrii specifici ai curbei STARK în https://neuromancer.sk/std/bn / https://tools.ietf.org/id/draft-kasamatsu-bncurves-01.html. zCash (un proiect diferit de Starkware), despre care băieții Starkware l-au sugerat, a folosit istoric BN254, dar a trecut la BLS12-381 în 2017 https://github.com/zcash/zcash/issues/2502 https://cp4space.hatsya .com/2020/12/27/barreto-naehrig-curves-and-cryptographic-pairings/
poncho avatar
drapel my
„Întorsătura... are aceeași cardinalitate implică aceeași securitate”; este comanda o răsucire un prim? Dacă nu, asta înseamnă că răsucirea are o securitate mai mică
kelalaka avatar
drapel in
@poncho Am descoperit că răsucirea are aceeași cardinalitate. Puteți verifica cu codul meu. Mă întreb acea parte, din moment ce nu am văzut o curbă ca asta.
kelalaka avatar
drapel in
@poncho și $G$ nu se află în mod clar în răsucirea curbei.
poncho avatar
drapel my
Cardinalitatea unei curbe plus cardinalitatea răsucirii acesteia se însumează întotdeauna la $2p+2$; acest lucru poate fi văzut deoarece, pentru orice coordonată x posibilă, corespunde la două puncte de pe curbă, sau la două puncte de pe răsucire, sau un punct pe ambele (dacă $y=0$, ceea ce nu se întâmplă pe această curbă ). Adaugă cele două puncte ale infinitului (unul pe curbă, unul pe răsucire) și ești acolo. Singurul mod în care acest lucru se poate întâmpla este dacă ordinea curbei este $p+1$, ceea ce nu este cazul acestei curbe.
kelalaka avatar
drapel in
@poncho este adevărat, că nu am verificat asta. Voi șterge acea parte până se rezolvă.
kelalaka avatar
drapel in
@poncho mulțumesc, nu știu de ce $d=5$ nu funcționează, am rezolvat problema cu quadratic_twist a lui SageMath, deși este mult mai lent.
kelalaka avatar
drapel in
@oberstet Nu poate fi curba BN deoarece $p \equiv 1 \bmod 4$, curbele BN necesită ca $p \equiv 3 \bmod 4$
oberstet avatar
drapel in
uh, corect. Bănuiesc că căutam prea mult un „nume oficial/corespunzător al curbei”;) btw, așa cum am sugerat, am scris-o pe Daria Hopwood (mai sus) prin Keybase și am inclus un link către postare aici. Sa vedem.
Ariel avatar
drapel cn
Referitor la „nimic în mânecă”, [generatorul](https://github.com/starkware-libs/starkex-resources/blob/44a15c7d1bdafda15766ea0fc2e0866e970e39c1/crypto/starkware/crypto.py/signature/L50Crypto) este secunda punct în acest [matrice](https://github.com/starkware-libs/starkex-resources/blob/44a15c7d1bdafda15766ea0fc2e0866e970e39c1/crypto/starkware/crypto/signature/pedersen_params), care este $digitul generat de #Ld25.json \pi$.
kelalaka avatar
drapel in
@Ariel mulțumesc pentru link-uri.
oberstet avatar
drapel in
@Ariel multumesc! Aș putea verifica că: scriptul `nothing_up_my_sleeve_gen.py` folosește într-adevăr Pi pentru a calcula G, iar fișierul JSON este exact rezultatul scriptului https://gist.github.com/oberstet/35b55f21a73a94fb1d1c13f4d6dd5323 https://github.com /starkware-libs/starkex-resources/blob/44a15c7d1bdafda15766ea0fc2e0866e970e39c1/crypto/starkware/crypto/signature/nothing_up_my_sleeve_gen.py#L56
Dan Carmon avatar
drapel us
@kelalaka $d=5$ nu a funcționat deoarece 5 _este_ un reziduu patratic modulo $p$ (ușor de verificat $p \equiv 1 \pmod 5$). În schimb, puteți lua $d=3$, care nu este un reziduu, deoarece $p \equiv 5 \pmod {12}$.
kelalaka avatar
drapel in
@DanCarmon uh. Atunci calculul meu QR a avut o greșeală. Mulțumiri. Le voi verifica pe amandoua din nou...

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.