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 recid
este pe o parte și ceilalți termeni pe cealaltă parte, ceva de genul $recid$ $=$ $Q$... $G$... $r$ $s$... $e$