本发明涉及区块链,特别是涉及一种基于国密sm2多重签名的数据验证方法。
背景技术:
1、随着区块链技术的迅速发展,各种不同的区块链网络应运而生,为多样化的功能和应用场景提供了支持。然而,这些独立的区块链网络之间存在信息孤岛和互操作性问题,从而限制了区块链技术的全面发展和应用。为了解决这一挑战,跨链技术应运而生。跨链技术作为一种创新性的解决方案,旨在实现不同区块链网络之间的互联互通。通过跨链技术,可以确保资产转移、数据共享和智能合约在不同区块链网络之间顺畅地进行交互。这将有助于打破各个区块链网络之间的信息孤岛,进一步推动区块链技术的广泛应用和发展。
2、当前主流的跨链技术包括哈希锁定、侧链/中继和公证人机制。各种技术都有其优缺点,但公证人机制在实现原理上相对简单,较好地克服了其他跨链技术存在的缺点。然而,节点的信誉、跨链交互的安全性和中心化现象等问题是公证人机制的软肋。
3、侧链/中继技术符合区块链“去中心化”的要求,但侧链技术要求侧链在跨链交互之前必须知道主链相关信息,且侧链与侧链之间无法直接完成跨链交互。中继技术实现难度较大,难以大规模应用。哈希锁定技术去中心化程度较高,但弊端是难以完成跨链资产转移,应用场景较为受限。
4、在公证机制中,一个或一组公证人负责监听链上的事件,并在另一个链上执行相应操作。公证人需要拥有账户来协调跨链交易。公证机制的实现可以分为以下三种类型:
5、1)单签名公证机制:一个节点作为公证人;
6、2)多签名公证机制:多个节点组成公证组,采用多签名机制;
7、3)分布式签名公证机制:多个公证人持有一个密钥的碎片,这些碎片随机分配给公证人。
8、为了降低中心化风险,行业提出了多签名公证机制。这种机制利用密码学技术,在每次交易验证过程中从公证社区中随机选择部分公证人,并共同完成签名发行,以减少对公证人的依赖,这是目前的主流方向。
9、现有技术公开了一种基于区块链的公证系统及方法;基于区块链的公证方法,包括:创建公证系统,该公证系统包括客户端、系统平台、公证平台和底层区块链;并按如下步骤进行:著作权人注册为平台用户,系统平台为新注册的平台用户生成唯一对应的用户id;其特征在于:著作权人选择进行托管的公证平台,并将作品上传到系统平台;系统平台对上传的作品进行审核,系统平台为作品生成唯一对应的数字指纹;系统平台利用著作权人选择进行托管的公证平台提供的公钥加密已通过审核的作品,并上传至选择进行托管的公证平台,进行加密存储;著作权人对托管至公证平台的作品申请版权登记。该现有技术存在公证人机制中公证人节点功能过于集中,容易导致单点故障和陷入停滞的问题。
技术实现思路
1、本发明的目的是:提供一种基于国密sm2多重签名的数据验证方法,以解决现有技术存在公证人机制中公证人节点功能过于集中,容易导致单点故障和陷入停滞的问题。
2、为了实现上述目的,本发明提供了一种基于国密sm2多重签名的数据验证方法,包括:
3、s1、选择一个素数并确定公共参数,在公共参数中选择一个随机数作为第一随机数,第一随机数为私钥,并通过私钥和公共参数计算公钥;
4、s2、输入一个消息,在公共参数中选择一个随机数作为第二随机数,通过第二随机数计算第一椭圆曲线点,设定单重签名标准,计算单重签名并选取合适的单重签名;
5、s3、有多个参与方时,每个参与方输入各自的私钥并进行本地计算,每个参与方选择第三随机数和第四随机数,根据私钥、本地计算的结果以及第三随机数和第四随机数执行隐私乘积协议,得到加法份额,计算第二椭圆曲线点,并进行本地累加重构,得到多重签名,设定多重签名标准,选取合适的多重签名;
6、s4、若输入单重签名、公钥和消息,计算第三椭圆曲线点,根据第三椭圆曲线点、公开参数和需要验证的单重签名进行计算,得到单重签名的一部分,验证单重签名是否有效;若输入多重签名、公钥集合和消息,计算第四椭圆曲线点,根据第四椭圆曲线点、公开参数和需要验证的多重签名进行计算,得到多重签名的一部分,验证多重签名是否有效;
7、s5、判断单重签名或多重签名的验证的正确性。
8、优选的,在步骤s1中,选择一个素数并确定公共参数的过程为系统中的用户协商选择一个素数p,并挑选a,b∈fp输入,fp为素数阶p的有限域,根据椭圆曲线公式e生成椭圆曲线ep(a,b),椭圆曲线公式e如下:
9、y2=x3+ax+b(mod p)
10、在ep(a,b)上选择一个基点g=(xg,yg)≠o,其中xg,yg∈fp,g的阶为n,并选择一个hash函数,输出公共参数pp=(ep(a,b),n,g,hash)。
11、优选的,在步骤s1中,根据公共参数pp,用户选择一个随机数d∈[1,n-1]作为第一随机数,第一随机数为私钥,计算d·g作为自己的公钥,输出公钥pk=d·g,私钥sk=d。
12、优选的,在步骤s2中,计算单重签名并选取合适的单重签名的具体过程为:
13、s211、选择一个第二随机数k∈[1,n-1],计算第一椭圆曲线点(xk,yk)=k·g;
14、s212、计算r=(hash(m)+xk)mod n,若r=0或r+k=n,则重新执行步骤s211;
15、s213、计算s=((d+1)-1*(k-rd))mod n,若s=0,则重新执行步骤s211和s212;
16、s214、输出签名σ=(r,s)。
17、优选的,在步骤s3中,选取合适的多重签名的过程为:
18、s311、每个参与方输入各自的私钥并进行本地计算的过程为有n个参与方p1,...,pn,他们各自的私钥分别为d1,...,dn,第一个参与方p1本地计算其余参与方pi(i≠1)本地计算则
19、s312、每个参与方pi选择两个随机数ki∈[1,n-1],δi∈[1,n-1],令其中
20、s313、每个参与方pi分别输入和δi执行隐私乘积协议,得到是的加法份额,再输入ki和δi,执行隐私乘积协议,得到是的加法份额,最后输入δi和di,执行隐私乘积协议,得到是的加法份额;
21、s314、每个参与方pi本地计算椭圆曲线点(xi,yi)=ki·g,i∈[1,n];
22、s315、对于一个消息m,每个参与方pi广播ki·g,然后本地累加重构出每个参与方pi广播然后本地累加重构出
23、s316、每个参与方pi本地计算若或则重新执行步骤s311-s315;
24、s317、参与方pi本地计算输出签名若[s]i=0,则重新执行步骤s311-s316;
25、s318、每个参与方pi广播[s]i,然后本地累加重构出若则重新执行步骤s311-s317;
26、s319、输出多重签名
27、优选的,在步骤s3中,隐私乘积协议为协议初始时,每个参与方pi持有ai,bi,通过参与方之间的交互,协议结束时每个参与方得到a,b乘积的加法份额[ab]i。
28、优选的,隐私乘积协议具体为:
29、sa、参与方pi选择一个随机数ri,并计算bi-ri;
30、sb、参与方pi持有加法同态加密方案的公钥pk和私钥sk,参与方pi利用公钥pk加密ri得到encpk(ri),并将encpk(ri)连同bi-ri发送给其他参与方;
31、sc、接收到参与方pi发送的encpk(ri)和bi-ri后,参与方pj(j≠i)选择一个随机数rj,利用加法同态性质计算encpk(aj*ri+rj)=aj*encpk(ri)+encpk(rj),并计算交叉项a*bi的份额[a*bi]j=aj*(bi-ri)-rj=aj*bi-(aj*ri+rj),最后将计算结果encpk(aj*ri+rj)发送给参与方pi;
32、sd、参与方pi使用自己的私钥sk解密参与方pj(j≠i)发送来的密文encpk(aj*ri+rj),得到aj*ri+rj,并计算交叉项a*bi的份额
33、se、每个参与方计算得到n个交叉项的份额后,聚合得到a,b乘积的最终份额。
34、优选的,在步骤s4中,计算第三椭圆曲线点公式如下:
35、(x′,y′)=s·g+(r+s)·pk
36、计算第四椭圆曲线点公式如下:
37、
38、优选的,在步骤s5中,判断单重签名的验证的正确性的过程为:
39、输入单个签名σ=(r,s),单个用户公钥pk=d·g和消息m,签名者计算椭圆曲线点(xk,yk)=(k·g,r=(hash(m)+xk)modn),验证者计算椭圆曲线点(x′,y′)=(s·g+(r+s)·pk,r=(hash(m)+x′)modn),判断等式是否成立等价于判断(xk,yk)=(x′,y′)是否成立,即
40、(x′,y′)=s·g+(r+s)·(d·g))
41、=s·g+(rd+sd)·g
42、=(s(1+d)+rd)·g
43、=((k-rd)+rd)·g
44、=k·g
45、=(xk,yk)
46、因此r=(hash(m)+x′)mod n=(hash(m)+xk)mod n=r。
47、优选的,在步骤s5中,判断多重签名的验证的正确性的过程为:
48、输入多重签名参与方的公钥集合{pki=di·g}i∈[1,n],消息m,本地累加重构出计算验证者计算椭圆曲线点r=(hash(m)+x′)mod n,判断是否成立等价于判断(xk,yk)=(x′,y′)是否成立,即
49、
50、因此
51、与现有技术相比,本发明的有益效果在于:
52、采用了国密sm2多重签名技术,可以分散公证人节点的职能,提高系统稳定性,签名和验证工作由多个节点共同完成,有效地防止单点故障,提高系统的健壮性,通过采用多重签名,可以并行处理多个交易,提高了处理速度,同时,也降低了单个节点的工作负担,使整个系统能在高效率的同时保持稳定运行。