Vấn đề
Giả sử tôi nhận được một chữ ký $(r,s)$, khóa chung tương ứng và thông báo đã được ký. Tôi không có quyền truy cập vào khóa riêng. tôi cần biết những gì tái phạm
(Recovery ID) tương ứng với khóa chung. Một điều tôi có thể làm là khôi phục khóa công khai từ chữ ký bằng vô số thư viện và thử mọi cách có thể. tái phạm
giá trị (0 hoặc 1, rất hiếm khi 2 hoặc 3). Nhưng tôi đã tự hỏi, tại sao tôi lại thử nhiều phương án thay vì chỉ tính toán trực tiếp?
Bây giờ theo bài viết này ...
http://coders-errand.com/ecrecover-signature-verification-ethereum/
... Tôi chỉ cần đảo ngược công thức và điền vào tất cả các hằng số của secpk256k1
đường cong:
https://vi.bitcoin.it/wiki/Secp256k1
Vì vậy, tôi đã cố gắng nghĩ xem điều này sẽ được thực hiện như thế nào. Sự khác biệt giữa bài báo và tình huống của tôi là tôi đã có khóa công khai $Q$. tôi quan tâm đến $y$-Tính chẵn lẻ của Điểm $[k]G$ ($X$ trong bài viết). tôi có thể tính toán $X$ vì tôi có $Q$, $R$, $S$ và tất cả các giá trị không đổi được đưa ra trong wiki. Nhưng sau đó tôi sẽ phải tính toán lại hai điểm:
\begin{align}
X &= \frac{(eG + rQ)}{s} \bmod n\
-X &= \frac{(eG + rQ)}{-s} \bmod n\
\end{align}
nhưng chính xác là sự tương đương mà tôi quan tâm, -
. Tuy nhiên, bây giờ tôi sẽ có hai điểm, trong đó điểm 1 không hợp lệ vì nó thuộc về một điểm khác Hỏi
và tôi không biết cách xác minh cái nào là chính xác. Hơn nữa, bây giờ tôi đang kiểm tra lại hai điểm, đó là điều mà tôi muốn ngăn chặn ngay từ đầu.
Câu hỏi
Câu hỏi của tôi là, cách duy nhất để khôi phục khóa chung cho nhiều tái phạm
giá trị và thu hẹp nó xuống tái phạm
cho khóa công khai của riêng bạn? Hoặc là nó có thể đưa ra một công thức, trong đó tái phạm
ở một bên và các điều khoản khác ở phía bên kia, đại loại như $tái phạm$ $=$ $Q$... $G$... $r$ $s$... $e$