Schnorr-Signatures
攤銷 MuSig 的互動式會話設置有哪些限制?
我試圖找到一種方法來攤銷MuSig簽名聚合方案中的互動式會話設置。我的動機是在使用低頻寬(無線電)通道進行通信的設備之間使用簽名聚合,而無需多次進行會話設置。理想情況下,預共享的公共隨機數可以用於不同的簽名者集、公鑰和消息。
我在下面總結了我現在如何理解它的工作原理,主要是通過查看這裡的程式碼範例:
- 每個對等點從簽名者公鑰集的散列和對等點公鑰的密鑰(獨立於隨機數)創建每個會話的密鑰
- 每個對等點從簽名者的公鑰和其他散列資訊(包括隨機數)創建一個秘密隨機數
- 每個對等點都會創建一個公共 nonce,就像從秘密 nonce生成的公鑰一樣。
- 所有對等點向所有其他對等點發送一個 32 字節的隨機數承諾
- 所有對等點向所有其他對等點發送他們的 32 字節公共 nonce,並根據他們之前共享的nonce 承諾驗證其他對等點
關鍵點似乎是在學習了其他簽名者的公共****隨機數之後,任何人都不應該自由選擇公共隨機數
- 現在每個對等點都可以使用他們的會話密鑰和秘密隨機數進行簽名
- 其他對等方可以使用其他簽名者選擇的公鑰及其相應的公共隨機數來驗證最終(或部分)多重簽名。
- 我想知道的是,公共隨機數是否可以由所有對等方提前送出一次,然後再用於(公鑰、其他對等方公鑰、消息)的不同組合。
似乎對等方可以記憶體彼此的公共隨機數,並在具有不同公鑰和其他簽名者的不同簽名會話中重用它們,只要所有簽名者每次簽名時都被迫使用相同的公共隨機數。
任何有關重用這些 MuSig公共隨機數的限制的指針都將不勝感激。
**不能重複使用隨機數!**特別是,在 MuSig 中,nonce 不能重複用於公鑰或消息的其他組合(即使每個人都一直使用相同的 public nonces)。這會洩露私鑰。
您可以通過並行執行多輪簽名來預先共享新的隨機數。使用您連結到的庫 ( secp256k1-zkp ),只要您將會話狀態保存在記憶體中並且不複製它,這就是安全的。secp256k1-zkp 不支持序列化狀態並將其儲存在持久性介質上,並且很難正確處理,因為如果您不小心使用了錯誤的 nonce,就會洩露私鑰。
消除前兩輪互動成本的直接方法是將 nonce 承諾和 nonce 附加到協議中已經存在的消息中。這樣,您將只有兩個並行簽名會話。
正在對 MuSig 的確定性隨機數進行研究,這些隨機數具有零知識證明,即隨機數是正確推導的。有了這樣的證明,隨機數可以根據需要從簽名者集、您的私鑰和消息中導出,並且沒有需要跟踪的狀態。