文章閱讀頁通欄

左晚河南22选5开奖号:利用環簽名進行機密交易的技術原理分析

來源: ugChain 作者:UG Tech team
第1部分:隱匿收款方地址 Alice支付給Bob,那么Alice將負責對收款人Bob的地址進行隱藏; Bob擁有一對ViewKey:PK1 = sk1*G; Bob擁有一對SpendKey:PK2 = sk2*G; ......
第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。
關鍵詞: 環簽名  礦工  公鑰  
0/300
?