Schnorr 簽名:多簽名支持
Schnorr 簽名被認為是對比特幣的有希望的升級,以提高可擴展性。它支持多重簽名,多個簽名可以聚合成一個新的簽名。但我找不到任何關於如何在數學上實現這一點的資訊。
我對“幾個簽名可以聚合成一個新簽名”語句的一些問題:
1)是否可以使用不同的私鑰生成“幾個簽名”?
2)如果(1)為真,“單一新簽名”可以用來驗證所有不同私鑰簽名的消息嗎?這是如何運作的?
有沒有關於這個主題的論文發表?
這是一個簡單的基於 Ed25519 的多重簽名或集體簽名方案,其中 Alice 和 Bob 都有自己的私鑰,彼此保密,必須共同創建一個聯合簽名,驗證者知道他們的兩個公鑰,或者只有一個聯合公鑰,可以驗證。這是對最近 IETF 網際網路草案的簡化,草案-ford-cfrg-cosi,目前正在由 CFRG 審議。
$ \newcommand{\F}{\mathbb{F}}\newcommand{\Z}{\mathbb{Z}}\newcommand{\concat}{\mathop{\Vert}}\newcommand{\U}[1]{\underline{#1}} $ 讓 $ p = 2^{255} - 19 $ , 一個素數; 讓 $ E $ 是橢圓曲線$$ -x^2 + y^2 = 1 - \frac{121665}{121666} x^2 y^2 $$超過 $ \F_p $ (edwards25519,扭曲的 Edwards 曲線雙有理地等效於 Ed25519 簽名方案中使用的 Curve25519);讓 $ P $ 成為獨一無二的 $ \F_p $ - 理性點 $ E $ 誰的 $ x $ 座標是 4/5 並且其 $ y $ 座標為“正”,讓 $ \ell $ 成為它的命令;讓 $ H $ 是從字節字元串到函式的統一隨機選擇 $ \Z/\ell\Z $ ; 讓 $ \U Q $ 是一個點的一些字節串編碼 $ Q \in E(\F_p) $ .
首先,Alice 選擇一個秘密標量 $ a \in \Z/\ell\Z $ 和一個秘密的 32 字節散列密鑰 $ h_a $ ,並共享點的編碼 $ A = [a]P $ . 鮑勃也這樣做 $ b $ , $ h_b $ , 和 $ B $ . 他們的聯合公鑰的編碼是 $ A + B $ .
消息上的Alice/Bob 簽名 $ m $ 是一個點的編碼 $ R \in E(\F_p) $ 和一個標量 $ s \in \Z/\ell\Z $ 這樣$$ [s]P = R + [H(\U R\concat \U{A+B}\concat m)](A + B). $$
愛麗絲和鮑勃如何創造出這樣的野獸?首先,Alice 計算 $ r_a = H(h_a\concat u_a \concat m) $ 在哪裡 $ u_a $ 是一個獨立的統一隨機 32 字節字元串,並保持 $ r_a $ 秘密但分享 $ R_a = [r_a]P $ ; Bob 與 $ r_b $ 和 $ R_b $ . 然後他們各自計算 $ R = R_a + R_b $ . 接下來,Alice 計算$$ s_a = r_a + H(\U R\concat \U{A+B}\concat m),a, $$Bob 計算 $ s_b $ 相似地。最後,為了送出簽名創建,他們共同計算 $ s = s_a + s_b $ 並揭示 $ R $ 和 $ s $ .
這是一個 Alice/Bob 簽名,因為
$$ \begin{align*} [s]P &= [s_a + s_b]P \ &= [r_a + r_b + H(\U R\concat \U{A+B}\concat m),(a + b)]P \ &= [r_a]P + [r_b]P + [H(\U R\concat \U{A+B}\concat m)][a + b]P \ &= R_a + R_b + [H(\U R\concat \U{A+B}\concat m)]([a]P + [b]P) \ &= R + [H(\U R\concat \U{A+B}\concat m)](A + B). \end{align*} $$
與兩個 Ed25519 簽名的簡單連接需要 128 個字節的儲存空間不同,Alice/Bob 簽名只需要 64 個字節的儲存空間,無論您添加多少額外的簽名者,這種情況仍然存在。方便的是,得到的 Alice/Bob 簽名也是公鑰下的 Ed25519 簽名 $ \U{A+B} $ ,因此您可以使用現有的 Ed25519 驗證器對其進行驗證。
(安全分析留給讀者作為練習。 *提示:*假設邪惡的 Bob 知道 Alice 的公鑰 $ A $ 在兩人共同公佈聯名密鑰之前 $ P $ . 在這種情況下,鮑勃會做出什麼邪惡的行為?如果 Alice 的隨機數生成器在她簽名時被楔入,那麼它會返回相同的 $ u_a $ 每次,Bob 怎麼能利用它對 Alice 做一些邪惡的事情?)
該方案具有多種性質:
- 每一方的簽名部分是由另一方不知道的不同私鑰生成的。
- 各方必須同意簽名才能被驗證者接受。我們可以輕鬆地擴展簽名的定義以包含簽名者列表,並讓驗證者在接受簽名之前需要一些簽名者門檻值,代價是儲存簽名的一些額外空間(如在draft-ford-cfrg -cosi )。
- 如果我們因此將其調整為門檻值方案,那麼確實簽署它的可能簽名者的子集對於驗證者來說將不會是匿名的。
多重簽名的主題有多種變化:簽名者是否彼此匿名,是否有門檻值,如果有門檻值,是否向驗證者透露了可能簽名者的子集?你必須仔細查看比特幣的方案到底是什麼,才能看到它提供了哪些屬性。有關更多背景資訊,您可以閱讀Micali、Ohta 和 Reyzin 介紹 Schnorr 多重簽名的論文,或Bellare 和 Neven 對此的闡述。