一种基于区块链平台的多重签名方法

文档序号:25519947发布日期:2021-06-18 20:06阅读:176来源:国知局
一种基于区块链平台的多重签名方法

本发明涉及数字签名技术与区块链领域,具体是一种基于区块链平台的多重签名方法。



背景技术:

随着经济全球化和信息现代化的发展,全球金融和政务信息的数量急剧增长。在电子商务和电子政务的实际应用中,同一份文件或合同往往需要由几个相关人员的签字确认才可生效,且这种情况下对签名的顺序不做要求。数字签名技术以一种电子签名的方式,将签名对象与签名者互相绑定,可以保证签名的真实性。在电子商务和电子政务中数字签名保证了数据的完整性和不可否认性以及确定了文件的负责人。然而,随着数据的大量增长,传统的数字签名方案日益暴露出信息传输量大,签名长度过长,签名和验证效率低的弱点。

多签名方案允许一组签名者在同一个消息上共同生成一个签名,该签名可以被任何人验证,使得签名更加紧凑。多重签名的验证更快,它有助于减少带宽和验证和存储的成本。而且最终形成的签名大小和公钥长度都与签名者的数量无关。最近,多重签名引起了人们的广泛关注,因为它的这些优势正是区块链和加密货币所需要的。这样的多重签名提供了一个紧凑的签名和一个紧凑的聚合公钥。然而,在传统的基于schnorr多重签名方案中,签名人之间需要进行大量的通信。

区块链技术自2009年发布以来发展迅速,改变了信息传输模式,那么区块链作为建设信任机制,就有可能彻底改变整个人类社会的模式。我们基于区块链平台提出了一种改进的基于schnorr的多重签名方案,它适用于电子商务和电子政务场景。



技术实现要素:

本发明针对现有技术中存在的不足,提供一种基于区块链平台的多重签名方法。这种方法可减少通信次数,还能避免流氓秘钥攻击。

实现本发明目的的技术方案是:

一种基于区块链平台的多重签名方法,以椭圆曲线为基础生成密钥对,设为素数阶q的难以求解离散对数问题的椭圆曲线群,其生成元为g,其中|q|=κ为安全参数,设hcom和hsig是两个将{0,1}*转换为的密码学哈希函数,则的公开参数集合为设n为签名者的数量,其中n≥2,l={y1,y2,…,yn}为签名者的公钥集合,为了共同签署消息m∈{0,1}*,包括如下步骤:

1)密钥对的生成:每个用户i,i∈{1,2,…,n}随机地选取随机数来生成自己的公私钥对(yi,xi),其中yi=xi·g;

2)签名阶段:对于每个签名者i,i∈{1,2,…,n}的工作方式如下:

(1)签名者首先计算值ai=hcom(yi||l),该值可用于验证签名者i是否在该签名集合l中以及在l中的身份,可信第三方为集合中的每个签名者i生成随机值并计算出多重签名的第一部分以及哈希值e=hsig(l||m||r),随后将随机值ri和哈希值e发送给各签名者;

(2)各签名者i收到从可信第三方收到ri的和哈希值e,然后计算zi=ri+eaiximodq,最后将zi发送给签名统计者,统计者根据收到的{z1,…,zn}计算多重签名的第二部分并将多重签名的第二部分z发送给可信第三方,即可输出签名σ=(r,z);

3)验证阶段:对于给定的消息m以及它的签名σ=(r,z)和签名者的集合l,验证者首先为每个签名者i计算ai=hcom(yi||l),然后计算e=hsig(l||m||r),最后验证等式是否成立,若成立则接收这个多重签名,否则拒绝;

假定每个签名者都诚实地生成了自己的公私钥对,那么正确性可证明如下:

考虑到可能存在不安全的执行环境的问题,我们可先建立可信执行环境(trustedexecutionenvironment,简称tee)。

本技术方案与现有技术相比:

减少了传统基于schnorr多重签名方案签名人之间通信次数过多的问题,同样避免了流氓秘钥攻击。

这种方法可减少通信次数,还能避免流氓秘钥攻击。

附图说明

图1为实施例中签名阶段的流程示意图;

图2为实施例中初始化签名阶段的流程图;

图3为实施例中联合签名阶段的流程图。

具体实施方式

下面结合附图及具体实施例对本发明作进一步的详细描述,但不是对本发明的限定。

实施例:

本例以在hyperledgerfabric上实现为例,选取椭圆曲线的位数p-256,在hyperledgerfabric中被称为链码的智能合约为可信第三方。

一种基于区块链平台的多重签名方法,以椭圆曲线为基础生成密钥对,设为素数阶q的难以求解离散对数问题的椭圆曲线群,其生成元为g,其中|q|=κ为安全参数,设hcom和hsig是两个将{0,1}*转换为的密码学哈希函数,则的公开参数集合为设n为签名者的数量,其中n≥2,l={y1,y2,…,yn}为签名者的公钥集合,为了共同签署消息m∈{0,1}*,包括如下步骤:

1)密钥对的生成:每个用户i,i∈{1,2,…,n}随机地选取随机数xi←zq*,来生成自己的公私钥对(yi,xi),其中yi=xi·g;本例fabric中所有用户的公私钥对都由fabric-ca生成注册,并且管理联盟成员信息,各用户可通过fabric-ca查询其他用户的身份信息;

由于本例hyperledgerfabric中链码将生成的随机值用由签名发起者传输的签名集合l中对应各签名者的公钥进行ecc加密,保证了获得随机值的签名者是属于签名集合的,所以本例不需要计算ai的值;

2)签名阶段:如图1所示,对于每个签名者i,i∈{1,2,…,n}的工作方式如下:

(1)签名者首先计算值ai=hcom(yi||l),该值可用于验证签名者i是否在该签名集合l中以及在l中的身份,可信第三方为集合中的每个签名者i生成随机值并计算出多重签名的第一部分以及哈希值e=hsig(l||m||r),随后将随机值ri和哈希值e发送给各签名者;本例签名发起者将信息m和集合l={y1,y2,…,yn}发送给链码,调用链码的初始化算法,链码通过伪随机数生成算法为每个签名者i生成随机值ri,并计算出以及通过sha-256哈希算法计算值e=hsig(l||m||r),然后链码用集合l中公钥进行椭圆曲线加密,得到加密后每个人的随机值ri(记作ecc(ri))并得到一个公钥与ecc(ri)一一对应的map,链码将这个map和哈希值e放到世界状态中,最后,链码将签名发起者的ecc(r)和哈希值e返回给签名发起者,如图2所示;

(2)各签名者i收到从可信第三方收到ri的和哈希值e,然后计算zi=ri+eaiximodq,最后将zi发送给签名统计者,统计者根据收到的{z1,…,zn}计算多重签名的第二部分并将多重签名的第二部分z发送给可信第三方,即可输出签名σ=(r,z);本例其他签名者i将信息m和集合l={y1,y2,…,yn}发送给链码,调用链码的查询算法,从世界状态中查询得到自己的ecc(ri)和哈希值e,然后用自己的私钥解密ecc(ri)得到随机值ri,然后计算zi=ri+exi,最后将zi发送给签名发起者,签名发起者根据收到的{z1,…,zn}计算并将其发送给链码,链码输出签名σ=(r,z),如图3所示;

3)验证阶段:对于给定的消息m以及它的签名σ=(r,z)和签名者的集合l,验证者首先为每个签名者i计算ai=hcom(yi||l),然后计算e=hsig(l||m||r),最后验证等式是否成立,若成立则接收这个多重签名,否则拒绝;本例其他节点根据信息m、集合l={y1,y2,…,yn}和签名σ=(r,z),首先根据sha-256算法计算e=hsig(l||m||r),若成立则将信息和多重签名写入账本;

假定每个签名者都诚实地生成了自己的公私钥对,那么正确性可证明如下:

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1