Ecdsa
是否存在 recid (v) 等於 29,30(或 33,34 壓縮)的簽名?
Peter Wuille 最近解釋了 ECDSA 公鑰恢復是如何完成的,以回答我的問題。
所以基本上對於給定的base64簽名,值
v
提供v,r,s
了特定的座標,因此是recid
(恢復ID)。來自BitcoinCore 測試向量的範例:
> sig = > "H8PgOb/liZzt3QQHJn9kLBqH7E/i+SC6JTwYGtdNdOjnXzFqXnHMZqP7oZ1wb1QiQ3H/kF8xC9Yx7pK9ddlx8TA" > addr = "1K5Z1nxN4mjUgCLpSXMRkeZxuAMpbn2CQB" wif = > "KwfJTiKdcjNMjBu4ksgGd21EZXz6JomoZNbirP3nfd3K9ZMXMEUi" > > v,r,s = vrs = (31, > 88597177789312009809148107221292570613390338668815747761545214128303675599079L, > 43057030252916568867525408201971649068117337291455262356277580652864892694832L)
v 的值
27 + recid
用於未壓縮的密鑰和31 + recid
壓縮的密鑰。我已經使用pybitcointools執行了一個 Python 循環,它使用隨機密鑰對消息進行簽名,但我還沒有看到
v=29
或v=30
. 為什麼是這樣?是設計使然,還是只是一個非常低機率的事件?
對於隨機簽名,這是一個極低機率的事件。大約 2 128分之一,所以它可能永遠不會真正發生。
但是,您可以輕鬆地建構具有其中之一的有效簽名,並且恢復算法將為您提供一個實際的公鑰。它只是不會是任何人真正知道其密鑰的公鑰。