使用冷钱包生成数字签名的制作方法

文档序号:30012212发布日期:2022-05-11 18:31阅读:377来源:国知局
使用冷钱包生成数字签名的制作方法

1.本发明涉及一种使用持有私有签名密钥的冷钱包来生成数字签名的方法和系统。


背景技术:

2.数字签名广泛用于签署文件、执行交易等,以确保签署文件或执行交易的人实际上被授权这样做。例如,这在执行与加密货币相关的交易时是相关的。如果恶意方获得私有签名密钥的访问,则恶意方将能够以私有签名密钥的合法所有者的名义执行签名和交易,并且此类交易可能是不可逆的。对私有签名密钥的此类恶意访问因此可能会造成不可修复的损害,因此在安全条件下存储私有签名密钥是重要的。
3.在提供数字签名时,通常需要证明签名者身份的私有签名密钥。这种私有签名密钥可以存储在本地,例如存储在属于用户的私人电脑或诸如便携式存储器存储设备或加密狗的其他专用硬件上。作为替代方案,可以应用硬件安全模块(hsm)来存储签名密钥。这样做的缺点是只能从私人电脑或专用硬件生成签名。此外,系统的安全性受到用户行为的限制,该行为包括用户在防止盗窃或未经授权访问存储私有签名密钥的硬件方面的谨慎程度。
4.另一种可能性是将私有签名密钥存储在受信任的密钥管理服务处。这允许用户访问私有签名密钥,而不必访问特定硬件。此外,系统的安全性通过可信密钥管理服务集中处置,因此这种方式对个人用户的行为不太敏感。但是,系统的安全性需要在允许合法用户轻松访问和防止恶意方访问签名密钥之间取得平衡。
5.为了提供高级别的安全性,可以应用所谓的“冷钱包”。冷钱包是用于存储和控制私有签名密钥的系统,其未连接到诸如互联网的通信网络。这有时被称作“网络隔离(air-gapped)”系统。由于来自通信网络的访问被认为是密钥管理系统的主要攻击向量之一,冷钱包表现出非常高的安全级别。然而,缺乏通信网络可访问性也使得合法用户很难获得他或她的私有签名密钥。此外,冷钱包仍然代表单点故障,即如果恶意方成功破坏了保持冷钱包的硬件,他或她将拥有对私有签名密钥的完全访问。如果私有签名密钥是秘密共享并且存储在不同的位置,情况也是如此,因为仍然需要汇总私有签名密钥来生成签名。最后,为了执行签名,一些数据需要进入网络隔离系统,从而引入了恶意软件进入网络隔离系统并破坏私有签名密钥的风险。
6.steven goldfeder等人的2014年6月3日的可在https://www.cs.princeton.edu/~stevenag/bitcoin_threshold_signat ures.pdf获得的文章“通过阈值签名保护比特币钱包”公开了一种与比特币的ecdsa签名兼容的门限签名方案,其可用于实施复杂但有用的安全策略,包括钱包的共享控制、安全簿记、安全授权,和个人钱包的双因素安全。构造有效签名的能力分发在n个参与者之间,每个参与者通过例如秘密共享方案的方式接收私有签名密钥的份额。需要t或更多方参与签名,其中某些固定的t≤n。密钥份额可能存储在冷钱包中。ecdsa门限签名协议用于在不重构私有签名密钥的情况下提供具有并行控制的签名交易。签名在需要在持有密钥份额的参与者之间进行通信的步骤直接从密钥份额中获得。


技术实现要素:

7.本发明实施例的一个目的是提供一种用于提供数字签名的方法,该方法在允许合法用户轻松访问的同时获得高级别的安全性。
8.本发明实施例的另一个目的是提供一种用于提供数字签名的系统,该系统在允许合法用户轻松访问的同时提供高级别的安全性。
9.根据本发明的第一方面,提供了一种用于提供数字签名的方法,该方法包括以下步骤:
10.提供在冷钱包的两个或更多个节点之间分布的私有签名密钥,从而冷钱包的每个节点都拥有私有签名密钥的一个或多个份额,并且冷钱包没有一个节点拥有私有签名密钥的所有份额;
11.冷钱包的每个节点基于其私有签名密钥的份额生成预签名,并将预签名发送到两个或更多个预签名节点中的一个,以使得每个预签名节点仅从冷钱包的一个节点接收预签名;
12.一个签名应用程序请求签名并将要签名的消息发送到每个预签名节点;
13.响应于接收签名请求和要签名的消息,每个预签名节点基于其预签名和要签名的消息生成部分签名;
14.每个预签名节点将其部分签名发送给签名应用程序;和
15.该签名应用程序从部分签名计算数字签名。
16.因此,根据本发明第一方面的方法是用于提供数字签名的方法。如上所述,此类数字签名可用于签署文档或执行诸如,例如基于区块链技术的加密货币交易的交易。
17.最初,提供私有签名密钥。私有签名密钥可以在系统搭建时一次性提供,并且私有签名密钥随后可以应用于多个签名,即,可以重复下面描述的一些或全部步骤,而不重复提供私有签名密钥的步骤。
18.私有签名密钥在冷钱包的两个或更多个节点之间分布。相应地,冷钱包的每个节点都拥有私有签名密钥的至少一个份额,并且冷钱包的节点中没有一个节点拥有私有签名密钥的所有份额,因此,没有一个节点构成单点故障。此外,由于节点形成冷钱包的一部分,它们不连接到通信网络,从而形成网络隔离(air-gapped)系统,因此私有签名密钥被存储在非常安全的条件下。不排除在某些情况下和在有限的时间内(例如为了生成私有签名密钥)允许节点相互通信。然而,不允许任何节点接收来自冷钱包外部的通信。
19.私有签名密钥的份额可以充当多重签名设置的多个私有密钥,其中需要基于多个单独的私钥的多个有效签名以便提供有效签名或有效地授权交易。因此,根据本发明的方法可以应用于模拟多签名工作流。例如,冷钱包的节点可以布置在单独的服务器上,这些服务器甚至可以在物理上彼此分离。
20.不排除私有签名密钥为根密钥和从根密钥导出的多个确定性派生的分层密钥的形式。例如,如果冷钱包采用所谓hd钱包的形式,则可能会出现这种情况,hd钱包有时适用于其他加密货币的比特币。在这种情况下,例如当生成根密钥时可以导出多个分层密钥,并且因此节点之间需要相互通信,并且每个节点可以持有根密钥的一个或多个份额和多个派生密钥份额。可以为每个密钥份额提供索引号。例如,分层密钥份额可以通过计算散列值(例如hmac)从根密钥导出。在这种情况下,根密钥保存在冷钱包中。然而,可以允许某些派
生密钥层离开冷钱包,从而使它们更易于访问,而不会损害根密钥的安全性。
21.接下来,冷钱包的每个节点根据其私有签名密钥的份额生成预签名。由于每个预签名仅基于私有签名密钥的一些份额生成,因此没有一个预签名代表整个私有签名密钥。预签名因此可以被视为预签名份额,冷钱包的每个节点由此持有预签名份额。在私有签名密钥是一种包括根密钥和多个确定性派生的分层密钥的情况下,冷钱包的每个节点可以基于派生的密钥份额中的一个生成预签名。
22.可以在有或没有冷钱包的节点之间的内部通信的情况下执行预签名的生成。在预签名的生成需要冷钱包节点之间的内部通信的情况下,预签名可以有利地在指定时间(例如,紧随提供私有签名密钥的步骤,该步骤也需要冷钱包节点之间的通信)生成。因此,冷钱包节点之间的通信被最小化并限制在明确定义的时间间隔内,从而将泄露私有签名密钥份额的风险降至最低。
23.在本发明的方法被应用于模拟多重签名工作流的情况下,在某种意义上持有私有签名密钥份额的所有节点不需要形成冷钱包的一部分,因为至少一些节点可以被允许在封闭或网络隔离(air-gapped)系统之外进行通信。
24.此外,冷钱包的每个节点将生成的预签名发送到两个或更多个预签名节点中的一个,以使得每个预签名节点仅从冷钱包的一个节点接收预签名。因此,冷钱包的节点和预签名节点之间存在一对一的关系,并且预签名节点中没有一个拥有组合起来代表整个私有签名密钥的预签名。因此,没有一个预签名节点构成单点故障。此外,预签名从冷钱包中导出,而不会完全或部分暴露私有签名密钥。注意,可以在不知道要签名的消息的情况下执行生成和发送预签名的步骤,因此不需要将消息发送到冷钱包。
25.接下来,签名应用程序请求签名,并向每个预签名节点发送要签名的消息。响应于此,每个预签名节点基于其预签名和要签名的消息生成部分签名。由于部分签名通过各个预签名节点生成,并且基于各个节点所拥有的预签名,因此没有一个部分签名代表整个私有签名密钥,因此没有一个部分签名形成消息的完整签名。然而,完整的签名可以由部分签名的组合形成。
26.因此,每个预签名节点将其部分签名发送到签名应用程序。因此,签名应用程序拥有所有的部分签名,从而能够形成完整的签名。因此,签名应用程序最终从部分签名中计算出数字签名。
27.预签名在冷钱包内生成的优点在于没有数据进入冷钱包,也没有私有签名密钥的份额离开冷钱包,因为这大大降低了关于私有签名密钥的任何信息泄露的风险。
28.此外,由于预签名被发送到冷钱包之外的预签名节点,用户可以轻松访问这些节点,因此该系统对用户非常友好,并且易于授权用户使用。
29.因此,在根据本发明第一方面的方法中,冷钱包在整个过程中保持网络隔离(air-gapped)。因此,在冷钱包中引入恶意软件的风险以及泄露私有签名密钥的风险被降至最低。然而,由于预签名由预签名节点持有,因此在实际签名过程中,这些节点比私有签名密钥更容易访问,从而为合法用户提供对签名的轻松访问。因此,根据本发明第一方面的方法,由于冷钱包的节点持有私有签名密钥的份额而提供了高级别的安全性,同时由于预签名节点持有预签名而允许合法用户轻易访问。
30.该方法可以进一步包括在生成部分签名的步骤之后和在发送部分签名的步骤之
前每个预签名节点删除预签名的步骤。根据本实施例,一旦预签名被应用于生成部分签名,就从预签名节点中将其删除。从而防止了给定的预签名可以被应用于生成两个或更多个部分签名。这是一个优点,因为此类源自一个预签名的多个部分签名可能会危及私有签名密钥的保密性。通过在部分签名被发送到签名应用程序之前删除预签名,进一步防止了对已经获得签名应用程序的访问的恶意方基于相同的预签名请求第二部分签名。当应用椭圆曲线数字签名算法(ecdsa)时,这一点尤为重要。
31.冷钱包的每一个节点将预签名发送到预签名节点之一的步骤可以使用单向通信信道来执行。根据本实施例,有效地保证了只允许信息退出冷钱包,而不允许数据进入冷钱包。因此,私有签名密钥和要签名的消息永远不会位于同一位置。因为此类恶意软件可能会与消息一起进入冷钱包,此方法大大降低了恶意软件进入冷钱包从而危及私有签名密钥的风险,。
32.例如,单向通信信道可以是例如二维码的可视输出的形式,其可以被预签名节点扫描。替代地或附加地,单向通信信道可以包括仅允许单向通信的网络装备和/或连接。
33.提供私有签名密钥的步骤可以由冷钱包的节点通过多方计算协议生成私有签名密钥来执行。多方计算协议可以例如是加密协议。根据本实施例,冷钱包的节点协作生成私有签名密钥,以使得整个私有签名密钥永远不会被汇总,并且使得私有签名密钥的份额都不离开冷钱包。
34.冷钱包的每一个节点可以生成作为包括两个或更多个预签名的批次的一部分的预签名。根据该实施例,例如,最初在生成私有签名密钥时生成多个预签名,并且在请求签名时一次一个地使用预签名。例如,预签名的生成可能需要在冷钱包的至少一些节点之间的通信。类似于上述私有签名密钥的生成,这可以包括例如应用多方计算协议。为了将破坏私有签名密钥的风险降至最低,可能需要将冷钱包节点之间的通信限制在较短且不频繁的时间间隔内。如果作为批次生成多个预签名,则下次需要预签名时,冷钱包的节点无需相互通信。从而提高了系统的安全性。
35.预签名还可以作为预签名的批次被发送到各个预签名节点。作为替代方案,可以将预签名的批次存储在冷钱包的各个节点处,并且可以在每次请求签名时将预签名一次一个地发送到各个预签名节点。
36.至少提供私有签名密钥、生成预签名和将预签名发送到预签名节点的步骤可以作为在签名应用程序请求签名的步骤之前的预处理步骤来执行。
37.可以在不知道要签名的消息的情况下执行提供私有签名密钥、生成预签名和将预签名发送到预签名节点的步骤。因此,这些步骤可以有利地作为预处理步骤在请求签名之前执行,并且可能在系统负载低的时候执行。这减少了实际请求签名时系统的延迟。此外,由于在请求和生成签名时不需要冷钱包节点与预签名节点之间的通信,提高了系统的可靠性,从而降低了签名过程中通信失败的风险。最后,这确保了冷钱包在实际签名过程中保持网络隔离(air-gapped),从而大大降低了对系统进行成功恶意攻击的风险。
38.作为替代,冷钱包的每个节点基于其私有签名密钥的份额生成预签名并将预签名发送到两个或更多个预签名节点之一的步骤可以是由预签名节点响应于接收到来自签名应用程序的签名请求而发起的。根据本实施例,在实际请求签名之前不生成预签名。相反,该过程由签名应用程序请求签名并将要签名的消息发送到预签名节点而开始。响应于此,
预签名节点向冷钱包的各个节点请求预签名,冷钱包的各个节点进而生成预签名并将它们传送给预签名节点。
39.每个预签名节点生成部分签名的步骤可以在预签名节点之间没有内部通信的情况下执行。根据该实施例,一旦预签名节点已经从冷钱包的节点接收到各自的预签名,每个预签名节点能够在不与任何其他预签名节点通信的情况下生成其部分签名。这最大限度地减少了生成实际签名时所需的通信,从而减少了延迟并提高了系统的安全性和可靠性。如上所述,该实施例与其中一些方法步骤作为预处理步骤执行的实施例组合特别相关。
40.该方法还可以包括授权来自签名应用程序的签名请求的步骤。根据该实施例,仅当可以验证签名请求来自授权用户时才会启动签名过程。授权可以包括例如输入密码或任何其他合适的识别方法。
41.冷钱包的节点可以满足阈值条件t,预签名节点可以满足阈值条件t',其中t'≥t。
42.用于执行多方数字签名的系统通常设计为实现(t,n),其中n是节点数,t是阈值。阈值t指在允许完成签名过程的同时,可以容忍多少恶意方或非参与方。通常,任何t+1个诚实节点都可以生成有效签名。
43.例如,在t=n/2,n=3的情况下,任何2个节点都可以生成一个有效的签名,最多可以容忍1个恶意或非参与节点。
44.根据该实施例,冷钱包的节点满足阈值条件t。因此,冷钱包的任何t+1个节点都可以计算出私有签名密钥。此外,预签名节点满足阈值条件t'。因此,可以从源自任何t'+1个预签名节点的预签名计算出有效的签名。由于t'≥t,所需的参与和诚实预签名节点的数量至少与冷钱包的所需的诚实和参与节点的数量一样。根据一个实施例,t'=2t。因此,与冷钱包相比,更高的可访问性导致的预签名节点的较低安全级别通过施加更严格的阈值条件被补偿。
45.该方法还可以包括以下步骤:
46.冷钱包的至少一些节点生成一个或多个附加预签名份额,加密附加预签名份额,并将加密的附加预签名份额与预签名一起发送到一个或多个预签名节点;和
47.每个已接收并加密附加预签名份额的预签名节点将加密的附加预签名份额与部分签名一起发送给签名应用程序。
48.并且签名应用程序计算数字签名的步骤可以包括以下步骤:
49.签名应用程序解密接收到的加密的附加预签名份额;
50.签名应用程序基于解密的附加预签名份额生成附加预签名,并基于附加预签名和要签名的消息生成附加部分签名;和
51.签名应用程序根据从预签名节点接收的部分签名和生成的附加部分签名计算数字签名。
52.根据本实施例,签名应用程序与预签名节点一起充当签名过程中的附加方。因此,代替源自n个预签名节点的n个部分签名,现在有n+1个部分签名,并且第(n+1)个部分签名通过签名应用程序使用由n个预签名节点提供的一个或多个附加预签名份额生成。
53.通过在签名过程中引入此类附加方,提高了在冷钱包外部发生的部分过程的安全性。例如,在冷钱包内部发生的签名过程的部分可能满足(t,n)阈值条件,而在冷钱包外部(例如在预签名节点和签名应用程序处)发生的签名过程的部分可以满足(t+1,n+1)的阈值
条件。
54.此外,签名应用程序仅参与签名过程的最后部分是一个优点,因为这最大限度地减少了签名应用程序与系统其它方之间所需的交互次数,从而最大限度地减少了签名过程中的延迟。
55.根据本实施例,可以按以下方式执行签名过程。当冷钱包的节点在生成它们的预签名时,也会在它们之间生成一个或多个附加预签名份额,这些附加预签名份额组合构成附加预签名。附加预签名份额被加密,并且加密的附加预签名份额与预签名一起被发送到各个预签名节点。附加预签名份额可以由冷钱包的各个节点独立于冷钱包的其他节点生成,或者冷钱包的两个或更多个节点可以合作生成附加预签名份额,这将在下面更详细地描述。
56.如上所述,响应于接收签名请求,每个预签名节点生成部分签名并将部分签名发送到签名应用程序。已经从冷钱包的节点之一接收到加密的附加预签名份额的预签名节点进一步将接收到的加密预签名份额连同其预签名一起发送到签名应用程序。因此,签名应用程序从预签名节点接收部分签名和一个或多个加密的附加预签名份额。
57.签名应用程序解密接收到的加密的附加预签名份额,并从解密的份额中生成附加预签名。然后,签名应用程序基于附加预签名和要签名的消息,以类似于预签名节点生成其部分签名的方式生成附加部分签名。最后,签名应用程序根据从预签名节点接收的部分签名和附加部分签名计算数字签名。因此,签名应用程序作为附加方参与签名过程,其行为类似于预签名节点。
58.生成一个或多个附加预签名份额的步骤可以由冷钱包的每个节点生成附加预签名份额并加密附加预签名份额来执行。
59.根据该实施例,预签名份额通过冷钱包的各个节点独立于冷钱包的其他节点生成。因此,冷钱包没有一个节点获得由冷钱包的其他节点生成的附加预签名份额的任何信息。类似地,没有一个预签名节点获得通过其他预签名节点接收到的加密的附加预签名份额的任何信息。
60.根据该实施例,例如可以以下列方式执行签名过程。例如在标准schnorr签名方案中,假设冷钱包包括n个节点,并且冷钱包的每个节点持有私有签名密钥[x]的份额xi和随机共享值[k]的份额ki。然后,公共验证密钥为y=g
x
,其中g是循环组的生成器。消息m的签名则为(r,s),其中r=h(m||r)且s=k+rx,其中r=gk且h是应用的签名算法指定的函数。可以进一步假设冷钱包的每个节点持有y=g
x
,r=gk,和例如对称加密密钥di的加密密钥。
[0061]
然后冷钱包的每个节点可以选择随机数ai和bi,并计算k'i=k
i-ai和x'i=x
i-bi。此外,冷钱包的每个节点可以计算di=e
di
(ai||bi||r||y),其中e表示使用加密密钥di进行的认证加密。那么从冷钱包的给定节点发送到对应的预签名节点的消息为mi=(k'i,x'i,r,di),其中k'i、x'i和r形成预签名,并且di形成加密的附加预签名份额。
[0062]
签名应用程序请求签名并将要签名的消息m发送到每个预签名节点。响应于此消息,每个预签名节点基于从冷钱包节点接收的消息mi和要签名的消息m生成部分签名,如partiali=k'i+h(m||r)
·
x'i。每个预签名节点向签名应用程序发送消息ni=(partiali,di)。
[0063]
签名应用程序持有解密密钥,使其能够解密每个加密的附加预签名份额di。在应
用对称加密的情况下,解密密钥与加密密钥di相同。因此,在收到消息ni后,签名应用程序解密加密的附加预签名份额di,并通过计算k'
n+1
=a1+a2+

+an和
[0064]
x'
n+1
=b1+b2+

+bn生成附加预签名。签名应用程序进一步生成附加部分签名,如partial
n+1
=k'
n+1
+h(m||r)
·
x'
n+1
,即以与预签名节点生成它们各自的部分签名相同的方式生成附加部分签名。
[0065]
最后,签名应用程序计算数字签名(r,s),其中r=h(m||r),s是部分签名的总和,即s=partial1+partial2+

+partial
n+1
。此外,签名应用程序可以检查所有接收到的r值是否相同。如果不相同,例如由于恶意或不诚实的一方,则签名不正确。因此,如果接收到的r值不相同,签名应用程序可以选择中止签名过程。
[0066]
作为替代方案,生成一个或多个附加预签名份额的步骤可以以类似于上述实施例的方式执行,但是只有冷钱包的一些节点参与。在这种情况下,需要少于n个附加的预签名份额才能生成第(n+1)个预签名。
[0067]
作为另一种替代方案,生成一个或多个附加预签名份额的步骤可以由应用多方计算协议的冷钱包的至少两个节点来执行。
[0068]
根据本实施例,一个或多个附加预签名份额是由冷钱包的两个或更多个节点协同生成的。冷钱包的所有节点都可能参与这个过程,也可能只有冷钱包的一些节点参与。
[0069]
例如,冷钱包的节点可以通过多方计算协议生成两个或更多个附加的预签名份额,并将其分布在冷钱包的两个或更多个节点中。例如,这可以类似于上述通过多方计算协议生成分布式私有签名密钥。从分布式份额可以被视为加密份额的意义上说,附加预签名份额的加密例如可以是多方计算协议的一个集成部分。
[0070]
作为替代方案,多方计算协议可以导致生成单个加密的附加预签名份额,其构成整个附加预签名的加密版本。然后,该加密的附加预签名份额可以由冷钱包的一个或多个节点发送到一个或多个预签名节点。在这种情况下,一旦签名应用程序解密了附加预签名份额,附加预签名份额也已经生成。
[0071]
如上所述,可以通过在冷钱包的各个节点和签名应用程序之间共享的对称加密密钥对附加的预签名份额进行加密和解密。在这种情况下,冷钱包的每个节点都与签名应用程序共享对称加密密钥,并且该密钥被应用于加密附加预签名份额以及解密附加预签名份额。作为替代方案,可以应用另一种加密方案,例如应用诸如公钥基础设施(pki)方案的非对称加密密钥。
[0072]
根据本发明的第二方面,提供了一种用于提供数字签名的系统,该系统包括:
[0073]
冷钱包,包括两个或更多个节点,具有分布在节点之间的私有签名密钥,因此冷钱包的每个节点拥有私有签名密钥的一个或多个份额,并且冷钱包没有一个节点拥有私有签名密钥的所有份额,冷钱包的节点被配置为基于其私有签名密钥的份额生成预签名,并将预签名发送到预签名节点,
[0074]
包括两个或更多个预签名节点的预签名钱包,预签名节点被配置为从冷钱包的节点接收预签名,以使得每个预签名节点从冷钱包的仅一个节点根据其预签名和要签名的消息生成部分签名,并将其部分签名发送给签名应用程序,以及
[0075]
签名应用程序,被配置为向预签名节点发送签名请求和要签名的消息,从预签名节点接收部分签名,并根据部分签名计算数字签名。
[0076]
根据本发明的第二方面的系统可以用于执行根据本发明的第一方面的方法,因此上述说明在这里同样适用。
[0077]
因此,根据本发明第二方面的系统包括冷钱包、预签名钱包和签名应用程序。
[0078]
冷钱包包括两个或更多个节点,它们具有以上述参考本发明的第一方面描述的方式分布在它们之间的私有签名密钥。冷钱包的节点还被配置为生成预签名并将这些预签名以上述参考本发明的第一方面描述的方式发送到预签名节点。冷钱包被网络隔离(air-gapped),即冷钱包的节点是离线的,除非在生成私有签名密钥时(在这种情况下只允许节点相互通信)和在输出预签名时(在这种情况下允许节点发送信息,但不能接收信息)。
[0079]
预签名钱包包括两个或更多个预签名节点,每个预签名节点被配置为以上述参考本发明的第一方面描述的方式接收预签名。预签名节点还被配置为生成部分签名并将这些签名以上述参考本发明的第一方面描述的方式发送到签名应用程序。
[0080]
签名应用程序被配置为向预签名节点发送签名请求和要签名的消息,从预签名节点接收部分签名,并以上述参考本发明的第一方面的方式计算数字签名。
[0081]
可以防止数据向冷钱包的发送。在这种情况下,数据只被允许以被发送到预签名节点的预签名的形式离开冷钱包。但是,要签名的消息永远不会进入冷钱包,并且私有签名密钥的份额永远不会离开冷钱包。从而有效地确保了私有签名密钥和要签名的消息永远不会位于相同的位置。
附图说明
[0082]
现在将参照附图更详细地描述本发明,其中,
[0083]
图1是根据本发明实施例的系统的示意图,以及
[0084]
图2是说明根据本发明实施例的方法的流程图。
具体实施方式
[0085]
图1是根据本发明实施例的系统1的示意图。系统1包括冷钱包2、预签名钱包3和签名应用程序4。
[0086]
冷钱包2包括多个节点5。为了说明的目的,展示了三个节点5。然而,应该注意的是,不排除冷钱包2包括两个节点5,或者冷钱包2包括四个或更多个节点5。冷钱包2从冷钱包2的节点5本质上是离线的意义上来说是网络隔离(air-gapped)的,因此恶意方难以获得访问。
[0087]
预签名钱包3包括多个预签名节点6。为了说明的目的,展示了三个预签名节点6,但不排除预签名钱包3可以包括两个预签名节点6或者预签名钱包3可以包括四个或更多个预签名节点6。然而,优选地,冷钱包2的节点5的数量和预签名节点6的数量相同。从允许进出预签名钱包3的通信是有限的意义来看,预签名钱包3可以被认为是“不冷不热的”。从而预签名钱包3的安全级别低于冷钱包2的安全级别。然而,预签名钱包3更容易被授权用户访问,因此比冷钱包2对用户更加友好。
[0088]
图1的系统1可以以下列方式操作。最初,由冷钱包2的节点5使用多方密码协议生成私有签名密钥。从而私有签名密钥分布在在冷钱包2的节点5之间,以使得每个节点5拥有私有签名密钥的一个或多个份额,并且没有一个节点5拥有私有签名密钥的所有份额。因
此,私有签名密钥永远不会在一个位置被汇总,并且没有一个节点5构成关于私有签名密钥的单点故障。在图1所示的实施例中,私有签名密钥有三个份额,并且每个节点5拥有其中一个份额。冷钱包2的节点5被允许在它们生成私有签名密钥的同时相互通信,但在其他方面相互隔离。从而防止私有签名密钥在稍后的时间点被汇总。冷钱包2的节点5在任何时候都被阻止从冷钱包2之外的任何实体接收数据。
[0089]
私有签名密钥的份额可以充当多重签名设置的多个私有签名密钥的单独的私钥,从而允许系统1模拟如上所述的多重签名工作流。
[0090]
接下来,冷钱包2的每个节点5基于其私有签名密钥的份额生成预签名。由此,由冷钱包2的给定节点5生成的预签名代表由该节点5持有的私有签名密钥的份额,但不代表由冷钱包2的其他两个节点5持有的私有签名密钥的份额。预签名可以作为一批预签名的一部分生成,也可以一次一个地生成预签名。可允许冷钱包2的节点5在预签名的生成期间彼此通信。
[0091]
冷钱包2的每一个节点5进一步将预签名发送到对应的预签名节点6。因此,每个预签名节点6从冷钱包2的一个且仅一个节点5接收预签名。因此,没有一个预签名节点6接收代表整个私有签名密钥的预签名,从而使得没有一个预签名节点6能够自行计算有效签名。然而,组合的预签名节点6拥有使它们能够计算有效签名的预签名。使用单向通信信道执行从冷钱包2的节点5到预签名节点6的预签名的发送。例如,冷钱包2的节点5可生成视觉或机器可读代码,例如二维条形码,其可由相关预签名节点6(例如,通过相机或合适的扫描仪)读取。从而有效地保证没有数据进入冷钱包2。
[0092]
到目前为止描述的步骤不需要知道要签名的消息,因此它们可以作为预处理步骤来执行。这减少了实际生成签名时所需的步骤数量,特别是通信步骤的数量。这也减少了系统1的延迟并且减少了由于通信故障或超时而导致签名过程失败的风险。
[0093]
当需要签名时,授权用户联系签名应用程序4并提供要签名的消息。然后,签名应用程序4通过请求签名并将要签名的消息发送到每个签名节点6来联系预签名节点6。响应于此,每个预签名节点6基于它的预签名以及基于从签名应用程序4接收到的消息生成部分签名。因此,没有一个部分签名构成完整的有效签名,但是三个部分签名组合起来包含足够的信息来计算消息的一个有效的签名。此外,基于要签名的消息以及基于私有签名密钥,以基于私有签名密钥的相应份额生成的预签名的形式生成部分签名。然而,部分签名的生成不需要待签名的消息进入冷钱包2,并且不需要任何私有签名密钥的份额离开冷钱包2。此外,可以生成部分签名而不需要预签名节点6的相互通信。如上所述,这减少了系统1的延迟并且使系统1受到损害的风险最小化。在系统1被应用于模拟多重签名工作流的情况下,这进一步允许以非常类似于标准多重签名工作流的方式执行签名过程,即无需更改用户习惯遵循的工作流。例如,不需要所有方都在线或同时生成部分签名。
[0094]
预签名节点6进一步将生成的部分签名发送给签名应用程序4,然后签名应用程序4根据部分签名计算消息的数字签名。如上所述,由于冷钱包2和预签名钱包3的分离,图1中所示的系统1提供了高级别的安全性,同时允许合法用户轻松访问。
[0095]
图2是说明根据本发明实施例的方法的流程图。该过程从步骤7开始。在步骤8,由冷钱包的两个或更多个节点使用多方密码计算协议(例如以上述方式)生成私有签名密钥。因此,私有签名密钥分布在冷钱包的节点之间。
[0096]
在步骤9,冷钱包的每个节点基于其私有签名密钥的份额生成预签名,并以上述方式将预签名发送到预签名节点。
[0097]
在步骤10,调查签名应用程序是否已请求签名。如果情况并非如此,则不会采取进一步行动,如果收到签名请求,将以规律的时间间隔对其进行反复调查。当签名应用程序请求签名并且将要签名的消息发送到预签名节点时,该过程前进到步骤11,其中每个预签名节点基于其预签名和要签名的消息生成部分签名。当部分签名已经生成时,预签名被各个预签名节点删除,以确保它们不会被重新用于另一个未来的签名。
[0098]
在步骤12,每个预签名节点将其部分签名发送到请求签名的签名应用程序。最后,在步骤13,签名应用程序根据接收到的部分签名计算签名。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1