Signature

生成具有一定數量前導零的 ECDSA(或 Schnorr)簽名有多難?

  • October 19, 2019

如果公鑰和私鑰都是提前****知道的(公共知識),並且目標是選擇一個生成簽名的消息/隨機數,例如,具有一定數量的前導零,這是否類似計算對傳統的工作量證明具有挑戰性的任務,因為它“很難找到”但“(相對)容易驗證?”

似乎答案應該是“是”,因為如果答案是“否”,那麼(我認為?)這意味著簽名對於不同的消息不是偽隨機統一的。

或許更簡潔地說,簽名本身是否也可以代表有針對性的工作量證明?

最後,當使用的簽名方案是 Schnorr 而不是 ECSDA 時,上述任何一項的答案是否會發生變化?

編輯:似乎適配器簽名[1] 可能基本上允許這樣做,但我對它們的工作方式知之甚少,無法確定。[1] <https://github.com/ElementsProject/scriptless-scripts>

如果您只是在解釋為非常大的整數時只使用前導零或最低值,則不會。

為了使事情更容易,我們假設您使用緊湊簽名,它們只是簽名Rs值相互連接,而不是其他簽名格式,這些格式具有額外的周圍格式化字節,會干擾直接比較。

緊湊的簽名格式只是連接Rs值。然而,一旦有人找到有效的 PoW,這將是一個容易被破壞的 PoW 方案,而那個人將永遠是贏家。這是因為該R值只是隨機數的 X 座標乘以曲線的生成點。如果有人找到一個R適用於 PoW 的值,他們可以繼續重複使用該隨機數,並且始終具有相同的有效 R 值。所以這顯然是壞的。

s但是,如果您通過檢查該值是否低於目標值來比較 PoW 的比較值,那麼您就更聰明了。該s值是使用包括隨機數、消息雜湊和私鑰的公式計算的。在 Schnorr 中,還有多個雜湊和 EC 曲線點乘法,這有助於使其更加隨機。所以s應該是偽隨機的。

但是基於簽名的 PoW 還有一些其他問題,儘管這些問題更多地針對 ECDSA,而不是一般的簽名。

要驗證的公鑰必須是已知的,並且必須是“正確的”。這意味著你不能只是讓每個參與 PoW 的人都提供自己的公鑰,它需要是一些固定的公鑰,並且每個人都必須知道私鑰。

這是因為,給定一個 ECDSA 簽名和一條消息,您可以計算一個公鑰來驗證該簽名和消息的組合。這就是為什麼在驗證簽名之前知道公鑰很重要的原因。請注意,這對於所提議的 Schnorr 簽名方案是不可能的,因為不可能用它進行公鑰恢復。

經過驗證的消息必鬚髮布並散列。這很明顯,因為它是任何 PoW 算法的關鍵部分。但特別是使用 ECDSA,給定簽名和公鑰,您可以計算會產生有效簽名的消息雜湊。這就是為什麼消息是經過散列的東西而不僅僅是放入簽名算法的值很重要的原因。使用 Schnor 簽名應該不可能做到這一點。

因此,只要您正在檢查s而不是R實際的 PoW 檢查,您就可以將簽名用作 PoW。我建議您使用 Schnorr 簽名而不是 ECDSA。

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