Puncte:0

Este posibil să se calculeze direct ID-ul de recuperare dintr-un mesaj, semnătură și cheie publică în ECDSA/secp256k1?

drapel ca

Problemă

Să presupunem că primesc o semnătură $(r,s)$, cheia publică corespunzătoare și mesajul care a fost semnat. Nu am acces la cheia privată. Trebuie să știu ce recid (ID de recuperare) este cel care corespunde cheii publice. Un lucru pe care îl pot face este să recuperez cheia publică din semnătură folosind o multitudine de biblioteci și încercând tot posibilul recid valori (0 sau 1, foarte rar 2 sau 3). Dar mă întrebam, de ce aș încerca mai multe opțiuni în loc să le calculez direct?

Acum, conform acestui articol... http://coders-errand.com/ecrecover-signature-verification-ethereum/

... Pot pur și simplu să inversez formula și să completez toate constantele lui secpk256k1 curba: https://en.bitcoin.it/wiki/Secp256k1

Așa că am încercat să mă gândesc cum va fi implementat acest lucru. Diferența dintre articol și situația mea este că am deja cheia publică $Q$. Sunt interesat de $y$-paritatea Punctului $[k]G$ ($X$ in articol). pot calcula $X$ pentru că am $Q$, $R$, $S$ și toate valorile constante date în wiki. Dar atunci ar trebui să calculez din nou două puncte:

\begin{align} X &= \frac{(eG + rQ)}{s} \bmod n\ -X &= \frac{(eG + rQ)}{-s} \bmod n\ \end{align}

dar este exact paritatea care mă interesează -. Totuși, acum aș avea două puncte, unde 1 este invalid pentru că ar aparține unui alt Q, și nu aș ști cum să verific care dintre ele este corectă. În plus, acum verific din nou două puncte, ceea ce am vrut să prevenim în primul rând.

Întrebare

Întrebarea mea este, este singura modalitate de a recupera pur și simplu cheia publică pentru mai multe recid valori și restrângeți-l la recid pentru propria ta cheie publică? Sau este posibil să vină cu o formulă, unde recideste pe o parte și ceilalți termeni pe cealaltă parte, ceva de genul $recid$ $=$ $Q$... $G$... $r$ $s$... $e$

kelalaka avatar
drapel in
Nu aveți cheia publică în care $y$ este deja menționat?
CoderApprentice avatar
drapel ca
@kelalaka După cum am înțeles eu, recid-ul se referă la y-paritatea punctului kG = (x,y) = X (unde k este ales aleatoriu în timpul semnării și G este generatorul secp256k1) și nu y-paritatea a cheii publice.
Puncte:1
drapel gb

Din păcate, nu cred că este posibil fără doar a testa care funcționează. Asta pentru că $[s]R$ și $[-s](-R)$ sunt același punct de curbă și ambele $R$ și $-R$ au aceeași coordonată x $r$, asa de $(r, s)$ și $(r, -s)$ sunt ambele semnături valide sub aceeași cheie publică $Q$. Nu există nicio modalitate de a determina dintr-o astfel de semnătură dacă $R$ sau $-R$ trebuie folosit în recuperare, pentru că nu cunoști secretul nonce $k$. Deci, trebuie doar să testați ambele posibilități și să găsiți pe cea care funcționează.

(Dacă altcineva știe un mod inteligent de a face acest lucru pe care mi-o lipsește, sunt bucuros să fiu corectat!)

CoderApprentice avatar
drapel ca
Ei bine, asta are sens. Bănuiesc că ceea ce fac aici este să calculez 2 coordonate care sunt ambele valabile pentru aceeași cheie publică, dar de fapt trebuie să găsesc ce cheie publică corespunde cheii private care a semnat mesajul. Am încercat să găsesc o formulă astfel încât recid = , dar recid nu face parte de fapt din formule. Deci (x,y) pe care o dorim de fapt depinde de care `k` a fost ales în timpul semnării? Și acesta este un număr pe care nu îl putem afla niciodată dacă nu avem cheia privată.
meshcollider avatar
drapel gb
Corect. Nici măcar nu sunt sigur dacă recid este standardizat oriunde sau doar depinde de implementare. Știu că [libsecp256k1](https://github.com/bitcoin-core/secp256k1) folosește primul bit pentru a indica o coordonată y impară (când este setată la 1) și al doilea bit (când recid = 2 sau 3) indică faptul că coordonata x a depășit ordinea grupului.

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.