CN115885498A - 阈值签名 - Google Patents
阈值签名 Download PDFInfo
- Publication number
- CN115885498A CN115885498A CN202180050970.0A CN202180050970A CN115885498A CN 115885498 A CN115885498 A CN 115885498A CN 202180050970 A CN202180050970 A CN 202180050970A CN 115885498 A CN115885498 A CN 115885498A
- Authority
- CN
- China
- Prior art keywords
- signature
- message
- participant
- transaction
- public key
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
- H04L9/3255—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures using group based signatures, e.g. ring or threshold signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/085—Secret sharing or secret splitting, e.g. threshold schemes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/088—Usage controlling of secret information, e.g. techniques for restricting cryptographic keys to pre-authorized uses, different access levels, validity of crypto-period, different key- or password length, or different strong and weak cryptographic algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computing Systems (AREA)
- Theoretical Computer Science (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
一种生成数字签名的份额的计算机实现的方法,其中每个参与者具有第一共享私钥的相应份额,其中所述方法由第一参与者执行并且包括:获得第一消息;至少基于第一外部数据项的哈希来生成第一数据项;生成临时私钥的第一临时私钥份额,所述第一临时私钥份额基于所述第一数据项和每个其他参与者生成的相应数据项;生成对应于所述临时私钥的临时公钥;基于所述第一消息、所述第一临时私钥份额、所述第一共享私钥的第一份额、和所述临时公钥生成第一签名份额;以及,将所述第一签名份额提供给协调者,以基于至少阈值数量的签名份额来生成第一签名。
Description
技术领域
本公开涉及一种生成数字签名的份额的方法。具体地,所述方法使外部数据能够嵌入到数字签名的份额中。
背景技术
通常,共享秘密(shared secret)可以用于共享分布在一组参与者之间的数据项。每个参与者具有该秘密的不同份额(share)。通常,只有当一定数量(称为“阈值threshold”)的参与者提供其相应份额时才能重建该秘密,例如组合在一起以计算该秘密。
公钥密码学是一种使用密钥对的加密***,该密钥对包括:私钥,其仅对私钥所有者已知;以及公钥,其是基于对应的私钥生成的,并且可以在不损害私钥安全性的情况下进行传播。
公钥密码学使得发送者能够使用接收者的公钥(即,与仅对接收者已知的私钥对应的公钥)来加密消息。该加密消息随后只能使用接收者的私钥进行解密。
类似地,发送者可以使用自己的私钥对消息进行签名,例如以证明该消息是由发送者发送的,和/或指示发送者同意该消息。签名者(即,生成签名的一方)使用他们的私钥基于该消息创建数字签名。基于消息创建数字签名意味着将该消息和私钥提供给基于该消息和私钥生成该签名的函数。该签名被添加到(例如,标记到)该消息中或以其他方式与该消息相关联。拥有签名者的对应公钥的任何人都可以使用同一消息以及该消息中的数字签名来验证签名是否有效创建,即签名是否确实是使用签名者的私钥创建的。除确保消息的真实性之外,数字签名还确保消息的完整性和不可否认性。也就是说,数字签名可以用于证明消息在使用该签名进行签名之后未更改,并且签名的创建者将来不能否认他们创建了该签名。
数字签名方案通常涉及三个过程,即算法。密钥生成算法用于生成随机私钥和对应的公钥。签名算法用于基于消息和私钥来生成签名。在给定公钥和消息的情况下,验证算法用于验证是否已使用对应的私钥并根据签名算法生成签名。
共享秘密的常见用途是作为私钥-公钥对的共享私钥。也就是说,私钥可以分布在一组参与者之间,使得没有一个参与者能够访问该私钥。因此,没有一个参与者可以生成消息的有效签名。相反,一些或全部参与者必须共同生成该私钥才能生成该签名。
参与者可以使用阈值签名方案,而不是共享他们的私钥份额来生成签名。阈值签名方案允许一组中阈值数量的参与者使用共享私钥的单独份额基于消息创建数字签名,而不向任何一个参与者提供该私钥。这里,数字签名是基于待签名消息生成的签名。在此类方案中,只有当阈值数量的参与者同意在消息中生成签名时,才能创建签名。使用较少数量的参与者生成签名的任何尝试都不会生成有效的签名。因此,该组的有效签名(即,使用消息和共享私钥生成的签名)可证明具有阈值数量的人同意生成签名。这还意味着,任何攻击者都需要获取私钥的阈值数量的份额,才能使用该私钥伪造签名。
发明内容
如上所述,共享秘密可以是共享私钥,一群参与者中的每个参与者具有所述共享私钥的相应份额。阈值数量的参与者可以一起使用所述共享私钥生成有效签名,而无需实际生成所述共享私钥。公钥可以提供给第三方来核实签名,即验证至少有所述阈值数量的参与者同意生成所述签名。在这些情况下,参与者需要能够证明其参与了所述签名的生成。
根据本文公开的一个方面,提供了一种计算机实现的方法,用于生成数字签名的份额,其中参与者群组中的每个参与者具有第一共享私钥的相应份额,并且其中所述方法由所述群组中的第一参与者执行并且包括:获得第一消息;至少基于第一外部数据项的哈希来生成第一数据项;生成临时私钥的第一临时私钥份额,其中所述第一临时私钥份额是基于所述第一数据项和每个其他参与者生成的相应数据项而生成的;生成对应于所述临时私钥的临时公钥;基于所述第一消息、所述第一临时私钥份额、所述第一共享私钥的第一份额、和所述临时公钥生成第一签名份额;以及,使所述第一签名份额能够被协调者使用,以基于至少阈值数量的相应签名份额来生成第一签名。
根据本文公开的另一方面,提供了一种计算机实现的方法,用于验证数字签名已经由第一参与者部分生成,其中所述方法由验证方执行并且包括:获得第一签名,所述第一签名包括第一签名分量和第二签名分量;从所述第一参与者获得候选第一外部数据项、和对应于相应数据项的一个或多个相应公钥,每个其他参与者对应一个;基于所述候选第一外部数据项的哈希生成候选公钥;基于所述候选公钥和所获得的一个或多个公钥生成候选临时公钥;基于所述候选临时公钥生成候选第一签名分量;以及,基于所述候选第一签名分量是否对应于所述第一签名分量,验证所述第一签名已经由所述第一参与者部分生成。
所述第一参与者生成用于对消息进行签名的数字签名的份额。在区块链环境中,所述消息可以是事务(transaction),例如,所述签名可以包含在事务的输入中,以解锁上一个事务的输出。通常,所述消息可以是任何形式的消息,例如文档,不一定需要与所述区块链相关。所述签名份额至少部分是基于临时私钥份额(例如,一次性使用私钥的份额)生成的。所述临时私钥份额至少部分是基于外部信息(即,所述“外部数据项”)生成的。所述外部数据项可以包括和/或基于所述第一参与者的标识符生成,例如姓名、地址、电话号码、国家保险号码、护照号、公钥等。在一些示例中,所述外部数据项是由所述第一参与者生成的数字签名。所述第一参与者将所述签名份额提供给协调者,以便与足够多的其他签名份额一起生成完整签名。在一些示例中,所述协调者可以是所述第一参与者。
所述签名一旦生成,便可以使用对应于所述共享私钥的公钥进行验证。然而,这并不能使所述第一参与者向验证方证明所述第一参与者生成了所述签名的份额。相反,由于只有所述第一参与者知道用于生成所述签名份额的所述外部数据项,因此所述第一参与者可以泄露所述外部数据项,并使所述验证方能够重构所述签名的至少一部分(即,所述“第一签名分量”)。也就是说,所述验证方基于所述外部数据项生成候选第一签名分量。如果所述重构的第一签名分量(即,所述候选第一签名分量)与所述第一签名分量匹配,则所述验证方可以确定所述第一参与者确实参与了所述签名。
本发明使外部信息能够并入签名中,即嵌入签名中。除非所述外部信息由所述第一参与者提供,否则所述验证方不知道所述外部信息。具体地,所述外部信息用于导出所述签名。例如,所述第一参与者可以将链接到第一参与者身份的公钥嵌入到使用不同私钥(即,与所述嵌入的公钥不对应的所述共享私钥)创建的签名中。这使得所述第一参与者能够证明其已经生成所述签名的份额。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的***的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3A示出了客户端应用程序的示意性框图;
图3B示出了可由图3A的客户端应用程序表示的示例性用户界面的示意性模型;
图4示出了用于实现本发明实施例的示例性***的示意性框图;
图5示出了根据本发明的一些实施例的用于生成数字签名份额的示例性方法的流程图;
图6示出了根据本发明的一些实施例的用于验证一方已经生成数字签名份额的示例性方法的流程图;以及
图7示出了根据本发明的一些实施例生成的示例性默克尔树。
具体实施方式
示例性***概述
图1示出了一种用于实现区块链150的示例性***100。***100可以包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个区块链节点104,该多个区块链节点可以被设置成在分组交换网络101内形成对等(P2P)网络106。虽然未示出,但是区块链节点104可以被设置为近完全图。因此,每个区块链节点104高度连接到其它区块链节点104。
每个区块链节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个区块链节点104包括处理装置,该处理装置包括一个或多个处理器,例如一个或多个中央处理单元(CPU)、加速器处理器、专用处理器和/或现场可编程门阵列(FPGA),以及其它设备,例如专用集成电路(ASIC)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等电子媒介和/或诸如光盘驱动器等光学介质。
区块链150包括一系列数据区块151,其中在分布式或区块链网络106中的多个区块链节点104中的每个节点处维护区块链150的相应副本。如上所述,维护区块链150的副本不一定意味着完全存储区块链150。相反,只要每个区块链节点150存储每个区块151的区块头(下面讨论),区块链150就可以进行数据修剪。区块链中的每个区块151均包括一个或多个事务152,其中该上下文中的事务(transaction)是指一种数据结构。数据结构的性质将取决于用作事务模型或计划的一部分的事务协议类型。给定的区块链全程使用一个特定的事务协议。在一种常见的事务协议中,每个事务152的数据结构至少包括一个输入和至少一个输出。每个输出指定将数字资产的数量表示为财产的数额,其一个示例是输出被密码锁定到的用户103(需要该用户的签名或其它解进行解锁,从而进行赎回或花费)。每个输入指向先前事务152的输出,从而链接这些事务。
每个区块151还包括区块指针155,其指向区块链中先前创建的区块151,以定义区块151的顺序。每个事务152(除coinbase事务之外)包括指向上一事务的指针,以定义事务序列的顺序(注:事务152的序列可进行分支)。区块151的区块链一直追溯到创始区块(Gb)153,该创始区块是区块链中的第一区块。区块链150中早期的一个或多个原始事务152指向创始区块153,而非先前事务。
每个区块链节点104被配置为将事务152转发到其它区块链节点104,从而使得事务152在整个网络106中传播。每个区块链节点104被配置为创建区块151,并将相同区块链150的相应副本存储在其相应的存储器中。每个区块链节点104还维护等待并入到区块151中的事务152的有序集(或“池”)154。有序池154通常称为“内存池”。在本文中,该术语并不意在限制于任何特定的区块链、协议或模型。该术语是指节点104已接受为有效的有序事务集,并且对于该有序事务集,强制节点104不接受试图花费相同输出的任何其它事务。
在给定的当前事务152j中,输入(或每个输入)包括指针,该指针引用事务序列中先前事务152i的输出,指定该输出将在当前事务152j中被赎回或“花费”。通常,先前事务可以是有序集154或任何区块151中的任何事务。尽管为了确保当前事务有效,将需要存在先前事务152i并核实其有效,但是在创建当前事务152j甚至向网络106发送当前事务152j时,不必存在先前事务152i。因此,在本文中,“先前”是指由指针链接的逻辑序列中的前任,而不一定是时间序列中的创建时间或发送时间,因此,不一定排除无序创建或发送事务152i、152j的情况(参见下面关于孤立事务的讨论)。先前事务152i同样可以称为先行事务或前任事务。
当前事务152j的输入还包括输入授权,例如先前事务152i的输出被锁定到的用户103a的签名。反过来,当前事务152j的输出可以加密锁定到新用户或实体103b。因此,当前事务152j可将先前事务152i的输入中定义的数额转移到当前事务152j的输出中定义的新用户或实体103b。在某些情况下,事务152可具有多个输出,以在多个用户或实体间分割输入数额(其中一个可以是原始用户或实体103a,以便进行变更)。在某些情况下,事务还可以具有多个输入,将一个或多个先前事务的多个输出中的数额汇总在一起,并重新分配到当前事务的一个或多个输出。
根据基于输出的事务协议,例如比特币,当诸如个体用户或组织这类的一方103希望颁布新的事务152j时(由该方采用的自动程序或人为地),该颁布方将该新事务从其计算机终端102发送到接收者。颁布方或接收者将最终向网络106的一个或多个区块链节点104(现在通常是服务器或数据中心,但原则上也可以是其它用户终端)发送该事务。另外还不排除颁布新事务152j的一方103可以将事务直接发送到一个或多个区块链节点104,并且在一些示例中,可以不将事务发送到接收者。接收事务的区块链节点104根据在每个区块链节点104处应用的区块链节点协议来检查事务是否有效。区块链节点协议通常要求区块链节点104检查新事务152j中的加密签名是否与预期签名相匹配,这取决于事务152的有序序列中的上一事务152i。在这种基于输出的事务协议中,这可以包括检查新事务152j的输入中包括的一方103的密码签名或其它授权是否与新事务分配的先前事务152i的输出中定义的条件匹配,其中该条件通常包括至少检查新事务152j的输入中的密码签名或其它授权是否解锁新事务的输入所链接到的上一事务152i的输出。条件可以至少部分地由包括在先前事务152i的输出中的脚本来定义。或者,这可仅由区块链节点协议单独确定,或可通过其组合确定。无论采用哪种方式,如果新事务152j有效,区块链节点104会将其转发到区块链网络106中的一个或多个其它区块链节点104。这些其它区块链节点104根据相同的区块链节点协议应用相同的测试,并因此将新事务152j转发到一个或多个其它节点104等等。通过这种方式,新事务在区块链节点104的整个网络中进行传播。
在基于输出的模型中,给定输出(例如,UTXO)是否分配(例如,花费)的定义是,根据区块链节点协议,其是否通过另一个随后事务152j的输入有效赎回。事务有效的另一个条件是其试图赎回的先前事务152i的输出尚未被另一个事务赎回。同样,如果无效,则事务152j将不会在区块链150中传播(除非被标记为无效并且被传播用于提醒)或记录。这可防止重复花费,即事务处理者对同一个事务的输出分配超过一次。另一方面,基于账户的模型通过保持账户余额防止重复花费。因为同样存在定义的事务顺序,账户余额在任何时候均具有单一定义的状态。
除了核实事务有效之外,区块链节点104还争相成为在通常称为挖矿的过程中创建事务区块的第一个节点,而该过程由“工作量证明”支持。在区块链节点104处,新事务被添加到尚未出现在记录在区块链150上的区块151中的有效事务的有序池154。然后,区块链节点争相通过尝试解决加密难题以组装有序事务集154中事务152的新有效事务区块151。通常情况下,这包括搜索“随机数”值,从而当随机数与未决事务有序池154的表示并置且进行哈希处理时,哈希值的输出满足预定条件。例如,预定条件可以是哈希值的输出具有某个预定义的前导零数。注意,这仅仅是一种特定类型的工作量证明难题,并且不排除其它类型。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而在试图解决难题的每个区块链节点104处消耗大量的处理资源。
解决难题的第一区块链节点104在网络106上宣布难题解决,提供解决方案作为证明,然后网络中的其它区块链节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,就可以直接检查该解决方案是否使哈希值的输出满足条件)。第一区块链节点104将一个区块传播到接受该区块的其它节点达成阈值共识,从而执行协议规则。然后,有序事务集154被每个区块链节点104记录为区块链150中的新区块151。区块指针155还分配给指向该区块链中先前创建的区块151n-1的新区块151n。创建工作量证明解所需的大量工作(例如采用哈希的形式)发出信号通知第一节点104的意图以遵循区块链协议。这些规则包括如果它分配与先前核实有效的事务相同的输出,则不接受事务为有效,否则称之为重复花费。一旦创建,区块151就不能修改,因为它在区块链网络106中的每个区块链节点104处进行标识和维护。区块指针155还向区块151施加顺序。由于事务152记录在网络106中每个区块链节点104处的有序区块中,因此提供了事务的不可改变公共分类账。
应当注意的是,在任何给定时间争相解决难题的不同区块链节点104可以基于在任何给定时间尚未发布的事务的池154的不同快照来这样做,具体取决于它们何时开始搜索解或接收事务的顺序。解决相应难题的人员首先定义新区块151n中包括的事务152及其顺序,并且更新当前的未发布事务池154。然后,区块链节点104继续争相从新定义的未发布事务有序池154中创建区块,等等。此外,还存在解决可能出现的任何“分叉”的协议,其中两个区块链节点104彼此在很短的时间内解决难题,从而在节点104之间传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。应当注意的是,这不会影响网络的用户或代理,因为同一事务将出现在两个分叉中。
根据比特币区块链(和大多数其它区块链),成功构造新区块104的节点被授予在分配附加限定数量数字资产的新特殊类型事务中新分配附加的、接受的数额的数字资产的能力(与代理间或用户间事务相反,该事务将一定数量的数字资产从一个代理或用户转移到另一个代理或用户)。这种特殊类型的事务通常称为“coinbase事务”,但是也可以称为“启动事务”或“产生事务”。它通常形成新区块151n的第一事务。工作量证明发出信号通知构造新区块的节点的意图以遵循协议规则,从而允许稍后赎回该特定事务。在可以赎回该特殊事务之前,区块链协议规则可能需要成熟期,例如100个区块。通常,常规(非生成)事务152还将在其输出中的一个输出中指定附加事务费用,以进一步奖励创建其中发布该事务的区块151n的区块链节点104。该费用通常称为“事务费用”,并在下文中讨论。
由于事务核实和发布中涉及的资源,通常至少每个区块链节点104采用包括一个或多个物理服务器单元的服务器的形式,或者甚至整个数据中心。但是,原则上来说,任何给定区块链节点104均可采用一个用户终端或联网在一起的一组用户终端的形式。
每个区块链节点104的存储器均存储被配置为在区块链节点104的处理装置上运行的软件,以根据区块链节点协议执行其相应的角色并处理事务152。应当理解的是,在本文中归因于区块链节点104的任何动作均可通过在相应计算机设备的处理装置上运行的软件执行。节点软件可以在应用层或诸如操作***层或协议层的较低层或这些层任意组合的一个或多个应用中实现。
扮演消费用户角色的多方103中的每一方的计算机设备102也连接到网络101。这些用户可以与区块链网络106交互,但不参与核实事务或构造区块。其中一些用户或代理103可以充当事务中的发送者和接收者。其它用户可以与区块链150交互,而不必充当发送者或接收者。例如,一些当事方可以充当存储区块链150的副本(例如,已经从区块链节点104获得区块链的副本)的存储实体。
各方103中的一些或所有当事方可以作为不同网络的一部分连接,例如覆盖在区块链网络106之上的网络。区块链网络的用户(经常称为“客户端”)可以被称为是包含区块链网络106的***的一部分;然而,这些用户不是区块链节点104,因为它们不执行区块链节点所需的角色。相反,每一方103可以与区块链网络106交互,从而通过连接到区块链节点106(即,与区块链节点106通信)来利用区块链150。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,以及第二方103b及其相应的计算机设备102b。应当理解的是,更多此类当事方103及其相应的计算机设备102可能存在并参与***100,但为了方便起见,未进行说明。每一方103均可以是个人或组织。仅出于说明目的,在本文中,第一方103a称为爱丽丝,第二方103b称为鲍勃,但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
每一方103的计算机设备102包括相应的处理装置,其包括一个或更多个处理器,例如一个或更多个CPU、图形处理单元(GPU)、其他加速器处理器、特定应用程序处理器和/或FPGA。每一方103的计算机设备102还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等磁介质、诸如SSD、闪存或EEPROM等电子媒介和/或诸如光盘驱动器等的光学介质。每一方103的计算机设备102上的存储器存储软件,其包括被设置为在处理装置上运行的至少一个客户端应用程序105的相应实例。应当理解的是,在本文中归因于给定方103的任何行动均可通过在相应计算机设备102的处理装置上运行的软件执行。每一方103的计算机设备102包括至少一个用户终端,例如台式或笔记本电脑、平板电脑、智能手机或诸如智能手表等的可穿戴设备。给定方103的计算机设备102还可包括一个或更多个其他网络资源,诸如通过用户终端访问的云计算资源。
客户端应用程序105最初可通过例如从服务器下载的适当计算机可读存储介质,或通过诸如可移动SSD、闪存密钥、可移动EEPROM、可移动磁盘驱动器、软盘或磁带等的可移动存储设备、诸如CD或DVD ROM等的光盘或可移动光驱等提供至任何给定方103的计算机设备102。
客户端应用程序105至少包括“钱包”功能。这有两个主要功能。其中一个功能是使相应方103能够创建、授权(例如签名)事务152并将其发送到一个或多个位比特币节点104,然后在区块链节点104的网络中传播,从而包括在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产数额。在基于输出的***中,该第二功能包括整理分散在区块链150中属于相关方的各种事务152的输出中定义的数额。
注意:虽然各种客户端功能可以描述为集成到给定客户端应用程序105中,但这不一定是限制性的,相反,在本文中所描述的任何客户端功能可以在由两个或更多个不同应用程序组成的套件中实现,例如经由API进行接口连接或一个应用程序作为另一个应用程序的插件。更通俗地说,客户端功能可以在应用层或诸如操作***的较低层或这些层的任意组合实现。下面将根据客户端应用程序105进行描述,但应当理解的是,这不是限制性的。
每个计算机设备102上的客户端应用程序或软件105的实例可操作地耦合到网络106的区块链节点104中的至少一个。这可以启用客户端105的钱包功能,以将事务152发送至网络106。客户端105还可联络区块链节点104,以在区块链150中查询相应方103作为接收者的任何事务(或实际上在区块链150中检查其它方的事务,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供事务信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据事务协议制定和发送事务152。如上所述,每个区块链节点104运行软件,该软件被配置为根据区块链节点协议核实事务152并转发事务152以便在区块链网络106中传播。事务协议和节点协议相互对应,给定事务协议和给定节点协议一起实现给定的事务模型。相同的事务协议用于区块链150中的所有事务152。网络106中的所有节点104使用相同的节点协议。
当给定方103(比方说爱丽丝)希望发送拟包含在区块链150中的新事务152j时,她将根据相关事务协议(使用其客户端应用程序105中的钱包功能)制定新事务。然后,她将事务152从客户端应用程序105发送到她所连接的一个或多个区块链节点104。例如,这可能是与爱丽丝的计算机102最佳连接的区块链节点104。当任何给定区块链节点104接收新事务152j时,其将根据区块链节点协议及其相应的角色进行处理。这包括首先检查新接收的事务152j是否满足变为“有效”的特定条件,具体示例稍后将详细讨论。在一些事务协议中,有效条件可通过事务152中包含的脚本在每个事务的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
如果新接收的事务152j通过有效性测试(即:“有效”的条件下),接收事务152j的任何区块链节点104将向在区块链节点104处维护的有序事务集154中添加新的核实有效事务152。进一步地,接收事务152j的任何区块链节点104随后将核实有效事务152传播至网络106中的一个或多个其它区块链节点104。由于每个区块链节点104应用相同的协议,因此假定事务152j有效,这意味着事务很快将在整个网络106中传播。
一旦进入在给定区块链节点104处维护的未决事务有序池154,该区块链节点104将开始争相解决其各自的包含新事务152的池154的最新版本上的工作量证明难题(请记住,其它区块链节点104可以尝试基于不同的事务池154来解决难题。但是,首先解决难题的人将定义包括在最新区块151中的事务集合。最终,区块链节点104将解决有序池154的一部分的难题,该有序集154包括爱丽丝的事务152j)。一旦包括新事务152j的池154完成工作量证明,其将不可变地成为区块链150中区块151中的一个区块的一部分。每个事务152包括指向早前事务的指针,因此事务的顺序也被不可变地记录下来。
不同的区块链节点104可以首先接收给定事务的不同实例,并且因此在一个实例被发布到新区块151中之前具有关于哪个实例“有效”的冲突视图,此时所有区块链节点104同意所发布的实例是唯一的有效实例。如果区块链节点104将一个实例接受为有效实例,然后发现第二实例已记录在区块链150中,则区块链节点104必须接受这一点,并将丢弃(即,视为无效)其最初接受的实例(即,在区块151中尚未公布的实例)。
作为基于账户的事务模型的一部分,由一些区块链网络操作的另一种类型的事务协议可称为“基于账户的”协议。在基于账户的情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由网络的节点单独存储到区块链中,并不断更新。在此类***中,事务使用账户的运行事务记录(也称为“头寸”)进行排序。该值由发送者签名作为其加密签名的一部分,并作为事务引用计算的一部分进行哈希处理。此外,可选的数据字段也可以在事务中签名。例如,如果数据字段中包含上一事务的ID,该数据字段可指向上一事务。
基于UTXO的模型
图2示出了示例性事务协议。这是基于UTXO的协议的示例。事务152(简称“Tx”)是区块链150的基本数据结构(每个区块151包括一个或多个事务152)。下面将通过参考基于输出或基于“UTXO”的协议进行描述。但这并不限于所有可能的实施例。应当注意的是,虽然参考比特币描述了示例性基于UTXO的协议,但是它同样可以在其它示例区块链网络上实现。
在基于UTXO的模型中,每个事务(“Tx”)152包括数据结构,其包括一个或多个输入202和一个或多个输出203。每个输出203可包括未花费事务输出(UTXO),其可用作另一新事务的输入202的来源(如果UTXO尚未赎回)。UTXO包括指定数字资产数额的值。这表示分布式分类账上的一组通证。UTXO还可包含其来源事务的事务ID以及其它信息。事务数据结构还可包括标头201,其可包括输入字段202和输出字段203的大小指示符。标头201还可包括事务的ID。在实施例中,事务ID是事务数据(不含事务ID本身)的哈希值,且存储在提交至节点104的原始事务152的标头201中。
比方说爱丽丝103a希望创建转移相关数字资产数额至鲍勃103b的事务152j。在图2中,爱丽丝的新事务152j标记为“Tx1”。该新事务获取在序列中先前事务152i的输出203中锁定至爱丽丝的数字资产数额,并至少将此类数额中的一部分转移至鲍勃。在图2中,先前事务152i标记为“Tx0”。Tx0和Tx1只是任意的标记,其不一定意味着Tx0指区块链151中的第一事务且Tx1指池154中的下一事务。Tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前(即先行)事务。
当爱丽丝创建其新事务Tx1时,或至少在她将该新事务发送至网络106时,先前事务Tx0可能已经有效并包括在区块链150的区块151中。该事务此时可能已包括在区块151中的一个区块中,或者可能仍在有序集154中等待,在这种情况下,该事务将很快包括在新区块151中。或者,Tx0和Tx1可以创建并一起发送至网络106;或者,如果节点协议允许缓冲“孤立”事务,Tx0甚至可以在Tx1之后发送。本文事务序列上下文中使用的“先前”和“后续”一词是指由事务中指定的事务指针定义的序列中的事务顺序(哪个事务指向哪个其他事务等等)。它们同样可以替换为“前任”和“继任”、“先行”和“后代”或“父项”和“子项”等。这不一定指其创建、发送至网络106或到达任何给定区块链节点104的顺序。然而,指向先前事务(先行事务或“父事务”)的后续事务(后代事务或“子事务”)不会有效除非父事务有效。在父事务之前到达区块链节点104的子事务被视为孤立事务。根据节点协议和/或节点行为,其可被丢弃或缓冲一段时间,以等待父事务。
先前事务Tx0的一个或更多个输出203中的一个包括特定的UTXO,标记为UTXO0。每个UTXO包括指定UTXO表示的数字资产数额的值以及锁定脚本,该锁定脚本定义后续事务的输入202中的解锁脚本必须满足的条件,以使后续事务有效,从而成功赎回UTXO。通常情况下,锁定脚本将数额锁定至特定方(该数额的事务的受益人)。即,锁定脚本定义解锁条件,该解锁条件通常包括以下条件:后续事务的输入中的解锁脚本包括先前事务被锁定到的一方的加密签名。
锁定脚本(亦称scriptPubKey)是节点协议识别的域特定语言中写入的一段代码。此类语言的特定示例称为“脚本(Script)”(S大写),其可由区块链网络所使用。锁定脚本指定花费事务输出203所需的信息,例如爱丽丝签名的要求。解锁脚本出现在事务的输出中。解锁脚本(亦称scriptSig)是提供满足锁定脚本标准所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在事务的输入202中。
因此在示出的示例中,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>,该解锁脚本包括爱丽丝的加密签名,该签名由爱丽丝通过将其密钥对中的私钥应用于预定的部分数据(有时在密码学中称为“消息”)创建。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
当新事务Tx1到达区块链节点104时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或更多个标准)。在实施例中,这涉及并置两个脚本:
<Sig PA><PA>||[Checksig PA]
其中“||”表示并置,“<…>”表示将数据放在堆栈上,“[…]”表示由锁定脚本组成的函数(在该示例中指基于堆栈的语言)。同样,脚本可以使用公共堆栈一个接一个地运行,而不是并置脚本。无论采用哪种方式,当一起运行时,脚本使用爱丽丝的公钥PA(包括在Tx0的输出的锁定脚本中),以认证Tx1的输入中的解锁脚本是否包含爱丽丝签名预期部分的数据时的签名。也需要包括预期的部分数据本身(“消息”),以便执行此认证。在实施例中,签名的数据包括整个Tx1(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
本领域技术人员将熟悉通过公私密码进行验证的细节。基本上而言,如果爱丽丝已使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息,诸如节点104等其它实体可验证消息必须已经由爱丽丝签名。签署通常包括对消息进行哈希,签署哈希值和将此标记到消息作为签名,从而使公钥的任何持有者能够验证签名。因此,应当注意的是,在实施例中,在本文中对签名特定数据片段或事务部分等的任何引用可以意味着对该数据片段或事务部分的哈希值进行签名。
如果Tx1中的解锁脚本满足Tx0的锁定脚本中指定的一个或多个条件(因此,在所示示例中,如果在Tx1中提供了爱丽丝的签名并进行验证),则区块链节点104认为Tx1有效。这意味着区块链节点104会将Tx1添加到待定事务有序池154。区块链节点104还会将事务Tx1转发到网络106中的一个或多个其它区块链节点104,以便其会在整个网络106中传播。一旦Tx1有效并包括在区块链150中,这会将UTXO0从Tx0定义为已花费。应当注意的是,Tx1仅在花费未花费事务输出203时才有效。如果其试图花费另一事务152已经花费的输出,则即使满足所有其它条件,Tx1也将无效。因此,区块链节点104还需要检查先前事务Tx0中引用的UTXO是否已经花费(即,其是否已经形成另一有效事务的有效输入)。这是为何区块链150对事务152施加定义的顺序很重要的原因之一。在实践中,给定区块链节点104可维护单独的数据库,标记已花费事务152的UTXO 203,但最终定义UTXO是否已花费取决于是否在区块链150中形成了另一有效事务的有效输入。
如果给定事务152的所有输出203中指定的总数额大于其所有输入202所指向的总数额,则这是大多数事务模型中的另一失效依据。因此,此类事务不会传播或包括在区块151中。
请注意,在基于UTXO的事务模型中,给定UTXO需要作为一个整体使用。不能“留下”UTXO中定义为已花费的一部分数额,而同时又花费另一部分。但UTXO的数额可以在下一事务的多个输出之间分割。例如,Tx0的UTXO0中定义的数额可以在Tx1中的多个UTXO之间分割。因此,如果爱丽丝不想将UTXO0中定义的所有数额都给鲍勃,她可以使用剩余部分在Tx1的第二输出中自己找零,或者支付给另一方。
在实践中,爱丽丝通常还需要包括用于比特币节点104的费用,该比特币节点104在区块151中成功包含爱丽丝的事务104。如果爱丽丝未包括此类费用,则Tx0可能会被区块链节点104拒绝,并且因此尽管在技术上有效,但可能不会传播并且包括在区块链150中(如果区块链节点104不希望接受事务152,节点协议不强迫区块链节点104接受)。在一些协议中,事务费用不需要其自身的单独输出203(即不需要单独的UTXO)。相反,输入202指向的总数额与给定事务152的输出203指定的总数额之间的任何差额都将自动提供给发布事务的区块链节点104。例如,假设指向UTXO0的指针是Tx1的唯一输入,并且Tx1仅具有一个输出UTXO1。如果在UTXO0中指定的数字资产数额大于在UTXO1中指定的数额,则可以由赢得工作量证明竞赛以创建包含UTXO1的区块的节点104分配该差值。替代地或附加地,这不一定排除可以在其自身事务152的其中一个UTXO 203中明确指定事务费用。
爱丽丝和鲍勃的数字资产由区块链150中任何位置的任何事务152中的锁定至他们的UTXO组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种事务152的UTXO中。区块链150中的任何位置均未存储定义给定方103的总余额的一个数字。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其它随后事务中尚未花费的各种UTXO值整理在一起。为实现这一点,其可以查询存储在任何一个位比特币节点104处的区块链150的副本。
应当注意的是,脚本代码通常用示意图表示(即使用非精确语言)。例如,可以使用操作码(opcode)来表示特定功能。“OP_...”是指脚本语言的特定操作码。举例来说,OP_RETURN是脚本语言操作码,当在锁定脚本的开始处在操作码前加上OP_FALSE时,操作码创建事务的不可花费输出,该输出可以在事务内存储数据,从而将数据不可改变地记录在区块链150中。例如,数据可包括需存储在区块链中的文件。
通常,事务的输入包含对应于公钥PA的数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ECDSA。数字签名对特定的数据段进行签名。在实施例中,对于给定事务,签名将对部分事务输入以及部分或全部事务输出进行签名。对输出的特定部分进行签名取决于SIGHASH标志。SIGHASH标志通常是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
锁定脚本有时称为“scriptPubKey”,指其通常包括相应事务被锁定到的当事方的公钥。解锁脚本有时称为“scriptSig”,指其通常提供相应的签名。但是更通俗地说,在区块链150的所有应用中,UTXO赎回的条件并不一定包括对签名进行验证。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
如图1所示,爱丽丝和鲍勃的计算机设备102a、120b中的每个计算机设备上的客户端应用程序都可以包括附加通信功能。此附加功能可使爱丽丝103a建立与鲍勃103b的单独侧信道107(在任何一方或第三方的鼓动下)。侧信道107使得能够脱离区块链网络交换数据。此类通信有时称为“链下”通信。例如,这可用于在爱丽丝与鲍勃之间交换事务152,而不将该事务(尚未)注册到区块链网络106上或将其发布到链150上,直到其中一方选择将其广播到网络106上。以这种方式共享事务有时称为共享“事务模板”。事务模板可能缺少形成完整事务所需的一个或多个输入和/或输出。替代地或附加地,侧信道107可用于交换任何其它事务相关数据,例如密钥、议付数额或条款、数据内容等。
通过与区块链网络106相同的分组交换网络101可建立侧信道107。替代地或附加地,侧信道301可以经由诸如移动蜂窝网络的不同网络或者诸如无线局域网络的局域网建立,甚至经由爱丽丝和鲍勃的设备102a、102b之间的直接有线或无线链路建立。通常,在本文中任何地方所指的侧信道107可以包括经由一项或多项联网技术或通信介质的任何一条或多条链路,这些链路用于“链下”交换数据,即脱离区块链网络106交换数据。在使用多条链路的情况下,链下链路束或集合整体上可以称为侧信道107。因此,应当注意的是,如果说爱丽丝和鲍勃通过侧信道107交换某些信息或数据等,则这不一定意味着所有这些数据都必须通过完全相同的链路或甚至相同类型的网络发送。
客户端软件
图3A示出了用于实现本公开方案的实施例的客户端应用程序105的示例性实施方式。客户端应用程序105包括事务引擎401和用户界面(UI)层402。根据上文讨论的方案以及稍后将进一步详细讨论的内容,事务引擎401被配置为实现客户端105的基础事务相关功能,诸如制定事务152,通过侧信道301接收和/或发送事务和/或其他数据,和/或发送事务至一个或更多个节点104以通过区块链网络106传播。
该UI层402被配置为通过相应用户的计算机设备102的用户输入/输出(I/O)方式呈现用户界面,包括通过设备102的用户输出方式向相应用户103输出信息,和通过设备102的用户输入方式接收来自相应用户103的输入。例如,用户输出方式可包括提供视觉输出的一个或显示多个屏(触摸或非触摸屏)、提供音频输出的一个或更多个扬声器、和/或提供触觉输出的一个或更多个触觉输出设备等。用户输入方式可包括例如一个或更多个触摸屏的输入阵列(可与用于输出方式的那个/那些相同或不同);一个或更多个基于光标的设备,诸如鼠标、轨迹板或轨迹球;一个或更多个麦克风和语音或声音识别算法,用于接收语音或声音输入;一个或更多个基于手势的输入设备,用于接收手动或身体手势形式的输入;或者一个或更多个机械按钮、开关或控制杆等。
注:虽然本文中的各种功能可以被描述为集成到同一客户端应用程序105中,但这并不一定构成限制,相反,它们可以在两个或更多个不同应用程序组成的一套程序中实现,例如一个应用程序作为另一个应用程序的插件或经由API(应用程序编程接口)进行接口。比如,事务引擎401的功能可以在单独的应用程序中实现,而不是在UI层402中实现,或者诸如事务引擎401的给定模块的功能可以在多个应用程序之间分割。同时,也不排除部分或全部描述的功能可以在比如操作***层实现。在本文任何位置引用单个或给定应用程序105或诸如此类的情况下,应当理解的是这只是作为示例,并且更通俗地说,所描述的功能可以在任何形式的软件中实现。
图3B给出了用户界面(UI)500的示例的模型,该UI可由客户端应用程序105a的UI层402在爱丽丝的设备102a上呈现。应当理解的是,类似的UI可以由客户端105b在鲍勃的设备102b或任何其他方的设备上呈现。
通过图示的方式,图3B从爱丽丝的角度示出了UI 500。该UI 500可包括一个或更多个UI元素501、502、503,该一个或更多个UI元素通过用户输出方式呈现为不同的UI元素。
例如,UI元素可包括一个或更多个用户可选择的元素501,这些元素可以是屏幕上的不同按钮、菜单中的不同选项或者诸如此类。用户输入方式被设置成使用户103(在这种情况下为爱丽丝103a)能够选择或以其它方式操作其中一个选项,诸如通过点击或触摸屏幕上的UI元素,或者说出所需选项的名称(注:本文使用的“手动”一词仅用于与自动进行对比,而不一定限于用手执行操作)。这些选项使得用户(爱丽丝)能够通生成待嵌入到事务中的签名。
此外/或者,UI元素可包括一个或更多个数据输入字段502,用户通过该字段能够输入待嵌入到签名中的数据。这些数据输入字段通过用户输出方式呈现,例如屏幕上,并且数据可通过用户输入方式输入到字段中,例如键盘或触摸屏。或者,数据可以例如基于语音识别口头地接收。
此外/或者,UI元素可包括向用户输出信息的一个或更多个信息元素503。例如,这/这些可以在屏幕上呈现或可听见。
应当理解的是,呈现各种UI元素、选择选项和输入数据的特定方式并不重要。这些UI元素的功能稍后将进行更详细地讨论。还应当理解的是,图3中示出的UI 500只是一个图示模型,在实践中,它可包括一个或更多个进一步的UI元素,为了简洁起见,未对其进行说明。
密码学预备知识
ECDSA-椭圆曲线群
群运算‘⊕’是标准椭圆曲线点加法,i·G表示群运算在G上的i次重复
以下所有整数运算都以n为模数,除非上下文另有要求。
椭圆曲线数字签名算法
密钥生成过程如下:
1)选择私有签名密钥j∈{1,…,n-1}
2)公钥为Y=j·G,其中G是生成点
签名算法采用私钥j消息m和临时密钥k,并生成签名:
3)选择随机k∈{1,…,n-1}(临时密钥)
4)计算R=(rx,ry)=k·G–EC点
5)计算r=rxmodn
6)如果r=0,则转到步骤3
7)生成签名s=k-1(e+jr),其中e=hash(m)。
8)如果s=0,则转到步骤3
9)输出[r,s],作为消息m的签名
然后,验证算法获取签名和消息,使用签名者的公钥重构r,并验证签名中给定的r值。
1)计算e=hash(m)
2)计算k1=es-1modn和k2=rs-1modn
3)计算Q=(qx,qy)=k1·G+k2·Y
4)如果qx≡rmodn,则签名有效,否则无效。
签名使用以下符号:
SigY=[rY,sY],
其中,在使用公钥Y进行验证时,[rY,sY]是有效签名。
联合可验证随机秘密共享(JVRSS)
假设N个参与者想要创建联合秘密,该联合秘密只能由该方案中的至少(t+1)个参与者重新生成。要创建共享秘密,请采取以下步骤:
1)参与者就每个参与者的唯一标签i达成一致。每个参与者i生成(t+1)个随机数
fi(x)=ai0+ai1x+…+aitxtmodn,
其中i=1,…,N。应当注意的是,从现在开始省略符号modn,并且假设对整数的所有算术运算都是以n为模数进行的。
2)每个参与者i将该值fi(j)发送给参与者j,例如仅使用与参与者j的安全通信通道。
3)每个参与者i根据以下等式计算自己的共享秘密多项式的秘密份额
共享秘密份额是采用形式(i,ai)的点,其中i是方案中的参与者标签。如步骤1-3中所述,对于参与者i,这种用于创建秘密份额a的方法在本文中由ai=JVRSS(i)表示。应当注意的是,“JVRSS”通常表示“联合验证随机秘密共享”,并且还包括步骤4和步骤5。然而,在本文中,JVRSS被理解为至少执行步骤1至步骤3,其中步骤4和步骤5是可选步骤。
此时,参与者已生成共享多项式,这些参与者中的每个参与者可以验证其他参与者已将正确的信息共享给所有参与者,同时验证所有参与者具有相同的共享多项式。这可以通过以下方式实现。
4)每个参与者i将混淆系数广播给所有参与者
aik·G,
其中k=0,…,t。
5)每个参与者i核实每个参与者j已通过以下方式正确计算多项式点fj(i):计算fj(i)·G,然后验证
如果所有参与者发现该等式对于每个多项式都成立,则该群可以共同确定他们均已创建相同的共享多项式。
重建共享秘密
假设参与者想要重建共享秘密a,该共享秘密是共享多项式的零阶。在给定采用以下形式的该多项式上的(t+1)个点的情况下,
(1,a1),…,((t+1),at+1),
然后,为了找到共享秘密a,需要计算
其可根据称为“拉格朗日插值法”的一般公式推导出。
公钥计算
在给定JVRSS的步骤4中共享的N个零阶私有多项式系数公钥ai0·G(对于j=1,…,N)的情况下,每个参与者使用以下等式计算共享公钥P
对应于共享秘密a。
共享秘密的加法
为了计算在一组N个参与者之间共享的两个共享秘密的和,其中每个秘密多项式的阶数为t,而任何实体都不知道各个秘密,请采取以下步骤:
1)生成第一共享秘密a,其中参与者i的份额通过ai=JVRSS(i)得出,其中i=1,…,N,阈值为(t+1)。
2)生成第二共享秘密b,其中参与者i的份额通过bi=JVRSS(i)得出,阈值为(t+1)。
3)每个参与者i计算自己的加法份额
vi=ai+bimodn。
4)所有参与者将他们的加法份额vi广播给所有其他参与者。
5)每个参与者对份额vi中的至少(t+1)个份额进行内插(interpolate)以计算
v=interpolate(v1,…,vt+1)=a+b。
对于参与者i,这种用于将共享秘密相加的方法由ADDSS(i)表示,这会使得每个参与者i知道v=(a+b)。
共享秘密的乘积
为了计算在一组N个参与者之间共享的两个共享秘密的乘积,其中每个秘密多项式的阶数为t,该组参与者需要采取以下步骤:
1)生成第一共享秘密a,其中参与者i的份额通过ai=JVRSS(i)得出,其中i=1,…,N。共享秘密多项式的阶数为t,这意味着(t+1)个参与者需要重新创建该共享秘密多项式。
2)生成第二共享秘密b,其中参与者i的份额通过bi=JVRSS(i)得出,并且共享秘密多项式的阶数再次为t。
3)每个参与者使用以下等式计算自己的乘法份额μi
μi=aibi。
4)所有参与者将他们的乘法份额μi广播给所有其他参与者。
5)每个参与者对0处份额μi中的至少(2t+1)个份额进行内插以计算
μ=interpolate(μ1,…,μ2t+1)=ab。
对于参与者i,这种用于计算两个共享秘密的乘积的方法在本文中由μ=ab=PROSS(i)表示。
共享秘密的逆
为了计算共享秘密a的逆,需要采取以下步骤:
1)所有参与者计算共享秘密的乘积PROSS(i),其结果是μ=abmodn。
2)每个参与者计算μ的模逆,其结果是
μ-1=(ab)-1modn。
3)每个参与者i通过计算以下内容来计算自己的逆秘密份额
共享私钥生成与验证
为了计算N≥2t+1个参与者之间的共享私钥a,其中t+1个参与者需要创建签名,参与者通过阈值t+1执行JVRSS以及执行如上所述的公钥计算。结果是每个参与者i=1,…,N具有私钥份额ai和对应的共享公钥P=(a·G)。
临时密钥份额生成
为了根据签名中的要求生成临时密钥份额和对应的r,大小为N的一组(具有共享私钥a,阈值为(t+1))需要执行以下步骤:
2)每个参与者通过以下方式计算
使用在验证ki时共享的混淆系数,然后计算
r=xmodn。
非最优签名生成
假设至少2t+1个参与者想要在消息中创建签名,并且参与者中的一个参与者选择协调此事。为了使具有共享私钥a的组创建签名,采取以下步骤:
1)协调者向至少2t+1个参与者请求消息中的签名。
3)每个参与者计算消息摘要e=SHA-256(SHA-256(message))。
4)每个参与者i计算其签名份额si:
其中ai是其私钥份额。
5)每个参与者向协调者发送其签名份额(r,si)。
6)当协调者接收了2t+1个签名份额时,每个参与者计算:
s=interpolate(s1,…,s2t+1),
并且将签名输出为(r,s)。
7)协调者使用标准ECDSA验证来验证签名。如果失败,则份额中的至少一个份额必定是不正确的,并且应当再次运行签名生成算法。
Diffie-Hellman(DH)密钥交换
双方可以通过以下方式创建对称密钥来建立安全的通信信道。假设爱丽丝和鲍勃想要创建共享密钥,爱丽丝知道对应于公钥PKA=skA·G的私钥skA,鲍勃知道对应于其公钥PKB=skB·G的私钥skB。
为了找到共享密钥,他们执行以下步骤。
1)爱丽丝计算Diffie-Hellman密钥skAB=skA·PKB。
2)鲍勃计算Diffie-Hellman密钥skAB=skB·PKA。
在WO2017/145016中描述了另一种用于建立共享密钥的方法,其中将预先约定的消息添加到DH密钥上,从而创建新密钥。该消息可以随发送的每个新通信而改变,从而创建一组确定性密钥。例如,消息可以是m=hash(date||time)。爱丽丝可以使用所述消息生成私钥skA1=skA+hash(date||time),同样,鲍勃可以生成私钥skB1=skB+hash(date||time)。爱丽丝和鲍勃可以生成共享私钥skAB1=skA1·PKB1=skB1·PKA1。
HD钱包
分层确定性钱包(比特币改进提议32(BIP32)钱包是其中的一种特殊类型)是确定性钱包,其中许多密钥可以从单一输入中导出。输入是称为种子(seed)的某个随机熵,主密钥可从中导出。然后主密钥用于导出多个子密钥,如图2所示。
在BIP32中,主私钥是种子的HMAC-SHA512结果的左侧32个字节,或者明确地说,主私钥是
skmaster=HMAC-SHA512L(′BitcoinSeed′,seed),
并且链码是
cmaster=HMAC-SHA512R(′BitcoinSeed′,seed),
并且然后所有子密钥都可以从中导出,其中
是使用SHA512哈希函数的HMAC。在上述等式中,opad是块大小的外部填充,而ipad是块大小的内部填充。
HMAC需要两个输入,即c和K。为了简单起见并且使得用户仅需要记住或存储单一种子,BIP32协议将第一输入设置为字符串“Bitcoin Seed”(比特币种子),即c=′BitcoinSeed′。应当理解的是,这是用于生成HD钱包的一个示例性协议,并且不同的协议可能需要不同的输入,例如两个随机生成的种子。换句话说,使用字符串“Bitcoin Seed”并不是生成HD钱包的必然要求。
用于从父私钥skparent中计算强化子私钥skchild的等式如下
skchild=skparent+HMAC-SHA512L(cparent,skparent||index),
其中cparent是父链码,0≤index<231是子索引,并且HMAC-SHA512L是用SHA-512哈希函数计算的HMAC函数结果的左侧32个字节。子公钥的对应等式是仅通过使该等式与基点G进行点乘导出的。子链码cchild被定义为HMAC函数结果的右侧32个字节,cchild=HMAC-SHA512R(cparent,skparent||index)。
用于从父公钥pkparent和父私钥skparent中计算非强化子私钥skchild的等式如下
skchild=pkparent+HMAC-SHA512L(cparent,pkparent||index),
其中cparent是父链码,231≤index<232是子索引,并且HMAC-SHA512是用SHA-512哈希函数计算的HMAC函数。与增强密钥类似,非增强密钥的子链码cchild被定义为HMAC函数结果的右侧32个字节:
cchild=HMAC-SHA512R(cparent,pkparent||index)。
该第二类型的子密钥使得子公钥能够由知道父公钥和链码的任何人使用以下等式导出:
pkchild=pkparent+HMAC-SHA512L(Cparent,pkparent||index)·G。
这可以被外部方用来根据需要导出各种支付地址,从而避免重复使用密钥,同时减少通信和存储的轮次。
通常,HD钱包应当生成私钥-公钥对的某种分层树状结构。这提供了全部可以从一个种子重新生成的大量密钥对。
阈值数字签名
图4示出了根据本发明的一些实施例的用于生成数字签名的示例性***400。该***包括多个参与者401,每个参与者具有共享私钥的相应份额。该共享私钥可以是使用秘密共享方案(例如,JVRSS或Shamir的秘密共享方案)生成的。该共享私钥可以是使用有交易商的方案或使用无交易商的方案生成的。图4中仅示出了三个参与者,但该***通常可以包括任意数量的参与者401。该***还包括验证方402(即,签名验证方)和协调者404。协调者404被配置为基于阈值数量的签名份额来生成签名,每个签名份额由相应的参与者生成。虽然图4中示出协调者404不同,但在一些示例中,协调者可以是与其中一个参与者(例如,第一参与者401a)相同的实体。在一些示例中,该***包括一个或多个区块链节点104。
每个参与者401、验证方402和协调者404操作相应的计算设备(未示出)。每个相应的计算设备包括相应的处理装置,该处理装置包括一个或多个处理器,例如一个或多个中央处理单元(CPU)、加速器处理器(GPU)、专用处理器和/或现场可编程门阵列(FPGA)。相应计算设备还可以包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可以包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等电子媒介和/或诸如光盘驱动器等光学介质。相应计算设备可以包括至少一个用户终端,例如台式电脑或笔记本电脑、平板电脑、智能手机或诸如智能手表等可穿戴设备。替代地或附加地,相应计算设备可以包括一个或多个其他联网资源,例如经由用户终端访问的云计算资源(该云计算资源包括在一个或多个站点实现的一个或多个物理服务器设备的资源)。应当理解的是,被描述为由***400的一方执行的任何动作可以由该方操作的相应计算装置执行。
如结合图1至图3所述,虽然本发明不限于仅在区块链环境中使用,但是下面将在第一参与者401a等同于爱丽丝103a的情况下进行描述。也就是说,在一些示例中,爱丽丝103a是第一参与者401a。下文中将验证方402称为卡罗尔402。
在这些实施例中,爱丽丝401a想要生成消息的签名份额,并向卡罗尔402证明其生成了该签名份额。
爱丽丝401a获得要签名的消息,例如区块链事务、文档或合同等的一些或部分内容。爱丽丝401a可以自己生成消息,或者爱丽丝401a可以从另一个参与者401或协调者404等接收消息。爱丽丝401a还获得外部数据项。爱丽丝401a可能已经具有姓名、护照号、公钥等外部数据项,或者爱丽丝401a可以生成外部数据项。例如,如下面将更详细描述的,外部数据项可以是爱丽丝401a生成的签名(“第二签名”)。
爱丽丝401a基于外部数据项的哈希生成临时私钥份额。第二参与者401b和第三参与者401c等每个其他参与者也生成相应的临时私钥份额。优选地,其他参与者基于相应外部数据项的哈希生成其相应的临时私钥份额,但这不是必需的。
无论其他参与者的临时私钥份额是否基于其相应的外部数据项,每个参与者的临时私钥份额都是基于每个其他参与者生成的输入(“数据项”)来生成的。即,爱丽丝的临时私钥份额是基于所有其他参与者的相应数据项生成的,其他参与者的相应临时私钥份额是爱丽丝的数据项的函数。作为特定示例,每个参与者可以生成基于其相应外部数据项的相应数据项(例如,多项式的零阶系数)。为了保护隐私,可以使用秘密共享方案来共享数据项。参与者可以使用上述JVRSS方案,其中参与者共享以其他参与者的索引评估的多项式。通过计算基于外部数据项(而不是随机生成)的多项式的零阶系数,对JVRSS方案进行略微修改。这将在下面更详细地讨论。
爱丽丝的临时私钥份额现在是其外部数据项的哈希结果的函数。用于生成外部数据项的哈希的哈希函数可以是任何合适的哈希函数,例如SHA256、SHA512,并且可以包括多次应用一个或多个哈希函数。例如,哈希函数可以是SHA256d(x)=SHA256(SHA256(x))等双哈希函数。
爱丽丝401a生成的签名份额需要临时私钥份额,或者根据特定的签名算法,需要临时私钥份额的逆。因此,相应的临时私钥份额对于相应的参与者来说是私有的,例如,只有爱丽丝103a知道其相应的临时私钥份额,参与者可以使用秘密共享方案来生成其相应的临时私钥份额,即,每个参与者与其他参与者共享足够的信息,以便他们都可以生成相同秘密的份额,但实际上不生成秘密本身。在这种情况下,共享秘密是临时私钥。例如,参与者可以使用JVRSS的修改版本。JVRSS的步骤如上所述。在称为JVRSS-A的修改版本中,在步骤1)中,参与者将其相应私有多项式的零阶系数ai0设置为等于相应数据项的哈希(例如,双哈希)。其他多项式系数可以像在正常JVRSS中一样随机选择。JVRSS的其余步骤1)至5)随后照常进行。然后,每个参与者具有相应的临时私钥份额和一组混淆的数据项(即,对应于数据项的公钥),每个其他参与者一个。应当注意的是,JVRSS,或者更确切地说是JVRSS-A,是秘密共享方案的特定示例,还可以使用其他方案,例如Shamir的秘密共享方案。
爱丽丝401a生成对应于其数据项的公钥。例如,通过用生成点混淆数据项。爱丽丝401a从每个其他参与者401获得相应的公钥,并使用公钥来生成对应于临时私钥的临时公钥。例如,参与者可以使用JVRSS-A来生成临时公钥。应当注意的是,本文中将“临时公钥”用作临时公钥的x分量(或x坐标)的简写。
在生成临时私钥份额和临时公钥(即,对应于共享临时私钥的公钥)之后,爱丽丝401a可以生成其签名份额。爱丽丝的签名份额是基于消息(例如,区块链事务)、其相应的共享私钥份额、临时私钥份额(逆)和临时公钥生成的。同样应当注意的是,根据所使用的特定签名方案,签名份额可以是基于临时私钥的逆生成的。无论采用哪种方式,假定临时私钥份额是基于外部数据项生成的,则该外部数据项现在嵌入到签名份额中。
这样,爱丽丝401a可以将其签名份额发送给协调者404,协调者404可以基于爱丽丝的签名份额和相应参与者401生成的一个或多个相应签名份额来生成第一签名。协调者404需要阈值数量的签名份额,以便生成有效签名。如上文简要描述的,爱丽丝401a实际上可以是协调者404。在这种情况下,爱丽丝已经可以访问其签名份额,然后从其他参与者401接收相应的签名份额。
因此,签名结合了此时只有爱丽丝401a知道的外部数据项,例如个人标识符。应当注意的是,外部数据项本身不必是秘密。优选地,外部数据项嵌入到签名中最初是保密的,但这不是必需的。例如,外部数据项可以是爱丽丝的认证公钥,其本身为一方或多方所知,但其作为外部数据项的用途是未知的。
为了证明自己生成了第一签名的份额,爱丽丝401a可以将签名提供给卡罗尔402。例如,爱丽丝401a可以将签名发送给卡罗尔402,或者爱丽丝可以发布或以其他方式广播该签名。在其他示例中,卡罗尔402可以从协调者404等不同方获得签名。爱丽丝401a也可以将消息发送给卡罗尔402。优选地,签名和消息一起发送或发布。
爱丽丝401a还可以在签名的同时或在稍后等不同的时间向卡罗尔402提供外部数据项。外部数据项可以以与签名相同的方式或不同的方式提供。例如,爱丽丝401a可以通过安全通信信道向卡罗尔402发送外部数据项。为了验证爱丽丝401a生成了签名份额,卡罗尔402需要对应于其他参与者401生成的相应数据项的相应公钥(例如,混淆零阶系数的公钥)。爱丽丝401可以将这些发送给卡罗尔402,或者其他参与者可以将其相应的临时公钥份额发送给卡罗尔402。
如上所述,外部数据项可以是或至少包括另一个签名。在这种情况下,爱丽丝401a获得第二消息,并且至少基于第二消息和“主私钥”生成第二签名。在最广泛的示例中,“主”仅用作标签。也就是说,主私钥可以是爱丽丝401a拥有的任何私钥。
爱丽丝401可以自己生成第二消息的至少一部分。附加地或替代地,爱丽丝401a可以从卡罗尔402等另一方接收或以其他方式获得第二消息的至少一部分。也就是说,卡罗尔402可以向爱丽丝401a发送第二消息的部分或全部内容,或者爱丽丝401a和卡罗尔402可以事先就第二消息的至少一部分达成一致。例如,爱丽丝401a和卡罗尔402可能已经同意包括关于生成第二签名的数据和/或时间的指示。在一些示例中,第二消息可以包括第一消息或基于第一消息生成。例如,第二消息可以包括具有附加数据的第一消息,附加数据串连到第一消息的开头或结尾。
在一些示例中,每个参与者401使用相同的第二消息来生成相应的第二签名。也就是说,每个参与者401基于第二消息和可接受的主私钥生成相应的第二签名。
爱丽丝401a可以至少向卡罗尔402发送第二签名,或者爱丽丝401a可以发布第二签名。如果卡罗尔402还没有访问第二消息,则爱丽丝401a将其发送给卡罗尔402,或者可以发布第二消息。爱丽丝401a还可以向卡罗尔402发送对应于主私钥的主公钥,或者至少指示卡罗尔402可以从何处获得主公钥,例如存储由认证中心颁发的证书并证明主公钥链接到爱丽丝401a的位置。
临时私钥份额至少基于外部数据项的哈希(即,是其函数),例如第二签名的双哈希。临时私钥份额也可以基于随机生成的盐值,即添加到外部数据项的哈希中的值。更具体地,用于生成爱丽丝的临时私钥份额的数据项可以基于盐值。优选地,盐值只使用一次,即不同的盐值用于生成第一签名的不同实例。在这些示例中,爱丽丝401a可以基于第三消息和盐值生成第三签名。也就是说,盐值用作生成第三签名的私钥。第三消息可以基于第一消息和/或第二消息生成。第三消息可以与第二消息相同。爱丽丝401a可以将第三签名发送给卡罗尔402。如果爱丽丝401a已经生成了第三消息,她也可以将其发送给卡罗尔402。或者,卡罗尔402可能已经将第三消息发送给爱丽丝401a,在这种情况下,爱丽丝401a不需要将其重新发送给卡罗尔402,尽管她可以选择这样做。
作为生成第三签名的替代方案,爱丽丝103a可以使用零知识证明(ZKP)来证明知道随机盐值。技术人员将熟悉ZKP本身,因此这里不再详细描述。示例性ZKP如下所示。
可选地,爱丽丝401a可以使用对应于数据项的相应公钥(即,爱丽丝401a生成的公钥和从其他参与者获得的公钥)来生成哈希树,例如默克尔树。对这些公钥中的每个公钥进行哈希处理,以形成哈希树的相应叶哈希。爱丽丝401a可以将得到的哈希根(例如,默克尔根)发送给卡罗尔402,或者可以发布该哈希根。爱丽丝401a可以同时或稍后向卡罗尔402发送哈希证明(例如,默克尔证明),以证明爱丽丝的公钥是哈希树的元素。在一些示例中,第一消息包括哈希根,因此生成签名份额的每个参与者都证明了相同的哈希根。也就是说,证明了用于生成哈希根的公钥。图7中示出了示例性哈希根。
如上所述,本发明的实施例不限于与区块链150一起使用。然而,在这些情况下,第一消息可以是区块链事务。例如,爱丽丝401a可以生成用于对区块链事务的部分或全部进行签名的签名的份额,例如该事务的一个或多个输入和/或一个或多个输出。然后,协调者404可以将第一签名包括在其尚未签名的事务的输入中。该事务可以包括锁定到不同方(例如,鲍勃103b和/或卡罗尔402)的输出,例如,该输出可以是锁定鲍勃103b所拥有的公钥的支付到公钥(P2PK)或支付到公钥哈希(P2PKH)输出。第二消息可以包括该事务。第二消息还可以包括与区块链150相关的数据,例如,在事务生成时区块链的当前区块高度。在这些示例中,爱丽丝401a或协调者404可以通过将事务传输到区块链150向卡罗尔402提供第一消息,卡罗尔402随后可以从区块链150访问该消息,如图4所示。哈希根可以包括在区块链事务的输出中。
图5示出了根据本发明的一些实施例的爱丽丝401a为生成签名份额而可能采取的示例性步骤序列。应当理解的是,这些步骤中的一些步骤可以按照不同的顺序执行。在步骤S501中,爱丽丝401a获得区块链事务等第一消息。在步骤S502中,爱丽丝401a获得第二签名等外部数据项。在步骤S503中,爱丽丝401a基于外部数据项(例如,基于第二签名的哈希)生成临时私钥份额。在步骤S504中,爱丽丝401a生成对应于共享临时私钥的临时公钥。爱丽丝401a在步骤S505中生成签名份额,在步骤S506中将其发送给协调者404。在协调者404已经生成签名并将该签名提供给卡罗尔402之后,爱丽丝401a至少将外部数据项发送给卡罗尔402。
现在将描述验证方卡罗尔402所采取的动作。卡罗尔402想要爱丽丝401a证明爱丽丝401a生成了第一签名的份额。卡罗尔402获得第一签名。爱丽丝401a可以将第一签名发送给卡罗尔402,或者第一签名可以是可公开访问的,例如记录在区块链150上。如果第一签名包括在区块链事务的输入中,则卡罗尔402通过从该事务中提取第一签名来获得第一签名。卡罗尔402还从爱丽丝401a获得候选外部数据项。在本文中,“候选”用于指爱丽丝401a声称已经嵌入到第一签名中的外部数据项,即在其相应的签名份额中。如果确实如此,则候选外部数据项与上述外部数据项相同。然而,卡罗尔402此时无法确认这是事实,因此使用了术语“候选”。
卡罗尔402使用候选外部数据项来生成候选临时公钥。为此,卡罗尔获得爱丽丝的外部数据项(或第一数据项,如果第一数据项不仅仅是基于外部数据项生成的),并生成对应公钥。卡罗尔402还获得对应于其他参与者数据项的公钥。卡罗尔402使用候选生成候选临时公钥,并获得公钥。候选临时公钥包括第一分量和第二分量,例如x值和y值。
卡罗尔401获得的第一签名包括第一签名分量和第二签名分量。为了验证爱丽丝401a参与了第一签名,卡罗尔402将候选第一签名分量与候选临时公钥的第一分量进行比较。若匹配,卡罗尔402可以确定爱丽丝401a确实生成了第一签名的份额。也就是说,为了使候选临时公钥的第一分量(其包括与候选第一签名分量等效的x分量)和第一签名分量匹配,候选外部数据项必须是用于生成爱丽丝的签名份额的外部数据项。由于爱丽丝401a向卡罗尔402提供了候选外部数据项,这证明爱丽丝401a生成了签名的份额。该过程如图6中的步骤S601至步骤S605所示。
卡罗尔402还可以在针对对应公钥进行核实时验证第一签名是有效签名。如果第一签名用于对区块链事务进行签名,并且该事务已经记录在区块链上,则卡罗尔401可以假设第一签名是有效签名(即,如果签名无效,则区块链节点不会接受该事务)。然而,卡罗尔401仍然可以验证正在花费的解锁脚本包含签名检查(即,确保区块链节点在事务确认期间对签名执行了签名检查)。为此,卡罗尔401可以检查已花费事务的解锁脚本是否包括OP_CHECKSIG脚本。
如上所述,当从爱丽丝的角度描述本发明的实施例时,外部数据项本身可以是签名,即第二签名。在这种情况下,卡罗尔402可以从爱丽丝401a等获得第二消息,并且在使用由爱丽丝401a提供的公钥或以其他方式链接到爱丽丝401a的公钥(例如,认证公钥)进行验证时,验证第二签名是有效签名。
如果爱丽丝401a已经使用盐值来生成用于生成第一签名的临时私钥份额,则爱丽丝401a可以向卡罗尔402提供对应于该盐值的公钥。然后,卡罗尔402可以基于“盐公钥”(例如,基于候选临时公钥份额和盐公钥的组合)生成候选第一签名分量。所述组合的x值可以用于生成候选第一签名分量。下面进一步提供了示例。在这些示例中,爱丽丝401a还可以向卡罗尔402提供第三签名和第三消息。在使用盐公钥进行验证时,卡罗尔402可以验证第三签名是有效签名。作为另一个可选特征,爱丽丝401a可以向卡罗尔402提供ZKP,卡罗尔402可以使用该ZKP验证爱丽丝401a知道盐值。
下面描述了将身份数据嵌入无交易商ECDSA阈值签名中使用的秘密份额的具体示例。
一群N个参与者A1,…,AN同意组成阈值签名群。为了生成执行经修改的JVRSS(JVRSS-A)所需的数据,假设每个参与者401具有私钥skAi(“主私钥”)和对应公钥PKAi=skAi·G,其中i∈{1,…,N}。公钥PKAi可以是认证公钥,或者由认证公钥派生。
该群就证明消息Mattest(“第二消息”)达成一致,该证明消息是公开的,将在稍后的时间点用于证明。每个群成员401对证明消息进行签名,以生成“第二签名”(即,外部数据项):
每个参与者401还计算其签名的(双)哈希
并用以下生成点对该(双)哈希进行混淆处理:
签名和经过哈希处理的数据将用于阈值秘密共享和证明算法。
可以使用秘密共享方案(例如,上述JVRSS方法)生成N个参与者之间的共享秘密。对于JVRSS-A变体,通过规定零阶(y截距)来修改算法。按照JVRSS的步骤1)至步骤5)进行以下修改。
在步骤1)中,每个参与者401计算其私有多项式的零阶(而不是随机选择值):
所有其他多项式系数都是随机选择的。
可以使用上述INVSS方法计算N个参与者之间共享秘密的逆。INVSS可以用于生成N群临时密钥和2t+1逆份额。通过使用证明设置,可以将INVSS修改为包含ID嵌入。这只是为了生成共享临时私钥k(或者更确切地说,共享临时私钥的份额,因为实际上并没有生成完整的私钥本身),参与者401使用JVRSS-A方法来代替常用的JVRSS。
参与者还使用对应于多项式零阶的公钥创建默克尔树。参与者采取以下步骤。
1.每个参与者401可以使用由JVRSS-A方法ri0=ki0·G得出的参与者的混淆系数来计算下面的默克尔树和对应的默克尔根R,其中每个参与者401具有基于其签名的(双)哈希生成的相应数据项ki0,以及对应于该数据项的相应公钥ri0。
2.然后,参与者401可以通过向所有参与者401广播该值来确认每个人都具有相同的默克尔根。这样,该默克尔根可以包含在使用对应临时密钥进行签名的消息中。
设置:N个独立参与者A1,…,AN同意加入阈值秘密共享群。他们还同意使用支持未来证明的不可信设置。参与者针对该群N个参与者使用证明消息设置,并且还生成证明消息相关群临时密钥r(基于ri0的和)。应当注意的是,如果该群希望证明消息是正在签名的事务,则一旦知道消息,此步骤需要在创建签名期间完成。
每个参与者401按照JVRSS计算私钥份额ai=JVRSS(i)。通过将私有多项式的混淆零阶值相加来计算公钥
应当注意的是,阈值公钥和私钥份额派生未经修改。私钥份额派生应遵循JVRSS,无需证明。
2t+1个参与者A1,…,A2t+1中的一部分希望对支付给PKB的事务进行签名。
这些参与者按照上述“非最优签名生成”的步骤1)至步骤7),使用证明消息相关临时密钥r作为签名输入的一部分。应当注意的是,可以使用最优签名生成方法来代替。总结如下。
每个签名参与者401都同意事务Tx′threshold(见下表)。
每个参与者401计算消息摘要e=SHA-256d(Tx′threshold)。
协调者404收集签名份额并内插:
s=interpolate(s1,…,s2t+1)。
输出(“第一签名”)为[r,s],并且可以对事务进行签名(完整事务请见下表)。
参与者A1,…,AN的身份现在已经嵌入到临时密钥r中,因此是第一签名。给定Mattest(可以提供或公开),参与者401可以证明他们是阈值群的成员。
假设爱丽丝401a是具有身份私钥skA1的参与者A1。值Mattest是公开的,并且爱丽丝401a可以生成第二签名:
由于执行算法以生成群临时公钥r,她还持有对应于相应数据项的公钥:
{k20·G,…,kN,0·G},
以及嵌入Txthreshold中的对应默克尔根R。
验证者402知道具有第一签名[r,s]的参与者数量N和Txthreshold。
卡罗尔(验证者)计算候选临时公钥(包括x分量和y分量):
并基于候选临时公钥的x分量计算候选第一签名分量:
r′=x′modn。
并检查r′=r(即,候选第一签名分量与第一签名分量匹配)。
卡罗尔还在使用群公钥PK进行核实时验证[r,s]是有效签名,其中PK=a.G。
下面描述了默克尔证明。假设卡罗尔402知道默克尔根R。爱丽丝生成默克尔证明,以证明是由R表示的集合中的元素。应当注意的是,爱丽丝401a将在设置期间从其他群成员接收所有临时密钥份额,因此能够重新生成整个默克尔树,以生成证明。
在一种攻击中,验证者可以访问所有参与者并获得足够的信息来创建共享临时私钥k,然后使用结果和签名来派生共享私钥。为了防止这种情况,爱丽丝401a可以包括秘密盐值。显然,参与者i的临时密钥的零阶可以设置为:
然后,爱丽丝401a可以通过提供零知识证明或者通过提供具有w的生成签名来证明知道该秘密盐值。该盐值应保密。
应当注意的是,已经针对作为事务的消息描述了该方法,但签名所在的消息不需要限于此。
下面对所述方法的若干安全方面进行了说明。
使用盐值来屏蔽临时密钥份额kA1可以防止欺骗攻击。如果临时密钥仅依赖于第一事务签名(没有额外的随机性),则攻击者可能能够仅通过保留他们从爱丽丝(证明者)接收的信息来向其他人重放证明,从而使得很难将原始事务签名者与仅仅看过证明的人区分开来。
在签名到签名映射中使用一次性秘密值不仅保证所有私钥都是安全的,而且攻击者将无法使用他们获得的任何信息来冒充爱丽丝401a。因此,该方法不要求卡罗尔(验证者)402是诚实的或可信的一方。
除非提供默克尔证明,否则阈值签名者证明可能容易受到欺骗。如果默克尔证明不是证明的一部分,并且证明消息是公开的,则非群成员可以对证明数据进行反向工程。
然后,她可以计算U=(x′,y′)-SHA256d([rE,sE])·G,并简单地将U划分成几个部分U1,U2,…,UN-1,其中U=U1+…+UN。
伊芙可以使用计算出的数据来假装自己是群签名活动的参与者。实际群签名者的秘密信息不会泄露,但第三方可以假装他们参加了群签名活动。
通过将默克尔根包含在由该群签名的消息中,这种欺骗不可能发生。
结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络106、比特币区块链150和比特币节点104进行了描述。然而,应当理解的是,比特币区块链是区块链150的一个特定示例,并且上述描述通常可以应用于任何区块链。也就是说,本发明决不限于比特币区块链。更一般地,以上对比特币网络106、比特币区块链150和比特币节点104的任何引用可以分别参考区块链网络106、区块链150和区块链节点104来替换。区块链、区块链网络和/或区块链节点可以共享如上所述的比特币区块链150、比特币网络106和比特币节点104的部分或全部所述特性。
在本发明的优选实施例中,区块链网络106是比特币网络,并且比特币节点104至少执行对区块链150的区块151进行创建、发布、传播和存储中的所有所述功能。不排除可能存在仅执行这些功能中的一个或部分功能但不是全部功能的其它网络实体(或网络元件)。也就是说,网络实体可以执行传播和/或存储区块的功能,而不创建和发布区块(请记住,这些实体不被认为是优选的比特币网络106的节点)。
在本发明的非优选实施例中,区块链网络106可以不是比特币网络。在这些实施例中,不排除节点可以执行对区块链150的区块151进行创建、发布、传播和存储中的至少一个或部分功能但不是所有功能。例如,在这些其它区块链网络上,“节点”可用于指被配置为创建和发布区块151但不存储和/或传播这些区块151到其它节点的网络实体。
甚至更通俗地说,上面对术语“比特币节点”104的任何引用可以用术语“网络实体”或“网络元件”代替,其中这样的实体/元件被配置为执行对区块进行创建、发布、传播和存储中的一些或全部角色。这种网络实体/元件的功能可以在硬件中实现,方法与上面参照区块链节点104所述的方式相同。
应当理解的是,上述实施例仅通过示例的方式进行描述。更通俗地说,可根据下述任何一个或多个语句提供一种方法、装置或程序。
语句1.一种生成数字签名的份额的计算机实现的方法,其中参与者群组中的每个参与者具有第一共享私钥的相应份额,并且其中所述方法由所述群组中的第一参与者执行并且包括:
获得第一消息;
至少基于第一外部数据项的哈希来生成第一数据项;
生成临时私钥的第一临时私钥份额,其中所述第一临时私钥份额是基于所述第一数据项和每个其他参与者生成的相应数据项而生成的;
生成对应于所述临时私钥的临时公钥;
基于所述第一消息、所述第一临时私钥份额、所述第一共享私钥的第一份额、和所述临时公钥生成第一签名份额;以及,
将所述第一签名份额提供给协调者,以基于至少阈值数量的相应签名份额来生成第一签名。
外部数据项可以包括第一方的标识符,例如姓名、地址、电话号码、国家保险号码、护照号、公钥等。
优选地,第一签名是ECDSA签名。“临时公钥”用作“临时公钥的x分量”的简写。
优选地,每个其他参与者以相同的方式并基于相应的外部数据项来生成其相应的临时公钥份额。
语句2.根据语句1所述的方法,其中所述生成所述第一临时私钥份额包括:与所述其他参与者中的每个参与者执行秘密共享方案。
语句3.根据语句2所述的方法,其中所述秘密共享方案是联合可验证秘密共享(JVRSS)方案。
更准确地说,秘密共享方案可以是JVRSS方案的修改版本,其中每个参与者不是生成随机多项式系数,而是将零阶系数设置为第一外部数据项的哈希。随机多项式系数可以是真随机的或伪随机的(例如,任意选择)。
语句4.根据语句3所述的方法,其中所述第一数据项是第一多项式的零阶系数,并且其中所述JVRSS方案包括:
将所述第一多项式的相应实例传输给所述其他参与者中的每个参与者,其中所述第一多项式的所述相应实例是基于所述相应参与者的相应索引生成的;以及
从每个其他参与者获得相应的多项式,其中所述相应的多项式是基于所述第一参与者的相应索引和所述其他参与者生成的所述相应数据项生成的。
语句5.根据前述任一项语句所述的方法,其中生成对应于所述临时私钥的所述临时公钥包括:
生成对应于所述第一数据项的第一公钥;以及
从每个其他参与者,获得对应于所述其他参与者生成的所述相应数据项的相应公钥。
语句6.根据语句5所述的方法,所述方法包括:将所述第一外部数据项和所获得的对应于所述相应数据项的相应公钥提供给验证方,以证明所述第一参与者生成了所述第一签名。
语句7.根据前述任一项语句所述的方法,其中获得所述第一消息包括生成所述第一消息,并且其中所述方法包括将所述第一消息提供给所述验证方。
语句8.根据前述任一项语句所述的方法,所述方法包括:
获得第二消息;以及
至少基于所述第二消息和所述第一参与者的主私钥生成第二签名,并且其中所述外部数据项包括所述第二签名。
语句9.根据语句8所述的方法,其中每个参与者基于相同的第二消息生成其相应的外部数据项。
语句10.根据语句8或9所述的方法,其中所述第一参与者的所述主私钥对应于链接到所述第一参与者的身份的主公钥。
语句11.根据前述任一项语句所述的方法,其中所述第一共享私钥的所述第一份额是使用秘密共享方案生成的。
例如,JVRSS。
语句12.根据前述任一项语句所述的方法,其中所述第一参与者是所述协调者,并且其中所述方法包括:
接收至少所述阈值数量的相应签名份额;以及
生成包括第一签名分量和第二签名分量的所述第一签名,其中所述第一签名分量是基于所述临时公钥生成的,并且其中所述第二签名分量是基于至少所述阈值数量的相应签名份额生成的。
语句13.根据前述任一项语句所述的方法,其中所述第一数据项是基于随机盐值生成的。
语句14.根据语句13所述的方法,其中所述方法包括:向所述验证方提供用于证明知道所述随机盐值的零知识证明。
语句15.根据语句13或14所述的方法,其中所述随机盐值是私钥,并且其中所述方法包括:
获得第三消息;
至少基于所述随机盐值和所述第三消息生成第三签名;以及
将所述第三签名、所述第三消息以及对应于所述随机盐值的公钥提供给所述验证方,以证明在使用对应于所述随机盐值的所述公钥进行验证时所述第三签名是所述第三消息的有效签名。
语句16.根据语句15所述的方法,其中所述第三消息包括所述第二消息。
例如,第三消息可以与第二消息相同。
语句17.根据前述任一项语句所述的方法,所述方法包括:
生成哈希树的根哈希,其中对对应于所述相应数据项的每个相应公钥进行哈希处理,以生成所述哈希树的相应叶哈希;以及
将所述哈希树的所述根传输给一个或多个所述参与者和/或所述验证方。
语句18.根据语句15所述的方法,所述方法包括:向所述验证方传输哈希证明,以验证对应于所述第一数据项的所述第一公钥是所述哈希树的元素。
优选地,哈希树是默克尔树,哈希根是默克尔根,哈希证明是默克尔证明。
语句19.根据前述任一项语句所述的方法,其中所述第一消息包括区块链事务的至少一部分。
例如,第一签名可以用于对区块链事务进行签名。
语句20.根据语句18和19所述的方法,其中所述区块链事务包括所述哈希根。
语句21.根据语句19或20所述的方法,其中所述区块链事务包括所述第一签名。
语句22.根据语句19至21中任一项所述的方法,其中将所述第一消息提供给所述验证方包括:将所述区块链事务传输至区块链网络。
语句23.根据前述任一项语句所述的方法,其中所述外部数据项的所述哈希是所述外部数据项的双哈希。
语句24.一种验证数字签名已经由第一参与者部分生成的计算机实现的方法,其中所述方法由验证方执行并且包括:
获得第一签名,所述第一签名包括第一签名分量和第二签名分量;
从所述第一参与者获得候选第一外部数据项、和对应于相应数据项的一个或多个相应公钥,每个其他参与者对应一个;
基于所述候选第一外部数据项的哈希生成候选公钥;
基于所述候选公钥和所获得的一个或多个公钥生成候选临时公钥;
基于所述候选临时公钥生成候选第一签名分量;以及
基于所述候选第一签名分量是否对应于所述第一签名分量,验证所述第一签名已经由所述第一参与者部分生成。
语句25.根据语句24所述的方法,其中所述第一签名对第一消息进行签名,并且其中所述方法包括:
获得与用于生成所述第一签名的共享私钥对应的共享公钥;以及
在使用所述第一公钥进行验证时,验证所述第一签名是所述第一消息的有效签名。
语句26.根据语句24或25所述的方法,其中所述候选外部数据项是第二签名。
语句27.根据语句24至26中任一项所述的方法,其中所述第二签名对第二消息进行签名,其中所述方法包括:
获得与用于生成所述第二签名的私钥对应的第二公钥;以及
在使用所述第二公钥进行验证时,验证所述第二签名是所述第二消息的有效签名。
语句28.根据语句24或27中任一项所述的方法,其中所述候选公钥是基于随机盐值生成的,其中所述方法包括:
接收用于证明知道所述随机盐值的零知识证明;以及
验证所述第一参与者知道所述随机盐值。
语句29.根据语句24至28中任一项所述的方法,其中所述候选公钥是基于随机盐值生成的,其中所述方法包括:
获得第三消息;
获得第三签名;以及
在使用对应于所述随机盐值的公钥进行验证时,验证所述第三签名是所述第三消息的有效签名。
语句30.根据语句24至29中任一项所述的方法,所述方法包括:
获得哈希证明和哈希根,其中所述第一消息包括所述哈希根;以及
基于所述哈希证明验证候选第一临时公钥份额是包括所述哈希根的哈希树的元素。
语句31.根据语句24至30中任一项所述的方法,其中所述第一签名从第一方接收。
语句32.根据语句24至31中任一项所述的方法,其中所述第一消息从所述第一参与者接收。
语句33.根据语句24至31中任一项所述的方法,其中所述第一消息由所述验证方生成。
语句34.根据语句24至33中任一项所述的方法,其中所述第一消息包括区块链事务的至少一部分。
语句35.根据语句34所述的方法,其中获得所述第一消息包括从区块链获得所述区块链事务。
语句36.根据语句35所述的方法,其中获得所述第一签名包括从所述区块链事务中提取所述第一签名。
语句37.根据语句33至36中任一项所述的方法,其中所述区块链事务的输入包括所述第一签名,并且其中所述方法包括:
验证所述区块链事务的所述输入所引用的上一个区块链事务的输出包括签名验证脚本。
语句38.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据语句1至37中任一项所述的方法。
语句39.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据语句1至37中任一项所述的方法。
根据本文公开的另一方面,可以提供一种方法,所述方法包括所述第一参与者和所述验证方的动作。
根据本文公开的另一方面,可以提供一种***,所述***包括所述第一参与者和所述验证方的计算机设备。
Claims (39)
1.一种生成数字签名的份额的计算机实现的方法,其中参与者群组中的每个参与者具有第一共享私钥的相应份额,并且其中所述方法由所述群组中的第一参与者执行并且包括:
获得第一消息;
至少基于第一外部数据项的哈希来生成第一数据项;
生成临时私钥的第一临时私钥份额,其中所述第一临时私钥份额是基于所述第一数据项和每个其他参与者生成的相应数据项而生成的;
生成对应于所述临时私钥的临时公钥;
基于所述第一消息、所述第一临时私钥份额、所述第一共享私钥的第一份额、和所述临时公钥生成第一签名份额;以及
将所述第一签名份额提供给协调者,以基于至少阈值数量的相应签名份额来生成第一签名。
2.根据权利要求1所述的方法,其中所述生成所述第一临时私钥份额包括:与所述其他参与者中的每个参与者执行秘密共享方案。
3.根据权利要求2所述的方法,其中所述秘密共享方案是联合可验证秘密共享JVRSS方案。
4.根据权利要求3所述的方法,其中所述第一数据项是第一多项式的零阶系数,并且其中所述JVRSS方案包括:
将所述第一多项式的相应实例传输给所述其他参与者中的每个参与者,其中所述第一多项式的所述相应实例是基于所述相应参与者的相应索引生成的;以及
从每个其他参与者获得相应的多项式,其中所述相应的多项式是基于所述第一参与者的相应索引和所述其他参与者生成的所述相应数据项生成的。
5.根据前述任一项权利要求所述的方法,其中生成对应于所述临时私钥的所述临时公钥包括:
生成对应于所述第一数据项的第一公钥;以及
从每个其他参与者,获得对应于所述其他参与者生成的所述相应数据项的相应公钥。
6.根据权利要求5所述的方法,所述方法包括:将所述第一外部数据项和所获得的对应于所述相应数据项的相应公钥提供给验证方,以证明所述第一参与者生成了所述第一签名。
7.根据前述任一项权利要求所述的方法,其中获得所述第一消息包括生成所述第一消息,并且其中所述方法包括将所述第一消息提供给所述验证方。
8.根据前述任一项权利要求所述的方法,所述方法包括:
获得第二消息;以及
至少基于所述第二消息和所述第一参与者的主私钥生成第二签名,并且其中所述外部数据项包括所述第二签名。
9.根据权利要求8所述的方法,其中每个参与者基于相同的第二消息生成其相应的外部数据项。
10.根据权利要求8或9所述的方法,其中所述第一参与者的所述主私钥对应于链接到所述第一参与者的身份的主公钥。
11.根据前述任一项权利要求所述的方法,其中所述第一共享私钥的所述第一份额是使用秘密共享方案生成的。
12.根据前述任一项权利要求所述的方法,其中所述第一参与者是所述协调者,并且其中所述方法包括:
接收至少所述阈值数量的相应签名份额;以及
生成包括第一签名分量和第二签名分量的所述第一签名,其中所述第一签名分量是基于所述临时公钥生成的,并且其中所述第二签名分量是基于至少所述阈值数量的相应签名份额生成的。
13.根据前述任一项权利要求所述的方法,其中所述第一数据项是基于随机盐值生成的。
14.根据权利要求13所述的方法,其中所述方法包括:向所述验证方提供用于证明知道所述随机盐值的零知识证明。
15.根据权利要求13或14所述的方法,其中所述随机盐值是私钥,并且其中所述方法包括:
获得第三消息;
至少基于所述随机盐值和所述第三消息生成第三签名;以及
将所述第三签名、所述第三消息以及对应于所述随机盐值的公钥提供给所述验证方,以证明在使用对应于所述随机盐值的所述公钥进行验证时所述第三签名是所述第三消息的有效签名。
16.根据权利要求15所述的方法,其中所述第三消息包括所述第二消息。
17.根据前述任一项权利要求所述的方法,所述方法包括:
生成哈希树的根哈希,其中对对应于所述相应数据项的每个相应公钥进行哈希处理,以生成所述哈希树的相应叶哈希;以及
将所述哈希树的所述根传输给一个或多个所述参与者和/或所述验证方。
18.根据权利要求15所述的方法,所述方法包括:向所述验证方传输哈希证明,以验证对应于所述第一数据项的所述第一公钥是所述哈希树的元素。
19.根据前述任一项权利要求所述的方法,其中所述第一消息包括区块链事务的至少一部分。
20.根据权利要求18和19所述的方法,其中所述区块链事务包括所述哈希根。
21.根据权利要求19或20所述的方法,其中所述区块链事务包括所述第一签名。
22.根据权利要求19至21中任一项所述的方法,其中将所述第一消息提供给所述验证方包括:将所述区块链事务传输至区块链网络。
23.根据前述任一项权利要求所述的方法,其中所述外部数据项的所述哈希是所述外部数据项的双哈希。
24.一种验证数字签名已经由第一参与者部分生成的计算机实现的方法,其中所述方法由验证方执行并且包括:
获得第一签名,所述第一签名包括第一签名分量和第二签名分量;
从所述第一参与者获得候选第一外部数据项、和对应于相应数据项的一个或多个相应公钥,每个其他参与者对应一个;
基于所述候选第一外部数据项的哈希生成候选公钥;
基于所述候选公钥和所获得的一个或多个公钥生成候选临时公钥;
基于所述候选临时公钥生成候选第一签名分量;以及
基于所述候选第一签名分量是否对应于所述第一签名分量,验证所述第一签名已经由所述第一参与者部分生成。
25.根据权利要求24所述的方法,其中所述第一签名对第一消息进行签名,并且其中所述方法包括:
获得与用于生成所述第一签名的共享私钥对应的共享公钥;以及
在使用所述第一公钥进行验证时,验证所述第一签名是所述第一消息的有效签名。
26.根据权利要求24或25所述的方法,其中所述候选外部数据项是第二签名。
27.根据权利要求24至26中任一项所述的方法,其中所述第二签名对第二消息进行签名,其中所述方法包括:
获得与用于生成所述第二签名的私钥对应的第二公钥;以及
在使用所述第二公钥进行验证时,验证所述第二签名是所述第二消息的有效签名。
28.根据权利要求24或27中任一项所述的方法,其中所述候选公钥是基于随机盐值生成的,其中所述方法包括:
接收用于证明知道所述随机盐值的零知识证明;以及
验证所述第一参与者知道所述随机盐值。
29.根据权利要求24至28中任一项所述的方法,其中所述候选公钥是基于随机盐值生成的,其中所述方法包括:
获得第三消息;
获得第三签名;以及
在使用对应于所述随机盐值的公钥进行验证时,验证所述第三签名是所述第三消息的有效签名。
30.根据权利要求24至29中任一项所述的方法,所述方法包括:
获得哈希证明和哈希根,其中所述第一消息包括所述哈希根;以及
基于所述哈希证明验证候选第一临时公钥份额是包括所述哈希根的哈希树的元素。
31.根据权利要求24至30中任一项所述的方法,其中所述第一签名从第一方接收。
32.根据权利要求24至31中任一项所述的方法,其中所述第一消息从所述第一参与者接收。
33.根据权利要求24至31中任一项所述的方法,其中所述第一消息由所述验证方生成。
34.根据权利要求24至33中任一项所述的方法,其中所述第一消息包括区块链事务的至少一部分。
35.根据权利要求34所述的方法,其中获得所述第一消息包括从区块链获得所述区块链事务。
36.根据权利要求35所述的方法,其中获得所述第一签名包括从所述区块链事务中提取所述第一签名。
37.根据权利要求33至36中任一项所述的方法,其中所述区块链事务的输入包括所述第一签名,并且其中所述方法包括:
验证所述区块链事务的所述输入所引用的上一个区块链事务的输出包括签名验证脚本。
38.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据权利要求1至37中任一项所述的方法。
39.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据权利要求1至37中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2012874.0 | 2020-08-18 | ||
GB2012874.0A GB2598112A (en) | 2020-08-18 | 2020-08-18 | Threshold signatures |
PCT/EP2021/070124 WO2022037869A1 (en) | 2020-08-18 | 2021-07-19 | Threshold signatures |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115885498A true CN115885498A (zh) | 2023-03-31 |
Family
ID=72615433
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180050970.0A Pending CN115885498A (zh) | 2020-08-18 | 2021-07-19 | 阈值签名 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230308287A1 (zh) |
EP (1) | EP4169206A1 (zh) |
JP (1) | JP2023539432A (zh) |
CN (1) | CN115885498A (zh) |
GB (1) | GB2598112A (zh) |
WO (1) | WO2022037869A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116915416A (zh) * | 2023-09-14 | 2023-10-20 | 北京信安世纪科技股份有限公司 | 一种证书签名方法、装置以及一种证书获取方法、装置 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113094675B (zh) * | 2021-04-29 | 2023-03-28 | 香港中文大学(深圳) | 基于分布式模型训练的用户认证方法及装置 |
US11902451B2 (en) * | 2021-07-01 | 2024-02-13 | Fujitsu Limited | Cross-blockchain identity and key management |
US20240045693A1 (en) * | 2022-08-02 | 2024-02-08 | Bank Of America Corporation | System and method for automated command access approval across a network of servers |
CN115412260B (zh) * | 2022-08-30 | 2023-10-20 | 云海链控股股份有限公司 | Sm2门限签名方法、***、设备及计算机可读存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SG10201805995VA (en) | 2016-02-23 | 2018-08-30 | Nchain Holdings Ltd | Determining a common secret for the secure exchange of information and hierarchical, deterministic cryptographic keys |
EP3669491B1 (en) * | 2017-08-15 | 2024-02-07 | nChain Licensing AG | Threshold ecdsa for securing bitcoin wallet |
GB201805633D0 (en) * | 2018-04-05 | 2018-05-23 | Nchain Holdings Ltd | Computer implemented method and system |
-
2020
- 2020-08-18 GB GB2012874.0A patent/GB2598112A/en active Pending
-
2021
- 2021-07-19 EP EP21746463.5A patent/EP4169206A1/en active Pending
- 2021-07-19 JP JP2023507541A patent/JP2023539432A/ja active Pending
- 2021-07-19 US US18/020,861 patent/US20230308287A1/en active Pending
- 2021-07-19 CN CN202180050970.0A patent/CN115885498A/zh active Pending
- 2021-07-19 WO PCT/EP2021/070124 patent/WO2022037869A1/en unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116915416A (zh) * | 2023-09-14 | 2023-10-20 | 北京信安世纪科技股份有限公司 | 一种证书签名方法、装置以及一种证书获取方法、装置 |
CN116915416B (zh) * | 2023-09-14 | 2023-12-15 | 北京信安世纪科技股份有限公司 | 一种证书签名方法、装置以及一种证书获取方法、装置 |
Also Published As
Publication number | Publication date |
---|---|
GB202012874D0 (en) | 2020-09-30 |
WO2022037869A1 (en) | 2022-02-24 |
JP2023539432A (ja) | 2023-09-14 |
GB2598112A (en) | 2022-02-23 |
US20230308287A1 (en) | 2023-09-28 |
EP4169206A1 (en) | 2023-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI822693B (zh) | 產生臨界值保管庫之電腦施行方法 | |
CN115885498A (zh) | 阈值签名 | |
JP2023504535A (ja) | アイデンティティ(id)ベース公開鍵生成プロトコル | |
CN113875186A (zh) | 知识证明 | |
US20230319103A1 (en) | Identifying denial-of-service attacks | |
WO2020240289A1 (en) | Knowledge proof | |
TW202232913A (zh) | 共享金鑰產生技術 | |
CN118160275A (zh) | 阈值签名方案 | |
CN115885497A (zh) | 数字签名 | |
US20230163977A1 (en) | Digital signatures | |
TW202345545A (zh) | 用於證明與驗證子金鑰真實性之技術 | |
KR20240093465A (ko) | 셰어드 키의 생성 | |
KR20240045231A (ko) | 디지털 서명 셰어의 생성 | |
US20240214218A1 (en) | Nested threshold signatures | |
KR20240046201A (ko) | 디지털 서명들의 생성 | |
WO2023208809A1 (en) | Non-native blockchain signatures | |
CN117837127A (zh) | 生成数字签名 | |
CN117941317A (zh) | 生成区块链事务 | |
WO2024110170A1 (en) | Communication protocol | |
CN118266189A (zh) | 生成共享加密密钥 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |