[發明專利]一種零知識證明隱私保護方法、系統、存儲介質、設備有效
| 申請號: | 202110132123.0 | 申請日: | 2021-01-31 |
| 公開(公告)號: | CN112765668B | 公開(公告)日: | 2023-01-03 |
| 發明(設計)人: | 付銘;謝朝陽;馬立川;劉明哲;裴慶祺;袁昊;張銳 | 申請(專利權)人: | 西安電子科技大學;西安鏈融科技有限公司 |
| 主分類號: | G06F21/62 | 分類號: | G06F21/62;G06F21/60 |
| 代理公司: | 西安長和專利代理有限公司 61227 | 代理人: | 黃偉洪 |
| 地址: | 710071 陜西省*** | 國省代碼: | 陜西;61 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 知識 證明 隱私 保護 方法 系統 存儲 介質 設備 | ||
1.一種零知識證明隱私保護方法,其特征在于,所述零知識證明隱私保護方法中,還包括發送方通過零知識證明隱私保護算法計算交易披露數據,包括:
(1)生成會計平衡證明bp;
(2)生成格式正確證明fp;
(3)生成范圍證明rp;
(4)生成相等證明ep;
(5)生成監管加密字段e;
所述零知識證明隱私保護方法中,還包括發送交易,包括:
(1)發送方將交易披露數據發送給接收方;
(2)接收方收到交易后驗證零知識證明;
(3)監管方驗證密文e;
(4)若通過驗證,則交易存儲并生效;
所述零知識證明隱私保護方法中,所述發送方、接收方和監管方分別生成屬于自身的公私鑰,包括:
(1)發送方公鑰pub_S={G1,G2,H,P},私鑰priv_S={X};
(2)接收方公鑰pub_R={G1,G2,H,P},私鑰priv_R={X};
(3)監管方公鑰pub_G={G1,G2,H,P},私鑰priv_G ={X};
所述發送方生成自身總財產,發出財產和找零財產金額的承諾和隨機數;
所述發送方產生會計平衡證明,包括:
發送方使用pub_S,轉賬金額v_s及其承諾隨機數r_s,找零金額v_r及其承諾隨機數r_r,總金額承諾隨機數r_o生成會計平衡證明bp,所述會計平衡證明生成,包括:
(1)取發送方公鑰字段P,計算P-1,作為P_1;
(2)取系統Unix時間戳time,以time為種子生成隨機數rnd;
(3)取發送方公鑰字段P,計算P-4,作為limit;
(4)計算limit^5作為limit_5;
(5)以rnd為種子,產生一個小于limit的隨機數mix;
(6)計算mix模limit的值加2作為a,計算mix/limit作為mix;
(7)計算mix模limit的值加2作為b,計算mix/limit作為mix;
(8)計算mix模limit的值加2作為d,計算mix/limit作為mix;
(9)計算mix模limit的值加2作為e,計算mix/limit作為mix;
(10)計算mix模limit的值加2作為f,計算mix/limit作為mix;
(11)取發送方公鑰字段G1,計算G1^a模P,作為g1a;
(12)取發送方公鑰字段H,計算H^b模P,作為hb;
(13)計算g1a*hb模P,作為t1_p;
(14)取發送方公鑰字段G1,計算G1^d模P,作為g1d;
(15)取發送方公鑰字段H,計算H^e模P,作為he;
(16)計算g1d*he模P,作為t2_p;
(17)計算a+d模P_1,作為ad;
(18)取發送方公鑰字段G1,計算G1^ad模P,作為g1ad;
(19)取發送方公鑰字段H,計算H^f模P,作為hf;
(20)計算g1ad*hf模P,作為t3_p;
(21)拼接t1_p、t2_p、t3_p后計算其哈希值模P,作為c;
(22)計算P_1 - (c*v_r (mod P_1) ) +a模P_1,作為R_v;
(23)計算P_1 - (c*r_r (mod P_1) ) +b模P_1,作為R_r;
(24)計算P_1 - (c*v_s (mod P_1) ) +d模P_1,作為S_v;
(25)計算P_1 - (c*r_s (mod P_1) ) +e模P_1,作為S_r;
(26)計算P_1 - (c*r_o (mod P_1) ) + f模P_1,作為S_or;
(27)bp={c,R_v,R_r,S_v,S_r,S_or}即為會計平衡證明;
所述發送方產生格式正確證明,包括:
發送方使用pub_S,金額v,金額v的承諾隨機數r生成格式正確證明fp,所述格式正確證明生成,包括:
(1)取發送方公鑰字段P,計算P-1,作為P_1;
(2)取系統Unix時間戳time,以time為種子生成隨機數rnd_a;
(3)以rnd_a為種子生成隨機數rnd_b;
(4)取發送方公鑰字段P,計算P-4,作為limit;
(5)以rnd_a為種子,產生一個小于limit的隨機數a;
(6)計算a+2,作為a;
(7)以rnd_b為種子,產生一個小于limit的隨機數b;
(8)計算b+2,作為b;
(9)計算G1^a模P,作為g1a;
(10)計算H^b模P,作為hb;
(11)計算g1a*hb模P,作為t1_p;
(12)計算G2^b模P,作為t2_p;
(13)拼接t1_p、t2_p后計算其哈希值模P,作為c;
(14)計算P_1 - v*c模P_1,作為vc;
(15)計算a+vc模P_1,作為z1;
(16)計算P_1 - r*c模P_1,作為r1c;
(17)計算b + r1c模P_1,作為z2;
(18)fp={c,z1,z2}即為格式正確證明;
所述發送方產生相等證明,包括:發送方使用pub_S={pub1.G1,pub1.G2,pub1.H,pub1.P},pub_R={pub2.G1,pub2.G2,pub2.H,pub2.P},承諾C1={C1.commitment,C1.r},承諾C2={C2.commitment,C2.r},用于生成承諾的金額V,所述相等證明ep生成,包括:
(1)計算C1.commitment*C2.commitment模P,作為y;
(2)聲明ep={t,s}作為相等證明結果;
(3)令g為長度為4的數組,元素為{pub1.G1, pub2.G1, pub1.H, pub2.H};
(4)令x為長度為4的數組,元素為{V, V, C1.r, C2.r};
(5)令a為長度為4的數組,元素為{-1,-1,0,0};
(6)令pub為pub1;
(7)聲明v為長度為4的空數組;
(8)取發送方公鑰字段P,計算P-1,作為P_1;
(9)聲明ssnum為0;
(10)遍歷a,若遍歷值不為0,則ssnum加1;
(11)以pub為種子生成具有n個隨機數的列表rbi,其中若ssnum為0則n=4,否則n=3;
(12)聲明line為0;
(13)聲明last為0;
(14)依次遍歷a中的每個元素,使每次遍歷值為ai
若ai等于0,則令v[i]為rbi[line],line加1;
若ai不等于0,則執行如下判定及其步驟;
若ssnum等于1,則令v[i]為last*(ai mod P_1)模P_1,ssnum加1;
若ssnum不等于1,則令v[i]為rbi[line],line加1,ssnum減1, 令last為(last-a[i]*v[i])模P_1;
(15)聲明t等于1;
(16)聲明c_mash為空數組;
(17)遍歷g,使每次遍歷值為gi,在第i次迭代中執行如下步驟:
計算(gi^v[i]) 模P,作為新變量賦予gi;
令t等于(t*Gi) 模P;
將gi加入c_mash;
(18)將y加入c_mash;
(19)將t加入c_mash;
(20)計算c_mash的哈希,作為c;
(21)計算c模P,作為c_bi;
(22)遍歷v,使每次遍歷值為vi,在第i次迭代中執行如下步驟:
計算(vi-c_bi*x[i])模P_1,計算mash;
將mash加入ep.s;
(23)ep.t=t;
(24)故ep即為生成的相等證明;
所述發送方產生范圍證明,包括:
發送方使用金額v,承諾C={C.commitment,C.r},發送方公鑰pub_S={G1,G2,H,P},所述生成范圍證明rp,包括:
(1)取發送方公鑰字段P,計算P-1,作為P_1;
(2)將v轉為二進制存入aL,二進制低位位于aL低位;
(3)聲明aR為limit長度的數組;
(4)循環limit次,在第i次循環中,計算(aL[i]-1)模P_1,作為aR[i];
(5)隨機生成長度為4*(limit+1)的隨機數數組mix;
(6)取mix中第一個元素,及索引為0的元素,作為alpha;
(7)取mix中第二個元素,及索引為1的元素,作為rou;
(8)隨機生成六個隨機數,作為sL、sR、tao1、tao2、g和h;
(9)計算H^alpha模P,作為A;
(10)計算H^rou模P,作為S;
(11)循環limit次,在第i次循環中,依次執行如下操作
計算g[i]^aL[i]模P,作為gaL;
計算h[i]^aR[i]模P,作為haR;
計算g[i]^sL[i]模P,作為gsL;
計算h[i]^sR[i]模P,作為hsR;
計算A*gaL*haR模P,作為A;
計算S*gsL*hsR模P,作為S;
(12)聲明長度為2的數組AS,填充元素{A,S};
(13)對數組AS取哈希,作為y_bytes;
(14)聲明長度為2的數組ASy,填充元素{AS,y_bytes};
(15)對數組Asy取哈希,作為z_bytes;
(16)聲明長度為2的數組ASyz,填充元素{ASy,z_bytes};
(17)對數組Asyz取哈希,作為x_byt1es;
(18)計算x_bytes模P_1,作為x;
(19)計算y_bytes模P_1,作為y;
(20)計算z _bytes模P_1,作為z;
(21)聲明l、r為limit長度的空數組;
(22)使tv等于0;
(23)使t1等于0;
(24)使t2等于0;
(25)使n2等于1;
(26)使ny等于1;
(27)循環limit次,在第i次循環中,依次執行如下操作
計算aL[i]-z,作為aLz;
計算sL[i]*x,作為sLx;
計算(aLz+sLx)模P,作為l[i];
計算z^2模P_1的值再乘以n2,作為z2n;
計算aR[i]+z,作為arz;
計算(arz+sR[i]*x mod P_1)*ny+z2n模P_1,作為r[i];
計算l[i]*r[i],作為lr;
計算tv+lr模P_1,作為tv;
計算ny*sR[i]模P_1,作為ysR;
計算aLz*ysR模P_1,作為aLzysR;
計算(ny*arz+z2n) mod P_1模sL[i],作為n2nyaRzsl;
計算t1+(aLzysR*n2nyaRzsl mod P_1),作為t1;
計算t2+sL[i]*ysR模P_1,作為t2;
計算n2*2模P_1,作為n2;
計算ny*y模P_1,作為ny;
(28)計算(G1^t1 mod P)*(H^tao1 mod P)模P,作為T1;
(29)計算(G1^t2 mod P)*(H^tao2 mod P)模P ,作為T2;
(30)計算(x^2 mod P_1)*tao2,作為x2tao2;
(31)計算(z^2 mod P_1)*r,作為z2gama;
(32)計算x2tao2+x*tao1+z2gama模P_1,作為tao_x;
(33)計算rou*x+alpha模P_1,作為miu;
(34)令n等于limit;
(35)rp={n, tao_x,A,S,T1,T2,miu,l,r,g,h}即為范圍證明;
所述發送方將所需監管內容包括發送方接收方的隱私信息及交易數據使用監管方公鑰加密,生成密文e;
所述接收方驗證會計平衡證明,包括:
接收方使用找零承諾CM_R,轉賬承諾CM_S,總承諾 CM_O,公鑰pub={G1,G2,H,P},所述會計平衡證明bp={c,R_v,R_r,S_v,S_r,S_or},包括:
(1)計算G1^R_v模P,作為g1rv;
(2)計算H^R_r模P,作為hrr;
(3)計算CM_R^c模P,作為cmrc;
(4)計算(g1rv*hrr (mod P))*cmrc模P,作為t1_v;
(5)計算G1^S_v模P,作為g1sv;
(6)計算H^S_r模P,作為hsr;
(7)計算CM_S^c模P,作為cmsc;
(8)計算(g1sv*hsr (mod P))*cmsc模P,作為t2_v;
(9)計算R_v+S_v,作為rvsv;
(10)計算G1^rvsv模P,作為g1rvsv;
(11)計算H^S_or模P,作為hsor;
(12)計算CM_O^c模P,作為cmoc;
(13)計算(g1rvsv*hsor (mod P))*cmoc模P,作為t3_v;
(14)拼接t1_v、t2_v、t3_v后計算其哈希值后模P,作為c_v;
(15)判斷c_v是否等于0,如果是,則驗證通過,否則驗證不通過;
所述接收方驗證格式正確證明,包括:
接收方使用公鑰pub={G1,G2,H,P},公鑰pub對內容加密得到的密文C={c1,c2},格式正確證明fp={c,z1,z2},包括:
(1)計算c2^c模P,作為c1c;
(2)計算G1^z1模P,作為g1z1;
(3)計算H^z2模P,作為hz2;
(4)計算clc * g1z1模P,作為c1c;
(5)計算c1c*hz2模P,作為t1_v;
(6)計算c1^c模P,作為c2c;
(7)計算G2^z2模P,作為g2z2;
(8)計算c2c*g2z2模P,作為t2_v;
(9)拼接t1_v、t2_v后計算其哈希值后模P,作為c_v;
(10)判斷c_v是否等于0,如果是,則驗證通過,否則驗證不通過;
所述接收方使用公鑰pub_S={pub1.G1,pub1.G2,pub1.H,pub1.P},pub_R={pub2.G1,pub2.G2,pub2.H,pub2.P},密文C1={C1.c1,C1.c2},密文C2={C2.c1,C2.c2},所述相等證明ep={s,t}驗證相等證明,包括:
(1)取接收方公鑰字段P,計算C1.C2*C2.C2模P,作為y;
(2)令g為長度為4的數組,其中填充數組{pub1.G1, pub2.G1, pub1.H, pub2.H};
(3)將pub_S更名為pub;
(4)令a為長度為4的數組,其中填充數組{1,-1,0,0};
(5)聲明b等于0;
(6)取接收方公鑰字段P,計算P-1,作為P_1;
(7)聲明c_mash為無限長空數組;
(8)遍歷g,使每次遍歷值為gi,在每次迭代中將gi加入c_mash中;
(9)將y、lp.t依次加入到c_mash中;
(10)計算c_mash的哈希值,作為c;
(11)計算c模P的值,作為c_bi;
(12)令新變量t_verify的值為y;
(13)計算t_verify^c_bi模P,作為t_verify;
(14)遍歷g,使每次遍歷值為gi,在第i次迭代中執行如下步驟:
計算gi^lp.s[i]模P的值,作為buf;
計算t_verify*buf模P的值,作為t_verify;
(15)判斷t_verify是否等于lp.t,若等于,則繼續執行如下步驟,否則驗證失敗,終止流程;
(16)計算-c_bi*b,作為cb;
(17)聲明新變量mix等于0;
(18)遍歷a,使每次遍歷值為ai;
計算ai*lp.s[i]模P_1的值,作為aisi;
計算mix+aisi模P_1的值,作為mix;
(19)判斷mix是否等于cb,若等于,則驗證成功,否則驗證成失敗;
所述接收方驗證范圍證明,包括:
接收方使用金額v,密文C={C1,C2},公鑰pub={G1,G2,H,P},范圍證明rp={n, tao_x,A,S,T1,T2,miu,l,r,g,h}驗證相等證明,包括:
(1)取接收方公鑰字段P,計算P-1,作為P_1;
(2)取接收方公鑰字段P,計算P-2,作為P_2;
(3)聲明l、r、g、h為長度為n的數組;
(4)令新變量V等于C2;
(5)令新變量tv等于0;
(6)循環n次,在第i次循環中,執行如下步驟:
計算 (tv+l[i]*r[i])模P_1,作為tv;
(7)聲明長度為2的數組AS,填充元素{A,B};
(8)對數組As取哈希,作為y_bytes;
(9)聲明長度為2的數組ASy,填充元素{AS,y_bytes};
(10)對數組Asy取哈希,作為z_bytes;
(11)聲明長度為2的數組ASyz,填充元素{ASy,z_bytes};
(12)對數組Asyz取哈希,作為x_bytes;
(13)計算x_bytes模P_1,作為x;
(14)計算y_bytes模P_1,作為y;
(15)計算z_bytes模P_1,作為z;
(16)聲明h_為長為n的空數組;
(17)計算y^P_2模P_1,作為y_inv;
(18)計算y^P_1模P,作為y_2p;
(19)計算y*y_inv模P_1,作為vf;
(20)令新變量y_1等于1;
(21)循環n次,在第i次循環中執行如下步驟:
計算h[i]^y_1模P,作為h_[i];
計算y_1*y_inv模P_1,作為y_1;
(22)計算H^tao_x模P,作為htaox;
(23)計算(G1^tv mod P)*htaox模P,作為left;
(24)計算z^2模P_1,作為z2;
(25)計算z^3模P_1,作為z3;
(26)計算y^rp.n模P_1的值減1,作為ny_1;
(27)計算y - 1的值,作為y_x1;
(28)計算y_x1模P_1的逆元,作為y_x1;
(29)計算ny_1 ^ y_x1模P_1,作為ny_1;
(30)計算z - z2模P_1,作為z_z2;
(31)計算z_z2 * ny_1,作為ibx;
(32)計算2 ^ rp.n模P_1,作為n_1_2;
(33)計算z3 * n_1_2,作為z3n12;
(34)計算ibx - z3n12,作為ibx;
(35)計算pub.G1 ^ ibx模P,作為gibx;
(36)計算( V ^ z2 mod (P) ) * gibx模P,作為right;
(37)計算x * x,作為x2;
(38)計算T1 ^ x模P,作為T1x;
(39)計算T2 ^ x2模P,作為T2x2;
(40)計算(right*T1x mod P)*T2x2模P,作為right;
(41)判斷left是否等于right,若等于,則繼續執行如下步驟,否則驗證失敗,終止流程;
(42)計算S ^ x模P,作為p;
(43)p = mod P 計算p * A模P,作為p;
(44)聲明變量gz等于1 ; h_mix等于1 ; n2等于1 ; ny等于1;
(45)循環n次,在第i次循環中,執行如下步驟:
計算g[i] ^ z模P,作為gz_inv;
計算gz_inv模P的逆元乘以gz,作為gz;
計算z * ny + z2 * n2,作為mix;
計算h_[i] ^ mix模P,作為mix;
計算h_mix * mix模P,作為h_mix;
計算n2 * 2模P_1,作為n2;
計算ny * y模P_1,作為ny;
(46)計算p * gz模P,作為p;
(47)計算p * h_mix模P,作為p;
(48)計算H ^ miu模P,作為P_check;
(49)循環 rp.n 次,在第i次循環中,執行如下步驟:
gl = mod P 計算g[i] ^ l[i]模P,作為gl;
計算h[i] ^ r[i]模P,作為hr;
計算P_check * gl模P,作為P_check;
計算P_check * hr模P,作為P_check;
(50)判斷P是否等于P_check,若等于,則范圍證明驗證通過,否則驗證不通過;
所述監管方驗證密文e,若驗證通過,則此次交易合法有效,否則認為交易無效,拋棄此交易。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于西安電子科技大學;西安鏈融科技有限公司,未經西安電子科技大學;西安鏈融科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110132123.0/1.html,轉載請聲明來源鉆瓜專利網。





