CN115885497A - 数字签名 - Google Patents

数字签名 Download PDF

Info

Publication number
CN115885497A
CN115885497A CN202180050972.XA CN202180050972A CN115885497A CN 115885497 A CN115885497 A CN 115885497A CN 202180050972 A CN202180050972 A CN 202180050972A CN 115885497 A CN115885497 A CN 115885497A
Authority
CN
China
Prior art keywords
signature
message
transaction
private key
blockchain
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
Application number
CN202180050972.XA
Other languages
English (en)
Inventor
迈克尔拉·佩蒂特
克雷格·史蒂文·赖特
亚历山大·麦凯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Blockchain Licensing Jsc
Original Assignee
Blockchain Licensing Jsc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Blockchain Licensing Jsc filed Critical Blockchain Licensing Jsc
Publication of CN115885497A publication Critical patent/CN115885497A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic 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/3247Cryptographic 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0819Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
    • H04L9/0825Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using asymmetric-key encryption or public key infrastructure [PKI], e.g. key signature or public key certificates
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic 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/3218Cryptographic 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 using proof of knowledge, e.g. Fiat-Shamir, GQ, Schnorr, ornon-interactive zero-knowledge proofs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic 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/3247Cryptographic 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/3252Cryptographic 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 DSA or related signature schemes, e.g. elliptic based signatures, ElGamal or Schnorr schemes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic 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)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Abstract

一种生成数字签名的计算机实现的方法,其中所述方法由签名方执行并且包括:获得第一消息;至少基于外部数据项的哈希来生成临时私钥;以及,生成第一签名,所述第一签名包括第一签名分量和第二签名分量,其中所述第一签名分量是基于对应于所述临时私钥的临时公钥生成的,并且其中所述第二签名分量是基于所述第一消息、所述临时私钥、所述第一签名分量和第一私钥生成的。

Description

数字签名
技术领域
本公开涉及一种生成数字签名的方法。具体地,所述方法使外部数据能够嵌入到数字签名中。
背景技术
公钥密码学是一种使用密钥对的加密系统,该密钥对包括:私钥,其仅对私钥所有者已知;以及公钥,其是基于对应的私钥生成的,并且可以在不损害私钥安全性的情况下进行传播。
公钥密码学使得发送者能够使用接收者的公钥(即,与仅对接收者已知的私钥对应的公钥)来加密消息。该加密消息随后只能使用接收者的私钥进行解密。
类似地,发送者可以使用自己的私钥对消息进行签名,例如以证明该消息是由发送者发送的,和/或指示发送者同意该消息。签名者(即,生成签名的一方)使用他们的私钥基于该消息创建数字签名。基于消息创建数字签名意味着将该消息和私钥提供给基于该消息和私钥生成该签名的函数。该签名被添加到(例如,标记到)该消息中或以其他方式与该消息相关联。拥有签名者的对应公钥的任何人都可以使用同一消息以及该消息中的数字签名来验证签名是否有效创建,即签名是否确实是使用签名者的私钥创建的。除确保消息的真实性之外,数字签名还确保消息的完整性和不可否认性。也就是说,数字签名可以用于证明消息在使用该签名进行签名之后未更改,并且签名的创建者将来不能否认他们创建了该签名。
数字签名方案通常涉及三个过程,即算法。密钥生成算法用于生成随机私钥和对应的公钥。签名算法用于基于消息和私钥来生成签名。在给定公钥和消息的情况下,验证算法用于验证是否已使用对应的私钥并根据签名算法生成签名。
发明内容
签名使私钥的所有者能够证明给定消息,使用对应于所述私钥的公钥对所述签名进行验证。例如,根据大多数区块链协议,比特币或其他类型的数字资产可以通过要求使用对应于指定公钥的私钥创建的有效签名来锁定。出于安全原因,为了防止链接区块链事务,建议不要多次使用同一个私钥。这意味着用户可能会有多个不同的密钥,他们将使用这些密钥来创建多个不同的签名。使用许多不同的密钥使得用户难以证明他们已经生成了任何一个签名。因此,用户需要能够证明他们生成了签名,并且能够以一种不需要多次使用同一个私钥的方式来证明。
根据本文公开的一个方面,提供了一种生成数字签名的计算机实现的方法,其中所述方法由签名方执行并且包括:获得第一消息;至少基于外部数据项的哈希来生成临时私钥;以及,生成第一签名,所述第一签名包括第一签名分量和第二签名分量,其中所述第一签名分量是基于对应于所述临时私钥的临时公钥生成的,并且其中所述第二签名分量是基于所述第一消息、所述临时私钥、所述第一签名分量和第一私钥生成的。
根据本文公开的另一方面,提供了一种验证数字签名已经由签名方生成的计算机实现的方法,其中所述方法由验证方执行并且包括:获得第一签名,所述第一签名包括第一签名分量和第二签名分量;从所述签名方获得候选外部数据项;基于所述候选外部数据项的哈希生成候选临时私钥;至少基于对应于所述候选临时私钥的公钥来生成候选第一签名分量;以及,基于所述候选第一签名分量是否对应于所述第一签名分量,验证所述第一签名已经由所述签名方生成。
签名方生成用于对消息进行签名的数字签名。在区块链环境中,所述消息可以是事务,例如,所述签名方生成用于解锁先前事务的输出的签名。通常,所述消息可以是任何形式的消息,例如文档,不一定需要与所述区块链相关。所述签名至少部分是基于临时私钥(例如,一次性使用私钥)生成的。所述临时私钥至少部分是基于外部信息(即,所述“外部数据项”)生成的。所述外部数据项可以包括和/或基于所述签名方的标识符生成,例如姓名、地址、电话号码、国家保险号码、护照号、公钥等。在一些示例中,所述外部数据项是另一个数字签名。
所述签名一旦生成,便可以使用公钥进行验证。然而,这不足以证明所述签名方生成了所述签名。相反,由于只有所述签名方知道所述外部数据项,因此所述签名方可以泄露所述外部数据项,并使所述验证方能够重构所述签名的至少一部分(即,所述“第一签名分量”)。也就是说,所述验证方基于所述外部数据项生成候选第一签名分量。如果所述重构的第一签名分量(即,所述候选第一签名分量)与所述第一签名分量匹配,则所述验证方可以确定所述签名方确实生成了所述签名。
本发明使外部信息能够并入签名中,即嵌入签名中。除非所述外部信息由所述签名方提供,否则所述验证方不知道所述外部信息。具体地,所述外部信息用于导出所述签名。例如,所述签名方可以将链接到签名者身份的公钥嵌入到使用不同私钥(即,与所述嵌入的公钥不对应的私钥)创建的签名中。这使得所述签名方能够证明他们已经生成了所述签名,而不必重复使用对应于所述身份链接公钥的所述私钥。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3A示出了客户端应用程序的示意性框图;
图3B示出了可由图3A的客户端应用程序表示的示例性用户界面的示意性模型;
图4示出了用于实现本发明实施例的示例性系统的示意性框图;
图5示出了根据本发明的一些实施例的用于生成数字签名的示例性方法的流程图;以及
图6示出了根据本发明的一些实施例的用于验证一方已经生成数字签名的示例性方法的流程图。
具体实施方式
示例性系统概述
图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-椭圆曲线群
Figure BDA0004083605820000151
是有限域/>
Figure BDA0004083605820000152
上的循环椭圆曲线群,其中p是素数。E中元素的数量为n,其中n是素数。G∈E是椭圆曲线群的生成点,表示:
Figure BDA0004083605820000153
群运算
Figure BDA0004083605820000154
是标准椭圆曲线点加法,i·G表示群运算在G上的i次重复
Figure BDA0004083605820000155
以下所有整数运算都以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]是有效签名。
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),
并且然后所有子密钥都可以从中导出,其中
Figure BDA0004083605820000161
是使用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和父私钥spparent中计算非强化子私钥skchild的等式如下
skchild=skparent+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(即,签名生成方)和验证方402(即,签名验证方)。在一些示例中,该系统包括一个或多个区块链节点104和/或第二方403。
每个参与方401、402、403操作相应的计算设备(未示出)。每个相应参与方401、402、403的相应的计算设备包括相应的处理装置,该处理装置包括一个或多个处理器,例如一个或多个中央处理单元(CPU)、加速器处理器(GPU)、专用处理器和/或现场可编程门阵列(FPGA)。相应计算设备还可以包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可以包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等电子媒介和/或诸如光盘驱动器等光学介质。相应计算设备可以包括至少一个用户终端,例如台式电脑或笔记本电脑、平板电脑、智能手机或诸如智能手表等可穿戴设备。替代地或附加地,相应计算设备可以包括一个或多个其他联网资源,例如经由用户终端访问的云计算资源(该云计算资源包括在一个或多个站点实现的一个或多个物理服务器设备的资源)。应当理解的是,被描述为由系统400的一方执行的任何动作可以由该方操作的相应计算装置执行。
如结合图1至图3所述,虽然本发明不限于仅在区块链环境中使用,但是下面将在签名方401等同于爱丽丝103a的情况下进行描述。也就是说,在一些示例中,爱丽丝103a是签名方401。在这些示例中,鲍勃103b可以是第二方403。下文中将验证方402称为卡罗尔。
在这些实施例中,爱丽丝401想要生成签名,并向卡罗尔402证明她在没有重复使用同一个私钥的情况下生成了该签名,例如,没有使用同一个私钥生成两个签名。
爱丽丝401获得要签名的消息,例如区块链事务、文档、合同等的一些或部分内容。爱丽丝401可以自己生成消息,或者爱丽丝401可以从鲍勃403等接收消息。爱丽丝401还获得外部数据项。爱丽丝401可能已经具有姓名、护照号、公钥等外部数据项,或者爱丽丝401可以生成外部数据项。例如,如下面将更详细描述的,外部数据项可以是爱丽丝401生成的签名(“第二签名”)。
爱丽丝401基于外部数据项的哈希生成临时私钥。例如,临时私钥可以包括(包含)外部数据项的哈希。换句话说,临时私钥现在是外部数据项的哈希结果的函数,而不是分配随机值作为临时私钥(参见上面的预备知识部分)。用于生成外部数据项的哈希的哈希函数可以是任何合适的哈希函数,例如SHA256、SHA512,并且可以包括多次应用一个或多个哈希函数。例如,哈希函数可以是SHA256d(x)=SHA256(SHA256(x))等双哈希函数。
然后,爱丽丝401生成签名的第一分量和第二分量。第一签名分量是基于对应于临时私钥的公钥生成的。也就是说,爱丽丝401生成对应于临时私钥的临时公钥。公钥有两个分量(例如,x值和y值)。在示例中,第一签名分量基于临时公钥的第一分量,例如x值。第二签名分量基于要签名的消息、临时私钥、第一签名分量和私钥(“第一私钥”)。第一私钥可以是任何私钥,例如随机私钥,或者如下文所述,可以链接到身份链接公钥的私钥。
因此,爱丽丝401已经生成了签名,该签名结合了此时只有爱丽丝401知道的外部数据项,例如个人标识符。应当注意的是,外部数据项本身不必是秘密。优选地,外部数据项嵌入到签名中最初是保密的,但这不是必需的。例如,外部数据项可以是认证公钥,该公钥本身为一方或多方所知。
爱丽丝401可以将签名提供给卡罗尔402。例如,爱丽丝401可以将签名发送给卡罗尔402,或者爱丽丝可以发布或以其他方式广播该签名。优选地,签名和消息一起发送或发布。爱丽丝401还可以在签名的同时或在稍后等不同的时间向卡罗尔402提供外部数据项。外部数据项可以以与签名相同的方式或不同的方式提供。例如,爱丽丝401可以通过安全通信信道向卡罗尔402发送外部数据项。
如上所述,外部数据项可以是或至少包括另一个签名。在这种情况下,爱丽丝401获得第二消息,并且至少基于第二消息和“主私钥”生成第二签名。在最广泛的示例中,“主”仅用作区别于第一私钥的标签。也就是说,除了用于生成第一签名的第二签名分量的第一私钥外,主私钥可以是爱丽丝401拥有的任何私钥。在该示例中,与用于生成基于外部数据项的第一签名的临时私钥相反,用于生成第二签名的临时私钥可以是随机生成的。
爱丽丝401可以自己生成第二消息的至少一部分。附加地或替代地,爱丽丝401可以从卡罗尔402等另一方接收或以其他方式获得第二消息的至少一部分。也就是说,卡罗尔402可以向爱丽丝401发送第二消息的部分或全部内容,或者爱丽丝401和卡罗尔402可以事先就该消息的至少一部分达成一致。例如,爱丽丝401和卡罗尔402可能已经同意包括关于生成第二签名的数据和/或时间的指示。在一些示例中,第二消息可以包括第一消息或基于第一消息生成。例如,第二消息可以包括具有附加数据的第一消息,附加数据串连到第一消息的开头或结尾。
爱丽丝401至少向卡罗尔402发送第二签名,或者爱丽丝401可以发布第二签名。如果卡罗尔402还没有访问第二消息,则爱丽丝401将其发送给卡罗尔402,或者可以发布第二消息。爱丽丝401还可以向卡罗尔402发送对应于主私钥的主公钥,或者至少指示卡罗尔402可以从何处获得主公钥,例如存储由认证中心颁发的证书并证明主公钥链接到爱丽丝401的位置。
虽然在一些示例中,主私钥和第一私钥之间没有链接,但是在其他示例中,第一私钥链接到主私钥,即从主私钥导出。例如,主私钥可以是爱丽丝401拥有的HD钱包的主私钥,第一私钥可以是从主私钥导出的子密钥,即第一私钥确定性地链接到主私钥。在其他示例中,第一私钥可以基于爱丽丝的主私钥和鲍勃的主私钥(或者等效地,基于与鲍勃的主私钥对应的鲍勃的主公钥)来生成。例如,第一私钥可以是DH私钥,或者是使用WO2017/145016中的技术导出的私钥,其示例如下所述。综上所述,在WO2017/145016中,基于爱丽丝的主私钥和鲍勃的主公钥生成共同秘密。然后,爱丽丝401可以基于其主私钥和所述共同秘密生成第一私钥。鲍勃的主公钥可以链接到其身份,例如,可以是认证公钥。
用于生成第一签名的临时私钥至少基于外部数据项的哈希,例如第二签名的双哈希。临时私钥也可以基于随机生成的盐值,即添加到外部数据项的哈希中的值。优选地,盐值只使用一次,即不同的盐值用于生成第一签名的不同实例。在这些示例中,爱丽丝401可以基于第三消息和盐值生成第三签名。也就是说,盐值用作生成第三签名的私钥。第三消息可以基于第一消息和/或第二消息生成。第三消息可以与第二消息相同。爱丽丝401可以将第三签名发送给卡罗尔402。如果爱丽丝已经生成了第三消息,她也可以将其发送给卡罗尔402。或者,卡罗尔402可能已经将第三消息发送给爱丽丝401,在这种情况下,爱丽丝401不需要将其重新发送给卡罗尔402,尽管她可以选择这样做。
如上所述,本发明的实施例不限于与区块链150一起使用。然而,在这些情况下,第一消息可以是区块链事务。例如,爱丽丝401可以对区块链事务的部分或全部进行签名,例如该事务的一个或多个输入和/或一个或多个输出。然后,爱丽丝401可以将第一签名包括在其尚未签名的事务的输入中。该事务可以包括锁定到鲍勃403和/或卡罗尔402的输出,例如,该输出可以是锁定鲍勃403所拥有的公钥的支付到公钥(P2PK)或支付到公钥哈希(P2PKH)输出。第二消息可以包括该事务。第二消息还可以包括与区块链150相关的数据,例如,在事务生成时区块链的当前区块高度。在这些示例中,爱丽丝401可以通过将事务传输到区块链150向卡罗尔402提供第一消息,卡罗尔402随后可以从区块链150访问该消息,如图4所示。
图5示出了根据本发明的一些实施例的爱丽丝401为生成签名而可能采取的示例性步骤序列。应当理解的是,这些步骤中的一些步骤可以按照不同的顺序执行。在步骤S501中,爱丽丝401获得区块链事务等第一消息。在步骤S502中,爱丽丝401获得第二签名等外部数据项。在步骤S503中,爱丽丝401基于外部数据项(例如,基于第二签名的哈希)生成临时私钥。在步骤S504中,爱丽丝401基于临时私钥生成签名;在步骤S505中,她至少向验证方卡罗尔402发送外部数据项。
现在将描述验证方卡罗尔402所采取的动作。卡罗尔402想要爱丽丝401证明爱丽丝生成了签名。卡罗尔402获得第一签名。爱丽丝402可以将第一签名发送给卡罗尔402,或者第一签名可以是可公开访问的,例如记录在区块链150上。如果第一签名包括在区块链事务的输入中,则卡罗尔402通过从该事务中提取第一签名来获得第一签名。卡罗尔402还从爱丽丝401获得候选外部数据项。在本文中,“候选”用于指爱丽丝401声称已经嵌入到第一签名中的外部数据项。如果确实如此,则候选外部数据项与上述外部数据项相同。然而,卡罗尔402此时无法确认这是事实,因此使用了术语“候选”。
类似于爱丽丝401生成临时私钥的方式,卡罗尔402使用候选外部数据项来生成候选临时私钥。应当注意的是,卡罗尔402不必使用与爱丽丝401完全相同的方法。例如,爱丽丝401可以使用卡罗尔402无权访问的盐值来生成她的临时私钥。卡罗尔402生成对应于候选临时私钥的候选临时公钥,并由此生成候选第一签名分量。例如,候选第一签名分量可以是候选临时公钥的第一分量(例如,x值)。
卡罗尔401获得的第一签名包括第一签名分量和第二签名分量。为了验证爱丽丝401生成了第一签名,卡罗尔402将候选第一签名分量与第一签名分量进行比较。若匹配,卡罗尔402可以确定爱丽丝401确实生成了第一签名。也就是说,为了使候选第一签名分量和第一签名分量匹配,候选外部数据项必须是用于生成第一签名的外部数据项。由于爱丽丝401向卡罗尔402提供了候选外部数据项,这证明爱丽丝401生成了第一签名。该过程如图6中的步骤S601至步骤S605所示。
卡罗尔402还可以在针对对应公钥进行核实时验证第一签名是有效签名。如果第一签名用于对区块链事务进行签名,并且该事务已经记录在区块链上,则卡罗尔401可以假设第一签名是有效签名(即,如果签名无效,则区块链节点不会接受该事务)。然而,卡罗尔401仍然可以验证正在花费的解锁脚本包含签名检查(即,确保区块链节点在事务确认期间对签名执行了签名检查)。为此,卡罗尔401可以检查已花费事务的解锁脚本是否包括OP_CHECKSIG脚本。
如上所述,当从爱丽丝的角度描述本发明的实施例时,外部数据项本身可以是签名,即第二签名。在这种情况下,卡罗尔402可以从爱丽丝401等获得第二消息,并且在使用由爱丽丝401提供的公钥或以其他方式链接到爱丽丝401的公钥(例如,认证公钥)进行验证时,验证第二签名是有效签名。
如果爱丽丝401已经使用盐值来生成用于生成第一签名的临时私钥,则爱丽丝401可以向卡罗尔402提供对应于该盐值的公钥。然后,卡罗尔402可以基于“盐公钥”(例如,基于候选临时公钥和盐公钥的组合)生成候选第一签名分量。所述组合的x值可以用于生成候选第一签名分量。下面进一步提供了示例。在这些示例中,爱丽丝401还可以向卡罗尔402提供第三签名和第三消息。在使用盐公钥进行验证时,卡罗尔402可以验证第三签名是有效签名。
下面提供了本发明的具体详细示例。具体地,下面详细介绍了一种使用哈希函数以加密方式链接事务签名和私钥的方法,以实现私钥的知识证明。这种情况涉及将对应于某人身份的公钥链接到给定签名,但该方法可以用于将任何外部数据包含到签名中。应当理解的是,这只是一种示例性实现方式,以下至少有一些是该特定实现方式特有的可选特征。
该方法称为“安全密钥交换证明方法”(SKEAM),是证明者爱丽丝401和验证者卡罗尔402之间的顺序交互。爱丽丝401使用一对签名将支付事务明确地链接到她的身份公钥,同时确保她的身份密钥不会出现在区块链150本身上。该算法的加密安全性依赖于使用加密哈希函数链接签名和临时密钥。
设置:爱丽丝401和鲍勃403具有公钥PKA和PKB。所述公钥是链接到其身份的固定公钥。爱丽丝401和鲍勃403使用协议来导出一组共享密钥对PKAB1,…,PKABN。或者,爱丽丝可以使用BIP32协议,将主密钥设置为其“身份密钥”,并使用(非增强)子密钥导出方法来导出用于签名的密钥。这两种协议的核心特征都是使用密钥导出路径,该路径将固定身份密钥与一组事务签名密钥链接起来。
PKA1,…,PKAN是事务密钥(即,用于对事务进行签名的私钥和用于核实签名的公钥),通过添加具有相应身份密钥的共同秘密而导出(见下文)。
基于Diffie-Hellman的共享密钥推导的简化示例使用以下计算
A=skA·PKB=skB·PKA
skAB1=H(A),
PKAB1=skAB1·G。
其中H(·)是哈希算法,A是只有爱丽丝401和鲍勃403可以计算的共享Diffie-Hellman密钥。然后,爱丽丝401和鲍勃403可以使用建立的共享秘密整数skAB1来计算事务签名密钥:
爱丽丝:
Figure BDA0004083605820000211
skA1=skA+skAB1
鲍勃:PKB1=PKB⊕PKAB1
skB1=skB+skAB1
在本文中,私钥加法是模运算n,公钥“加法”使用secp256k1群运算⊕。椭圆曲线群的同态性使私钥和公钥之间的关系在加法下成立。
下面描述了如何设置可以用于证明的签名。在下文中,要签名的消息是比特币事务,但不一定是这种情况。
步骤1:爱丽丝401创建支付给鲍勃的事务公钥(或通过对鲍勃的公钥进行哈希处理生成的地址)的未签名事务消息Tx1′。下面示意性地示出了示例性事务。
Figure BDA0004083605820000221
步骤2:爱丽丝401使用其身份密钥和事务消息M(“第二消息”)创建签名(“第二签名”)。在该特定示例中,消息由与当前链尖端区块高度级联的序列化事务字节组成。区块高度作为消息的可选特征包括在内。
M=Tx1′||block_hash,
Figure BDA0004083605820000222
应当注意的是,rA是使用随机临时密钥导出的一次性值。消息M和签名[rA,sA]现在有三个源分量:未签名事务数据、区块哈希(时间戳)和随机临时密钥。
步骤3a:爱丽丝401使用rA,sA和一次性随机盐值w∈Zn来创建临时密钥
kA1=SHA256d([rA,sA])+wmodn,
rA1=[kA1·G]xmodn,
其中SHA256d(x)=SHA256(SHA256(x))。
步骤3b:爱丽丝401使用w计算公共值W和签名
Sigw(M),W=w·G。
步骤4:在步骤3a中生成的临时密钥用于生成签名
Figure BDA0004083605820000223
其中PKA1=skA1·G。
步骤5:当对照PKA1进行验证时,[rA1,sA1]现在表示Tx1的有效签名(“第一签名”):
Figure BDA0004083605820000224
下表示意性地示出了事务的最终状态。由于已经从爱丽丝的身份密钥生成的签名中导出了rA1,爱丽丝的身份密钥现在嵌入到Tx1的签名中。
Figure BDA0004083605820000231
假设卡罗尔(第三方)402想要验证爱丽丝401是Tx1的创建者,并且可证明地链接skA1和skA的签名。爱丽丝401现在可以提供她生成并签名Tx1的证明,而无需重复使用skA1
步骤1:卡罗尔402获得Tx1并检查该事务是有效的比特币事务(即,根据网络共识规则有效)。她从Tx1的ScriptSig中提取[rA1SA1]。
步骤2a:爱丽丝401共享上述步骤2中的M和
Figure BDA0004083605820000232
/>
步骤2b:爱丽丝共享上述步骤3b中的W和SigW(M)。卡罗尔402可能希望为爱丽丝401创建不同的(随机)消息来使用w进行签名。
步骤3:卡罗尔402验证以下三个条件。
1)在使用PKA进行验证时,
Figure BDA0004083605820000233
是M的有效ECDSA签名
2)M的最后32个字节是有效的区块哈希
M[len(M)-32:len(M)]=block_hash。
卡罗尔402可能希望对block_hash所表示的区块和Tx1出现在其中的区块之间的区块距离施加额外的约束。这将确保爱丽丝401为其签名创建了准确的时间戳。
3)前述字节等于Tx1′(Tx1的无符号事务字节)
M[0:len(M)-32]=Tx1′。
步骤4a:卡罗尔402计算
Figure BDA0004083605820000234
r′=[k′·G+W]xmodn。
步骤4b:在使用公共值W进行验证时,卡罗尔402检查SigW(M)是M的有效ECDSA签名。
步骤5:卡罗尔402检查是否r′=rA1。如果是这样,那么爱丽丝401已经向卡罗尔402证明了她的身份密钥被用于Tx1的签名生成。
在上述方案中,签名密钥skAB1是使用共同秘密从身份密钥skA中导出的。也就是说:
skAB1=skA+skAB
其中skAB是爱丽丝401和鲍勃403之间的共享秘密。爱丽丝401可以通过两种方式之一向卡罗尔42证明签名密钥具有此链接。
卡罗尔402可以使用知识的零知识证明。卡罗尔402从上面的证明中知道对应于skA和skAB1的公钥,相应地由PKA和PKAB1表示。
1.爱丽丝401向卡罗尔402发送对应于共享秘密skAB和随机值y∈R{1,…,k-1}的公钥。也就是说,她发送X=skAB·G和Y=r·G。
2.卡罗尔402将挑战交给爱丽丝c=hash(x)。
3.爱丽丝401计算u=c·skAB+y并将其发送回卡罗尔402。
4.卡罗尔402检查u·G=c·X+Y和PKAB1=PKA+X。
如果这成立,那么卡罗尔402知道爱丽丝401确实知道skAB1。该过程本质上是对离散对数的零知识证明。挑战可以是一些预先约定的或标准的挑战,因此可以跳过步骤2,从而导致证明是非交互式证明。
应当注意的是,可以用这种方法来证明知道盐值w,而不是用上一节所述的签名。
或者,爱丽丝401可以创建带有skAB的另一个签名,该签名用X=skAB·G进行验证。唯一知道这一点的其他参与者是鲍勃403,但由于爱丽丝401还提供了带有其对应私钥的签名,因此可以假设爱丽丝401正在提供证明。
如上所述,BIP32密钥可以用于该方案。在这种情况下,子密钥具有以下通式
skchild=skparent+hash(Kparent)
其中Kparent是父密钥skparent的公钥或私钥,哈希函数是由SHA-512哈希函数创建的HMAC,具有一些额外的随机输入,称为链码(取决于父密钥)和计数器,使得可以导出多个子密钥。
在这种情况下,假设对应于父密钥PKparent=skparent·G的公钥与上述身份相同,并且skchild对应于签名密钥,则这两个证明成立,而不是X=hash(Kparent)。第二项的显式形式对验证者来说并不重要,相反,爱丽丝知道第二项是证明的目的。
最后应当注意的是,签名密钥不一定需要从身份密钥中导出。在临时密钥的推导中包括身份密钥足以证明到某个签名者的链接。
结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络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签名。
语句2.根据语句1所述的方法,所述方法包括:将所述外部数据项和所述第一签名提供给验证方,以证明所述签名方生成了所述第一签名。
语句3.根据语句2所述的方法,其中获得所述第一消息包括生成所述第一消息,并且其中所述方法包括将所述第一消息提供给所述验证方。
例如,签名方可以将第一签名和第一消息传输给验证方。或者,签名方可以在互联网、区块链等上发布第一签名和第一消息。
语句4.根据前述任一项语句所述的方法,所述方法包括:
获得第二消息;以及,
至少基于所述第二消息和所述签名方的主私钥生成第二签名,并且其中所述外部数据项包括所述第二签名。
第二签名包括相应的第一签名分量和相应的第二签名分量,其中第一签名分量和第二签名分量中的每一个都基于第二临时私钥,即随机临时私钥。
语句5.根据语句4所述的方法,所述方法包括:提供所述第二签名和所述第二消息,以证明在使用对应于所述主私钥的主公钥进行验证时,所述第二签名是所述第二消息的有效签名。
例如,签名方可以将第二签名和第二消息传输给验证方。
语句6.根据语句4或5所述的方法,其中所述第二消息是基于所述第一消息生成的。
签名方可以生成第二消息,或者可以从验证方等另一方获得第二消息。
语句7.根据语句4至6中任一项所述的方法,其中对应于所述主私钥的所述主公钥链接到所述签名方的身份。
因此,签名方的身份嵌入到第一签名中。
语句8.根据语句4至7中任一项所述的方法,其中所述第一私钥至少是基于所述主私钥生成的。
语句9.根据语句8所述的方法,其中所述主私钥是分层确定性HD密钥结构的主私钥,所述HD密钥结构包括基于所述主私钥生成的一组子私钥,并且其中所述第一私钥是所述一组子私钥中的一个。
语句10.根据语句8所述的方法,其中所述第一私钥是基于所述主私钥以及所述签名方和第二方都知道的共同秘密生成的。
语句11.根据语句10所述的方法,其中所述共同秘密是基于所述签名方的所述主私钥以及对应于所述第二方的主私钥的主公钥生成的。
语句12.根据语句11所述的方法,其中所述第二方的所述主公钥链接到所述第二方的身份。
优选地,第二方不同于验证方。
语句13.根据前述任一项语句所述的方法,其中所述外部数据项的所述哈希是所述外部数据项的双哈希。
语句14.根据前述任一项语句所述的方法,其中所述第二签名分量是基于所述第一消息的哈希或双哈希生成的。
语句15.根据前述任一项语句所述的方法,其中所述第一临时私钥是基于随机盐值生成的。
语句16.根据语句15所述的方法,其中所述随机盐值是私钥,并且其中所述方法包括:
获得第三消息;
至少基于所述随机盐值和所述第三消息生成第三签名;以及,
将所述第三签名、所述第三消息、和对应于所述随机盐值的公钥提供给所述验证方,以证明在使用对应于所述随机盐值的所述公钥进行验证时,所述第三签名是所述第三消息的有效签名。
语句17.根据语句16所述的方法,其中所述第三消息包括所述第二消息。
例如,第三消息可以与第二消息相同。
语句18.根据前述任一项语句所述的方法,其中所述第一消息包括区块链事务的至少一部分。
第一签名可以包括在区块链事务中,例如包括在区块链事务的输入中。
语句19.根据语句18所述的方法,其中将所述第一消息提供给所述验证方包括:将所述区块链事务传输至区块链网络。
语句20.根据语句18或19所述的方法,其中所述第二消息包括与区块链有关的数据。
例如,与区块链有关的数据可以包括区块链的当前区块高度。
语句21.一种验证数字签名已经由签名方生成的计算机实现的方法,其中所述方法由验证方执行并且包括:
获得第一签名,所述第一签名包括第一签名分量和第二签名分量;
从所述签名方获得候选外部数据项;
基于所述候选外部数据项的哈希生成候选临时私钥;
至少基于对应于所述候选临时私钥的公钥来生成候选第一签名分量;以及,
基于所述候选第一签名分量是否对应于所述第一签名分量,验证所述第一签名已经由所述签名方生成。
语句22.根据语句21所述的方法,其中所述候选外部数据项是第二签名。
语句23.根据语句22所述的方法,所述方法包括:
获得第二消息;
获得对应于所述签名方的主私钥的主公钥;以及,
在使用所述主公钥进行验证时,验证所述第二签名是所述第二消息的有效签名。
语句24.根据语句21至23中任一项所述的方法,所述方法包括获得对应于随机盐值的公钥,并且其中所述候选第一签名分量是基于对应于所述随机盐值的所述公钥生成的。
语句25.根据语句24所述的方法,所述方法包括:
获得第三消息;
获得第三签名;以及,
在使用对应于所述随机盐值的所述公钥进行验证时,验证所述第三签名是所述第三消息的有效签名。
语句26.根据语句21至25中任一项所述的方法,其中所述第一签名对第一消息进行签名,并且其中所述方法包括:
获得与用于生成所述第一签名的私钥对应的第一公钥;以及,
在使用所述第一公钥进行验证时,验证所述第一签名是所述第一消息的有效签名。
语句27.根据语句21至26中任一项所述的方法,其中所述第一签名、所述第二签名和所述第三签名中的一个、部分或全部是从所述签名方接收的。
语句28.根据语句21至27中任一项所述的方法,其中所述第一消息、所述第二消息和所述第三消息中的一个、部分或全部是从所述签名方接收的。
语句29.根据语句21至27中任一项所述的方法,其中所述第一消息、所述第二消息和所述第三消息中的一个、部分或全部由所述验证方生成。
语句30.根据语句21至29中任一项所述的方法,其中所述第一消息包括区块链事务的至少一部分。
语句31.根据语句30所述的方法,其中获得所述第一消息包括:从区块链获得所述区块链事务。
语句32.根据语句30或31所述的方法,其中获得所述第一签名包括:从所述区块链事务中提取所述第一签名。
语句33.根据语句23或其任何从属语句所述的方法,其中所述第二消息包括与所述区块链有关的数据,并且其中所述方法包括验证与所述区块链有关的所述数据。
语句34.根据语句30或其任何从属语句所述的方法,其中所述区块链事务的输入包括所述第一签名,并且其中所述方法包括:
验证所述区块链事务的所述输入所引用的先前区块链事务的输出包括签名验证脚本。
语句35.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及,
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据语句1至34中任一项所述的方法。
语句36.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据语句1至34中任一项所述的方法。
根据本文公开的另一方面,可以提供一种方法,所述方法包括所述签名方和所述验证方的动作。
根据本文公开的另一方面,可以提供一种系统,所述系统包括所述签名方和所述验证方的计算机设备。

Claims (36)

1.一种生成数字签名的计算机实现的方法,其中所述方法由签名方执行并且包括:
获得第一消息;
至少基于外部数据项的哈希来生成临时私钥;以及
生成第一签名,所述第一签名包括第一签名分量和第二签名分量,其中所述第一签名分量是基于对应于所述临时私钥的临时公钥生成的,并且其中所述第二签名分量是基于所述第一消息、所述临时私钥、所述第一签名分量和第一私钥生成的。
2.根据权利要求1所述的方法,所述方法包括:将所述外部数据项和所述第一签名提供给验证方,以证明所述签名方生成了所述第一签名。
3.根据权利要求2所述的方法,其中获得所述第一消息包括生成所述第一消息,并且其中所述方法包括将所述第一消息提供给所述验证方。
4.根据前述任一项权利要求所述的方法,所述方法包括:
获得第二消息;以及
至少基于所述第二消息和所述签名方的主私钥生成第二签名,并且其中所述外部数据项包括所述第二签名。
5.根据权利要求4所述的方法,所述方法包括:提供所述第二签名和所述第二消息,以证明在使用对应于所述主私钥的主公钥进行验证时,所述第二签名是所述第二消息的有效签名。
6.根据权利要求4或5所述的方法,其中所述第二消息是基于所述第一消息生成的。
7.根据权利要求4至6中任一项所述的方法,其中对应于所述主私钥的所述主公钥链接到所述签名方的身份。
8.根据权利要求4至7中任一项所述的方法,其中所述第一私钥至少是基于所述主私钥生成的。
9.根据权利要求8所述的方法,其中所述主私钥是分层确定性HD密钥结构的主私钥,所述HD密钥结构包括基于所述主私钥生成的一组子私钥,并且其中所述第一私钥是所述一组子私钥中的一个。
10.根据权利要求8所述的方法,其中所述第一私钥是基于所述主私钥以及所述签名方和第二方都知道的共同秘密生成的。
11.根据权利要求10所述的方法,其中所述共同秘密是基于所述签名方的所述主私钥以及对应于所述第二方的主私钥的主公钥生成的。
12.根据权利要求11所述的方法,其中所述第二方的所述主公钥链接到所述第二方的身份。
13.根据前述任一项权利要求所述的方法,其中所述外部数据项的所述哈希是所述外部数据项的双哈希。
14.根据前述任一项权利要求所述的方法,其中所述第二签名分量是基于所述第一消息的哈希或双哈希生成的。
15.根据前述任一项权利要求所述的方法,其中所述第一临时私钥是基于随机盐值生成的。
16.根据权利要求15所述的方法,其中所述随机盐值是私钥,并且其中所述方法包括:
获得第三消息;
至少基于所述随机盐值和所述第三消息生成第三签名;以及
将所述第三签名、所述第三消息、和对应于所述随机盐值的公钥提供给所述验证方,以证明在使用对应于所述随机盐值的所述公钥进行验证时,所述第三签名是所述第三消息的有效签名。
17.根据权利要求16所述的方法,其中所述第三消息包括所述第二消息。
18.根据前述任一项权利要求所述的方法,其中所述第一消息包括区块链事务的至少一部分。
19.根据权利要求18所述的方法,其中将所述第一消息提供给所述验证方包括:将所述区块链事务传输至区块链网络。
20.根据权利要求18或19所述的方法,其中所述第二消息包括与区块链有关的数据。
21.一种验证数字签名已经由签名方生成的计算机实现的方法,其中所述方法由验证方执行并且包括:
获得第一签名,所述第一签名包括第一签名分量和第二签名分量;
从所述签名方获得候选外部数据项;
基于所述候选外部数据项的哈希生成候选临时私钥;
至少基于对应于所述候选临时私钥的公钥来生成候选第一签名分量;以及
基于所述候选第一签名分量是否对应于所述第一签名分量,验证所述第一签名已经由所述签名方生成。
22.根据权利要求21所述的方法,其中所述候选外部数据项是第二签名。
23.根据权利要求22所述的方法,所述方法包括:
获得第二消息;
获得对应于所述签名方的主私钥的主公钥;以及
在使用所述主公钥进行验证时,验证所述第二签名是所述第二消息的有效签名。
24.根据权利要求21至23中任一项所述的方法,所述方法包括获得对应于随机盐值的公钥,并且其中所述候选第一签名分量是基于对应于所述随机盐值的所述公钥生成的。
25.根据权利要求24所述的方法,所述方法包括:
获得第三消息;
获得第三签名;以及
在使用对应于所述随机盐值的所述公钥进行验证时,验证所述第三签名是所述第三消息的有效签名。
26.根据权利要求21至25中任一项所述的方法,其中所述第一签名对第一消息进行签名,并且其中所述方法包括:
获得与用于生成所述第一签名的私钥对应的第一公钥;以及
在使用所述第一公钥进行验证时,验证所述第一签名是所述第一消息的有效签名。
27.根据权利要求21至26中任一项所述的方法,其中所述第一签名、所述第二签名和所述第三签名中的一个、部分或全部是从所述签名方接收的。
28.根据权利要求21至27中任一项所述的方法,其中所述第一消息、所述第二消息和所述第三消息中的一个、部分或全部是从所述签名方接收的。
29.根据权利要求21至27中任一项所述的方法,其中所述第一消息、所述第二消息和所述第三消息中的一个、部分或全部由所述验证方生成。
30.根据权利要求21至29中任一项所述的方法,其中所述第一消息包括区块链事务的至少一部分。
31.根据权利要求30所述的方法,其中获得所述第一消息包括:从区块链获得所述区块链事务。
32.根据权利要求30或31所述的方法,其中获得所述第一签名包括:从所述区块链事务中提取所述第一签名。
33.根据权利要求23或其任何从属权利要求所述的方法,其中所述第二消息包括与所述区块链有关的数据,并且其中所述方法包括验证与所述区块链有关的所述数据。
34.根据权利要求30或其任何从属权利要求所述的方法,其中所述区块链事务的输入包括所述第一签名,并且其中所述方法包括:
验证所述区块链事务的所述输入所引用的先前区块链事务的输出包括签名验证脚本。
35.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据权利要求1至34中任一项所述的方法。
36.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据权利要求1至34中任一项所述的方法。
CN202180050972.XA 2020-08-18 2021-07-19 数字签名 Pending CN115885497A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2012873.2A GB2598111A (en) 2020-08-18 2020-08-18 Digital signatures
GB2012873.2 2020-08-18
PCT/EP2021/070105 WO2022037868A1 (en) 2020-08-18 2021-07-19 Digital signatures

Publications (1)

Publication Number Publication Date
CN115885497A true CN115885497A (zh) 2023-03-31

Family

ID=72473581

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180050972.XA Pending CN115885497A (zh) 2020-08-18 2021-07-19 数字签名

Country Status (6)

Country Link
US (1) US20230308292A1 (zh)
EP (1) EP4165822A1 (zh)
JP (1) JP2023539431A (zh)
CN (1) CN115885497A (zh)
GB (1) GB2598111A (zh)
WO (1) WO2022037868A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11902451B2 (en) * 2021-07-01 2024-02-13 Fujitsu Limited Cross-blockchain identity and key management
GB2618093A (en) * 2022-04-26 2023-11-01 Nchain Licensing Ag Non-native blockchain signatures

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8918648B2 (en) * 2010-02-25 2014-12-23 Certicom Corp. Digital signature and key agreement schemes
US8775813B2 (en) * 2010-02-26 2014-07-08 Certicom Corp. ElGamal signature schemes
EP3364598B1 (en) 2016-02-23 2020-10-14 Nchain Holdings Limited Determining a common secret for the secure exchange of information and hierarchical, deterministic cryptographic keys
GB2562622A (en) * 2016-02-23 2018-11-21 Nchain Holdings Ltd Cryptographic method and system for secure extraction of data from a blockchain

Also Published As

Publication number Publication date
EP4165822A1 (en) 2023-04-19
GB202012873D0 (en) 2020-09-30
JP2023539431A (ja) 2023-09-14
US20230308292A1 (en) 2023-09-28
GB2598111A (en) 2022-02-23
WO2022037868A1 (en) 2022-02-24

Similar Documents

Publication Publication Date Title
EP3966998B1 (en) Hash function attacks
EP3966991B1 (en) Knowledge proof
CN115176441A (zh) 基于身份的公钥生成协议
US20230308287A1 (en) Threshold signatures
EP3977673B1 (en) Blockchain transaction comprising runnable code for hash-based verification
US20220239501A1 (en) Knowledge proof
CN115211073A (zh) 公钥生成方法
CN113875190A (zh) 包括基于哈希的验证的可运行代码的区块链交易
JP2023508088A (ja) ブロックチェーンオーバーレイネットワークへの鍵のマッピング
TW202231018A (zh) 識別阻斷服務攻擊之技術
CN115885497A (zh) 数字签名
US20230134619A1 (en) Method of generating a hash-based message authentication code
EP4333368A2 (en) Knowledge proof
CN117280653A (zh) 多方区块链地址方案
CN117941317A (zh) 生成区块链事务
CN117121434A (zh) 区块链实现的散列函数
TW202345545A (zh) 用於證明與驗證子金鑰真實性之技術
WO2024110170A1 (en) Communication protocol
CN118202622A (zh) 用于分布式区块链功能的方法和系统
CN116547942A (zh) 密钥导出方法
CN116569515A (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