Schnorr 聚合簽名可以嵌套在其他 Schnorr 聚合簽名中嗎?
我理解 Schnorr 簽名的方式是多方可以將他們的簽名組合成一個共享簽名,從而混淆了簽名方案中涉及的參與者的數量。
我想知道:其中一個簽名本身是否可能是一個聚合簽名?我們可以繼續在多個層次上進行嗎?
編輯:這是一個圖表來澄清我的問題。灰色節點代表聚合簽名,黑色節點代表密鑰/實體。在這個例子中,A 不一定需要知道隱藏在 K2 之下的所有復雜性。
TL;DR:根據您的意思,可能沒有已發布的帶有安全證明的方案,但這樣的方案是有希望的。
首先,一些澄清
聚合只是一個概念,而不是實際的協議,並且有很多方法可以實現。由於 Schnorr 的線性特性,它變得非常簡單,但方案的安全性取決於協議的具體細節,無法籠統地回答。
簽名聚合和密鑰聚合不是一回事,也許你會混淆它們:
簽名聚合是多個簽名者聯合生成單個緊湊簽名的能力,該簽名可以由知道所有公鑰和消息的驗證者進行驗證(因為每個簽名者都可以選擇自己的消息)。雖然可以建構Schnorr 簽名變體的簽名聚合,但比特幣的 Schnorr 功能 ( BIP340 ) 不支持這一點。
多重簽名方案類似於簽名聚合方案,只是所有簽名者都在對同一消息進行簽名。請注意,這與比特幣上下文中所謂的“多重簽名”不同。
密鑰聚合是一種多重簽名方案,其結果可以由只知道一些密鑰聚合的驗證者驗證。BIP340 以 MuSig 系列算法( MuSig、MuSig2、MuSig-DN)或MSDL- pop的形式與這些兼容(因為驗證器是一個簡單的 Schnorr 驗證器,可以看到單個密鑰)。但是,重要的是要注意這些協議由多種算法組成:
- 有一個密鑰聚合函式,它給定多個公鑰,計算這些公鑰的聚合密鑰(通常不僅僅是將密鑰相加)。
- 有簽名協議,它通常由簽名者(2 或 3)之間的多輪互動組成,最終結果是對聚合密鑰有效的單個簽名。這不僅僅是“添加簽名”,並且讓事情神奇地工作。
定義你的問題
我將您的問題解釋如下:
是否存在與比特幣的 BIP340 簽名兼容的安全密鑰聚合方案,其中可以在簽名者不知道其“侄女/侄子”密鑰的情況下分層聚合密鑰(即,允許使用密鑰
agg(B,K1)
where簽名K1=agg(C,D)
,但B
不需要知道其本身或和)K2
的同一性是一個聚合的事實。C``D
這個“不知道”部分是必不可少的。沒有這部分,存在一個簡單的解決方案:只需“展平”所有嵌套(即,將其轉換為
agg(B,C,D)
上面範例中的簽名)。請注意,所有 Schnorr 密鑰聚合方案都要求籤名者至少知道他們要簽名的聚合密鑰,並與他們的共同簽名者進行互動,因此在簽名者不了解的情況下肯定不可能完成甚至他們的兄弟姐妹。
回到你的問題
據我所知,沒有發布的方案實際上描述了嵌套設置中的安全性。
但是,MuSig2實際上是專門為與嵌套兼容而設計的。MuSig2 論文沒有描述嵌套,因為嵌套結構還沒有安全證明(由 Tim Ruffing 在下面的評論中確認),而且 MuSig2 相對於 MuSig 的其他優勢使其值得單獨發表。(我從與論文作者的私人交流中知道這一點)。
這意味著修改 MuSig2 方案以執行您的要求是相當簡單的(但是,請注意,沒有公開的安全證明,因此雖然它可能會產生有效的簽名,但這並不意味著它不會讓簽名者受到攻擊):
- 聚合函式允許嵌套(即,可以應用於本身是聚合結果的鍵)。
- 在第一輪簽名中,層次結構的“葉子”正常產生 2(或 4)個隨機數,並將它們“向上”發送到樹。樹的內部節點只需逐點添加它們(即,給定來自子簽名者 a 和 b 的 (R1a, R2a), (R1b, R2b),在 (R1a+R1b, R2a+R2b) 上發送)。
- 在第二輪簽名中,乘數不僅僅取決於聚合密鑰,還取決於簽名者和樹根之間的所有中間聚合密鑰。
這在 MuSig (1) 中是不可能的,因為它有一個預先承諾輪,所有簽名者都會發布他們將要使用的隨機數的雜湊值。給定“孩子”的隨機數的雜湊值,您無法計算它們總和的雜湊值。眾所周知,在執行父節點的第 1 輪之前先執行子節點的第 1 輪和第 2 輪來避免這個問題是不安全的(其他簽名者可能會欺騙您以這種方式洩露您的私鑰)。