具有秘密共享的(EC)DSA阈值签名的制作方法


具有秘密共享的(ec)dsa阈值签名
技术领域
1.本公开涉及一种生成消息的数字签名份额的方法,以及一种使用签名份额生成消息的数字签名的方法。


背景技术:



2.公钥密码学是一种使用密钥对的加密系统,该密钥对包括:私钥,其仅对私钥所有者已知;以及公钥,其是基于对应的私钥生成的,并且可以在不损害私钥安全性的情况下进行传播。
3.公钥密码学使得发送者能够使用接收者的公钥(即,与仅对接收者已知的私钥对应的公钥)来加密消息。该加密消息随后只能使用接收者的私钥进行解密。
4.类似地,发送者可以使用自己的私钥对消息进行签名,例如以证明该消息是由发送者发送的,和/或指示发送者同意该消息。签名者(即,生成签名的一方)使用他们的私钥在该消息中创建数字签名。拥有签名者的对应公钥的任何人都可以使用同一消息以及该消息中的数字签名来验证签名是否有效创建,即签名是否确实是使用签名者的私钥创建的。
5.数字签名方案通常涉及三个过程,即算法。密钥生成算法用于生成随机私钥和对应的公钥。签名算法用于基于消息和私钥来生成签名。在给定公钥和消息的情况下,验证算法用于验证是否已使用对应的私钥并根据签名算法生成签名。
6.阈值签名方案允许一组中阈值数量的参与者使用共享私钥的单独份额在消息中创建数字签名(或创建消息的数字签名)。这里,数字签名是基于待签名消息生成的签名。在此类方案中,只有当阈值数量的参与者同意在消息中生成签名时,才能创建签名。使用较少数量的参与者生成签名的任何尝试都不会生成有效的签名。因此,该组的有效签名(即,使用消息和共享私钥生成的签名)可证明具有阈值数量的人同意生成签名。这还意味着,任何攻击者都需要获取私钥的阈值数量的份额,才能使用该私钥伪造签名。
7.阈值签名份额的一个共同特征在于,如果任何私钥份额丢失,只要阈值数量的份额仍然可用,私钥仍然可以恢复。
8.一种特殊的数字签名算法是椭圆曲线数字签名算法(ecdsa)。ecdsa签名有两种常见的阈值方案。一种阈值ecdsa方案是一种非最优方案,其中一组共同拥有阈值为t+1的共享私钥,但创建签名需要更高的阈值2t+1。有关详细描述,请参见gennaro,r.等人的“鲁棒阈值dss签名”,关于密码技术的理论和应用的国际会议,德国柏林施普林格出版社,1996年。该方案在下文中称为“非最优gennaro方案”。
9.另一种公共阈值ecdsa方案是一种最优方案,其中最优意味着创建签名的阈值与共享私钥的阈值相同。有关详细描述,请参见gennaro,r.和goldfeder,s.,“具有快速无信任设置的快速多方阈值ecdsa”,2018年acm sigsac计算机和通信安全会议记录,2018年。该方案在下文中称为“最优gennaro方案”。


技术实现要素:



10.非最优gennaro方案的优点在于,在计算和通信轮次方面十分高效。缺点在于,用于创建私钥的阈值小于用于生成数字签名的阈值。问题在于无法确定参与者聚集在一起进行签名的阈值数量。也就是说,由于可以使用私钥计算签名,因此数量小于用于生成签名的阈值的参与者可以聚集在一起使用私钥而不是使用阈值签名对消息进行签名。例如,用于生成私钥的阈值可以是2,而用于生成签名的阈值可以是3。在这种情况下,两个人可以生成私钥并因此生成签名,从而避免需要三个人来生成阈值签名。
11.相比之下,最优gennaro方案的优点在于,用于生成私钥的阈值和用于生成签名的阈值没有差异。然而,该方案的计算和通信轮次较高,签名创建较慢,且扩展性不佳。
12.因此,需要一种阈值ecdsa方案,其具有非最优gennaro方案的计算、存储和通信优势,同时务必确保阈值最优,如最优gennaro方案。
13.根据本文公开的一个方面,提供一种生成消息的数字签名份额的计算机实现的方法,其中需要来自一组参与者中的相应参与者的阈值数量的不同签名份额来生成所述数字签名,其中每个参与者具有相应的私钥份额,所述方法由所述参与者中的第一参与者执行并且包括:生成第一消息无关组件和第一消息相关组件,其中所述消息无关组件是基于第一私钥份额生成的,并且其中所述消息相关组件是基于所述消息生成的;使得所述第一消息无关组件能够提供给协调者;以及,使得第一签名份额能够提供给所述协调者,用于基于至少所述阈值数量的签名份额来生成所述签名,其中所述第一签名份额至少包括所述消息相关组件。
14.根据本文公开的另一方面,提供一种生成消息的数字签名的计算机实现的方法,其中需要来自一组参与者中的相应参与者的阈值数量的不同签名份额来生成所述数字签名,其中每个参与者具有相应的私钥份额,所述方法由协调者执行并且包括:获取至少阈值数量的相应消息无关组件,其中每个相应消息无关组件是基于相应私钥份额生成的;获取至少所述阈值数量的相应签名份额,其中每个相应签名份额至少基于相应的消息相关组件,并且其中每个相应的消息相关组件是基于所述消息生成的;以及,基于每个获取到的所述签名份额和每个获取到的所述消息无关组件来生成所述消息的所述签名。
附图说明
15.为了帮助理解本公开的实施例并显示如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
16.图1示意性地示出了根据本发明各实施例的用于生成消息的签名的示例性系统;
17.图2示意性地示出了根据本发明各实施例的用于生成消息的签名份额的示例性方法;
18.图3示意性地示出了示例性区块链事务协议。
具体实施方式
19.预备知识
20.椭圆曲线
21.椭圆曲线e满足以下等式:
22.y2=x3+ax+b mod p
23.其中和a,b是满足4a3+27b3≠0的常量。该椭圆曲线上的被定义为满足该等式的元素集合(x,y)以及无穷远点o,该无穷远点是单位元素。对该中元素进行的运算称为椭圆曲线点加法,由+表示。该由表示,其阶数由n表示。
24.该运算可以用于定义对元素进行的另一种运算,称为点乘法,由
·
表示。对于点和标量点k
·
g被定义为与其自身相加k次的点g。
25.在椭圆曲线密码学中,私钥被定义为标量其中是集合{1,...,n-1}的符号,而对应的公钥是椭圆曲线上的点k
·
g。例如,在一些区块链协议中,椭圆曲线被选择作为secp256k1椭圆曲线,值a、b、和p完全由该曲线指定。在给定这些值的情况下,已经计算出该的阶数n,在该曲线的情况下,该的阶数是素数,并且secp256k1标准还指定了一个点g,该点将被用作该的生成器。
26.椭圆曲线数字签名算法
27.为了使用私钥a在消息msg中创建签名,需要采取以下步骤:
28.1.计算消息摘要e=hash(msg),其中可以是任何哈希函数。例如,在一些示例中,hash(msg)=sha256(sha256(msg)),其中sha256(

)是sha-256哈希函数。应当注意的是,相比之下,该消息可以仅进行一次哈希处理,也可以使用相同或不同的哈希函数进行两次以上哈希处理。
29.2.选择一个随机整数k∈{1,...,n-1},其中n是椭圆曲线(例如,secp256k1曲线)的阶数。在下文中,k称为临时私钥。
30.3.计算与该临时私钥对应的临时公钥k
·
g=(r
x
,ry)。
31.4.计算r=r
x
mod n。如果r=0,则返回步骤2。
32.5.计算临时密钥的乘法逆k-1
mod n。
33.6.计算s=k-1
(e+ar)mod n。如果s=0,则返回步骤2。
34.7.消息msg中的签名是(r,s)。
35.临时密钥必须保密,否则可以在给定消息和签名的情况下计算私钥。此外,每次生成签名时,必须使用不同的临时密钥。如果情况并非如此,则可以在给定两个不同的签名及其对应消息的情况下导出私钥a。
36.给定消息msg、公钥p=a
·
g和对应的签名(r,s),则可以通过完成以下步骤来验证签名:
37.1.计算消息摘要e=hash(msg),例如e=sha256(sha256(msg))。
38.2.计算以n为模数的s的乘法逆s-1

39.3.计算j1=es-1
mod n和j2=rs-1
mod n。
40.4.计算点q=j1·
g+j2·
p。
41.5.如果(无穷远点),则签名无效。
42.6.如果则使q:=(q
x
,qy),然后计算u=q
x
mod n。如果u=r,则签名有效。
43.在阈值签名方案中,该私钥a被分割为在阈值方案中的参与者之间分发的密钥份额。
44.联合可验证随机秘密共享
45.假设n个参与者想要创建联合秘密,该联合秘密只能由该方案中的至少(t+1)个参与者重新生成。要创建共享秘密,请采取以下步骤:
46.1.参与者就每个参与者的唯一标签i达成一致。每个参与者i生成(t+1)个随机数
[0047][0048]
其中∈r表示集合中随机生成的元素,其中是集合{1,...,n-1}的符号。每个参与者具有t阶秘密多项式
[0049]fi
(x)=a
i0
+a
i1
x+

+a
it
x
t
mod n,
[0050]
其中i=1,...,n。应当注意的是,从现在开始省略符号mod n,并且假设对整数的所有算术运算都是以n为模数进行的。
[0051]
2.每个参与者i将该值fi(j)发送给参与者j,例如仅使用与参与者j的安全通信通道。
[0052]
3.每个参与者i根据以下等式计算自己的共享秘密多项式的秘密份额
[0053][0054]
共享秘密份额是采用形式(i,ai)的点,其中i是方案中的参与者标签。如步骤1-3中所述,对于参与者i,这种用于创建秘密份额a的方法在本文中由ai=jvrss(i)表示。应当注意的是,“jvrss”通常表示“联合验证随机秘密共享”,并且还包括步骤4和步骤5。然而,在本文中,jvrss被理解为至少执行步骤1至步骤3,其中步骤4和步骤5是可选步骤。
[0055]
此时,参与者已生成共享多项式,这些参与者中的每个参与者可以验证其他参与者已将正确的信息共享给所有参与者,同时验证所有参与者具有相同的共享多项式。这可以通过以下方式实现。
[0056]
4.每个参与者i将混淆系数广播给所有参与者
[0057]aik
·
g,
[0058]
其中k=0,...,t。
[0059]
5.每个参与者i核实每个参与者j已通过以下方式正确计算多项式点fj(i):计算f
j(i)·
g,然后验证
[0060][0061]
如果所有参与者发现该等式对于每个多项式都成立,则该可以共同确定他们均已创建相同的共享多项式。
[0062]
重建共享秘密
[0063]
假设参与者想要重建共享秘密a,该共享秘密是共享多项式的零阶。在给定采用以下形式的该多项式上的(t+1)个点的情况下,
[0064]
(1,a1),...,((t+1),a
t+1
),
[0065]
然后,为了到共享秘密a,需要计算
[0066][0067]
其可根据称为“拉格朗日插值法”的一般公式推导出。
[0068]
公钥计算
[0069]
在给定jvrss的步骤4中共享的n个零阶私有多项式系数公钥a
i0
·
g(其中i=1,...,n)的情况下,每个参与者使用以下等式计算共享公钥p
[0070][0071]
对应于共享秘密a。
[0072]
共享秘密的加法
[0073]
为了计算在一组n个参与者之间共享的两个共享秘密的和,其中每个秘密多项式的阶数为t,而任何实体都不知道各个秘密,请采取以下步骤:
[0074]
1.生成第一共享秘密a,其中参与者i的份额通过ai=jvrss(i)得出,其中i=1,...,n,阈值为(t+1)。
[0075]
2.生成第二共享秘密b,其中参与者i的份额通过bi=jvrss(i)得出,阈值为(t+1)。
[0076]
3.每个参与者i计算自己的加法份额
[0077]
vi=ai+bimod n。
[0078]
4.所有参与者将他们的加法份额vi广播给所有其他参与者。
[0079]
5.每个参与者对份额vi中的至少(t+1)个份额进行内插以计算
[0080]
v=interpolate(v1,...,v
t+1
)=a+b。
[0081]
对于参与者i,这种用于将共享秘密相加的方法由addss(i)表示,这会使得每个参与者i知道v=(,a+b)。
[0082]
共享秘密的乘积
[0083]
为了计算在一组n个参与者之间共享的两个共享秘密的乘积,其中每个秘密多项式的阶数为t,该组参与者需要采取以下步骤:
[0084]
1.生成第一共享秘密a,其中参与者i的份额通过ai=jvrss(i)得出,其中i=1,...,n。共享秘密多项式的阶数为t,这意味着(t+1)个参与者需要重新创建该共享秘密多项式。
[0085]
2.生成第二共享秘密b,其中参与者i的份额通过bi=jvrss(i)得出,并且共享秘密多项式的阶数再次为t。
[0086]
3.每个参与者使用以下等式计算自己的乘法份额μi[0087]
μi=a
ibi

[0088]
4.所有参与者将他们的乘法份额μi广播给所有其他参与者。
[0089]
5.每个参与者对0处份额μi中的至少(2t+1)个份额进行内插以计算
[0090]
μ=interpolate(μ1,...,μ
2t+1
)=ab。
[0091]
对于参与者i,这种用于计算两个共享秘密的乘积的方法在本文中由μ=ab=pross(i)表示。
[0092]
共享秘密的逆
[0093]
为了计算共享秘密a的逆,需要采取以下步骤:
[0094]
1.所有参与者计算共享秘密的乘积pross(i),其结果是μ=ab mod n。
[0095]
2.每个参与者计算μ的模逆,其结果是
[0096]
μ-1
=(ab)-1
mod n。
[0097]
3.每个参与者i通过计算以下内容来计算自己的逆秘密份额
[0098][0099]
对于参与者i,这种用于计算共享秘密的逆的方法由表示。
[0100]
共享私钥生成与验证
[0101]
为了计算n≥2t+1个参与者之间的共享私钥a,其中t+1个参与者需要创建签名,参与者通过阈值t+1执行jvrss以及执行如上所述的公钥计算。结果是每个参与者i=1,...,n具有私钥份额ai和对应的共享公钥p=(a
·
g)。
[0102]
临时密钥份额生成
[0103]
为了根据签名中的要求生成临时密钥份额和对应的r,大小为n的一组(具有共享私钥a,阈值为(t+1))需要执行以下步骤:
[0104]
1.生成共享秘密的逆份额其中需要(t+1)个份额才能重新创建。
[0105]
2.每个参与者通过以下方式计算
[0106][0107]
使用在验证ki时共享的混淆系数,然后计算
[0108]
r=x mod n。
[0109]
3.每个参与者i存储
[0110]
阈值最优签名
[0111]
图1示出了用于实现阈值最优签名方案(例如,阈值最优ecdsa方案)的示例性系统100。如图所示,系统100包括多方,其中包括协调者101和一组参与者102。图3中仅示出了三个参与者102,但应当理解的是,该系统通常可以包括任意数量的参与者。此外,在图1中,协调者101被示为与参与者102不同,但在一些实施例中,协调者101也可以是参与者102中的一个,例如第一参与者102a。协调者101和参与者102中的每一个操作相应的计算设备。
[0112]
系统100的相应方(即,协调者101和参与者102)的相应计算设备中的每一个包括相应的处理装置,所述处理装置包括一个或多个处理器,例如一个或多个中央处理单元(cpu)、加速器处理器(gpu)、专用处理器和/或现场可编程门阵列(fpga)。相应计算设备还可以包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(ssd)、闪存或电可擦可编程只读存储器(eeprom)等电子媒介和/或诸如光盘驱动器
等光学介质。相应计算机设备可以包括至少一个用户终端,例如台式电脑或笔记本电脑、平板电脑、智能手机或诸如智能手表等可穿戴设备。替代地或附加地,相应计算设备可以包括一个或多个其他联网资源,例如经由用户终端访问的云计算资源(该云计算资源包括在一个或多个站点实现的一个或多个物理服务器设备的资源)。应当理解的是,被描述为由系统100的一方执行的任何动作可以由该方操作的相应计算设备执行。
[0113]
协调者101是使用一组参与者102中的相应参与者生成的阈值数量的签名份额来发起签名的一方。换言之,协调者101在待签名消息中生成签名。同样,应当注意的是,在消息中生成签名意味着签名依赖于待签名消息,或者换句话说,签名是待签名消息的函数。协调者101还可以是将签名以及(可选地)消息发送给第三方103或以其他方式输出签名的一方。例如,第三方103可以是认证中心或其他形式的机构或其他用户。在其他示例中,例如,签名可以记录在数据库或其他文档中。在一些示例中,签名可以向公众提供,例如,记录在网站或其他可公开访问的媒体上。
[0114]
协调者101可以将待签名消息传输给参与者102。消息可以传输给所有参与者102,也可以传输给参与者的子集(例如,阈值数量的参与者)。在图1的示例中,一组参与者包括三个参与者102a、102b、102c。协调者101可以将消息传输给一个参与者,该参与者然后将消息转发给其他参与者中的一个、一些或全部参与者。
[0115]
消息可以使用lan或wan连接通过互联网传输,也可以通过替代的有线或无线通信方式传输。例如,消息可以通过协调者101与每个参与者102之间的安全通信通道单独地传输给每个参与者102,也可以通过或其他方式整体广播给该组参与者。消息可以原始形式或加密形式传输。例如,消息可以进行一次或多次哈希处理。
[0116]
参与者102中的一个或多个参与者可以通过替代方式(即,不从协调者101)获取消息。例如,消息可以由参与者102中的一个参与者生成,或以其他方式(例如,公开)提供。一个或多个参与者102可以从第三方103接收消息。获取消息的参与者102可以将消息(以原始或加密形式)传输给一个或多个其他参与者102。例如,第一参与者102可以将消息传输给第二参与者102b和/或第三参与者102c。
[0117]
协调者101获取(例如,接收)阈值数量的签名份额。在图1的示例中,阈值为2,并且仅第一参与者102a和第二参与者102b决定生成相应的签名份额。例如,生成签名份额的参与者102中的一个或多个参与者可以(例如)通过安全通信通道将其相应份额直接传输给协调者101。或者,参与者102中的一个或多个参与者可以广播他们的相应份额和/或公开提供他们的份额。如上所述,协调者101也可以是参与者。在这些实施例中,协调者101还可以生成相应的签名份额。从这个意义上来说,获取阈值数量的签名份额中的至少一个意味着生成至少一个签名份额,并且因此协调者101仅需接收比阈值数量少一个的签名份额。
[0118]
为了获取签名份额,协调者101可以在消息中传输对签名份额的请求。例如,协调者101可以将对签名份额的请求传输给一组参与者102中的一个、一些或全部参与者。
[0119]
在获取至少阈值数量的签名份额之后,协调者101使用所获取的份额来生成签名。然后,协调者101可以将签名广播或传输给一个或多个其他实体。附加地或替代地,例如,协调者可以将签名存储在或其他文档中和/或将签名作为数字记录的一部分记录在或其他文档中。
[0120]
现在将描述用于生成签名份额si的方法。该方法是从第一参与者102a的角度来描
(即,第一参与者102a已知的临时私钥k的份额)和共享值r,该共享值是基于与临时私钥k对应的临时公钥k
·
g生成的。第一mdc是基于消息(采用原始或加密形式)生成的(即,充当消息的函数),并且还可以是基于第一临时私钥份额k1生成的。下面提供了mic和mdc的变体。
[0130]
优选地,第一私钥份额a1可以使用联合秘密共享方案,例如使用上述jvrss技术来计算。例如,第一参与者102a可以具有索引1,并且对于参与者1,使用a1=jvrss(1)来生成第一私钥份额,其中该私钥由a表示。每个参与者可以生成相应的私钥份额ai。例如,对于参与者2,第二参与者102b可以使用a2=jvrss(2)来生成第二私钥份额,依此类推。
[0131]
使用联合秘密共享方案生成第一私钥份额a1可以包括:生成一组数字然后生成第一多项式f1(x)=a
10
+a
11
x+

+a
1t
x
t
mod n,其中该组数字是多项式的系数。其他参与者102中的每个参与者使用相应一组数字生成相应多项式。例如,第二参与者102b生成第二多项式f2(x)=a
20
+a
21
x+

+a
2t
x
t
mod n。然后,参与者102将在每个其他参与者的索引处评估的相应函数的值传输给该其他参与者。例如,第一参与者102a评估第二参与者102b的f1(2),然后将该值传输给第二参与者102b;评估第三参与者102c的f1(3),然后将该值传输给第三参与者102c,依此类推。第一参与者102a获取其他参与者102生成的作为第一参与者的索引的函数的相应值。这些值可以通过互联网或通过其他方式传输。这些值可以通过相应参与者对之间的相应安全通信通道传输。一个或多个参与者102(例如,第一参与者102a)可以广播而不是直接传输他们的相应值。在从至少阈值数量的参与者获取至少阈值数量的值之后,第一参与者102a基于第一值和所获取的每个其他数据值(例如,f2(1)、f3(1)等)来生成第一私钥份额。
[0132]
第一参与者可以基于一组混淆系数来计算对应的公钥a
·
g,其中这些系数用于生成每个参与者102的相应私钥份额ai。换言之,生成临时私钥份额ki时,每个参与者102可以与每个其他参与者102共享混淆系数a
ij
·
g。这些系数由所选椭圆曲线上的公共生成点g进行混淆。这些混淆系数可以在参与者102之间直接传输,也可以广播给该组。例如,第一参与者102a可以广播混淆系数a
10
·
g、a
11
·
g、a
12
·
g等。然后,与私钥对应的公钥可以通过以下等式计算
[0133][0134]
应当注意的是,私钥份额ai可以使用替代方法(即,不使用上述jvrss方法)来生成。虽然每个参与者需要私钥a的份额以生成相应的签名份额si,但是可以选择用于生成私钥份额的特定方法以适应特定场景,例如,参与者中的一些、全部参与者是否可信任、或没有参与者可信任,或者可信发起者是否可用于分发密钥份额等。用于生成私钥的份额的方法本身在本领域中是公知的。类似地,用于分发私钥的份额(或其他此类数据)的方法本身在本领域中是公知的。也就是说,私钥份额ai可以多种方式生成。例如,发起者dealer(例如,协调者coordinator)可以(例如)使用shamir的秘密共享方案来生成和分发私钥份额ai中的一个、一些或全部私钥份额。wo2017145010a1中描述了可以用于生成和分发私钥份额ai的一种此类方案。
[0135]
类似地,当生成下面描述的私钥份额中的一些或全部私钥份额时,可以使用jvrss的替代方案,例如,临时私钥份额ki、第一盲值密钥份额αi和/或第二盲值密钥份额βi。
[0136]
第一临时私钥份额k1可以使用联合秘密共享方案,例如使用上述jvrss技术来计算。例如,第一参与者102a可以具有索引1,并且对于参与者1,使用k1=jvrss(1)来生成第一临时私钥份额,其中该临时私钥由k表示。每个参与者102可以生成相应的临时私钥份额ki。例如,对于参与者2,第二参与者102b可以使用k2=jvrss(2)来生成第二临时私钥份额,依此类推。
[0137]
使用联合秘密共享方案生成第一临时私钥份额k1包括上述用于生成第一私钥份额a1的相同步骤,不同之处在于,用于生成临时私钥份额k1的随机数不同于用于生成私钥份额a1的随机数。
[0138]
应当注意的是,相同的私钥a和私钥份额ai用于每个签名,而临时私钥k和临时私钥份额ki会针对每个签名进行更改。
[0139]
共享值r是基于与临时私钥k对应的临时公钥k
·
g生成的。临时公钥(x,y)包括两个组件,通常称为x和y组件。共享值r可以是临时公钥的x组件的函数,例如r=x mod n。
[0140]
临时公钥k
·
g可以基于一组混淆系数来生成,其中这些系数用于生成每个参与者102的相应临时私钥份额ki。换言之,生成临时私钥份额ki时,每个参与者102与每个其他参与者102共享混淆系数k
ij
·
g。这些系数由所选椭圆曲线上的公共生成点g进行混淆。这些混淆系数可以在参与者102之间直接传输,也可以广播给该组。例如,第一参与者102a可以广播混淆系数k
10
·
g、k
11
·
g、k
12
·
g等。然后,临时公钥可以通过以下等式计算
[0141][0142]
在一些实施例中,第一mic是基于与第一临时私钥份额k1对应的第一逆份额生成的。换言之,第一逆份额是第一临时私钥份额k1的函数。
[0143]
第一逆份额可以是(例如)通过针对参与者1计算生成的共享秘密的逆。如上所述,计算共享秘密的逆包括计算共享秘密的乘积。第一参与者102a生成中间值μ,作为第一临时私钥k和第一盲钥α的乘积。例如,对于参与者1,中间值可以通过μ=kα=pross(1)计算,其结果为μ=kαmod n。
[0144]
这可以涉及每个参与者102生成乘法份额μi=kiαi,其中αi是第一盲钥α的份额。每个参与者102可以使用联合秘密共享方案,例如使用上述jvrss技术来计算第一盲钥α的相应份额αi。例如,第一参与者102a可以具有索引1,并且对于参与者1,使用α1=jvrss(1)来生成第一盲钥的份额。每个参与者共享(例如,通过直接传输或广播)相应的乘法份额μi,然后基于每个乘法份额μi(例如,通过内插)来生成中间值μ。第一逆份额可以通过计算中间值μ的逆来生成。例如,第一参与者102a可以计算μ的模逆,其结果为μ-1
=(kα)-1
mod n。
[0145]
然后,第一参与者102a可以基于中间值的模逆μ-1
和相应的第一盲钥份额α1来计算第一逆份额例如通过计算
[0146][0147]
应当注意的是,盲钥份额αi的使用是可选的,并且可以从上述步骤中省略。
[0148]
可选地,mic可以基于第二盲钥β的份额(即,第二盲钥份额的函数)生成。换言之,
除上述数据项之外,mic还基于第二盲钥β的第一份额β1。第二盲钥的第一份额可以使用联合秘密共享方案,例如使用上述jvrss技术来计算。例如,第一参与者102a可以具有索引1,并且对于参与者1,使用β1=jvrss(1)来生成第二盲钥的第一份额,其中该第二盲钥由β表示。
[0149]
mic可以基于第一预签名份额σ1生成,该第一预签名份额是从至少阈值数量的参与者102获取的第一中间份额λ1和相应中间份额λi的函数。换言之,参与者102中的每个参与者可以生成相应的中间份额λi,并将这些中间份额λi传输和/或广播给其他参与者102。第一参与者102a可以收集中间份额λi以生成公共中间值λ,例如通过对中间份额λi进行内插。第一参与者102a(以及可选地,其他参与者102)可以生成多个预签名份额σ1′
,每个预签名份额用于生成不同的签名份额s1′

[0150]
第一中间份额λ1可以是第一私钥份额a1和第一逆份额的函数。在这种情况下,至少阈值数量的参与者102中的每个参与者生成并共享相应的中间份额λi,该相应的中间份额是相应的私钥份额ai和相应的逆份额的函数。
[0151]
或者,第一中间份额λ1可以是第一私钥份额a1和第一盲钥α1的第一份额的函数。在这种情况下,至少阈值数量的参与者102中的每个参与者生成并共享相应的中间份额λi,该相应的中间份额是相应的私钥份额ai以及第一盲钥α1的相应份额的函数。
[0152]
在一些实施例中,第一预签名份额σ1也可以基于第二盲钥的第一份额β1生成。例如,第一中间份额λ1可以是第二盲钥的第一份额β1的函数。在附加或替代实施例中,第一中间份额λ1也可以是公共值r的函数。
[0153]
图2示出了根据本发明各实施例的用于在消息中生成签名的示例性方法200。步骤s201至步骤s208由该示例中阈值数量的参与者102中的每个参与者(包括第一参与者102a)执行。步骤s209由协调者101执行,该协调者也可以是执行步骤s201至步骤s208的参与者中的一个参与者。应当理解的是,这些步骤中的一些步骤可以省略,也可以按照不同的顺序执行。
[0154]
示例性方法200使得能够在一组n≥2t+1个参与者中创建阈值为(t+1)的共享秘密,其中签名阈值也是(t+1)。
[0155]
设置:
[0156]
在步骤s201中,每个参与者102计算共享私钥份额和对应的公钥。例如,每个参与者102可以使用jvrss和预备知识部分给出的公钥计算来计算共享私钥和对应的公钥。此时,每个参与者i具有秘密密钥份额和公钥(ai,p),其中p是与共享私钥对应的公钥的符号。共享私钥的阈值为(t+1)。
[0157]
预先计算:
[0158]
在步骤s202中,每个参与者102计算共享临时密钥份额和对应的公钥。例如,每个参与者102可以使用jvrss和预备知识部分给出的公钥计算来计算共享临时密钥。然后,每个参与者102可以基于临时私钥来计算逆份额。这会导致每个参与者具有逆份额阈值为(t+1)。
[0159]
在步骤s203中,每个参与者102创建两个不同的共享盲钥份额。例如,每个参与者102可以创建两个共享秘密,使得参与者i具有份额αi=jvrss(i)和βi=jvrss(i),每个共享
秘密的阈值为(t+1)。应当注意的是,在一些示例中,并不是所有共享秘密都需要具有相同的阈值。
[0160]
在步骤s204中,每个参与者102计算中间份额,并将其中间份额广播给其他参与者。例如,每个参与者i可以计算中间份额该值的阈值为(2t+1)。
[0161]
在步骤s205中,每个参与者102至少基于中间份额来计算中间值。例如,每个参与者102可以通过对(2t+1)个份额λ=interpolate(λ1,...,λ
2t+1
)=k-1
a+β进行内插来计算中间值。
[0162]
在步骤s206中,每个参与者102计算预签名份额。例如,每个参与者i可以计算他们的预签名份额σi=λ-βi=(k-1
a+β)-βi。每个参与者102可以存储(r,σi)、私钥份额和对应的公钥(ai,p)。
[0163]
应当注意的是,由于每个签名使用不同的临时密钥,因此可以一次设置多个临时密钥,即,可以重复步骤s202至步骤s206以在预先计算过程中创建多个临时密钥,并存储它们以供后续使用。这些操作可以同时执行,因此不需要额外的通信轮次。应当注意的是,优选地,应为每个签名使用不同的α和β值。
[0164]
签名生成:
[0165]
为了对消息msg进行签名,至少(t+1)个参与者必须执行步骤s207和步骤s208。
[0166]
在步骤s207中,至少阈值数量的参与者102获取待签名消息并计算消息摘要(message digest)。例如,协调者101可以将请求发送给(t+1)个参与者,以在消息msg中创建签名份额。每个参与者i可以计算消息摘要e=hash(msg)。在一些示例中,该哈希函数是双sha-256哈希函数。可以使用替代的哈希函数。
[0167]
在步骤s208中,至少阈值数量的参与者102计算签名份额并将其发送给协调者101。例如,每个参与者i可以计算他们的签名份额然后将他们的签名份额(r,si)发送给协调者。应当注意的是,该值r可能不是由所有参与者发送的。
[0168]
在步骤s209中,协调者101计算签名。例如,协调者101可以计算s=interpolate(s1,...,s
t+1
)=k-1
(e+ar),最终计算签名(r,s)。
[0169]
有几种替代方案用于预先计算签名份额的消息无关组件。这些方案大致可以分为两组变体:何时将r纳入计算中;以及何时纳入(kα)-1
。这些方案可以彼此独立地选择,因此上述方法200有八种变体。
[0170]
一种修改是在步骤s206中存储这意味着将r包括在预签名份额中。
[0171]
另一种修改是还可以在计算中间份额过程中提前与r相乘。通过转为在步骤s204中定义,在步骤s206中,σi=λ-βi=(rk-1
a+β)-βi,并且签名份额的计算为
[0172]
另一种修改是转为计算λi=α
iai
+βi,使得λ=(kα)-1
(αa+β),并且σi=λ-(kα)-1
βi。在替代点处包括r的两种变体可以与此相结合。每个参与者都知道kα,因为它是在预先计算的步骤s202中计算的。此外,所有参与者102广播其λi份额。因此,每个参与者102知道(至少)2t+1个份额和值kα。然后,计算
[0173]
λ=(kα)-1
×
interpolate(λ1,....,λ
2t+1
)。
[0174]
另一种修改是转为将中间值计算为λ=(αa+β),并且将预签名份额计算为σi=λ-βi。最后,签名份额将是关于何时将r纳入计算中的两种变体也可以与此相结合。每个参与者102通过计算获悉kα。然后,他们可以据此计算(kα)-1
mod n,然后将其纳入si的计算中。
[0175]
综上所述,每个参与者102可以生成四个秘密共享:ai、ki、αi、βi。在示例性方法200中,需要计算两个乘积:kα,该乘积随后用于计算(对这些份额进行内插可得出k-1
,因为α将被取消);k-1
a,用于签名中,该签名使用第一乘积,因此如果份额扩展,则计算结果得出对份额(由kα和αi组成)进行的任何计算都可以通过先对αi本身进行计算,然后在必要时乘以(kα)-1
来完成。
[0176]
上述方案的一个版本可以概括如下:使用由消息无关组件(mic)和消息相关组件(mdc)组成的份额来计算签名,其中,mic可以基于预签名份额σi,mdc基于消息e。
[0177]
等效方案包括如上所述计算mic,然后将其与签名份额一起并入签名中,例如在对仅由mdc组成的签名份额进行内插之后。显然,该方案在预先计算的步骤s206之前可以是相同的,其中,中间份额包括r值使得在内插之后为λ=k-1
ar+β。
[0178]
在该阶段,参与者知道并将其与私钥份额和对应的公钥(ai,p)一起存储。
[0179]
然后,为了在给定消息m中生成他们的签名份额,其中该消息经哈希处理以创建消息摘要e=hash(m),参与者计算
[0180][0181]
并将其发送给协调者。然后,协调者计算
[0182]
s=interpolate(s1,...,s
t+1
)+λ,
[0183]
=k-1
e+k-1
ar,
[0184]
从而得出预期的签名份额,因为β项会取消。该协议的类似变体可以如上所述描述何时将(kα)-1
和r纳入计算中。
[0185]
可以实现用于计算消息无关组件的以下变体:
[0186]
i)计算:
[0187]
λ=k-1
a+β
[0188]
签名份额现在为::
[0189][0190]
通过以下等式生成签名:
[0191]
s=int(s1,...,s
t+1
)+rλ
[0192]
ii)计算:
[0193]
λ=αar+β
[0194]
签名份额现在为:
[0195]
si=αie-βi[0196]
通过以下等式生成签名:
[0197]
s=(kα)-1
(int(s1,...,s
t+1
)+λ)
[0198]
iii)计算:
[0199]
λ=αa+β
[0200]
签名份额现在为:
[0201][0202]
通过以下等式生成签名:
[0203]
s=(kα)-1
(int(s1,...,s
t+1
)+rλ)
[0204]
iv)计算:
[0205]
λ=αar+β
[0206]
签名份额现在为:
[0207][0208]
通过以下等式生成签名:
[0209]
s=(int(s1,...,s
t+1
)+(kα)-1
λ)
[0210]
v)计算:
[0211]
λ=αa+β
[0212]
因此,签名份额现在为:
[0213][0214]
并且,通过以下等式生成签名:
[0215]
s=(int(s1,...,s
t+1
)+r(kα)-1
λ)。
[0216]
方法200与先前方案的一个不同之处在于,签名中k-1
a项的计算可以移至预先计算阶段。由此,签名生成的阈值与私钥计算的阈值相同,因此现在该方法是阈值最优方案。要查看如何到正确的签名,应当注意的是,对签名份额进行内插会得出以下结果
[0217]
s=k-1
e+r(k-1
a+β-β)
[0218]
=k-1
e+r(k-1
a)
[0219]
=k-1
(e+ar),
[0220]
这正是所需的签名。
[0221]
应当注意的是,秘密的阈值可以不同。换言之,执行签名生成方案时,a、k、α、β本身的阈值不必相同。例如,如果有六个人组成的一组,并且三个人需要创建签名和/或私钥,则从技术上讲,他们可以在k的阈值为4且其他共享秘密的阈值为3的情况下进行计算,并且他们将仍然拥有阈值最优方案。
[0222]
应当注意的是,如果不使用盲钥β,则可以按以下方式计算临时密钥并因此计算共享秘密密钥。假设参与者仅使用(k-1
a),并且他们还知道r、e和s。方案中的任何一方都可以计算
[0223]
(s-(k-1
a)r)e-1
=k-1

[0224]
然后,该结果可以用于计算
[0225]
(k-1
)-1
(k-1
a)=a,
[0226]
其为共享私钥。
[0227]
如果将β纳入计算中,则无法进行该计算。值(k-1
a+β)不会泄露关于各个秘密的信
息,也不会泄露结果k-1
a。为了获取可能泄露私钥a的任何信息,至少(t+1)个参与者必须合作,该数量与私钥的阈值相同,因此计算该中间值λ不会降低安全性。
[0228]
通过先前阈值最优签名计算要解决的问题在于,必须计算两个共享秘密的乘积,其中秘密是如下一组中所有参与者的各个秘密的总和
[0229][0230]
在签名中,如果私钥a是共享秘密,则k必然也是(否则知道k的任何一方都可以计算出a)。签名中的第二项是两个共享秘密的乘法运算,该部分难以实现最优性。在gennaro等人提出的非最优方案以及上述示例性方法200中,这些秘密中的每一个均为t阶多项式的零阶,并且将多项式相乘会得到计算乘法运算结果所需的2t+1个份额的阈值。为了确保该方案的真实性,可以广播大多数通信,并且可以检查简单的等效物。此外,如果一个参与者退出签名计算,则其他参与者为签名计算贡献是容易的。
[0231]
在gennaro等人提出的阈值最优方案中,通过单独计算秘密乘积中的单个项来避免该阈值2t+1。换言之,每对参与者i,j计算每个i,j的单个项a
i0kj0
,并将这些结果相加。在签名过程中创建临时密钥k,然后使用pallier加密计算各个秘密贡献的这些乘积。这要求每个参与者必须单独与所有其他签名者进行通信。在这种情况下,为了确保真实性,必须执行多个零知识证明。在这种情况下,如果参与者退出签名计算,则必须重新启动签名算法。
[0232]
换句话说,每个秘密是各个秘密的总和,两个秘密的乘法运算是两个单独项总和的乘法运算,这可以扩展为
[0233]a10b10
+a
20b10
+
…bn0an0
,等。
[0234]
在gennaro方案中,单独计算这些项。换言之,参与者1必须与参与者2合作计算a
20b10
,同时与参与者3合作计算a
30b10
,依此类推。然后,将所有这些计算结果相加。这些单独的计算涉及计算成本高昂的零知识证明。因此,一旦方案中涉及很多人,就会变得效率低下。所有这些也是在签名阶段完成的,因此这是一种计算成本高昂的签名计算方法。
[0235]
在有3个参与者的简单情况下,两种方案(即,gennaro等人提出的最优阈值方案与示例性方法200)之间的通信轮次大致相当:虽然gennaro方案的通信轮次确实更多,但这不是增效节约的主要方面。增效节约涉及计算和通信的数据量。gennaro提出的方案必须包括示例性方法200中不存在的多个零知识证明(zkp)。
[0236]
下面对使用gennaro等人提出的最优阈值方案和示例性方法200实现的2/3方案进行比较。在gennaro提出的方案中,存在签名之前使用的jvrss,以及出于pallier加密目的创建的额外加密密钥。然后,在签名计算中有7个zkp要创建,以及7个zkp要验证。这些zkp不能同时发送,因此在签名阶段需要进行多轮通信。此外,在一些步骤中,每个参与者必须在签名阶段与所有其他参与者单独通信,这会导致效率低下。这意味着这些参与者必须同时在线。相反,本发明使得给定参与者能够计算签名份额,而无需其他参与者在线。
[0237]
另一方面,在上述本发明的方案中,在预签名阶段进行4次jvrss计算,并且在任何时候都不存在任何zkp。jvrss计算可以同时进行,因此通信与一次jvrss相同。在签名阶段,仅存在请求-响应式通信,并且所有信息都可以广播给该组。
[0238]
为了比较两种方案的存储空间,应当注意的是,临时密钥是在上述方案中的设置
阶段计算的。这意味着与gennaro提出的方案相比,需要更多存储空间。对于上述方案,存在与创建签名对应的3个待存储附加值,例如,每个附加值需要32字节的存储空间。考虑到计算和通信方面的增效节约以及最优实现,该方案需要的存储空间最小。
[0239]
简而言之,gennaro提出的方案会减少设置和预先计算后所需的存储空间,但会增加签名计算过程中的计算量和通信量。这是因为在gennaro提出的方案中,将更多计算量转移到预签名会导致效率低下。本发明中提出的方案比gennaro提出的最优方案更高效,在不等式n≥2t+1可接受的情况下尤为如此。
[0240]
示例性用例
[0241]
一般而言,本发明可以用于在任何消息中生成签名。作为特定示例性用例,消息可以是区块链事务的一部分或全部。换言之,签名可以用于对区块链事务的一个或多个输入和/或一个或多个输出进行签名。
[0242]
图3示出了用作区块链协议一部分的示例性事务协议。文献中充分记录了示例性区块链协议,但为了保持完整性,本文提供了示例性协议事务的描述。这是基于utxo的协议示例。事务152(简称“tx”)是区块链的基本数据结构(区块链的每个区块包括一个或更多个事务152)。下面将通过参考基于输出或基于“utxo”的协议进行描述。但这并不限于所有可能的实施例。
[0243]
在基于utxo的模型中,每个事务(“tx”)152包括数据结构,其包括一个或更多个输入202和一个或更多个输出203。每个输出203可包括未花费的事务输出(utxo),其可用作另一新事务的输入202的来源(如果utxo尚未赎回)。utxo包括指定数字通证数额的值,例如表示数字资产的数额。这表示(分布式)分类账中的一组。utxo还可包含其来源事务的事务id以及其他信息。事务数据结构还可包括头部201,其可包括输入字段202和输出字段203的大小指示符。头部201还可包括事务的id。在实施例中,事务id是事务数据(不含事务id本身)的哈希值,且存储在提交至矿工的原始事务152的头部201中。
[0244]
比方说,第一用户(例如爱丽丝)希望创建转移相关数字通证的数额至第二用户(例如鲍勃)的事务152j。在图3中,爱丽丝的新事务152j标记为“tx
1”。该新事务获取在序列中先前事务152i的输出203中锁定至爱丽丝的数字通证数额,并至少将此类数额中的一部分转移至鲍勃。在图3中,先前事务152i标记为“tx
0”。tx0和tx1只是任意的标记,其不一定意味着tx0指区块链中的第一事务且tx1指池中的下一个事务。tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前(即先行)事务。
[0245]
当爱丽丝创建其新事务tx1时,或至少在她将该新事务发送至网络106时,先前事务tx0可能已经有效并包括在区块链中。该事务此时可能已包括在区块中的一个区块中,或者可能仍在池154中等待,在这种情况下,该事务将很快包括在新区块中。或者,tx0和tx1可以创建并一起发送至区块链网络;或者,如果节点协议允许缓冲“孤立”事务,tx0甚至可以在tx1之后发送。本文事务序列上下文中使用的“先前”和“后续”一词是指由事务中指定的事务指针定义的序列中的事务顺序(哪个事务指向哪个其他事务等等)。它们同样可以替换为“前任”和“继任”、“先行”和“后代”或“父项”和“子项”等。这不一定指其创建、发送至网络或到达任何给定节点的顺序。然而,指向先前事务(先行事务或“父事务”)的后续事务(后代事务或“子事务”)不会有效除非父事务有效。在父事务之前到达节点的子事务被视为孤立事务。根据节点协议和/或矿工行为,其可被丢弃或缓冲一段时间,以等待父事务。
[0246]
先前事务tx0的一个或更多个输出203中的一个包括特定的utxo,标记为utxo0。每个utxo包括指定utxo表示的数字通证数额的值以及锁定脚本,该锁定脚本定义后续事务的输入202中的解锁脚本必须满足的条件,以使后续事务有效,从而成功赎回utxo。通常情况下,锁定脚本将数额锁定至特定方(该数额的事务的受益人)。即,锁定脚本定义解锁条件,该解锁条件通常包括以下条件:后续事务的输入中的解锁脚本包括先前事务被锁定到的一方的加密签名。
[0247]
锁定脚本(亦称scriptpubkey)是节点协议识别的域特定语言中写入的一段代码。此类语言的特定示例称为“脚本(script)”(s大写)。锁定脚本指定花费事务输出203所需的信息,例如爱丽丝签名的要求。解锁脚本出现在事务的输出中。解锁脚本(亦称scriptsig)是提供满足锁定脚本准则所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在事务的输入202中。
[0248]
因此在示出的示例中,tx0的输出203中的utxo0包括锁定脚本[checksig pa],该锁定脚本需要爱丽丝的签名sig pa,以赎回utxo0(严格来说,是为了使试图赎回utxo0的后续事务有效)。[checksig pa]包含爱丽丝的公私密钥对中的公钥pa。tx1的输入202包括向回指向tx1的指针(例如,通过其事务id(txid0),其在实施例中是整个事务tx0的哈希值)。tx1的输入202包括在tx0中标识utxo0的索引,以在tx0的任何其他可能输出中对其进行标识。tx1的输入202进一步包括解锁脚本《sig pa》,该解锁脚本包括爱丽丝的加密签名,该签名由爱丽丝通过将其密钥对中的私钥应用于预定的部分数据(有时在密码学中称为“消息”)创建。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
[0249]
当新事务tx1到达一节点时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或更多个准则)。在实施例中,这涉及并置两个脚本:
[0250]
《sig pa》《pa》||[checksig pa]
[0251]
其中“||”表示并置,“《

》”表示将数据放在堆栈上,“[

]”表示由解锁脚本组成的函数(在该示例中指基于堆栈的语言)。同样,脚本可以使用公共堆栈一个接一个地运行,而不是并置脚本。无论采用哪种方式,当一起运行时,脚本使用爱丽丝的公钥pa(包括在tx0的输出的锁定脚本中),以认证tx1的输入中的锁定脚本是否包含爱丽丝签名预期部分的数据时的签名。预期的部分数据本身(“消息”)也需要包括在tx0中,以便执行此认证。在实施例中,签名的数据包括整个tx0(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
[0252]
本领域技术人员将熟悉通过公私密码进行认证的细节。基本上而言,如果爱丽丝已通过使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息(未加密消息),诸如区块链网络的节点等其他实体可认证加密版本的消息必须已经由爱丽丝签名。签署通常包括对消息进行散列,签署哈希值和将此标记到消息的明文版本作为签名,从而使公钥的任何持有者能够认证签名。因此,应当注意的是,在实施例中,在本文中对签名特定数据片段或事务部分等的任何引用可以意味着对该数据片段或事务部分的哈希值进行签名。
[0253]
如果tx1中的解锁脚本满足tx0的锁定脚本中指定的一个或更多个条件(因此,在所示示例中,如果在tx1中提供了爱丽丝的签名并进行认证),则区块链节点认为tx1有效。如果
其是挖矿节点,这意味着其将添加至等待工作量证明的事务的池。如果是转发节点,则其将事务tx1转发到区块链网络中的一个或更多个其他节点,从而将在整个网络中传播。一旦tx1有效并包括在区块链中,这将把tx0中的utxo0定义为已花费。请注意,tx1仅在花费未花费的事务输出203时才有效。如果试图花费另一事务已经花费的输出,则即使满足所有其他条件,tx1也将无效。因此,节点104还需要检查先前事务tx0中引用的utxo是否已经花费(已经形成另一有效事务的有效输入)。这是为何区块链150对事务施加定义的顺序很重要的原因之一。在实践中,给定节点104可维护单独的数据库,标记已花费事务的utxo 203,但最终定义utxo是否已花费取决于是否在区块链中形成了另一有效事务的有效输入。
[0254]
如果一给定事务的所有输出203中指定的总数额大于其所有输入202所指向的总数额,则这是大多数事务模型中的另一失效依据。因此,此类事务将不会传播或挖掘到区块中。
[0255]
请注意,脚本代码通常用示意图表示(即,非精确语言)。例如,可写入[checksig pa]表示[checksig pa]=op_dup op_hash160《h(pa)》op_equalverify op_checksig。“op_...”是指脚本语言的特定操作码。op_checksig(又称“checksig”)是脚本操作码,其取两个输入(签名和公钥),并使用椭圆曲线数字签名算法(ecdsa)验证签名的有效性。在运行时,移除脚本中任何出现的签名(

sig’),但在由

sig’输入验证的事务中仍保留附加要求,诸如哈希难题。再如,op_return是脚本语言操作码,用于创建事务的不可花费输出,其可以将元数据储存在事务中,从而将元数据不可变地记录在区块链中。例如,元数据可包括需存储在区块链中的文件。
[0256]
签名pa是数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ecdsa。数字签名对特定的数据段进行签名。在实施例中,对于给定事务,签名将对部分事务输入以及全部或部分事务输出进行签名。对输出的特定部分进行签名取决于sighash标志。sighash标志是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
[0257]
锁定脚本有时称为“scriptpubkey”,指其包括相应事务被锁定到的当事方的公钥。解锁脚本有时称为“scriptsig”,指其提供相应的签名。但是更通俗地说,在区块链的所有应用中,utxo赎回的条件并不一定包括对签名进行认证。更通俗地说,脚本语言可用于定义任何一个或更多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
[0258]
根据本发明的一些实施例,协调者101生成的签名可以用于对区块链事务进行签名。例如,所生成的签名可以至少部分地用于解锁区块链事务的输出。作为特定示例,先前事务的输出可以是支付到公钥哈希(p2pkh)输出,该输出锁定到公钥哈希。为了解锁,引用p2pkh输出的后续事务的输入需要包括(未经哈希处理的)公钥以及基于与公钥对应的私钥生成的签名。
[0259]
脚本中表示的“锁定脚本locking script”和“解锁脚本unlocking script”可以采取以下形式:
[0260]
locking script=op_dup op_hash160《public keyhash》op_equal op_checksig
[0261]
unlocking script=《signature》《public key》
[0262]
参考上述实施例,《public key》可以等同于p=a
·
g,并且《signature》包括阈值签名s,其中上一个事务是待签名消息。应当注意的是,如上所述,ecdsa签名采用(r,s)形式。
[0263]
应当注意的是,所描述的签名生成方法并不限于任何特定用例,并且通常可以用于基于任何消息来生成签名。对区块链事务的全部或部分进行签名仅是一个说明性示例。例如,所描述的方法可以用于签署和/或授权法律文档(例如,遗嘱、契据或其他合同)、一方或多方之间的通信、数字证书(例如,由认证中心颁发)、医学处方、银行转账或金融工具、抵押或贷款申请等。
[0264]
作为一个特定示例,一组参与者(假设总共五个参与者)可以组成一家公司的董事会。公司的投票事项可能需要董事会的大多数成员(即,至少三个参与者)就特定投票达成一致。董事会可以使用所描述的签名生成方法来证明至少有三名董事会成员同意投票赞成某个特定结果。在该示例中,签名生成方案的阈值为3。换言之,至少三名董事会成员必须提供相应签名份额,以便协调者成功生成签名。如果签名成功生成,则至少阈值数量(即,三名)的董事会成员同意投票赞成该结果。因此,签名的成功生成作为投票记录,并证明董事会的大多数成员以特定方式投票。
[0265]
本发明的另一个用例涉及数字证书(例如,根据x.509标准颁发的数字证书)领域。数字证书包含对某些数据进行签名的签名。数据通常可以是任意数据,但数字证书中包含的数据的一个特定示例是公钥。数字证书中的公钥通常称为“认证公钥”。数字证书的发行者(“认证中心”)可以对公钥的所有者执行一次或多次检查(例如,了解客户检查),并且如果检查成功,则认证中心颁发包括认证公钥的数字证书。用户可以使用认证公钥来证明自己便是他们所称的身份,例如,通过使用与认证公钥对应的私钥对消息进行签名。
[0266]
认证中心的一种特殊用途是对https中使用的证书进行签名,以便在互联网上安全浏览。另一种常见用途是国家政府签发身份证,用于以电子方式签署文档。认证中心使用私钥对公钥(或任何其他待证明数据)进行签名。这会导致单点故障。换言之,如果恶意方可以访问认证中心用于颁发数字证书的私钥,则恶意方可能会颁发欺诈证书。认证中心成为攻击目标的一个特定示例是diginotar,这是一家荷兰认证中心。diginotar使用的私钥在2011年遭泄露,并被用于颁发欺诈证书。这种攻击是可能的,因为攻击者只需获取单个数据(即,私钥)即可。然而,如果认证中心(diginotar)使用根据本发明的阈值签名方案,则该攻击是不可能发生的(或者至少变得更加困难)。为了颁发证书,攻击者必须获取生成签名所需的阈值数量的密钥份额(或签名份额)。
[0267]
应当理解,上述实施例仅通过示例的方式进行描述。更一般地说,可根据下述任何一个或更多个语句提供一种方法、装置或程序。
[0268]
语句1、一种计算机实现的方法,用于生成消息的数字签名份额(share of a digital signature),其中需要来自一组参与者中的相应参与者的阈值数量的不同签名份额来生成所述数字签名,其中每个参与者具有相应的私钥份额,所述方法由所述参与者中的第一参与者执行并且包括:
[0269]
生成第一消息无关组件和第一消息相关组件,其中所述消息无关组件是基于第一私钥份额生成的,并且其中所述消息相关组件是基于所述消息生成的;
[0270]
使得所述第一消息无关组件能够提供给协调者(coordinator);以及
[0271]
使得第一签名份额能够提供给所述协调者,用于基于至少所述阈值数量的签名份额来生成所述签名,其中所述第一签名份额至少包括所述消息相关组件。
[0272]
例如,可以在所述第一签名份额之前,甚至在生成所述第一消息相关组件之前,将
所述第一消息无关组件发送给所述协调者。
[0273]
语句2、根据语句1所述的方法,其中所述消息无关组件是在获取所述消息之前生成的。
[0274]
换句话说,可以预先计算所述消息无关组件。换言之,可以在获取(例如,接收)所述消息之前生成所述消息无关组件。然后,在获取所述消息之后,即可生成所述消息相关组件,从而能够生成所述签名份额。
[0275]
语句3、根据语句1或2所述的方法,其中所述第一签名份额包括所述消息无关组件。
[0276]
换言之,在至少一些实施例中,所述第一签名份额不包含所述消息无关组件。
[0277]
语句4、根据语句1至3中任一项所述的方法,其中所述第一私钥份额是使用用于生成第一私钥的份额的联合秘密共享方案生成的。
[0278]
语句5、根据语句4所述的方法,其中使用所述联合秘密共享方案生成所述第一私钥份额包括:
[0279]
生成第一数据项,所述第一数据项是第一多项式;
[0280]
从至少所述阈值数量的参与者获取相应数据项,每个相应数据项是由相应参与者生成的相应多项式;以及
[0281]
基于所述第一数据项和每个所述相应数据项来生成所述第一私钥份额。
[0282]
语句6、根据语句5所述的方法,其中获取所述相应数据项包括:通过所述第一参与者与每个所述相应参与者之间的相应通信通道获取所述相应数据项。
[0283]
优选地,每个通信通道是安全通信通道。
[0284]
语句7、根据语句4或语句5所述的方法,所述方法包括:将所述第一多项式的相应实例传输给至少所述阈值数量的参与者中的每个参与者,其中所述第一多项式的所述相应实例基于相应参与者。
[0285]
例如,可以通过所述相应的通信通道传输相应实例。
[0286]
在一些示例中,所述联合秘密共享方案可以是联合可验证秘密共享方案,该方案还包括:
[0287]
与至少所述阈值数量的参与者中的每个参与者共享与生成器值混淆的所述第一多项式的相应一组系数;
[0288]
获取每个相应参与者生成的所述相应多项式的相应一组系数,所述相应一组系数与所述生成器值混淆;以及
[0289]
对于每个相应参与者,已通过以下方式验证所述相应参与者正确地生成他们的相应私钥份额:
[0290]
基于从该参与者获取的所述相应数据项来确定与所述生成器值混淆的第一候选值;
[0291]
基于从该相应参与者获取的所述相应一组混淆系数来确定第二候选值;以及
[0292]
验证所述第一候选值对应于所述第二候选值。
[0293]
语句8、根据前述任一项语句所述的方法,其中每个参与者具有相应的临时私钥份额,并且其中所述第一消息无关组件和/或所述第一消息相关组件基于第一临时私钥份额。
[0294]
语句9、根据语句8所述的方法,其中每个参与者具有基于与所述临时私钥对应的
临时公钥的相应共享值,并且其中所述第一消息无关组件基于所述共享值。
[0295]
语句10、根据前述任一项语句所述的方法,其中所述第一临时私钥份额是使用用于生成所述临时私钥的份额的所述联合秘密共享方案生成的。
[0296]
语句11、根据前述任一项语句所述的方法,其中所述第一消息无关组件是基于与所述第一临时私钥份额对应的逆生成的。
[0297]
语句12、根据语句11所述的方法,其中生成所述第一临时私钥份额的所述逆包括:
[0298]
基于所述临时私钥和第一盲钥来生成中间值;以及
[0299]
基于所述中间值的逆和所述第一盲钥的第一盲钥份额来生成所述第一临时私钥份额的所述逆。
[0300]
所述中间值是所述临时私钥和所述第一盲钥的乘积。
[0301]
语句13、根据语句12所述的方法,其中所述第一盲钥份额是使用用于生成所述第一盲钥的份额的所述联合秘密共享方案生成的。
[0302]
语句14、根据语句12或13所述的方法,其中所述中间值是通过以下方式生成的:
[0303]
基于所述第一临时私钥份额和所述盲钥份额来生成第一乘法密钥份额;
[0304]
从至少所述阈值数量的参与者获取相应乘法密钥份额;以及
[0305]
基于所述第一乘法密钥份额和每个所述相应乘法密钥份额来生成所述中间值。
[0306]
应当注意的是,在一些示例中,生成乘法密钥份额所需的所述阈值数量的参与者不同于生成所述私钥份额所需的所述阈值数量的参与者。例如,所述私钥具有阈值t+1,所述乘法密钥份额要求阈值为2t+1。
[0307]
语句15、根据语句14所述的方法,所述方法包括:将所述第一乘法密钥份额传输给至少所述阈值数量的参与者中的每个参与者。
[0308]
语句16、根据前述任一项语句所述的方法,其中所述消息无关组件是基于第二盲钥的第二盲钥份额生成的。
[0309]
语句17、根据语句16所述的方法,其中所述第二盲钥份额是使用用于生成所述第二盲钥的份额的所述联合秘密共享方案生成的。
[0310]
语句18、根据语句11或其从属语句中任一项所述的方法,其中所述第一消息无关组件是基于第一预签名份额生成的,其中所述第一预签名份额是基于以下各项生成的:
[0311]
第一中间份额,所述第一中间份额是基于所述第一私钥份额以及与所述第一临时私钥份额对应的所述逆生成的;以及
[0312]
相应中间份额,所述相应中间份额是从至少所述阈值数量的参与者获取的。
[0313]
语句19、根据从属于语句1至17中任一项的语句11所述的方法,其中所述第一消息无关组件是基于第一预签名份额生成的,其中所述第一预签名份额是基于以下各项生成的:
[0314]
第一中间份额,所述第一中间份额是基于所述第一私钥份额和所述第一盲钥份额生成的;
[0315]
相应中间份额,所述相应中间份额是从至少所述阈值数量的参与者获取的。
[0316]
语句20、根据语句19所述的方法,其中所述第一预签名份额是基于与所述第一临时私钥份额对应的所述逆生成的。
[0317]
语句21、根据语句18至20中任一项所述的方法,其中所述第一中间份额是基于所
述第二盲钥份额生成的。
[0318]
语句22、根据语句18至21中任一项所述的方法,其中所述第一预签名份额是基于所述共享值生成的。
[0319]
语句23、根据语句22所述的方法,其中所述第一中间份额是基于所述共享值生成的。
[0320]
语句24、根据语句18或19或其从属语句中任一项所述的方法,所述方法包括:将所述第一中间份额传输给至少所述阈值数量的参与者。
[0321]
语句25、根据前述任一项语句所述的方法,所述方法包括:生成所述消息无关组件的多个不同实例。
[0322]
语句26、根据前述任一项语句所述的方法,所述方法包括:生成所述第一临时私钥份额的多个不同实例。
[0323]
语句27、根据语句25或26所述的方法,所述方法包括:生成所述第一盲钥份额和/或所述第二盲钥份额的多个不同实例。
[0324]
语句28、根据语句18或19或其从属语句中任一项所述的方法,所述方法包括:生成所述第一预签名份额的多个不同实例。
[0325]
语句29、根据前述任一项语句所述的方法,所述方法包括:从所述协调者获取所述消息。
[0326]
语句30、根据语句1至28中任一项所述的方法,所述方法包括:生成所述消息。
[0327]
语句31、根据前述任一项语句所述的方法,其中所述消息是第二消息的哈希值。
[0328]
语句32、根据前述任一项语句所述的方法,其中使得所述第一签名份额能够提供给所述协调者包括以下各项中的至少一项:
[0329]
将所述第一签名份额传输给所述协调者;
[0330]
将所述第一签名份额广播给所述阈值数量的参与者中的一个或多个参与者。
[0331]
语句33、根据前述任一项语句所述的方法,其中使得所述第一消息无关组件能够提供给所述协调者包括以下各项中的至少一项:
[0332]
将所述第一消息无关组件传输给所述协调者;
[0333]
将所述第一消息无关组件广播给所述阈值数量的参与者中的一个或多个参与者。
[0334]
语句34、一种计算机实现的方法,用于生成消息的数字签名,其中需要来自一组参与者中的相应参与者的阈值数量的不同签名份额来生成所述数字签名,其中每个参与者具有相应的私钥份额,所述方法由协调者执行并且包括:
[0335]
获取至少阈值数量的相应消息无关组件,其中每个相应消息无关组件是基于相应私钥份额生成的;
[0336]
获取至少所述阈值数量的相应签名份额,其中每个相应签名份额至少基于相应的消息相关组件,并且其中每个相应的消息相关组件是基于所述消息生成的;以及
[0337]
基于每个获取到的所述签名份额和每个获取到的所述消息无关组件来生成所述消息的所述签名。
[0338]
相应的消息无关组件可以构成所述相应签名份额的一部分。
[0339]
生成所述签名可以包括内插所述签名份额。
[0340]
应当注意的是,在一些实例中,所述签名可以是ecdsa签名的组成部分。
[0341]
语句35、根据语句34所述的方法,其中每个相应的签名份额基于所述相应的消息无关组件。
[0342]
语句36、根据语句34所述的方法,所述方法包括:
[0343]
基于每个所述获取的消息无关组件来生成公共消息无关组件;以及
[0344]
基于所述公共消息无关组件来生成所述签名。
[0345]
语句37、根据语句34至36所述的方法,其中每个参与者具有相应的临时私钥份额,并且其中每个相应的消息无关组件和/或消息相关组件基于相应的临时私钥份额。
[0346]
语句38、根据语句37所述的方法,其中每个参与者具有基于与所述临时私钥对应的临时公钥的共享值,并且其中每个相应的消息无关组件基于所述共享值。
[0347]
语句39、根据语句34至38中任一项所述的方法,所述方法包括:将所述消息传输给所述阈值数量的参与者中的一个、一些或全部参与者。
[0348]
语句40、根据语句34至39中任一项所述的方法,所述方法包括:将对相应签名份额的请求传输给至少所述阈值数量的参与者。
[0349]
语句41、根据语句34至40中任一项所述的方法,所述方法包括:生成所述获取的签名份额中的一个签名份额。
[0350]
语句42、根据语句34至41中任一项所述的方法,所述方法包括:输出所述签名。
[0351]
语句43、根据语句42所述的方法,其中输出所述签名包括:
[0352]
将所述签名传输给一方或多方;和/或
[0353]
将所述签名记录在数字媒体上;和/或
[0354]
向公众提供所述签名。
[0355]
语句44、根据前述任一项语句所述的方法,其中所述消息包括区块链事务的至少一部分。
[0356]
相比之下,所述消息可以包括以下各项中的至少一项:文档(例如,法律文档)的至少一部分、数字证书、医疗处方或金融工具。
[0357]
语句45、根据前述任一项语句所述的方法,其中所述参与者的阈值数量小于所述一组参与者中的参与者总数。
[0358]
语句46、一种计算机设备,所述计算机设备包括:
[0359]
存储器,所述存储器包括一个或多个存储器单元;以及
[0360]
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据语句1至45中任一项所述的方法。
[0361]
语句47、一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在根据语句46所述的计算机设备上运行时,执行根据语句1至45中任一项所述的方法。
[0362]
根据本文公开的另一方面,可提供一种方法,所述方法包括所述第一参与者和所述协调者的动作。
[0363]
根据本文公开的另一方面,可提供一种系统,所述系统包括所述第一参与者和所述协调者的计算机设备。
[0364]
一旦给出本文的公开内容,所公开技术的其他变体或用例对于本领域技术人员可
能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。

技术特征:


1.一种计算机实现的方法,用于生成消息的数字签名份额,其中需要来自一组参与者中的相应参与者的阈值数量的不同签名份额来生成所述数字签名,其中每个参与者具有相应的私钥份额,所述方法由所述参与者中的第一参与者执行并且包括:生成第一消息无关组件和第一消息相关组件,其中所述消息无关组件是基于第一私钥份额生成的,其中所述消息相关组件是基于所述消息生成的,其中每个参与者具有相应的临时私钥份额,并且其中所述第一消息无关组件和/或所述第一消息相关组件基于第一临时私钥份额;使得所述第一消息无关组件能够提供给协调者;以及使得第一签名份额能够提供给所述协调者,用于基于至少所述阈值数量的签名份额来生成所述签名,其中所述第一签名份额至少包括所述消息相关组件。2.根据权利要求1所述的方法,其中所述消息无关组件是在获取所述消息之前生成的。3.根据权利要求1或2所述的方法,其中所述第一签名份额包括所述消息无关组件。4.根据权利要求1至3中任一项所述的方法,其中所述第一私钥份额是使用用于生成第一私钥的份额的联合秘密共享方案生成的。5.根据权利要求4所述的方法,其中使用所述联合秘密共享方案生成所述第一私钥份额包括:生成第一数据项,所述第一数据项是第一多项式;从至少所述阈值数量的参与者获取相应数据项,每个相应数据项是由相应参与者生成的相应多项式;以及基于所述第一数据项和每个所述相应数据项来生成所述第一私钥份额。6.根据权利要求5所述的方法,其中获取所述相应数据项包括:通过所述第一参与者与每个所述相应参与者之间的相应通信通道获取所述相应数据项。7.根据权利要求5所述的方法,所述方法包括:将所述第一多项式的相应实例传输给至少所述阈值数量的参与者中的每个参与者,其中所述第一多项式的所述相应实例基于相应参与者。8.根据权利要求7所述的方法,其中每个参与者具有基于与所述临时私钥对应的临时公钥的相应共享值,并且其中所述第一消息无关组件基于所述共享值。9.根据前述任一项权利要求所述的方法,其中所述第一临时私钥份额是使用用于生成所述临时私钥的份额的所述联合秘密共享方案生成的。10.根据前述任一项权利要求所述的方法,其中所述第一消息无关组件是基于与所述第一临时私钥份额对应的逆生成的。11.根据权利要求10所述的方法,其中生成所述第一临时私钥份额的所述逆包括:基于所述临时私钥和第一盲钥来生成中间值;以及基于所述中间值的逆和所述第一盲钥的第一盲钥份额来生成所述第一临时私钥份额的所述逆。12.根据权利要求11所述的方法,其中所述第一盲钥份额是使用用于生成所述第一盲钥的份额的所述联合秘密共享方案生成的。13.根据权利要求11或12所述的方法,其中所述中间值是通过以下方式生成的:基于所述第一临时私钥份额和所述盲钥份额来生成第一乘法密钥份额;
从至少所述阈值数量的参与者获取相应乘法密钥份额;以及基于所述第一乘法密钥份额和每个所述相应乘法密钥份额来生成所述中间值。14.根据权利要求13所述的方法,所述方法包括:将所述第一乘法密钥份额传输给至少所述阈值数量的参与者中的每个参与者。15.根据前述任一项权利要求所述的方法,其中所述消息无关组件是基于第二盲钥的第二盲钥份额生成的。16.根据权利要求15所述的方法,其中所述第二盲钥份额是使用用于生成所述第二盲钥的份额的所述联合秘密共享方案生成的。17.根据权利要求10或其从属权利要求中任一项所述的方法,其中所述第一消息无关组件是基于第一预签名份额生成的,其中所述第一预签名份额是基于以下各项生成的:第一中间份额,所述第一中间份额是基于所述第一私钥份额以及与所述第一临时私钥份额对应的所述逆生成的;以及相应中间份额,所述相应中间份额是从至少所述阈值数量的参与者获取的。18.根据从属于权利要求1至16中任一项的权利要求10所述的方法,其中所述第一消息无关组件是基于第一预签名份额生成的,其中所述第一预签名份额是基于以下各项生成的:第一中间份额,所述第一中间份额是基于所述第一私钥份额和所述第一盲钥份额生成的;相应中间份额,所述相应中间份额是从至少所述阈值数量的参与者获取的。19.根据权利要求18所述的方法,其中所述第一预签名份额是基于与所述第一临时私钥份额对应的所述逆生成的。20.根据权利要求17至19中任一项所述的方法,其中所述第一中间份额是基于所述第二盲钥份额生成的。21.根据权利要求17至20中任一项所述的方法,其中所述第一预签名份额是基于所述共享值生成的。22.根据权利要求21所述的方法,其中所述第一中间份额是基于所述共享值生成的。23.根据权利要求17或18或其从属权利要求中任一项所述的方法,所述方法包括:将所述第一中间份额传输给至少所述阈值数量的参与者。24.根据前述任一项权利要求所述的方法,所述方法包括:生成所述消息无关组件的多个不同实例。25.根据前述任一项权利要求所述的方法,所述方法包括:生成所述第一临时私钥份额的多个不同实例。26.根据权利要求24或25所述的方法,所述方法包括:生成所述第一盲钥份额和/或所述第二盲钥份额的多个不同实例。27.根据权利要求17或18或其从属权利要求中任一项所述的方法,所述方法包括:生成所述第一预签名份额的多个不同实例。28.根据前述任一项权利要求所述的方法,所述方法包括:从所述协调者获取所述消息。29.根据权利要求1至28中任一项所述的方法,所述方法包括:生成所述消息。
30.根据前述任一项权利要求所述的方法,其中所述消息是第二消息的哈希值。31.根据前述任一项权利要求所述的方法,其中使得所述第一签名份额能够提供给所述协调者包括以下各项中的至少一项:将所述第一签名份额传输给所述协调者;将所述第一签名份额广播给所述阈值数量的参与者中的一个或多个参与者。32.根据前述任一项权利要求所述的方法,其中使得所述第一消息无关组件能够提供给所述协调者包括以下各项中的至少一项:将所述第一消息无关组件传输给所述协调者;将所述第一消息无关组件广播给所述阈值数量的参与者中的一个或多个参与者。33.一种计算机实现的方法,用于生成消息的数字签名,其中需要来自一组参与者中的相应参与者的阈值数量的不同签名份额来生成所述数字签名,其中每个参与者具有相应的私钥份额,其中每个参与者具有相应的临时私钥份额,所述方法由协调者执行并且包括:获取至少阈值数量的相应消息无关组件,其中每个相应消息无关组件是基于相应私钥份额生成的;获取至少所述阈值数量的相应签名份额,其中每个相应签名份额至少基于相应的消息相关组件,并且其中每个相应的消息相关组件是基于所述消息生成的;以及基于每个获取到的所述签名份额和每个获取到的所述消息无关组件来生成所述消息的所述签名,其中每个消息无关组件和/或消息相关组件基于相应的临时私钥份额。34.根据权利要求33所述的方法,其中每个相应的签名份额基于所述相应的消息无关组件。35.根据权利要求33所述的方法,所述方法包括:基于每个所述获取的消息无关组件来生成公共消息无关组件;以及基于所述公共消息无关组件来生成所述签名。36.根据权利要求35所述的方法,其中每个参与者具有基于与所述临时私钥对应的临时公钥的共享值,并且其中每个相应的消息无关组件基于所述共享值。37.根据权利要求33至36中任一项所述的方法,所述方法包括:将所述消息传输给所述阈值数量的参与者中的一个、一些或全部参与者。38.根据权利要求33至37中任一项所述的方法,所述方法包括:将对相应签名份额的请求传输给至少所述阈值数量的参与者。39.根据权利要求33至38中任一项所述的方法,所述方法包括:生成所述获取的签名份额中的一个签名份额。40.根据权利要求33至39中任一项所述的方法,所述方法包括:输出所述签名。41.根据权利要求40所述的方法,其中输出所述签名包括:将所述签名传输给一方或多方;和/或将所述签名记录在数字媒体上;和/或向公众提供所述签名。42.根据前述任一项权利要求所述的方法,其中所述消息包括区块链事务的至少一部分。43.根据前述任一项权利要求所述的方法,其中所述参与者的阈值数量小于所述一组
参与者中的参与者总数。44.一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;以及处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据权利要求1至43中任一项所述的方法。45.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在根据权利要求46所述的计算机设备上运行时,执行根据权利要求1至43中任一项所述的方法。

技术总结


一种生成消息的数字签名份额的计算机实现的方法,其中需要来自一组参与者中的相应参与者的阈值数量的不同签名份额来生成所述数字签名,其中每个参与者具有相应的私钥份额,所述方法由所述参与者中的第一参与者执行并且包括:生成第一消息无关组件和第一消息相关组件,其中所述消息无关组件是基于第一私钥份额生成的,并且其中所述消息相关组件是基于所述消息生成的;使得所述第一消息无关组件能够提供给协调者;以及,使得第一签名份额能够提供给所述协调者,用于基于至少所述阈值数量的签名份额来生成所述签名,其中所述第一签名份额至少包括所述消息相关组件。额至少包括所述消息相关组件。额至少包括所述消息相关组件。


技术研发人员:

迈克尔拉

受保护的技术使用者:

区块链许可股份公司

技术研发日:

2021.04.19

技术公布日:

2022/12/22

本文发布于:2024-09-20 13:37:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/46605.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:所述   参与者   份额   阈值
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议