Ecdsa

是否存在 recid (v) 等於 29,30(或 33,34 壓縮)的簽名?

  • November 14, 2015

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=29v=30. 為什麼是這樣?是設計使然,還是只是一個非常低機率的事件?

對於隨機簽名,這是一個極低機率的事件。大約 2 128分之一,所以它可能永遠不會真正發生。

但是,您可以輕鬆地建構具有其中之一的有效簽名,並且恢復算法將為您提供一個實際的公鑰。它只是不會是任何人真正知道其密鑰的公鑰。

引用自:https://bitcoin.stackexchange.com/questions/41359