[发明专利]一种零知识证明隐私保护方法、系统、存储介质、设备有效
申请号: | 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.vipzhuanli.com/pat/books/202110132123.0/1.html,转载请声明来源钻瓜专利网。