Schnorr-Signatures

在 MuSig2 中如何定義座標的乘法?

  • July 15, 2022

在此處輸入圖像描述

在 MuSig2論文中,每個簽名者將所有 nonce 相乘(在樸素版本中):

R_1 * R_2 * R_3 * …. R_n

哪裡R_i = r_i * Gr_i是標量,G 是生成點(座標),因此R_i是座標。

並且所有的公鑰(座標)相乘:

X_1 * X_2 * X_3 * …. X_n

這裡定義的乘法(在循環群上)是通過將 x 座標相乘和 y 座標相乘來定義的嗎?

e.g. (x_1, y_1) * (x_2, y_2) = (x_1 * x_2, y_1 * y_2)

它不像BIP340bytes()中的函式用於通過獲取 x 座標將座標轉換為標量,x 座標相乘並丟棄 y 座標(最終的 y 座標可以稍後計算,我猜從最後x座標)?

編輯:我在 MuSig2(安全版本)草案 BIP中查找了 KeyAgg 函式,並指出聚合密鑰不是通過乘以公鑰來計算的,而是與唯一係數相加。我很困惑。我們是否從產品(樸素版本)轉移到具有唯一係數的總和(安全版本)?

Q = a1⋅P1 + a2⋅P2 + ... + au⋅Pu

TL; DR:您所詢問的乘法運算實際上是您習慣於看到的稱為點加法(在談論橢圓曲線時)。

MuSig2 論文不假設您使用的是橢圓曲線組,甚至不假設所操作的對象具有“座標”的概念。該方案是通用的,適用於假設離散對數很難的任何循環組。這可以用像 secp256k1 這樣的橢圓曲線組來實例化,但它也適用於非常不同的組。

具體來說,這意味著:

  • 我們需要一組有限的元素,至少包含一個“中性元素” o和一個“生成器” g
  • 必須為所有接受兩個參數的元素定義一個函式;因為它的名稱和符號無關緊要,我們將其稱為“blah(x,y)”。
  • 對於集合中的任何 x,y,blah(x,y) 也在集合中。
  • 對於集合中的任何 x,y,blah(x,y) 和 blah(y,x) 是相同的。
  • 對於集合中的任何 x,y,z,blah(blah(x,y),z) = blah(x,blah(y,z))。
  • 對於集合中的任何 x,y,集合中存在一個元素 a,使得 blah(x,a) = y。
  • 對於集合中的任何 x,blah(x,o) = blah(o,x) = x。
  • 集合中的每個元素都可以寫成 blah(blah(blah(o,…),g),g),對於有限數量的 blah 呼叫,但是給定集合中的隨機元素 x,它必須是很難找到需要拼湊多少 g 才能獲得 x。

這是所有的了。如果我們使用 secp256k1(或任何其他橢圓曲線組),那麼我們使用曲線上的點作為集合,無窮遠處的點作為 o,secp256k1 生成器作為 g,橢圓曲線點加法公式作為 blah()。在這種情況下,重複的 blah’ing 表示為 blah’s 的數量與被 blah’ed 的點之間的乘積。

但是整個方案也可以針對具有這些屬性的其他組進行實例化,具有不同的頻寬/計算/安全權衡。例如,可以使用對一個非常大的素數 p 取模的乘法。在那種情況下,o 是數字 1,g 是例如數字 2,blah 是將兩個數字相乘以模 p,並且重複的 blahing 是將數字提高到模 p 的冪。

因此,當充分抽像地描述 MuSig2 方案時,它適用於任何此類組。例如 Schnorr 也是如此:BIP340 是 secp256k1 組上的 Schnorr 簽名方案的實例化,但 Schnorr 本人最初將其描述為僅對以素數為模的整數進行操作。

這導致了一個實際問題:如果該方案是通用的,並且適用於具有某些屬性的任何組,那麼您如何將其寫下來?研究橢圓曲線的人習慣於將群運算 blah() 寫成“+”,而研究整數的人習慣於將這個運算寫成“*”。

所以會發生一些作者選擇一個,而其他人則使用另一個,這取決於他們的背景。在 Twitter 密碼學家中,關於哪個更好,經常有激烈的(但通常是友好的)爭論。最後,這並不重要——這只是符號。"+" 和 “*” 都可以正常工作,因為我們只需要一個操作,而且它們都比 “blah()” 更具可讀性。

BIP340、BIP32 和許多其他 BIP 和比特幣中的密碼學描述,使用“+”或加法符號表示組操作,“*”表示重複使用。

MuSig2 以及許多其他密碼學論文(但不是全部)使用“*”或乘法符號表示組運算,並使用“^”表示它。這就是“離散對數問題”名稱的由來。在加法符號中,為了一致性,我們應該談論“離散除法問題”。

要查看對應關係,BIP340(以加法表示)使用等式sG = R + H(R || P || m)P來表示有效簽名。使用乘法符號,它將改為G s = P H(R || P || m) R,但這只是一個符號選擇 - 兩者描述的內容完全相同。

簡而言之:您在 MuSig2 論文中詢問的乘法運算正是在比特幣特定上下文中更常被稱為橢圓曲線點加法的運算。將各個座標相乘不是有效操作;這通常不會再次在曲線上產生一個點。

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