Schnorr-Signatures

Musig 中的 R/r 可以僅從種子和消息雜湊派生嗎?

  • October 11, 2020

我想知道在 MuSig 簽名中預送出和揭示 R/r 的前兩次往返是否可以移至密鑰生成階段並具有確定性。這減少了需要交換的消息數量;由於 keygen 只完成一次,我們希望擴展該階段。這對於 HD 錢包特別有用:以使錢包創建更加複雜為代價,簽名將需要更少的互動。

第 10-11 頁的 musig 論文指定了以下內容(從簽名者 1 的角度來看)

MuSig 方案

密鑰生成

  1. 生成私鑰 x 1和對應的公鑰 X 1
  2. 發送 X 1
  3. 接收 X i

簽署(特別是關於同意 R i的部分)

  1. 發送 t 1 =H com (R 1 )
  2. 收到 t我
  3. 發送 R 1
  4. 接收 R i
  5. 檢查 H com (R i )==t i

r 1被指定為隨機的。簽名包括三輪互動,其中兩輪用於上述步驟(同意 R i)。我想將這些步驟移至 keygen 階段。


HD 錢包可能會使用 BIP32 來生成 X 1。我們也可以使用 BIP32 來推導 R i /r i嗎?

請考慮以下方案。(從 cosigners 1 的角度來看)

提議的高畫質方案

高畫質錢包設置階段

  1. 生成 xprv y 1和對應的 xpub Y 1
  2. 生成 xprv k 1和相應的 xpub K 1
  3. 發送 xpub Y 1
  4. 發送 u 1 =H(K 1 )
  5. receives xpub Y i
  6. 收到你我
  7. 發送 xpub K 1
  8. 接收 xpub K i
  9. 檢查 H(K i )==u i

密鑰生成

  1. 從 xprv y 1沿著一些 BIP32 路徑 p,導出私鑰 x 1和公鑰 X 1
  2. 從 xpub Y i沿著相同的 BIP32 路徑 p,導出公鑰 X i
  3. 從 xprv K 1沿著相同的 BIP32 路徑 p,導出私鑰 j 1和公鑰 J 1
  4. 從 xpub K i沿著相同的 BIP32 路徑 p,導出公鑰 J i。

簽署(特別是關於同意 R i的部分)

  1. 計算 r 1 =j 1 +hash(m) 和 R 1 =J 1 +hash(m)*G
  2. compute R i =J i +hash(m)*G

這種方法在簽名期間只有一輪互動(發送 s i,省略,因為它與論文中描述的內容沒有變化)。

我已經閱讀了去隨機化部分,但解釋為什麼它不起作用需要攻擊者選擇R i 。如果我們使其確定性派生,並且 BIP32 是安全的,則此攻擊不適用。該論文指出“每個簽名者必須確保每當其他共同簽名者發送的任何 R j或消息m發生變化時,他的 ri值都會發生不可預測的變化。只要 f 是確定性的,這意味著在選擇隨機值時存在循環依賴性。”

這個循環依賴在哪裡?RFC 6979 中的 f 僅取決於 key 和 m。

只要您不簽署超過一條消息,您建議的結構可能會起作用。通過提前有效地選擇 R 點,您已經建構了單次顯示簽名。

但是,您用於不同 R 值的推導是沒有意義的。不重用 R 值是不夠的;您也不能使用多個相關的 R 值。您正在建構的所有 R 值都通過一個線性方程相關聯。這足以讓攻擊者(知道這種關係)從看到兩個簽名中導出私鑰。

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