利用環簽名進行機密交易的技術原理分析

買賣虛擬貨幣
第1部分:隱匿收款方地址Alice支付給Bob,那麼Alice將負責對收款人Bob的地址進行隱藏;Bob擁有一對ViewKey:PK1 = sk1*G;Bob擁有一對SpendKey:PK2 = sk2*G;Alice臨時生成一個隨機數r,對應R = r*G;Alice計算r*PK1 = r*sk1*G = sk1*R,
Bob計算sk1*R = sk1*r*G = r*sk1*G =  r*PK1,sk1*R = r*PK1是ECDH金鑰交換演算法;Alice和Bob對 r*PK1、sk1*R 這個點求雜湊:h = hash(r*PK1) =  hash(sk1*R);h*G + PK2對應交易的公鑰,h+sk2對應交易的私鑰,分別簡記為PKtx、sktx,因為:PKtx = h*G + PK2 = h*G + sk2*G = (h+sk2)*G = sktx*G;Bob可利用PKtx、sktx掃描區塊鏈並花費屬於自己的UTXO。
第2部分:隱匿付款方地址現在Bob利用PKtx、sktx掃描並花費屬於自己的錢:為了混淆PKtx,Bob又隨機尋找了其他n-1個公鑰:PKtx = RPK1 、RPK2、...RPKn;HPn = HashPoint(RPKn) ,HP1 = HashPoint(PKtx) ;HashPoint是專門針對橢圓曲線點的雜湊函式,結果仍然是橢圓曲線點;Image = sktx*HP1,是一個橢圓曲線點;
後續的Rn需用到Image,以防止雙花交易,普通的環簽名僅僅需要Ln就足夠了,並不需要Rn;L1 = a*G,a為隨機數;R1 = a*HP1;c1 = hash(L1, R1, m),c1為普通的雜湊數值;L2 = s2*G + c1*RPK2,s2為隨機數;R2 = s2*HP2 + c1*Image;
c2 = hash(L2, R2, m);純文字格式難以表示下標符號,因此下面的「Xn-1」表示第n-1個X,並不表示對Xn進行減1運算,「Xn+1」也一樣。利用下面的公式形成閉環,並計算出s1的值:Ln = sn*G + 「cn-1」*RPKn,sn為隨機數;Rn = sn*HPn + 「cn-1」*Image;cn = hash(Ln, Rn, m);
開始進行閉環操作:令L1 = 「Ln+1」,R1 = 「Rn+1」,s1 = 「sn+1」,HP1 = 「HPn+1」 = HashPoint(RPK1) = HashPoint(PKtx);L1 =  a*G = 「Ln+1」 =  「sn+1」*G +  cn*「RPKn+1」 = s1*G +  cn*RPK1 = s1*G +  cn*PKtx = s1*G +  cn*sktx*G;R1 = a*HP1 =「 Rn+1」 = 「sn+1」*HPn + cn*Image = s1*HP1 + cn*sktx*HP1;透過L1或R1對應的方程式,都可求出s1 = a - cn*sktx;現在可給出簽名資料:RPK1(PKtx)、RPK2、...RPKn;s1、s2、...sn;ci;Image;
ci是從上述c1~cn中隨便選取的一個值(1 <= i <= n);按照上述cn、Ln、Rn的公式,帶入ci到「Li+1」、「Ri+1」,得到「ci+1」,即可依次迴圈驗證。礦工驗證邏輯:若交易資料生產者沒有sktx,那麼就不可能形成一個閉環,閉環成立則驗證透過,但礦工並不知道n個公鑰中,究竟哪一個才對應Image。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;