BIP-327: MuSig2 多簽聚合
定義 MuSig2 協議,實現 Schnorr 多重簽章的密鑰和簽章聚合。
327
Standards Track
Draft
2022-03-22
摘要
MuSig2 是一個多重簽章方案,允許多個簽署者共同創建一個單一的 Schnorr 簽章。 最終的簽章和公鑰看起來與單一簽署者產生的完全相同,提供了極佳的隱私性和效率。
為什麼需要 MuSig2?
傳統多簽的問題
傳統的 OP_CHECKMULTISIG 需要在區塊鏈上暴露所有公鑰和簽章。 這不僅佔用空間增加費用,還暴露了參與者結構。
| 特性 | 傳統多簽 | MuSig2 |
|---|---|---|
| 鏈上公鑰數量 | N 個 | 1 個(聚合) |
| 簽章數量 | M 個 | 1 個(聚合) |
| 隱私 | 暴露結構 | 與單簽相同 |
| 費用 | 較高 | 與單簽相同 |
MuSig2 協議流程
MuSig2 是一個兩輪協議(相比 MuSig1 的三輪):
協議步驟
設置(一次性)
每個參與者 i 有私鑰 x_i,公布公鑰 X_i
計算聚合公鑰 X = KeyAgg(X_1, ..., X_n)
第一輪:Nonce 生成與交換
每個參與者生成隨機 nonce 並分享 nonce 公鑰
可以在知道消息之前預生成
第二輪:部分簽章
每個參與者使用自己的私鑰和 nonce 生成部分簽章
聚合所有部分簽章得到最終簽章
密鑰聚合
MuSig2 使用特殊的密鑰聚合函數,防止「惡意密鑰攻擊」:
# 密鑰聚合
L = H(X_1 || X_2 || ... || X_n)
a_i = H(L || X_i)
X = a_1·X_1 + a_2·X_2 + ... + a_n·X_n
每個公鑰都乘以一個係數 a_i,這個係數取決於所有參與者的公鑰列表。 這確保沒有人可以選擇一個「抵消」其他人的惡意公鑰。
安全性考量
Nonce 安全
Nonce 的安全使用至關重要。重用 nonce 或使用可預測的 nonce 會導致私鑰洩露。 MuSig2 設計允許 nonce 在不知道消息的情況下預生成,提高了實用性。
警告: 永遠不要重用 nonce! 在 Schnorr 簽章中,如果用相同的 nonce 簽署兩條不同的消息, 私鑰可以被直接計算出來。
並發會話攻擊
MuSig2 的兩輪設計可能受到並發會話攻擊。攻擊者可以同時發起多個簽名會話, 試圖提取受害者的私鑰。BIP-327 提供了緩解措施。
應用場景
- ✓ 多簽錢包:n-of-n 多簽看起來像單簽
- ✓ 閃電網路:通道開啟/關閉交易
- ✓ Taproot 密鑰路徑:聚合密鑰作為內部密鑰
- ✓ 原子交換:跨鏈交易簽章
- ✓ 門限簽章:結合 FROST 實現 t-of-n
與其他方案比較
| 特性 | MuSig1 | MuSig2 | FROST |
|---|---|---|---|
| 輪數 | 3 | 2 | 2 |
| 門限 | n-of-n | n-of-n | t-of-n |
| Nonce 預生成 | 否 | 是 | 是 |
| 複雜度 | 中等 | 中等 | 較高 |
實作狀態
- • libsecp256k1-zkp:參考實作
- • Bitcoin Core:開發中
- • LND / CLN:實驗性支援
相關 BIP
延伸閱讀: 查看 GitHub 上的完整 BIP-327 文件