Проблема
Допустим, я получаю подпись $(р,с)$, соответствующий открытый ключ и сообщение, которое было подписано. У меня нет доступа к секретному ключу. Мне нужно знать, что recid
(ID восстановления) соответствует открытому ключу. Единственное, что я могу сделать, это восстановить открытый ключ из подписи, используя множество библиотек и перепробовав все возможные способы. recid
значения (0 или 1, очень редко 2 или 3). Но мне было интересно, зачем мне пробовать несколько вариантов, а не просто вычислять их напрямую?
Теперь по этой статье...
http://coders-errand.com/ecrecover-signature-verification-ethereum/
... Я могу просто перевернуть формулу и заполнить все константы secpk256k1
изгиб:
https://en.bitcoin.it/wiki/Secp256k1
Поэтому я попытался подумать о том, как это будет реализовано. Отличие статьи от моей ситуации в том, что у меня уже есть публичный ключ $Q$. меня интересует $у$-паритет точки $[k]G$ ($Х$ в статье). я могу рассчитать $Х$ потому что у меня есть $Q$, $R$, $S$ и все постоянные значения, указанные в вики. Но тогда мне пришлось бы снова вычислять две точки:
\начать{выравнивать}
X &= \frac{(eG + rQ)}{s} \bmod n\
-X &= \frac{(eG + rQ)}{-s} \bmod n\
\end{выравнивание}
но именно паритет меня и интересует, т. -
. Однако теперь у меня было бы две точки, где 1 недопустима, потому что она принадлежала бы другому Вопрос
, и я не знаю, как проверить, какой из них правильный. Более того, сейчас я снова проверяю два момента, чего я и хотел предотвратить в первую очередь.
Вопрос
Мой вопрос: это единственный способ просто восстановить открытый ключ для нескольких recid
значения и сузить его до recid
для собственного открытого ключа? Или можно придумать формулу, где recid
находится на одной стороне, а другие термины на другой стороне, что-то вроде $recid$ $=$ $Q$... $G$... $г$ $s$... $e$