Schnorr-Signatures

Musig 簽名互動

  • November 8, 2019

2個問題:

  • 為什麼 Musig 簽名總是互動的?
  • 假設我有一個 Musig 錢包,其中密鑰儲存在無法訪問網際網路的安全位置。考慮到 Musig 互動性限制,有哪些方法可以從這些安全的離線位置進行簽名?

MuSig 是互動式的,因為每個簽名者在簽名之前都需要提供一個簽名隨機數(實際上是隨機性)。這不是 MuSig 特有的,但據我所知,它適用於任何基於離散對數的多重簽名方案。

現在要了解為什麼需要多輪溝通,讓我們看看每一輪會發生什麼,從最後一輪,第三輪開始:

  • 第 3 輪每個參與者使用他們的密鑰創建一個部分簽名。部分簽名的總和是最終簽名。為了計算總和,簽名者必鬚髮送他們的部分簽名。那是一輪溝通。
  • 第 2 輪為了創建部分簽名,簽名者必須計算組合公共 nonce R的雜湊值。這是單個簽名者的 nonces 的總和R_i。隨機數有點類似於公鑰,因為它們是隨機點,其他人都不知道其離散對數廣播R_i是另一輪。
  • Round 1第一輪的原因是最難理解的。如果簽名散列僅由R_i’ 的總和組成,那麼攻擊者將可以控制散列函式的結果。例如,攻擊者可以首先收集所有其他簽名者R_i,然後選擇他的R_j,使得雜湊輸出為奇數。這個具體的例子對攻擊者沒有幫助,但他也可以用類似的方式進行Wagner 的攻擊,從而導致簽名偽造。這就是為什麼在第一輪中,簽名者發送他們的 nonces 的承諾(例如SHA256(R_i))。因此,他們必須在看到其他 nonce 之前選擇他們的 nonce,因為它們只會在第 2 輪中顯示。

雖然這是一個相對複雜的舞蹈,很多事情都可能出錯,但我們在libsecp256k1-zkp中的實現應該是抗誤用的,前提是你

  1. 永遠不要重複使用會話 ID。id 可以是密碼隨機數生成器或原子計數器的輸出。
  2. 永遠不要複製簽名會話狀態。否則,隨機數將被重用,導緻密鑰直接洩露。此外,它允許主動攻擊,例如瓦格納的攻擊。

現在應該很容易看出,使用 MuSig 進行離線簽名很困難。在關閉簽名設備之前,您需要將活動的 MuSig 會話儲存在永久性介質上。這實際上是國家的副本,非常危險。您需要確保在再次啟動時載入正確的會話狀態,而不是損壞或舊的或錯誤的會話。出於這個原因,libsecp256k1-zkp 實現現在不支持序列化會話狀態。但是,對於如何設計一種最大限度地防止誤用的序列化格式,有一些想法。

另一個方面是,nonce 承諾可以在消息已知之前安全地“預共享”。這意味著在設置離線簽名設備時,您會並行啟動多個會話並交換 nonce 承諾。然後,當你想簽署一筆交易時,你只需要去那裡兩次,第一次得到實際的 nonce,然後得到一個部分簽名。如果您在遠端位置只有一台設備,則可以將其設置為只去那裡一次(通過在去那裡時準備好所有其他已取消送出的隨機數)。重要的是要注意,與 nonce 承諾相反,nonce 不能預先共享,因為這將允許另一個 Wagner 的攻擊。

正在進行研究以有效地消除隨機數承諾輪和零知識證明的整個會話狀態。這對於離線簽名案例來說是令人興奮的,但當然也帶來了更高的實現和計算複雜度。

引用自:https://bitcoin.stackexchange.com/questions/91534