帶有 Schnorr 簽名的 2-of-3 多重簽名
據我了解,Schnorr 簽名將允許 n-of-n 多重簽名交易,但是僅使用密鑰路徑不可能實現 m-of-n。
或者是嗎?
假設我們需要一個 2-of-3 方案。據我所知,我們可以使用 3-of-3 方案,只需給每一方三個密鑰中的兩個,這樣任何兩方在組合時都將擁有所有三個密鑰。(一方得到密鑰 A 和 B,另一方得到 B 和 C,最後一方得到 A 和 C。)
這種方法行得通嗎?有什麼我看不到的問題嗎?
據我了解,Schnorr 簽名將允許 n-of-n 多重簽名交易,但是僅使用密鑰路徑不可能實現 m-of-n。
這不太準確。如 BIP340 中所述,Schnorr 簽名是純粹的 1-key-1-signature。
存在與 BIP340 驗證兼容的替代方案。
- 一種是 MuSig (1,2,DN),它允許 n-of-n 簽名,可針對單個聚合公鑰進行驗證,該公鑰代表所有組成密鑰的協議。
- 另一個是 FROST,它允許任意 k-of-m 門檻值,類似地可針對單個密鑰進行驗證。然而,它需要一個互動式設置,其中(潛在的)共同簽名者需要合作(同時可以訪問他們的私鑰)來建構聚合密鑰,因此它與例如擁有一個地址是動態派生的多重簽名錢包不兼容使用 BIP32 密鑰。它也缺乏問責制:事後您無法分辨出哪些方簽署了。
假設我們需要一個 2-of-3 方案。據我所知,我們可以使用 3-of-3 方案,只需給每一方三個密鑰中的兩個,這樣任何兩方在組合時都將擁有所有三個密鑰。(一方得到密鑰 A 和 B,另一方得到 B 和 C,最後一方得到 A 和 C。)
這種方法行得通嗎?有什麼我看不到的問題嗎?
是的,這是可能的。如果你在一台機器上生成所有 3 個密鑰,你會得到一個有點無趣的安全模型,因為顯然你所有 3 個都有一台你信任的機器可以誠實地生成密鑰。您可能同樣同意讓該機器進行簽名。
您建議的一種變體可能更有趣:3 方中的每一方生成 1 個密鑰,並將私鑰提供給他們的右手鄰居。現在其中 2 個的任何子集都具有所有 3 個鍵。
存在更多這樣的方案。最簡單的一種是不負責任的互動式設置 1-of-n 方案:一方生成一個新密鑰,並將其提供給所有其他方。完畢。
我不建議使用它,雖然看似簡單,但細節是確保此類方案安全的關鍵,您最好使用 FROST 或類似的東西,因為它已得到很好的分析。
如果您想要問責製或非互動式設置(無需線上簽名者密鑰即可生成地址的能力),這些方法都不夠,您可能應該使用(在 BIP341 的上下文中)一棵樹,其中每個葉子都是一個2-of-2 musig 聚合 2-of-3 子集。