门限签名方法、装置、设备以及存储介质与流程

专利2022-05-10  19



1.本发明涉及数据处理技术领域,特别涉及一种基于sm2签名算法的门限签名方法、装置、设备以及存储介质。


背景技术:

2.sm2数字签名,指对于一个公私钥对[d, p]和明文m,持有秘钥d的签名者产生别人无法伪造的一段数字串,其他用户可以使用公开的公钥p和明文m来进行验证。在(t,n) 门限签名方案,秘钥是作为份额在n个参与人分享,任意多于 t 个参与者可以计算最终的签名,并且在方案执行过程中不会泄露关于私钥和参与者的子私钥的任何信息。
[0003]
基于此,现有技术中存在一种基于sm2签名算法的门限签名方案。目前的基于sm2签名算法的门限签名方案中,由于在分布式秘钥生成阶段,需要进行秘密逆元的分享,在秘密逆元的分享时会存在多项式的阶翻倍,需要n≥2t,且2t 1个参与人才可以生成一个有效的数字签名。


技术实现要素:

[0004]
有鉴于此,本发明实施例提供一种基于sm2签名算法的门限签名方法、装置、设备以及存储介质,以实现只需要n大于等于t,只需要t个参与人就可以生成有效签名。
[0005]
为实现上述目的,本发明实施例提供如下技术方案:本技术第一方面提供了一种基于sm2签名算法的门限签名方法,包括生成分布式秘钥、签名待签名明文和验签三个阶段,其中,所述生成分布式秘钥阶段中的秘密逆元的分享,包括:利用对方的同态加密公钥以同态加密的方法,加密自身的临时秘密a
i 、密文e
j
(k
j
) 和干扰因子β
i,j
,得到第一加密数据;其中,所述密文e
j
(k
j
) 由对方利用同态加密公钥p
j
加密自身的随机秘密k
j
得到;所述对方指代所述基于sm2签名算法的门限签名方法的n个参与人中的每个参与人;计算所述临时秘密a
i 和干扰因子β
i,j
的零知识证明;向所述对方发送所述临时秘密和干扰因子的零知识证明、以及所述第一加密数据;接收所述对方发送的分享秘密的基础值δ
i
;其中,所述分享秘密的基础值由所述对方利用自身的临时秘密a
i 、随机秘密k
i 、干扰因子、和每个参与人的第一交互秘密α
i,j 计算得到;其中,所述第一交互秘密α
i,j
由所述对方验证所述临时秘密和干扰因子的零知识证明合法时,利用自身的同态加密私钥解密所述第一加密数据得到;利用每个参与人的分享秘密的基础值、计算得到分享秘密的逆元。
[0006]
可选地,所述签名待签名明文,包括:利用对方参与者的同态加密公钥以同态加密的方法,加密权重值w
i
、密文e
j
(k
j
) 和干扰因子β
i,j ,得到第二加密数据;其中,所述密文e
j
(k
j
) 由对方参与者利用同态加密公
钥p
j
加密随机秘密k
j
得到;所述权重值w
i
由秘密共享份额s
i
转换得到;所述对方参与者指代参与签名的参与者集合中的每个参与者;计算所述权重值w
i
和干扰因子β
i,j 的零知识证明;向所述对方参与者发送所述权重值和干扰因子的零知识证明、以及第二加密数据;接收对方参与者发送的随机秘密k
j
的第二承诺;在验证所述随机秘密k
j
的第二承诺合法时,获取所述随机秘密k
j
的第二承诺中的目标值k
j
·
g,利用每个参与者的随机秘密k
j
的第二承诺中的目标值k
j
·
g,计算得到目标值r,再利用所述目标值r和待签名明文m对应的整数e计算得到第一签名值r;计算得到自身的签名基础值s
i
,并利用每个参与者的签名基础值s
i
以及第一签名值r,计算得到第二签名值s;其中,所述签名基础值s
i
利用基础值δ
i
、权重值w
i
和第一签名值r计算得到;所述基础值δ
i
利用自身的权重值w
i
、随机秘密k
i
、干扰因子和每个参与者的第二交互秘密α
i,j 计算得到;所述第二交互秘密α
i,j
由所述对方参与者验证所述权重值和干扰因子的零知识证明合法时,利用自身的同态加密私钥解密所述第二加密数据得到;组合所述第一签名值和所述第二签名值,得到最终签名为(r, s)。
[0007]
可选地,所述签名待签名明文之前,还包括生成参与签名的参与者集合,其中,所述生成参与签名的参与者集合包括:生成同态加密公、私钥对,并计算得到第一承诺和第二承诺;其中,所述第一承诺为椭圆曲线基点g、公共公钥p和待签名明文m对应的整数e的承诺;所述第二承诺为自身的随机秘密k
i 的承诺;接收所述对方广播的第一承诺、第二承诺和同态加密公钥;验证所述对方广播的第一承诺与自身的第一承诺相同,则将所述对方作为参与签名的参与者加入所述参与签名的参与者集合,并保存所述对方的同态加密公钥和第二承诺。
[0008]
可选地,所述生成分布式秘钥阶段中的计算公钥和分享份额,包括:接收所述对方广播的x轴横坐标x
i
、多项式系数的承诺、以及随机秘密k
i
的第一承诺d
i ;检查出所述对方广播的x轴横坐标x
i
不重复时,验证所述对方的随机秘密k
i
的第二承诺c
i
是否合法;若验证出所述随机秘密k
i
的第二承诺合法,则获取所述随机秘密k
i
的第二承诺中的目标值k
i
·
g,并利用每个参与人的随机秘密k
i
的第二承诺中的目标值,计算得到公钥;在接收到所述对方广播的多项式执行结果v
i,j
时,验证目标多项式p
j
(x) 的计算结果是否等于目标结果;其中,所述目标多项式p
j
(x)为利用所述对方多项式系数承诺作为系数构建得到,所述目标结果为所述对方的多项式执行结果v
i,j
与椭圆曲线基点g的积;若验证出目标多项式p
j
(x) 的计算结果等于目标结果,则利用每个参与人的多项式执行结果v
i,j
和自己的t

1阶多项式,计算分享份额s
i 。
[0009]
可选地,所述用每个参与人的多项式执行结果v
i,j
和自己的t

1阶多项式,计算分
享份额s
i
之后,还包括:计算所述分享份额s
i
的零知识证明并向所述对方广播;在接收到每个参与人广播的分享份额s
i
的零知识证明时,若验证每个参与人的分享份额s
i
的零知识证明合法,则获取所述每个参与人的分享份额s
i
的零知识证明的特征值;验证目标等式是否成立,所述目标等式为: ;式中,s
i
指代每个参与人的分享份额,g指代椭圆曲线基点,δ
‑1指代分享秘密的逆元,a
i 指代每个参与人的临时秘密;若验证所述目标等式成立,则判定所述共享份额和公钥生成完成。
[0010]
本技术第二方面提供了一种基于sm2签名算法的门限签名装置,用于执行生成分布式秘钥、签名待签名明文和验签三个阶段的流程,其中,所述门限签名装置生成分布式秘钥阶段中的秘密逆元的分享时,包括:第一加密单元,用于利用对方的同态加密公钥以同态加密的方法,加密自身的临时秘密a
i 、密文e
j
(k
j
) 和干扰因子β
i,j
,得到第一加密数据;其中,所述密文e
j
(k
j
) 由对方利用同态加密公钥p
j
加密自身的随机秘密k
j
得到;所述对方指代所述基于sm2签名算法的门限签名方法的n个参与人中的每个参与人;第一计算单元,用于计算所述临时秘密a
i 和干扰因子β
i,j
的零知识证明;第一发送单元,用于向所述对方发送所述临时秘密和干扰因子的零知识证明、以及所述第一加密数据;第一接收单元,用于接收所述对方发送的分享秘密的基础值δ
i
;其中,所述分享秘密的基础值由所述对方利用自身的临时秘密a
i 、随机秘密k
i 、干扰因子、和每个参与人的第一交互秘密α
i,j 计算得到;其中,所述第一交互秘密α
i,j
由所述对方验证所述临时秘密和干扰因子的零知识证明合法时,利用自身的同态加密私钥解密所述第一加密数据得到;第二计算单元,用于利用每个参与人的分享秘密的基础值、计算得到分享秘密的逆元。
[0011]
可选地,所述门限签名装置签名待签名明文时,包括:第二加密单元,用于利用对方参与者的同态加密公钥以同态加密的方法,加密权重值w
i
、密文e
j
(k
j
) 和干扰因子β
i,j
,得到第二加密数据;其中,所述密文e
j
(k
j
) 由对方参与者利用同态加密公钥p
j
加密随机秘密k
j
得到;所述权重值w
i
由秘密共享份额s
i
转换得到;所述对方参与者指代参与签名的参与者集合中的每个参与者;第三计算单元,用于计算所述权重值w
i
和干扰因子β
i,j
的零知识证明;第二发送单元,用于向所述对方参与者发送所述权重值和干扰因子的零知识证明、以及第二加密数据;第二接收单元,用于接收对方参与者发送的随机秘密k
j
的第二承诺;第一处理单元,用于在验证所述随机秘密k
j
的第二承诺合法时,获取所述随机秘密k
j
的第二承诺中的目标值k
j
·
g,利用每个参与者的随机秘密k
j
的第二承诺中的目标值k
j
·
g,计算得到目标值r,再利用所述目标值r和待签名明文m对应的整数e计算得到第一签名值;第四计算单元,用于计算得到自身的签名基础值s
i
,并利用每个参与者的签名基础值s
i
以及第一签名值r,计算得到第二签名值s;其中,所述签名基础值s
i
利用基础值δ
i
、权
重值w
i
和第一签名值r计算得到;所述基础值δ
i
利用自身的权重值w
i
、随机秘密k
i 、干扰因子和每个参与者的第二交互秘密α
i,j 计算得到;所述第二交互秘密α
i,j
由所述对方参与者验证所述权重值和干扰因子的零知识证明合法时,利用自身的同态加密私钥解密所述第二加密数据得到;组合单元,用于组合所述第一签名值和所述第二签名值,得到最终签名为(r, s)。
[0012]
可选地,还包括:生成单元,用于生成同态加密公、私钥对,并计算得到第一承诺和第二承诺;其中,所述第一承诺为椭圆曲线基点g、公共公钥p和待签名明文m对应的整数e的承诺;所述第二承诺为自身的随机秘密k
i
的承诺;第三接收单元,用于接收所述对方广播的第一承诺、第二承诺和同态加密公钥;保存单元,用于验证所述对方广播的第一承诺与自身的第一承诺相同,则将所述对方作为参与签名的参与者加入所述参与签名的参与者集合,并保存所述对方的同态加密公钥和第二承诺。
[0013]
可选地,所述门限签名装置生成分布式秘钥阶段中的计算公钥和分享份额,包括:第四接收单元,用于接收所述对方广播的x轴横坐标x
i
、多项式系数的承诺、以及随机秘密k
i
的第一承诺d
i ;第一验证单元,用于检查出所述对方广播的x轴横坐标x
i
不重复时,验证所述对方的随机秘密k
i
的第二承诺c
i
是否合法;第二处理单元,用于若验证出所述随机秘密k
i
的第二承诺合法,则获取所述随机秘密k
i
的第二承诺中的目标值k
i
·
g,并利用每个参与人的随机秘密k
i
的第二承诺中的目标值,计算得到公钥;第二验证单元,用于在接收到所述对方广播的多项式执行结果v
i,j
时,验证目标多项式p
j
(x) 的计算结果是否等于目标结果;其中,所述目标多项式p
j
(x)为利用所述对方多项式系数承诺作为系数构建得到,所述目标结果为所述对方的多项式执行结果v
i,j
与椭圆曲线基点g的积;第五计算单元,用于若验证出目标多项式p
j
(x) 的计算结果等于目标结果,则利用每个参与人的多项式执行结果v
i,j
和自己的t

1阶多项式,计算分享份额s
i 。
[0014]
可选地,还包括:第六计算单元,用于计算所述分享份额s
i
的零知识证明;第三发送单元,用于向所述对方广播;获取单元,用于在接收到每个参与人广播的分享份额s
i
的零知识证明时,若验证每个参与人的分享份额s
i
的零知识证明合法,则获取所述每个参与人的分享份额s
i
的零知识证明的特征值;第三验证单元,用于验证目标等式是否成立,所述目标等式为:;式中,s
i
指代每个参与人的分享份额,g指代椭圆曲线基点,δ
‑1指代分享秘密的逆元,a
i 指代每个参与人的临时秘密;判定单元,用于若验证所述目标等式成立,则判定所述共享份额和公钥生成完成。
[0015]
本技术第三方面提供了一种计算机存储介质,用于存储计算机程序,所述计算机程序被执行时,具体用于实现第一方面任意一项所述的基于sm2签名算法的门限签名方法。
[0016]
本技术第四方面提供了一种电子设备,包括存储器和处理器;其中,所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序,具体用于实现第一方面任意一项所述的基于sm2签名算法的门限签名方法。
[0017]
基于上述本发明实施例提供的一种基于sm2签名算法的门限签名方法、装置、设备以及存储介质,在生成分布式秘钥阶段中的秘密逆元的分享环节,利用对方的同态加密公钥以同态加密的方法,加密自身的临时秘密、密文和干扰因子,得到第一加密数据,在对方验证临时秘密和干扰因子的零知识证明合法时,利用自身的同态加密私钥解密第一加密数据得到的第一交互秘密,计算得到分享秘密的基础值后,再利用每个参与人的分享秘密的基础值、计算得到分享秘密的逆元;可以看出:采用同态加密的方法,即完成了计算得到分享秘密的逆元,而不需要构建多项式,也不会存在多项式的阶翻倍,因此只需要保证(t,n) 门限中,基于sm2签名算法的门限签名方法的参与人n只需要大于等于参与签名的参与者t即可,不需要2t 1个才能生成一个有效的数字签名。
附图说明
[0018]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0019]
图1为本技术实施例提供的秘密逆元的分享方法的时序图;图2为本技术另一实施例提供的公钥和分享份额的计算方法的时序图;图3为本技术另一实施例提供的参与签名的参与者集合的生成方法的时序图;图4为本技术另一实施例提供的签名的计算方法的时序图;图5为本技术另一实施例提供的基于sm2签名算法的门限签名装置的结构图;图6为本技术另一实施例提供的基于sm2签名算法的门限签名装置的结构图;图7为本技术另一实施例提供的电子设备的结构图。
具体实施方式
[0020]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0021]
在本技术中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0022]
本发明实施例提供一种基于sm2签名算法的门限签名方法、装置、设备以及存储介质,以实现只需要n大于等于t,只需要t个参与人就可以生成有效签名。
[0023]
本技术实施例公开的基于sm2签名算法的门限签名方法,主要分为三个阶段,具体如下:1、分布式秘钥生成对于一个(t,n)门限,n个参与人通过交互生成一个公共的公钥p,各自持有一个秘密分享的份额。
[0024]
2、签名n个参与人中,持有秘密份额的t个或以上参与者对待签名的明文m进行计算,得到的不可伪造的数字签名,并使用公钥p进行签名验证。
[0025]
3、验签使用公钥p、明文m和数字签名验证签名是否有效。
[0026] 需要说明的是,在分布式秘钥生成的阶段,也可分成三个阶段来完成,主要是准备阶段、安全计算k * a的逆元和计算公钥和分享份额,以下分别通过实施例来进行介绍。
[0027]
一、准备阶段:每个参与人(称为u
i
),各自执行以下操作:1)选择sm2国密椭圆曲线,基点为g,阶为n。
[0028]
2)各自使用安全随机数生成一个随机秘密k
i
,k
i
∈[1,n

1],计算各自的k
i
·
g 及其hash承诺[c
i , d
i
];其中:承诺验证d
i =
{data:k
i
·
g,salt:rand},承诺c
i
=hash(data
b
salt)。
[0029]
承诺验证d
i
可以称为随机秘密k
i
的第一承诺,承诺c
i 可以称为随机秘密k
i
的第二承诺,在承诺验证d
i 中,data指代k
i
·
g;salt指代rand。salt 为随机加盐,
b
为二进制合并。
[0030]
3)各自使用安全随机数生成一个临时秘密a
i
,a
i
∈[1,n

1],并计算各自的固定点r
i
=a
i
·
g。
[0031]
4)生成一个同态加密的公私钥对(可以使用任何支持加法乘法同态的算法)。
[0032]
5)广播随机秘密k
i
的hash承诺c
i
、固定点r
i
和同态加密公钥p
i

[0033]
6)每个参与人收到对方广播消息后,并保存随机秘密k
i
的hash承诺c
i
和固定点r
i

[0034]
二、安全计算k * a的逆元:本技术实施例公开的秘密逆元的分享方法,如图1所示,包括步骤:s101、每个参与人(称为u
j
)使用自己的同态加密公钥p
j
对持有的随机秘密k
j
加密,得到随机秘密k
j
的密文e
j
(k
j
) ,并广播给其他参与人u
i

[0035]
每个接收者u
i
收到e
j
(k
j
) 后,执行下述步骤:s102、使用安全随机数生成一个[0, n

1]的随机数做为干扰因子β
i,j , 并计算β
'i,j =-β
i,j

[0036]
s103、使用其他参与人u
j
的同态加密公钥p
j
,对自身的临时秘密a
i
、密文e
j
(k
j
)和干扰因子β
i,j
进行同态加密,计算得到第一加密数据e(α
i,j
)。
[0037]
其中,第一加密数据e(α
i,j
)的计算公式为:e(α
i,j
)=a
i ×

e
j
(k
j
),

e(β
'i,j
)。
[0038]
s104、计算自己持有的临时秘密a
i 和干扰因子β
i,j
的零知识证明。
[0039]
其中,可以使用任何支持零知识证明算法计算a
i
和β
i,j
的零知识证明。以下以扩展schnorr非交互式零知识证明协议为例进行说明。
[0040]
计算a
i
和β
i,j
的零知识证明的步骤包括:

u
i
使用自己持有的临时秘密a
i、
干扰因子β
i,j
和自己的固定点r
i
计算v值,计算公式为:v=a
i
·
g +β
i,j
·
r
i

[0041]

生成两个随机数m,n并计算alpha值:alpha= m
·
g +n
·
r
i

[0042]

计算c=h(g||v||r
i
||alpha),h为约定的hash算法,如sm3。
[0043]

计算u=(m c* a
i )modn ,t=(n c*β
i,j
)modn。n为sm2椭圆曲线的阶。
[0044]

结果(v,u, t, alpha)即为可验证的证明,验证者可以凭前一步收到的对方固定点r
i
和该证明进行验证,证明对方确实持有a
i
和β
i,j
而无法获知其实际值。
[0045]
s105、将第一加密数据e(α
i,j
)和零知识证明回送给对方。
[0046]
参与者u
j
收到对方送回的第一加密数据e(α
i,j
)和零知识证明证明后,执行下述步骤:s106、验证零知识证明。
[0047]
以扩展schnorr非交互式零知识证明为例:

使用前一步获取的对方u
i
的固定点r
i
和收到的零知识证明(v,u, t, alpha) ,计算c=h(g||v||r
j
||alpha)。
[0048]

计算并检查等式是否成立:t
·
g +u
·
r
j
==alpha c
·
v;其中:g为sm2椭圆曲线的基点,
·
表示椭圆曲线点乘, 表示椭圆曲线点加。
[0049]
s107、验证零知识证明合法时,利用自身的同态加密私钥解密第一加密数据得到第一交互秘密α
i,j
,其值等于:a
i * k
j
β
'i,j 。
[0050]
s108、在收集其他参与人的消息后,利用自身的临时秘密a
i
、随机秘密k
i
、干扰因子、和每个参与人的第一交互秘密α
i,j
计算分享秘密的基础值δ
i
;计算公式为:,并向其他参与人广播。
[0051]
每个参与人收到其他参与人的分享秘密的基础值δ
i
,执行下述步骤后:s109、计算分享秘密。
[0052]
由于所以:按照加法交换律可知:由于β
'i,j =-β
i,j
,累加后为零,可知δ为共享秘密a与k的乘积:s110、计算分享秘密δ对sm2椭圆曲线的分享秘密的逆元δ
‑1由上述内容可以看出:得到分布在n个参与者手上的两个秘密k
i
和a
i
的秘密乘积共享的逆元:进而还可以看出:对于共享秘密k=∑k
i ,和临时共享秘密a=∑a
i
,通过安全计算得到δ=a
×
k。由乘法分配律可知:
进一步计算δ的逆元,使得参与者都持有相同的共享秘密a与秘密k乘积的逆元。
[0053] 本技术实施例提供的门限签名方法,在计算k * a的逆元环节,即生成分布式秘钥阶段中的秘密逆元的分享环节,利用对方的同态加密公钥以同态加密的方法,加密自身的临时秘密、密文和干扰因子,得到第一加密数据,在对方验证临时秘密和干扰因子的零知识证明合法时,利用自身的同态加密私钥解密所述第一加密数据得到的第一交互秘密,计算得到的分享秘密的基础值后,再利用每个参与人的分享秘密的基础值、计算得到分享秘密的逆元;可以看出:采用同态加密的方法,即完成了计算得到分享秘密的逆元,而不需要构建多项式,也不会存在多项式的阶翻倍,因此只需要保证(t,n) 门限中,基于sm2签名算法的门限签名方法的参与人n只需要大于等于参与签名的参与者t即可,不需要2t 1个才能生成一个有效的数字签名。并且,在秘密逆元的分享环节还引入了干扰因子,可以有效地防止秘密泄露。
[0054]
三、计算公钥和分享份额本技术另一实施例公开的公钥和分享份额的计算方法,如图2所示,包括步骤:每个参与人u
i
执行下述步骤:s201、生成一个随机数x
i 作为各自的x轴横坐标,其中,x
i
∈[1,n

1],且要求每个参与人持有的值不能相同。
[0055]
s202、生成一个t

1阶多项式:,使用自身持有的临时秘密a
i 与分享秘密δ逆元的乘积做为共享秘密分片: δ
‑1a
i
modn作为常量,系数(u
i,j
)∈[1,n

1], n为sm2椭圆曲线的阶。
[0056]
s203、计算多项式系数的hash承诺{u
i,j
· g}。
[0057]
s204、广播自己持有的x轴横坐标x
i
、多项式系数的hash承诺、随机秘密k
i
的承诺验证d
i =
{data:k
i
·
g,salt:rand}。
[0058]
参与人u
j
收到参与人u
i
的x轴横坐标x
i
、随机秘密k
i
的承诺验证d
i
和多项式系数的hash承诺后执行下述步骤:s205、检查参与人u
i
的x横坐标是否重复。
[0059]
其中,如果接收到对方的x坐标与自身持有的相同,重新接收步骤s204广播的x轴横坐标x
i
、多项式系数的hash承诺、随机秘密k
i
的承诺。若如果接收到对方的x坐标与自身持有的不相同,则继续执行下述步骤:s206、验证随机秘密k
i
的第二承诺c
i
合法时,获取随机秘密k
i
的第二承诺中的目标值k
i
·
g。
[0060]
具体的,验证在准备阶段收到的hash承诺c
i
是否合法,若合法,则从随机秘密k
i
的承诺验证d
i =
{data:k
i
·
g,salt:rand}得到k
i
·
g。
[0061]
s207、利用每个参与人的目标值,计算共享秘密对应的公共公钥。
[0062]
如此可知:实际秘密共享的私钥为(k

1)。
[0063]
s208、使用对方的x坐标x
i
和自身持有的多项式计算得到多项式执行结果v
i,j = f
j
(x
i
),并发送回对方u
i

[0064]
每个参与人u
i
收到对方的多项式执行结果v
i,j
后,执行下述步骤:s209、验证目标多项式p
j
(x) 的计算结果是否等于目标结果。
[0065]
具体的:使用对方多项式系数承诺作为系数构建目标多项式p
j
(x), 再用自身的x坐标参数进行计算,验证计算结果是否等于v
i,j
· g这个目标结果。目标结果即为对方的多项式执行结果v
i,j
与椭圆曲线基点g的积。
[0066]
s210、若验证出目标多项式p
j
(x) 的计算结果等于目标结果,则利用每个参与人的多项式执行结果v
i,j
和自己的t

1阶多项式,计算分享份额:。
[0067]
s211、计算并广播分享份额s
i
的零知识证明。
[0068]
可选地,可以使用标准schnorr非交互式零知识证明协议计算s
i
的零知识证明,包括下述步骤:

计算v=s
i ·
g 。
[0069]

生成两个随机数m,n ,m,n均属于[1, n

1], n为sm2椭圆曲线的阶。
[0070]

计算alpha = m
·
g n
·
g。
[0071]

计算c=h(g||v||g||alpha)。
[0072]

计算u=(m c* s
i )modn ,t=n;n为sm2椭圆曲线的阶。
[0073]
其中:计算结果(v,u, t, alpha)即为可验证的零知识证明。
[0074]
每个参与人收到分享份额s
i
的零知识证明后执行下述步骤:s212、验证分享份额s
i
的零知识证明:

计算c=h(g||v||g||alpha)。
[0075]

验证等式是否成立:t
·
g +u
·
g==alpha c
·
v ;式中g为sm2椭圆曲线的基点,
·
表示椭圆曲线点乘, 表示椭圆曲线点加。
[0076] s213、获取参与人的分享份额s
i
的零知识证明的特征值s
i
·
g值,即获取零知识证明中的v值。
[0077]
s214、验证目标等式是否成立:。式中,s
i
指代每个参与人的分享份额,g指代椭圆曲线基点,δ
‑1指代分享秘密的逆元,a
i
指代每个参与人的临时秘密。
[0078]
其中,若验证目标等式成立通过,则执行步骤s215、判定共享份额和公钥生成完成。
[0079]
通过以上交互过程,n个参与人各自持有一个公开的x横坐标和一个feldman可验证秘密共享份额,对于一个[t,n]门限,t个参与者交互可以生成正确的签名。
[0080]
对于一个sm2加密算法的公私钥对:{d, p},其实际共享的秘密为(1 d)逆元,以此简化后续多方签名的过程:
交互过程中不会泄露共享秘密的信息,并且过程中采用hash承诺和零知识证明技术,保证交互过程的安全性。
[0081]
共享秘密的公钥为:还需要说明的是,步骤s211到步骤s214是可选择性执行的,在不需要通过零知识证明来验证分享份额s
i
的情况下,可以不需要执行步骤s211到步骤s214。
[0082]
下述也通过实施例来介绍签名的过程。
[0083]
一、准备阶段:在准备阶段,能够构建得到参与签名的参与者集合,集合中包含参与签名的参与者,具体的,从n个基于sm2签名算法的门限签名方法的参与人中,找到t个参与人即完成了参与签名的参与者集合。
[0084]
参与签名的参与者集合的生成方法中,n个基于sm2签名算法的门限签名方法的每一个参与人执行下述步骤。以下以参与人u
i
和参与人u
j
之间的交互来进行说明,参与签名的参与者集合的生成方法中,每个参与人先执行下述步骤,如图3所示,以参与人u
i
为例说明:s301、将待签名明文m转换为整数e=h(z
a
||m)。
[0085] 其中: z
a = h(entl
a
||id
a
||a||b||x
g
||y
g
||x
a
||y
a
),是按 sm2 椭圆曲线公钥密码算法,将椭圆曲线方程参数 a 、 b 、 g 的 坐 标 x
g 、 y
g 和 p
a 的 坐 标 x
a 、 y
a 的 数 据 类 型 转 换 为 比 特 串;h为hash算法,对于sm3withsm2签名算法,其为sm3。
[0086]
s302、计算使用的sm2椭圆曲线基点g、公共公钥p和待签名明文m对应的整数e的hash承诺:hash(g||e
·
p),该承诺称之为第一承诺。
[0087]
s303、选择一个随机秘钥k
i
∈[1,n

1], 并计算其hash承诺: hash(k
i
·
g),该承诺称之为第二承诺。
[0088] s304、生成一个同态加密的公、私钥对;其中,同态加密公钥为p
i

[0089]
s305、广播第一承诺、第二承诺以及同态加密公钥p
i

[0090]
其中,参与人u
i
向各个参与人广播第一承诺、第二承诺、以及同态加密公钥p。
[0091]
s306、各方接收到第一承诺、第二承诺以及同态加密公钥p
i
后,验证第一承诺hash(g||e
·
p)与本人持有的第一承诺是否相同。
[0092]
其中,参与人u
j
会接收到第一承诺、第二承诺以及同态加密公钥p
i
,在接收到之后,则验证自己的第一承诺与接收的第一承诺,是否相同,并执行下述步骤。
[0093]
若验证相同,则证明对方是合法的签名参与人,并持有相同公共公钥p和待签名明文m对应的整数e,则执行s307和s308。
[0094]
s307、将合法的签名参与人记入参与签名的参与者集合|s|。
[0095]
s308、保存对方广播的同态加密公钥p
i
和随机秘钥k
i
的hash承诺备用,即保存同态加密公钥p
i
和第二承诺。
[0096]
还需要说明的是,在确认参与签名的参与者集合|s|≥t时,则开始联合签名计算。
[0097]
二、共享份额权重转换
对于一个t

1阶的多项式,已知大于等于t个非重合点,可以求解。
[0098]
按照拉格朗日插值法,可以构造一个次数不超过t的插值函数多项式l
n
(x),使得l
n
(x
i
)= y
i
=f(x
i )成立,其拉格朗日插值公式:因此,对于参与签名的大于等于t个参与者集合|s|,各参与者的x坐标值已知,可以使用拉格朗日插值公式将持有的秘密共享份额s
i
转换为权重,使得共享的秘密f(0)满足:三、计算签名由上述实施例构建的参与签名的参与者集合中的t个参与者,相互交互完成对待签名明文的签名。同样,以参与者u
i
和参与者u
j
之间的交互来进行说明,参与签名的参与者集合中的t个参与者,分别先执行下述步骤,如图4所示,以参与者u
j
为例来说明。
[0099]
s401、参与者u
j
使用同态加密公钥p
j
对持有的随机秘密k
j
加密得到随机秘密k
j
的密文e
j
(k
j
) ,并广播给其他参与者。
[0100]
每个参与者收到参与者u
j
广播的密文e
j
(k
j
) 之后,会执行下述步骤,以下也以参与者u
i
为例来说明。
[0101]
s402、参与者u
i
收到对方加密的秘文e
j
(k
j
)后,生成随机干扰因子β
i,j
并计算β' =
ꢀ‑ꢀ
β
i,j

[0102]
s403、利用参与者u
j
的同态加密公钥以同态加密的方法,加密权重值w
i
、密文e
j
(k
j
) 和干扰因子β
i,j
,得到第二加密数据。
[0103]
其中,第二加密数据的公示为:e(α
i,j
)=w
i ×

e (k
j
)

e(β

)。
[0104]
s404、计算权重值w
i
和干扰因子β
i,j
的零知识证明。
[0105]
其中,可以使用任何支持零知识证明算法计算权重值w
i
和干扰因子β
i,j
的零知识证明。以下同样以扩展schnorr非交互式零知识证明协议为例进行说明。
[0106]
计算权重值w
i
和干扰因子β
i,j
的零知识证明的步骤,包括:

u
i
使用自己持有的权重值w
i、
干扰因子β
i,j
和自己的固定点r
i
计算v值,计算公式为:v= w
i
·
g β
i,j ·
r
i

[0107]

生成两个随机数m,n并计算alpha值:alpha= m
·
g +n
·
r
i

[0108]

计算c=h(g||v|| r
i
||alpha),h为约定的hash算法,如sm3。
[0109]

计算u=(m c* a
i )modn ,t=(n c*β
i,j )modn。n为sm2椭圆曲线的阶。
[0110]

结果(v,u, t, alpha)即为可验证的证明。
[0111]
s405、发送第二加密数据e (α
i,j
)、以及权重值w
i
和干扰因子β
i,j
的零知识证明给对方。
[0112]
参与者u
j
收到消息后,执行下述步骤:s406、参与者u
j
收到消息后,验证权重值w
i
和干扰因子β
i,j
的零知识证明。
[0113]
s407、若验证零知识证明通过,则使用自己持有的同态加密私钥解密第二加密数据e (α
i,j
),得到第二交互秘密α
i,j =k
i w
j
β
'j,i 。
[0114]
s408、从权重值w
i
和干扰因子β
i,j
的零知识证明中,得到参与者u
i
的w
i
·
g的值。
[0115]
s409、在收集每个参与者的消息后,利用自身的权重值w
i
、随机秘密、干扰因子β
i,j
和每个参与者的第二交互秘密α
i,j 计算得到基础值δ
i
;。
[0116]
s410、广播随机秘密k
j
的第二承诺,即k
j
·
g的承诺。
[0117]
参与者u
i
收到k
j
·
g的承诺后,执行下述步骤:s411、接收到k
j
·
g的承诺,验证k
j
·
g的承诺合法时,从k
j
·
g的承诺中取出承诺中的目标值,即k
j
·
g的值,并利用每个参与者的随机秘密k
j
的第二承诺中的k
j
·
g的值,计算得到目标值。
[0118]
s412、利用目标值r和待签名明文m对应的整数e计算得到第一签名值r,计算公式为: r = rx e mod n。n为sm2椭圆曲线的阶。
[0119]
s413、计算自身的签名基础值s
i =δ
i
w
i
*r,并广播签名基础值。
[0120]
s414、收集到其他参与签名的参与人的s
i
后,利用每个参与者的签名基础值s
i
以及第一签名值r,计算得到第二签名值s,s=∑s
i

r。
[0121]
s415、组合第一签名值和第二签名值,得到最终签名为(r, s) 。
[0122]
需要说明的是,在现有技术的基于sm2签名算法的门限签名方案中,在签名阶段,也需要秘密乘积的分享,也需要构建多项式,导致多项式的阶翻倍,需要n≥2t,且2t 1个参与人才可以生成一个有效的数字签名。
[0123]
而在本技术实施例提供的门限签名方法,在签名的环节中,也利用对方参与者的同态加密公钥以同态加密的方法,加密权重值、密文和干扰因子,得到第二加密数据,并计算权重值和干扰因子的零知识证明;在接收对方参与者发送的随机秘密的第二承诺,在验证随机秘密的第二承诺合法时,获取所述随机秘密的第二承诺中的目标值,利用每个参与者的随机秘密的第二承诺中的目标值计算得到目标值,再利用目标值和待签名明文对应的整数计算得到第一签名值;并且,在对方参与者验证权重值和干扰因子的零知识证明合法时,利用自身的同态加密私钥解密第二加密数据得到第二交互秘密,以自身的权重值、随机秘密、干扰因子和每个参与者的第二交互秘密计算得到基础值,再利用基础值、权重值和第一签名值计算得到签名基础值;利用每个参与者的签名基础值以及第一签名值,计算得到第二签名值;组合第一签名值和第二签名值,就得到最终签名。由此可以看出:在签名的环节中,用同态加密的方法,即待签名明文的签名,而不需要构建多项式,也不会存在多项式的阶翻倍,因此只需要保证(t,n) 门限中,进一步保证基于sm2签名算法的门限签名方法的参与人n只需要大于等于参与签名的参与者t即可,不需要2t 1个才能生成一个有效的数字签名。
[0124]
还需要说明的是,基于sm2签名算法的门限签名方法的参与人,只要在秘密逆元的分享环节进行一次加解密,在签名环节进行一次加解密,不需要复杂的算法,性能可以得到很大的提升,且在参与人之间的交互过程中,没有存在秘钥的全文格式,保障了安全性。
[0125]
签名验证由于采用上述实施例公开的签名方法对待签名明文m签名得到的签名(r,s),完全符合国密sm2算法规范,可以直接按照gm/t 0003.2《sm2椭圆曲线公钥密码算法第2部分

数字签名算法》的规范,使用公共的公钥、数字签名和签名内容进行签名验证计算。验签简要步骤如下:验签者在收到签名(r,s)和待签名明文m后:1)按照gm/t 0003.2《sm2椭圆曲线公钥密码算法第2部分数字签名算法》的规范,将待签名明文m转换为整数e=h(z
a
||m)。
[0126]
其中: z
a = h(entl
a
||id
a
||a||b||x
g
||y
g
||x
a
||y
a
),是将椭圆曲线方程 参 数 a 、 b 、 g 的 坐 标 x
g 、 y
g 和 pa 的 坐 标 x
a 、 y
a 的 数 据 类 型 转 换 为 比 特 串;h为hash算法,对于sm3withsm2签名算法,其为sm3;m为待验签的数据。
[0127]
2)计算下述公式是否成立。
[0128]
公式为:(x

,y

) =s
·
g +(r+s)
·
p ; 其中:g为sm2椭圆曲线的基点,p为公钥。
[0129]
3)判断等式是否成立:(x
’ꢀ
e)是否等于签名中的r。
[0130]
本技术实施例提供的基于sm2签名算法的门限签名方法在执行效率上,比现有技术有极大提升,提高了门限签名方法的实用性。以下可以从网络交互和计算量两个维度进行比较。
[0131]
网络交互:网络交互的复杂度又可以分为交互次数和数据量,网络交互次数表示了完成算法的网络复杂程度,交互的数据量则代表对网络带宽资源的占用。计算量:评估算法计算复杂度和对计算资源使用效率。
[0132]
网络交互复杂度的比较如下表所示: 为了更细致评估算法的计算效率,本技术提供的门限签名方案对关键的操作首先进行基准性能评估,为保证可比性,同态加密选择相同的算法

paillier算法:
从基准测试可以看出同态加密对资源消耗很大。
[0133]
计算量评估的比较如下表所示:本技术另一实施例还公开了一种基于sm2签名算法的门限签名装置,用于执行生成分布式秘钥、签名待签名明文和验签三个阶段的流程,其中,所述门限签名装置生成分布式秘钥阶段中的秘密逆元的分享时,如图5所示,包括:第一加密单元501,用于利用对方的同态加密公钥以同态加密的方法,加密自身的临时秘密、密文和干扰因子,得到第一加密数据;其中,密文由对方利用同态加密公钥加密自身的随机秘密k
j 得到;对方指代所述基于sm2签名算法的门限签名方法的n个参与人中的每个参与人;第一计算单元502,用于计算临时秘密和干扰因子的零知识证明;第一发送单元503,用于向对方发送临时秘密和干扰因子的零知识证明、以及第一加密数据;第一接收单元504,用于接收对方发送的分享秘密的基础值;其中,分享秘密的基础值由对方利用自身的临时秘密、随机秘密、干扰因子、和每个参与人的第一交互秘密计算得到;其中,第一交互秘密由所述对方验证临时秘密和干扰因子的零知识证明合法时,利用自身的同态加密私钥解密第一加密数据得到;
第二计算单元505,用于利用每个参与人的分享秘密的基础值、计算得到分享秘密的逆元。
[0134]
本技术实施例公开的单元的具体工作过程,可参见对应图1的实施例内容,此处不在赘述。
[0135]
可选地,本技术另一实施例中,所述门限签名装置签名待签名明文时,包括:第二加密单元,用于利用对方参与者的同态加密公钥以同态加密的方法,加密权重值、密文和干扰因子,得到第二加密数据;其中,所述密文由对方参与者利用同态加密公钥加密随机秘密得到;权重值由秘密共享份额转换得到;对方参与者指代参与签名的参与者集合中的每个参与者;第三计算单元,用于计算权重值和干扰因子的零知识证明;第二发送单元,用于向对方参与者发送权重值和干扰因子的零知识证明、以及第二加密数据;第二接收单元,用于接收对方参与者发送的随机秘密的第二承诺;第一处理单元,用于在验证所述随机秘密的第二承诺合法时,获取所述随机秘密的第二承诺中的目标值,利用每个参与者的随机秘密的第二承诺中的目标值,计算得到目标值,再利用目标值和待签名明文对应的整数计算得到第一签名值;第四计算单元,用于计算得到自身的签名基础值,并利用每个参与者的签名基础值以及第一签名值,计算得到第二签名值;其中,所述签名基础值s
i
利用基础值、权重值和第一签名值计算得到;基础值利用自身的权重值、随机秘密、干扰因子和每个参与者的第二交互秘密计算得到;所述第二交互秘密所述对方参与者验证所述权重值和干扰因子的零知识证明合法时,利用自身的同态加密私钥解密所述第二加密数据得到;组合单元,用于组合所述第一签名值和所述第二签名值,得到最终签名为。
[0136]
本技术实施例公开的单元的具体工作过程,可参见对应图4的实施例内容,此处不在赘述。
[0137]
可选地,本技术另一实施例中,如图6所示,基于sm2签名算法的门限签名装置除了包括第一加密单元601、第一计算单元602、第一发送单元603、第一接收单元604和第二计算单元605之外,还包括:生成单元606,用于生成同态加密公、私钥对,并计算得到第一承诺和第二承诺;其中,所述第一承诺为椭圆曲线基点、公共公钥和待签名明文对应的整数的承诺;所述第二承诺为自身的随机秘密的承诺。
[0138]
第三接收单元607,用于接收所述对方广播的第一承诺、第二承诺和同态加密公钥。
[0139]
保存单元608,用于验证所述对方广播的第一承诺与自身的第一承诺相同,则将所述对方作为参与签名的参与者加入参与签名的参与者集合,并保存所述对方的同态加密公钥和第二承诺。
[0140]
其中,生成单元606,第三接收单元607和保存单元608配合生成参与签名的参与者集合,其具体工作过程可参见对应图3的实施例的内容,此处不再赘述。
[0141]
可选地,本技术另一实施例中,所述门限签名装置生成分布式秘钥阶段中的计算公钥和分享份额,包括:
第四接收单元,用于接收所述对方广播的x轴横坐标、多项式系数的承诺、以及随机秘密的第一承诺。
[0142]
第一验证单元,用于检查出所述对方广播的x轴横坐标不重复时,验证所述对方的随机秘密的第二承诺是否合法。
[0143]
第二处理单元,用于若验证出所述随机秘密的第二承诺合法,则获取所述随机秘密的第二承诺中的目标值,并利用每个参与人的随机秘密的第二承诺中的目标值,计算得到公钥。
[0144]
第二验证单元,用于在接收到所述对方广播的多项式执行结果时,验证目标多项式的计算结果是否等于目标结果;其中,所述目标多项式为利用所述对方多项式系数承诺作为系数构建得到,所述目标结果为所述对方的多项式执行结果与椭圆曲线基点的积。
[0145]
第五计算单元,用于若验证出目标多项式的计算结果等于目标结果,则利用每个参与人的多项式执行结果和自己的t

1阶多项式,计算分享份额。
[0146]
可选地,本技术另一实施例中,基于sm2签名算法的门限签名装置,还包括:第六计算单元,用于计算所述分享份额的零知识证明。
[0147]
第三发送单元,用于向所述对方广播。
[0148]
获取单元,用于在接收到每个参与人广播的分享份额的零知识证明时,若验证每个参与人的分享份额的零知识证明合法,则获取所述每个参与人的分享份额的零知识证明的特征值。
[0149]
第三验证单元,用于验证目标等式是否成立,目标等式为: ;式中,s
i 指代每个参与人的分享份额,g指代椭圆曲线基点,δ
‑1指代分享秘密的逆元,a
i
指代每个参与人的临时秘密。
[0150]
判定单元,用于若验证目标等式成立,则判定所述共享份额和公钥生成完成。
[0151]
上述两个实施例提供的各个单元的具体工作过程,可参见对应图2所示的实施例内容,此处不再赘述。
[0152]
本技术另一实施例提供了一种电子设备,如图7所示,包括:一个或多个处理器701。
[0153]
存储器702,其上存储有一个或多个程序。
[0154]
当所述一个或多个程序被所述一个或多个处理器701执行时,使得所述一个或多个处理器701实现如上述实施例中任意一项所述的方法。
[0155]
本技术另一实施例提供了一种计算机存储介质,其上存储有计算机程序,其中,计算机程序被处理器执行时实现如上述实施例中任意一项所述的方法。
[0156]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术
人员在不付出创造性劳动的情况下,即可以理解并实施。
[0157]
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0158]
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
转载请注明原文地址:https://doc.8miu.com/read-1350102.html

最新回复(0)