Dsa

ECDSA 恢復任意值

  • May 24, 2018

如果我要為 secp256k1 上的 ECDSA 恢復函式提供任意值,該函式是否有可能無法為公鑰返回某個值?

我專門嘗試為我不知道私鑰的乙太坊交易創建簽名(一次性使用交易)。請假設我將選擇簽名的值以優化成功(即,只輸入合理的值)。

編輯:為了澄清我想要實現的目標,請參閱這篇文章https://medium.com/@weka/how-to-send-ether-to-11-440-people-187e332566b7。總而言之:使用一些發明的簽名創建一個交易,對該簽名進行 ecrecover 以找到它的公鑰(和乙太坊地址),用另一個轉賬為該地址提供資金,然後最終送出原始交易。實現在不知道其私鑰的情況下從地址發送交易的最終結果。不是壓倒性的有用,但仍然很有趣。

是的。

非乙太坊橢圓曲線簽名產生的數字rs都需要在範圍 內[1,n-1],其中n是橢圓曲線基點的階數大小。請參閱Wikipedia - 橢圓曲線數字簽名算法

乙太坊交易簽名,使用 secp256k1 曲線(具有固定n值)並且需要數字v,rs. r具有與上述相同的範圍,但與標準橢圓曲線簽名不同,s僅限於該範圍[1, n/2+1](參見乙太坊黃皮書 - 附錄 F)。超出這些範圍的任何值都rs生成無效簽名。

假設我們堅持這個範圍內的值,我們還必須為乙太坊交易簽名提供一個r值。EIP-155指定或。s``v``v = CHAIN_ID *2 + 35``v = CHAIN_ID*2 + 36

r值表示 scep256k1 曲線上某個點的 x 值。從根本上說, 表示由 給出的點的 y 值(即相應的 x 值)v的奇偶校驗(偶數或奇數)。r這個奇偶校驗決定是否使用3536v上面的規範中。該值v用作 recoveryid 或recid此庫中用於第 89 行的 ECDSA 恢復,由 go-ethereum 使用。不正確v的值可能會使此恢復不正確並給出無效的結果公鑰。因此,如果要保持v固定,隨機化rs(或等效地,隨機化所有數字)在其有效性範圍內,我們假設獲得奇數或偶數的機會均等,我們預計平均 50% 的簽名是無效的(因為我們的奇偶校驗不正確) .

引用自:https://crypto.stackexchange.com/questions/59506