一种基于SM2的可验证随机函数构造方法和装置

未命名 10-08 阅读:95 评论:0

一种基于sm2的可验证随机函数构造方法和装置
技术领域
1.本发明属于计算机技术与信息安全技术领域,旨在基于sm2椭圆曲线公钥密码算法,增强可验证随机函数的安全性,保证可验证随机函数的密钥对自行生成时,函数输出的不可预测性。具体表现为一种基于sm2的可验证随机函数构造方法和装置。


背景技术:

2.可验证随机数函数(verifiable random function,vrf)是一种公钥密码算法,它可以生成一个随机的、固定长度的函数值,同时生成一个可验证的证据。该证据可以用来证明该函数值是由特定的私钥和输入所生成的,任何节点都可以利用该证据验证输出的函数值的合法性。vrf在密码学货币、随机选举、身份验证、分布式系统等很多方面具有广泛的应用。特别的,vrf是用于实现隐私保护的选举机制的一项重要技术,在基于委员会的区块链共识等分布式系统中,vrf可用于节点本地判断选举结果,实现选举结果发布前的机密性、选举结果发布后的公开可验证性,以增强系统对适应性腐化攻击的抵御能力,提升系统的健壮性。
3.在分布式系统中,难以存在可信的第三方为每个节点正确的生成合法的密钥对,一种更贴合分布式特点的方法是令节点独立创建自己的密钥对。然而,现有大多数vrf构造无法保证节点使用恶意创建的密钥对作为输入时,输出的函数值仍满足不可预测性,即节点可以提前预知函数值,无法保证该值发布前的机密性,因此不适用于分布式系统中来构造安全选举等机制。sm2椭圆曲线公钥密码算法是国家密码管理局发布的国家标准密码算法,其安全性基于求解有限域上椭圆曲线离散对数问题的困难性,在包括金融领域在内的商用密码体系中发挥着重要的作用。本发明给出一种基于sm2构造可验证随机数函数的方法,并能够在恶意创建的密钥对场景下满足输出的函数值具备不可预测性。


技术实现要素:

4.本发明的目的在于提出一种基于sm2的可验证随机函数构造方法,实现在使用恶意创建密钥对时输出的函数值的不可预测性。
5.为实现上述目的,本发明采用以下技术方案:
6.一种基于sm2的可验证随机函数构造方法,包括以下步骤:
7.初始化步骤:根据初始的安全参数l
vrf
,生成公开的系统参数pp;
8.密钥创建步骤:输入公开的系统参数pp,输出密钥对(d,p),其中d为私钥,p为公钥;
9.求值步骤:对于输入值m和私钥d,生成函数值y=h(m,[d]h'(m))和证据π,其中h为密码杂凑算法,h'为散列到椭圆曲线算法;
[0010]
验证步骤:任意节点利用证据π'、输入值m'、以及对应的公钥p',验证函数值y'确由p'对应的私钥对输入值m'进行求值操作得到。
[0011]
进一步地,所述系统参数pp表示为pp:=(g,n,h,h',hv),其中h'为散列到椭圆曲
线算法h':{0,1}
*

e(fq),将任意长度的字节串映射到椭圆曲线群e(fq)的元素;其他参数的生成与sm2椭圆曲线公钥密码算法gm/t 0003.1-2012国家标准第5章的规定保持一致,其中密码杂凑算法hv:{0,1}
*

{0,1}v,椭圆曲线群e(fq)的基点g=(xg,yg)∈e(fq),g≠o,g的阶为n,o为对应椭圆曲线的无穷远点。
[0012]
进一步地,密钥创建步骤与gm/t 0003.1-2012国家标准第6章的规定保持一致。
[0013]
进一步地,节点执行求值步骤后,当要验证输出的函数值时,节点将函数值y、证据π、与d对应的公钥p、输入值m公开或传递给验证者,验证者执行验证步骤来验证节点对输入值m下求值的合法性。
[0014]
进一步地,验证步骤中的输入值m'、公钥p'、函数值y'、证据π',可以与输入值m、公钥p、函数值y、证据π相同或不同。当后者为诚实地执行求值函数所生成,且在传递给验证者过程中没有被篡改时,m'、p'、y'、π'与m、p、y、π相同;否则,m'、p'、y'、π'与m、p、y、π不同。
[0015]
一种基于sm2的可验证随机函数构造装置,其为一种计算机设备(计算机、服务器、智能手机等),包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明方法中各步骤的指令。
[0016]
和现有技术相比,本发明的主要优势体现在:
[0017]

在考虑节点任意恶意的生成可验证随机函数的公私钥对时,即节点不遵循密钥创建子算法,利用该构造的求值子算法输出的函数值y仍满足不可预测性,即任何节点在没有执行求值子算法时,无法提前预知输出的函数值;本发明能够取得这样的效果,是因为函数值y由执行密码杂凑函数h而生成,由于密码杂凑函数可视作随机预言机,即函数值只有在调用函数后才固定,否则函数值可能会是任意的随机值,这使得执行h之前无法预测所生成的函数值y。此外,求值子算法输出的证据用于向验证者证明,生成函数值y的过程一定有公钥p所对应的私钥作为密码杂凑函数h的输入,以此保证了节点不遵循密钥创建子算法而恶意生成公私钥对时,求值子算法输出的函数值y仍满足不可预测性。
[0018]

所提可验证随机函数的构造基于国家标准密码算法——sm2椭圆曲线公钥密码算法,除额外引入的散列到椭圆曲线算法外,其他参数和所有操作均可直接使用sm2算法支持的参数和操作,易于部署在支持sm2算法的密码产品和系统。
[0019]

所提可验证随机函数为非交互式,函数值的生成无需节点间的交互,适合在节点可能离线的环境下使用,如分布式系统等。此外,可保证函数值发布前的机密性,适用于有强安全需求的应用场景,如隐私保护的选举机制、投票系统、抗适应性腐化的区块链共识、密码学货币等。本发明能够保证函数值发布前的机密性,是因为函数值由密码杂凑函数h通过输入私钥d计算得到。由于密码杂凑函数具有抗碰撞性质,即难以找到拥有相同函数输出值的两个不同的输入值,因此不持有私钥d的节点无法在函数值发布前计算得到此结果,因此保证了函数值发布前的机密性。
附图说明
[0020]
图1是本发明的求值流程图;
[0021]
图2是本发明的验证流程图。
具体实施方式
[0022]
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例,对本发明做进一步说明。
[0023]
本发明的一种基于sm2的可验证随机函数构造方法,其具体步骤描述如下:
[0024]
1)初始化
[0025]
输入安全参数l
vrf
并执行如下步骤:
[0026]
1.1)选取有限域fq,其中q为大于3的奇素数或2m。当q为奇素数p时,满足p>2
191
,椭圆曲线e的方程为y2=x3+ax+b,其中a,b∈fq且(4a3+27b2)modq≠0;当q=2m时,满足m>191,椭圆曲线方程为y3+xy=x3+ax2+b,其中a,b∈fq且b≠0。椭圆曲线群e(fq)是上述椭圆曲线上的所有整数点所组成的加法有限群,其中无穷远点记为o,基点g=(xg,yg)∈e(fq),g≠o,g的阶记为n,满足n>2
191
且(n>4p
1/2
或n>2
2+m/2
)。其中(xg,yg)是g的坐标值。
[0027]
1.2)选择消息摘要长度为安全参数l
vrf
的密码杂凑算法
[0028]
1.3)选择消息摘要为椭圆曲线群e(fq)元素的密码杂凑算法h':{0,1}
*

e(fq)。
[0029]
1.4)选择消息摘要长度为v比特的密码杂凑算法hv:{0,1}
*

{0,1}v。
[0030]
1.5)输出公开的系统参数pp:=(g,n,h,h',hv)。
[0031]
2)密钥创建
[0032]
输入系统参数pp并执行如下步骤:
[0033]
2.1)选取随机整数d∈[1,n-2];
[0034]
2.2)计算p=(x
p
,y
p
)=[d]g;其中(x
p
,y
p
)是p的坐标值;
[0035]
2.3)输出密钥对(d,p),其中私钥为d,公钥为p。
[0036]
3)求值
[0037]
求值流程如图1所示,输入系统参数pp、消息m∈{0,1}
*
、私钥d、公钥p,并执行以下步骤:
[0038]
3.1)计算u=[d]h'(m);
[0039]
3.2)将u的数据类型转换成字节串,计算y=h(m,u);
[0040]
3.3)将p的数据类型转换成字节串,计算e=hv(m,p),并将e的数据类型转换成整数;
[0041]
3.4)选取随机整数k∈[1,n-1];
[0042]
3.5)计算椭圆曲线点(x1,y1)=[k]g,将x1的数据类型转换成整数;
[0043]
3.6)计算椭圆曲线点(x2,y2)=[k]h'(m),将x2的数据类型转换成整数;
[0044]
3.7)计算γ=(e+x1+x2)modn,若γ=0或γ+k=n则返回步骤3.4);
[0045]
3.8)计算δ=((1+d)-1
·
(k-γ
·
d))modn,若δ=0则返回步骤3.4);
[0046]
3.9)将γ和δ的数据类型转换成字符串,输出函数值和证据对(y,π),其中π=(u,(γ,δ))。
[0047]
4)验证
[0048]
验证流程如图2所示,输入系统参数pp、消息m'∈{0,1}
*
、函数值和证据对(y',π')、公钥p',并执行以下步骤:
[0049]
4.1)验证者解析收到的数据包,得到π'=(u',(γ',δ'));
[0050]
4.2)检验γ'∈[1,n-1]是否成立,若不成立则验证不通过;
[0051]
4.3)检验δ'∈[1,n-1]是否成立,若不成立则验证不通过;
[0052]
4.4)将p'的数据类型转换成字节串,计算e'=hv(m',p'),并将e的数据类型转换成整数;
[0053]
4.5)将γ'和δ'的数据类型转换成整数,计算t=(γ'+δ')modn,若t=0则验证不通过;
[0054]
4.6)计算椭圆曲线点(x1',y1')=[δ']g+[t]p',将x1'的数据类型转换成整数;
[0055]
4.7)计算椭圆曲线点(x2',y2')=[δ']h'(m')+[t]u',将x2'的数据类型转换成整数;
[0056]
4.8)计算r=(e'+x1'+x2')modn,检验r=γ'是否成立,若成立则验证通过;否则验证不通过。
[0057]
本发明的另一实施例提供一种基于sm2的可验证随机函数构造装置,其为一种计算机设备(计算机、服务器、智能手机等),其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明方法中各步骤的指令。
[0058]
本发明的另一实施例提供一种计算机可读存储介质(如rom/ram、磁盘、光盘),所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现本发明方法的各个步骤。
[0059]
本发明基于sm2的可验证随机函数构造方法适用于分布式环境下有强安全需求的应用场景,如隐私保护的选举机制、投票系统、抗适应性腐化的区块链共识、密码学货币等。
[0060]
例如,本发明的一个实施例中,提供一种隐私保护的选举方法,包括以下步骤:
[0061]
1)注册阶段
[0062]
1.1)参与选举的节点调用本发明方法中的密钥创建步骤(或称密钥创建子算法),生成节点自己的公私钥,并将公钥发送给选举系统的服务器进行注册;
[0063]
1.2)服务器记录并公开所有注册节点的公钥。
[0064]
2)选举阶段
[0065]
2.1)服务器公开一个随机数r∈{0,1}
*
和系统阈值参数t;
[0066]
2.2)每个已注册的节点独立调用本发明方法中的求值步骤(或称求值子算法),并将服务器公开的随机数r作为求值函数的输入消息,计算得到函数值和证据对(y,π);
[0067]
2.3)各节点独立判断计算得到的的函数值y与系统阈值参数t之间的关系。若满足y《t,则该节点被选中;反之,该节点落选。
[0068]
3)公开阶段
[0069]
3.1)选中的节点将其计算得到的函数值和证据对(y,π)公开;
[0070]
3.2)所有其他节点及选举系统的服务器均可独立验证已公开选举信息的节点是否当选。此过程通过调用本发明方法中的验证步骤(或称验证子算法)实现:若将节点公开的函数值、证据对、节点公钥和选举阶段服务器公开的随机数作为验证子算法输入,验证子算法输出验证通过,并且节点公开的函数值小于系统阈值t,则该节点被选中;反之该节点没有被选中。
[0071]
在此隐私保护的选举方法中,三个阶段分别执行本发明方法的不同子算法,用于节点独立判断自己在选举中的当选情况,并可以令其他节点公开验证已公开选举信息节点
的选举结果。其特点是,哪些节点当选这一选举结果在执行公开阶段之前是隐私保护,这是利用了本发明方法满足函数值发布前的机密性。
[0072]
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。

技术特征:
1.一种基于sm2的可验证随机函数构造方法,其特征在于,包括如下步骤:初始化步骤:根据初始的安全参数l
vrf
,生成公开的系统参数pp;密钥创建步骤:输入公开的系统参数pp,输出密钥对(d,p),其中d为私钥,p为公钥;求值步骤:对于输入值m和私钥d,生成函数值y=h(m,[d]h'(m))和证据π,其中h为密码杂凑算法,h'为散列到椭圆曲线算法;验证步骤:任意节点利用证据π'、输入值m'、以及对应的公钥p',验证函数值y'确由p'对应的私钥对输入值m'进行求值操作得到。2.如权利要求1所述的方法,其特征在于,所述系统参数pp表示为pp:=(g,n,h,h',h
v
),其中h'为散列到椭圆曲线算法h':{0,1}
*

e(f
q
),将任意长度的字节串映射到椭圆曲线群e(f
q
)的元素;其他参数的生成与sm2椭圆曲线公钥密码算法gm/t 0003.1-2012国家标准第5章的规定保持一致,其中密码杂凑算法h
v
:{0,1}
*

{0,1}
v
,椭圆曲线群e(f
q
)的基点g=(x
g
,y
g
)∈e(f
q
),g≠o,g的阶为n,o为对应椭圆曲线的无穷远点。3.如权利要求1所述的方法,其特征在于,所述密钥创建步骤与gm/t 0003.1-2012国家标准第6章的规定保持一致。4.如权利要求1所述的方法,其特征在于,所述求值步骤的操作如下:a)计算u=[d]h'(m);b)将u的数据类型转换成字节串,计算y=h(m,u);c)将p的数据类型转换成字节串,计算e=h
v
(m,p),并将e的数据类型转换成整数;d)选取随机整数k∈[1,n-1];e)计算椭圆曲线点(x1,y1)=[k]g,将x1的数据类型转换成整数;f)计算椭圆曲线点(x2,y2)=[k]h'(m),将x2的数据类型转换成整数;g)计算γ=(e+x1+x2)mod n,若γ=0或γ+k=n则返回步骤d);h)计算δ=((1+d)-1
·
(k-γ
·
d))mod n,若δ=0则返回步骤d);i)将γ和δ的数据类型转换成字符串,输出函数值和证据对(y,π),其中π=(u,(γ,δ))。5.如权利要求1所述的方法,其特征在于,所述求值步骤的操作为非交互式。6.如权利要求1所述的方法,其特征在于,所述验证步骤的操作如下:a)解析π'=(u',(γ',δ'));b)检验γ'∈[1,n-1]是否成立,若不成立则验证不通过;c)检验δ'∈[1,n-1]是否成立,若不成立则验证不通过;d)将p'的数据类型转换成字节串,计算e'=h
v
(m',p'),并将e的数据类型转换成整数;e)将γ'和δ'的数据类型转换成整数,计算t=(γ'+δ')modn,若则验证不通过;f)计算椭圆曲线点(x1',y1')=[δ']g+[t]p',将x1'的数据类型转换成整数;g)计算椭圆曲线点(x2',y2')=[δ']h'(m')+[t]u',将x2'的数据类型转换成整数;h)计算r=(e'+x1'+x2')modn,检验r=γ'是否成立,若成立则验证通过;否则验证不通过。7.一种隐私保护的选举方法,其特征在于,基于权利要求1~6中任一项所述基于sm2的可验证随机函数构造方法实现,所述基于sm2的可验证随机函数构造方法中的密钥创建步
骤、求值步骤、验证步骤分别称为密钥创建子算法、求值子算法、验证子算法;该隐私保护的选举方法包括:1)注册阶段,包括:1.1)参与选举的节点调用密钥创建子算法,生成节点自己的公私钥,并将公钥发送给选举系统的服务器进行注册;1.2)服务器记录并公开所有注册节点的公钥;2)选举阶段,包括:2.1)服务器公开一个随机数r和系统阈值参数t;2.2)每个已注册的节点独立调用求值子算法,并将服务器公开的随机数r作为求值函数的输入消息,计算得到函数值y和证据对;2.3)各节点独立判断计算得到的的函数值y与系统阈值参数t之间的关系,若满足y<t,则该节点被选中;反之,该节点落选;3)公开阶段,包括:3.1)选中的节点将其计算得到的函数值和证据对公开;3.2)所有其他节点及选举系统的服务器通过调用验证子算法独立验证已公开选举信息的节点是否当选。8.如权利要求7所述的方法,其特征在于,步骤3.2)包括:将节点公开的函数值、证据对、节点公钥和选举阶段服务器公开的随机数作为验证子算法输入,若验证子算法输出验证通过,并且节点公开的函数值小于系统阈值t,则该节点被选中;反之该节点没有被选中。9.一种基于sm2的可验证随机函数构造装置,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1~6中任一项所述方法的指令。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现权利要求1~6中任一项所述的方法。

技术总结
本发明提出一种基于SM2的可验证随机函数构造方法和装置,属于计算机技术与信息安全技术领域,旨在基于SM2椭圆曲线公钥密码算法,增强可验证随机函数的安全性,解决现有可验证随机函数难以保证节点使用恶意创建的密钥对时,所生成的函数值仍满足不可预测性。该方法包括初始化、密钥创建、求值、验证四个步骤,构造方法为非交互式,即函数值的生成无需其他节点的参与,适合在节点可能离线的分布式环境下使用。该方法满足恶意密钥创建下的不可预测性,适用于分布式环境下有强安全需求的应用场景,如隐私保护的随机选举、投票系统、抗适应性腐化的区块链共识、密码学货币等。密码学货币等。密码学货币等。


技术研发人员:胡可欣 张振峰
受保护的技术使用者:中国科学院软件研究所
技术研发日:2023.06.30
技术公布日:2023/10/5
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐