CN117941317A - 生成区块链事务 - Google Patents
生成区块链事务 Download PDFInfo
- Publication number
- CN117941317A CN117941317A CN202280061792.6A CN202280061792A CN117941317A CN 117941317 A CN117941317 A CN 117941317A CN 202280061792 A CN202280061792 A CN 202280061792A CN 117941317 A CN117941317 A CN 117941317A
- Authority
- CN
- China
- Prior art keywords
- script
- transaction
- merck
- blockchain
- signature
- 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
- 238000013515 script Methods 0.000 claims abstract description 296
- 238000000034 method Methods 0.000 claims abstract description 88
- 238000012545 processing Methods 0.000 claims description 20
- 238000012795 verification Methods 0.000 claims description 19
- 238000004422 calculation algorithm Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 2
- 230000001419 dependent effect Effects 0.000 claims 2
- 230000006870 function Effects 0.000 description 41
- 238000007792 addition Methods 0.000 description 27
- 238000009795 derivation Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 12
- 238000004364 calculation method Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000001902 propagating effect Effects 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 239000000654 additive Substances 0.000 description 3
- 230000000996 additive effect Effects 0.000 description 3
- 238000013475 authorization Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 230000000644 propagated effect Effects 0.000 description 3
- 238000010200 validation analysis Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000005065 mining Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
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/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
-
- 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/3218—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 using proof of knowledge, e.g. Fiat-Shamir, GQ, Schnorr, ornon-interactive zero-knowledge proofs
-
- 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/3236—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 using cryptographic hash functions
- H04L9/3239—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 using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
-
- 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/3252—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 DSA or related signature schemes, e.g. elliptic based signatures, ElGamal or Schnorr schemes
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种生成区块链事务的计算机实现的方法,其中多个第二方中的每一方具有相应秘密数k,从所述相应秘密数k能导出相应r部分,其中默克尔树已被定义,所述默克尔树的至少一个叶节点基于所述相应r部分中的至少一个相应r部分,其中所述方法由第一方执行并且包括:生成第一区块链事务,其中所述第一区块链事务包括第一锁定脚本,所述第一锁定脚本包括目标默克尔树部分,所述目标默克尔树部分对应于所述默克尔树,在与第二区块链事务的第一解锁脚本一起执行时,所述第一锁定脚本被配置为:从所述第一解锁脚本中提取r部分,生成从所提取的r部分导出的哈希值,基于所生成的哈希和所述第一解锁脚本的默克尔证明部分来计算候选默克尔树部分,验证所计算的候选默克尔树部分与所述目标默克尔树部分匹配,基于所述第一解锁脚本的公钥来验证所述第一解锁脚本的签名部分;以及,将所述第一区块链事务提供给区块链网络的一个或多个节点。
Description
技术领域
本发明涉及一种生成可由任何个体或阈值数量的个体解锁的区块链事务的输出的方法,以及一种生成用于解锁此类输出的区块链事务的方法。
背景技术
区块链是指一种分布式数据结构,其中在分布式对等(P2P)网络(以下称为“区块链网络”)中的多个节点中的每个节点处维护区块链的副本,并且广泛公开该副本。区块链包括一系列数据区块,其中每个区块包括一个或多个事务(transaction)。除所谓的“coinbase事务”外,每个事务都指向序列中的先前事务,该序列可以跨越一个或多个区块,回到一个或多个coinbase事务。coinbase事务将在下文进一步讨论。提交给区块链网络的事务包括在新区块中。新区块的创建过程通常称为“挖掘”,该过程涉及多个节点中的每个节点争相执行“工作证明”,即,基于等待被包括在区块链的新区块中的一组定义的有序且核实有效的未决事务的表示解决加密难题。应当注意的是,区块链可以在一些节点处被修剪(prune),并且区块的发布可以通过仅发布区块头来实现。
区块链中的事务可用于以下目的中的一个或多个:传送数字资产(即,一定数量的数字通证);对虚拟化分类账或注册表中的一组条目进行排序;接收和处理时间戳条目;和/或对索引指针按时间排序。也可利用区块链实现区块链上的层级附加功能。例如,区块链协议可允许在事务中存储附加的用户数据或数据索引。能够存储在单个事务中的最大数据容量没有预先指定的限制,因此可以并入越来越复杂的数据。例如,这可用于在区块链中存储电子文档、音频或视频数据。
区块链网络的节点(通常称为“矿工”)执行分布式事务注册和验证过程,这将后续更详细地描述。总之,在该过程中,节点核实事务并将这些事务插入到区块模板中,这些事务尝试为该区块模板标识有效的工作证明解。一旦找到有效的解,新区块便会被传播到网络的其它节点,从而使得每个节点能够在区块链上记录新区块。为了将事务记录在区块链中,用户(例如,区块链客户端应用程序)将该事务发送到网络中的节点中的一个节点进行传播。接收该事务的节点可以争相寻找将核实有效的事务并入新区块的工作证明解。每个节点被配置为执行相同的节点协议,该协议将包括用于确认事务有效的一个或多个条件。无效事务将不会传播或并入到区块中。假定事务已经核实有效,从而在区块链上被接受,则该事务(包括任何用户数据)将因此在区块链网络中的每个节点上作为不可改变的公共记录进行注册和索引。
成功解决工作证明难题可创建最新区块的节点通常被奖励一个称为“coinbase事务”的新事务,该事务分发数字资产数额,即通证数量。无效事务的检测和拒绝是通过竞争节点的行动来执行的,这些竞争节点充当网络的代理并且通过激励报告和阻止不正当行为。信息的广泛发布使得用户可以连续地审计节点的性能。仅发布区块头使得参与者可以确保区块链具有持续完整性。
在“基于输出的”模型(有时称为基于UTXO的模型)中,给定事务的数据结构包括一个或多个输入和一个或多个输出。任何可花费输出包括指定数字资产数额的元素,该元素可从进行中的事务序列导出。可花费输出有时称为UTXO(“未花费事务输出”)。输出还可以包括锁定脚本,该锁定脚本指定输出的未来赎回条件。锁定脚本是限定核实和传送数字通证或资产所必需的条件的谓词。事务(除coinbase事务之外)的每个输入包括指向先前事务中的此类输出的指针(即引用),并且还可以包括解锁脚本,用于解锁指向输出的锁定脚本。因此,考虑一对事务,将其称为第一事务和第二事务(或“目标”事务)。第一事务包括指定数字资产数额的至少一个输出,并且包括定义解锁该输出的一个或多个条件的锁定脚本。第二目标事务包括至少一个输入和解锁脚本,该至少一个输入包括指向第一事务的输出的指针;该解锁脚本用于解锁第一事务的输出。
在此类模型中,当第二目标事务被发送到区块链网络以在区块链中传播和记录时,在每个节点处应用的有效性条件之一将是解锁脚本满足在第一事务的锁定脚本中定义的一个或多个条件中的所有条件。另一条件将是第一事务的输出尚未被另一早期有效事务赎回。根据这些条件中的任何一个条件发现目标事务无效的任何节点都不会传播该事务(作为有效事务,但可能注册无效事务),也不将该事务包括在要记录在区块链中的新区块中。
另一种事务模型是基于账户的模型。在这种情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由节点单独存储到区块链中,并不断更新。
发明内容
在区块链事务中,通常,通过在锁定脚本中包括接收者的公钥,将UTXO锁定到一个或多个预定义用户。然而,可能存在以下情况:在生成所述锁定脚本时,所述UTXO的所述接收者是未知的。
根据本文公开的一个方面,提供了一种生成区块链事务的计算机实现的方法,其中多个第二方中的每一方具有相应秘密数k,从所述相应秘密数k可导出相应r部分,其中默克尔树已被定义,所述默克尔树的至少一个叶节点基于所述相应r部分中的至少一个相应r部分,其中所述方法由第一方执行并且包括:生成第一区块链事务,其中所述第一区块链事务包括第一锁定脚本,所述第一锁定脚本包括目标默克尔树部分,所述目标默克尔树部分对应于所述默克尔树,在与第二区块链事务的第一解锁脚本一起执行时,所述第一锁定脚本被配置为:从所述第一解锁脚本中提取r部分,生成从所提取的r部分导出的哈希值,基于所生成的哈希和所述第一解锁脚本的默克尔证明部分来计算候选默克尔树部分,验证所计算的候选默克尔树部分与所述目标默克尔树部分匹配,基于所述第一解锁脚本的公钥来验证所述第一解锁脚本的签名部分;以及,将所述第一区块链事务提供给区块链网络的一个或多个节点。
所述r部分对应于“R难题(R-Puzzle)”,所述R难题是一种形式的知识证明。这使得用户能够使用任何有效的公钥-私钥对来解锁所述UTXO,这些公钥-私钥对与所述锁定脚本无关,前提是所述用户知道用于导出r的所述秘密数k。因此,可以在知道所述R难题的情况下锁定所述UTXO,并且随后可以向所述接收者提供所述秘密值k,而无需更改其中锁定所述UTXO的先前事务。也就是说,可以在不知道所述接收者的情况下生成锁定所述UTXO的事务。
默克尔树是另一种形式的知识证明。解锁者必须同时知道默克尔证明和从其导出所述叶节点的数据,所述默克尔证明提供计算默克尔树的默克尔根所需的信息。因此,通过将R难题与所述默克尔树相结合,所述解锁者必须知道与该特定叶节点对应的所述默克尔证明以及从其导出所述叶节点的所述秘密值k。
因此,本公开的方法提高了所述区块链事务的灵活性和外部各方的机密性。通过使得一组用户中的任何一个用户或任何一组用户能够解锁所述事务来提高灵活性,同时通过要求所述用户知道一系列数据项(即,所述默克尔证明部分、所述签名部分和所述公钥)来提高机密性。
在脚本中使用所述默克尔树还为已知阈值解锁方案提供一种更高效的可扩展方法。这是因为所述锁定脚本不包括可用于解锁所述UTXO的所有密钥,或者在M/N(M-of-N)方案的情况下不包括所有可能的密钥组。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3A示出了客户端应用程序的示意性框图;
图3B示出了可由图3A的客户端应用程序表示的示例性用户界面的示意性模型;
图4示出了用于处理事务的一些节点软件的示意性框图;
图5示出了一种说明性的默克尔树;
图6A至图6D示意性地示出了椭圆曲线数字签名算法(ECDSA)背后的一些原理;
图7示意性地示出了针对1/N签名解锁要求使用R难题和默克尔树的方法;
图8示意性地示出了针对M/N签名解锁要求使用R难题和默克尔树的方法;
图9示意性地示出了针对M/N签名解锁要求使用R难题、默克尔树和脚本内椭圆曲线点加法的方法;
图10示意性地示出了针对M/N签名解锁要求使用R难题、默克尔树和脚本内椭圆曲线点加法的替代方法;以及
图11A至图11C示意性地示出了在给定锁定脚本的不同默克尔部分的情况下给定默克尔树中的默克尔路径。
具体实施方式
示例性系统概述
图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,其中该上下文中的事务是指一种数据结构。数据结构的性质将取决于用作事务模型或计划的一部分的事务协议类型。给定的区块链全程使用一个特定的事务协议。在一种常见的事务协议中,每个事务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传播。根据本文公开的实施例,每个客户端105的事务引擎401包括函数403,该函数导出以下各项中的一项或多项:具有基于一个或多个r部分的叶节点的默克尔树;与该默克尔树对应的默克尔根;与该默克尔树对应的默克尔证明;从秘密值k导出的r部分;基于所导出的r部分中的两个或更多个r部分的组合r部分;以及两个椭圆曲线点之间的梯度λ。
该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元素,或者说出所需选项的名称(注:本文使用的“手动”一词仅用于与自动进行对比,而不一定限于用手执行操作)。这些选项使得用户(爱丽丝)能够选择以下各项中的一项或多项:从其导出r部分的秘密值k;以及默克尔树或其标识符。
替代地或附加地,UI元素可以包括一个或多个数据输入字段502,通过该一个或多个数据输入字段,用户可以输入以下各项中的一项或多项:从其导出r部分的秘密值k;以及默克尔树或其标识符。这些数据输入字段通过用户输出方式呈现,例如屏幕上,并且数据可通过用户输入方式输入到字段中,例如键盘或触摸屏。或者,数据可以例如基于语音识别口头地接收。
替代地或附加地,UI元素可包括向用户输出信息的一个或更多个信息元素503。例如,这/这些可以在屏幕上呈现或可听见。
应当理解的是,呈现各种UI元素、选择选项和输入数据的特定方式并不重要。这些UI元素的功能稍后将进行更详细地讨论。还应当理解的是,图3中示出的UI 500只是一个图示模型,在实践中,它可包括一个或更多个进一步的UI元素,为了简洁起见,未对其进行说明。
节点软件
图4示出了在基于UTXO或基于输出的模型的示例中,在网络106的每个区块链节点104上运行的节点软件450的示例。应当注意的是,另一实体可以运行节点软件450,而不被分类为网络106上的节点104,即,不执行节点104所需的动作。节点软件450可以包含但不限于协议引擎451、脚本引擎452、堆栈453、应用级决策引擎454以及一个或多个区块链相关功能模块455的集合。每个节点104可以运行节点软件,该节点软件包含但不限于以下所有三个:共识模块455C(例如,工作证明)、传播模块455P和存储模块455S(例如,数据库)。协议引擎401通常被配置为识别事务152的不同字段,并根据节点协议处理此类字段。当接收到具有指向另一先前事务152i(Txm-1)的输出(例如,UTXO)的输入的事务152j(Txj)时,协议引擎451标识Txj中的解锁脚本并将其传递给脚本引擎452。协议引擎451还基于Txj的输入中的指针来标识和检索Txi。Txi可以在区块链150上发布,在这种情况下,协议引擎可以从存储在节点104处的区块链150的区块151的副本中检索Txi。或者,Txi还可以在区块链150上发布。在这种情况下,协议引擎451可以从节点104维护的未发布有序事务集154中检索Txi。无论采用哪种方式,脚本引擎451都会标识Txi的引用输出中的锁定脚本,并将其传递给脚本引擎452。
因此,脚本引擎452具有Txi的锁定脚本和来自Txj的相应输入的解锁脚本。例如,在图2中示出了事务标记的Tx0和Tx1,但是同样的事务也可以应用于任何事务对。如前所述,脚本引擎452一起运行两个脚本,这将包括根据所使用的基于堆栈的脚本语言(例如脚本)将数据放置到堆栈453上和从堆栈453检索数据。
通过同时运行脚本,脚本引擎452确定解锁脚本是否满足锁定脚本中定义的一个或多个标准,即解锁脚本是否对包括锁定脚本的输出进行解锁?脚本引擎452将该确定的结果返回给协议引擎451。如果脚本引擎452确定解锁脚本确实满足在相应的锁定脚本中指定的一个或多个标准,则返回结果“TRUE”。否则,返回结果“FALSE”。
在基于输出的模型中,来自脚本引擎452的结果“TRUE”是事务有效性的条件之一。通常,还必须满足由协议引擎451评估的一个或多个进一步协议级条件;例如,Txj的输入中所指定的数字资产的总数额不超过其输出中指向的总数额,并且Txi的指向输出尚未被另一有效事务花费。协议引擎451评估来自脚本引擎452的结果以及一个或多个协议级条件,并且只有当它们都为TRUE时,协议引擎才核实事务Txj有效。协议引擎451将事务是否有效的指示输出到应用级决策引擎454。只有在Txj确实有效的条件下,决策引擎454才可以选择同时控制共识模块455C和传播模块455P,以执行其就Txj·的相应区块链相关功能。这包括共识模块455C,向节点的相应有序事务集154添加Txj,用于并入区块151中;以及传播模块455P,将Txj转发到网络106中的另一个区块链节点104。可选地,在实施例中,应用级决策引擎454可以在触发这些函数中的一个或两个函数之前应用一个或多个附加条件。例如,决策引擎可以只选择在事务有效且预留足够事务费用的条件下发布事务。
此外,还应当注意的是,在本文中,术语“TRUE”和“FALSE”不一定限于返回仅以单个二进制数(位)形式表示的结果,尽管这确实是一种可能的实现方式。更通俗地说,“TRUE”可以指指示成功或肯定结果的任何状态,而“FALSE”可以指指示不成功或不肯定结果的任何状态。例如,在基于账户的模型中,可以对签名的隐式协议级核实和智能合约的附加肯定输出的组合来指示结果为“TRUE”(如果两个单独的结果均为TRUE,则认为总体结果为TRUE)。
R难题
椭圆曲线数字签名算法(ECDSA)
在许多不同区块链架构中,公钥密码学用作保护事务(transaction)的基础。公钥密码学的用途包括公钥加密和数字签名方案。公钥密码学建立在以下原理之上,即某些函数易于计算,但在不具备特殊知识的情况下难以求逆。此类函数称为陷门函数,而求逆此类函数所需的特殊知识称为该函数的陷门。易于计算意味着在合理的时间范围内计算给定输入(或一组输入)的陷门函数在计算上是可行的,而难以求逆意味着在不具备陷门知识的情况下从结果推断该输入(或那些输入)在计算上是不可行的。
在公钥密码学的上下文中,密钥对是指公钥(任何人都可以自由获得)和相应的私钥(假定为秘密,因为这仅对特定实体或组是已知的)。公钥可定义陷门函数,而对应的私钥是求逆该函数所需的陷门。
在公钥加密上下文中,加密基于陷门函数(即,沿“正向方向”执行加密),而解密基于陷门函数求逆(即,沿“反向方向”执行解密),这仅在陷门已知时可行。
在数字签名上下文中,使用公钥沿正向方向执行签名验证,而沿反向方向执行签名生成,并且只能使用私钥可行地执行签名生成。
在区块链上下文中,基于公钥密码学的数字签名用作对事务进行加密签名和验证事务签名的基础。
ECC是一种公钥密码学,利用椭圆曲线的数学特性,与DSA(数字安全算法)等其他加密方案相比具有各种优点。
椭圆曲线数字签名算法(ECDSA)是指一类数字签名方案,其使用ECC作为数字签名生成和验证基础。ECDSA的某些原理概述如下。
在数学术语中,ECC利用素数阶有限域上椭圆曲线的代数结构。有限域是指一个有限的元素集合和一组相关联的乘法、加法、减法和除法运算,当应用于该集合中的元素时,这些运算满足一般算术规则(关联性、交换性等)。也就是说,在“一般”意义上不需要加法、乘法等运算,但它们的行为本质上是相同的。
椭圆曲线运算:
在ECC的上下文中,加法、减法和乘法运算分别是椭圆曲线点加法(在本文中表示为“+”)、椭圆曲线点减法(在本文中表示为“-”)和椭圆曲线标量乘法(在本文中表示为“·”)。加法和减法运算分别应用于椭圆曲线上的两个点,并返回椭圆曲线上的第三个点;然而,乘法运算应用于椭圆曲线上的标量和单个点,并返回椭圆曲线上的第二个点。相反,除法是按标量定义的。
为了便于说明,图6A示出了中的椭圆曲线ε,/>是所有实值二维坐标的集合,表示/>的元素。椭圆曲线ε是满足以下等式的点的集合:
ε:y2=x3+ax+b
加法:ε的数学特性在于,在给定椭圆曲线ε上的任意两个点A,B的情况下,A和B相交的线将仅与ε和一个附加点重新相交,表示为C;A和B的椭圆曲线加法,即A+B,定义为C的“反射”:取与C相交的水平线,C的反射是与该线相交的椭圆曲线上的另一点。该定义适用于A=B的情况,修改后的C现在是ε的切线在A处与ε重新相交的点。通过将表示为∞的无穷远处的点定义为椭圆曲线上的点,并且任何垂直线在该点处与椭圆曲线相交(例如,标记为D和E的点垂直水平对齐,因此D+E=∞),使得该定义适用于与两点相交的线垂直的情况。
减法/加法逆运算:上述反射定义适用于任何点,并提供椭圆曲线点减法的定义:A-B是A与B的反射之和。B的反射更正式地称为B的“加法逆运算”,反过来表示为-B。使用该表示法,椭圆曲线减法可以用数学表示法定义为:
A-B=A+(-B)。
因此,在图6B中,C=-(A+B)和(A+B)=-C。另请注意,在这个定义下,D=-E,反映了代数结构的一般规则,即椭圆曲线上的任意点与其加法逆运算的椭圆点加法是无穷远处的点,即
无穷远处的点∞更正式地称为“单位元素”(请注意与一般算术的并行性和偏离:在一般算术中,任何数a与其加法逆运算-a的和为0,其中0是一般算术的单位元素)。单位元素∞的另一特性反映了一般算术,即对于包含∞本身的ε上的任意点A的A+∞=A(类似于任何实数a的语句a+0=0)
乘法:根据椭圆曲线点加法的定义,椭圆曲线标量乘法的定义如下:椭圆曲线点A与整数v的乘法定义为:
换句话说,作为v,椭圆曲线点A与它本身相加。
注意:椭圆曲线标量乘法在本领域中也称为椭圆曲线点乘法。这两个术语在本公开中具有相同的含义。
除法/乘法逆运算:关于标量定义除法运算:给定标量v,在标量v-1处定义其“乘法逆运算”,使得:
vv-1=1。
图6A提供了上述运算的直观可视化,其中在包括所有实数的无限域上定义ε。
图6B更精确地示出了上述运算在ECC上下文中的实际应用方式,因为它示出了由等式定义的椭圆曲线εn:
εn:y2=x3+ax+bmod p
其中p是素数(素数模),mod表示模运算。满足上述等式的点的集合是有限的,在图6B中,除一个点之外的所有点表示为白色圆圈;其余点是单位元素∞。
素数p构成椭圆曲线定义的一部分,可以自由选择。为了使椭圆曲线具有良好的加密特性,p应该足够大。例如,在某些区块链模型中指定256位p。
相比之下,下标“n”在本文中是指在上面定义的点加法下由椭圆曲线点形成的组的阶数(这可以简称为椭圆曲线εn的顺序),参见下文。
换句话说,n是组的阶数,p是域的阶数。总共将有n个椭圆曲线点。椭圆曲线上的每个点由两个数字/坐标(x,y)表示,其中x和y都在范围–(p-1),…0,…,(p-1)内。
可以看出,图6B中的εn表现出与图6A中的ε类似的水平对称,这是素数文件上椭圆曲线的一般特性,因此εn上点的加法逆运算的定义仍然适用。有些点没有水平对齐的对应点(例如,(0,0)),此类点是它们自己的加法逆运算。
与εn上两点A和B相交的“线”lA,B成为有限的点集合,由较小的黑色圆圈表示,满足类似的几何要求,椭圆曲线标量乘法的定义仍然适用。与图6A类似,图6B示出了点A+B=-C,该点是点C=-(A+B)的加法逆运算,线lA,B在该点处与εn重新相交。
εn上任意两个点的椭圆曲线加法A+B=-C可以由以下等式进行代数定义:
A=(xA,yA),
B=(xB,yB),
C=(xC,yC)=-(A+B),
xC=(λ2-xA-xB)mod p,
yC=(λ(xC-xA)+yA)mod p,
=(λ(xC-xB)+yB)mod p,
其中
λ=(yA-yB)(xA-xB)-1mod p如果A≠B,
和
如果A=B。
出于上述目的,将整数v的乘法逆运算v-1的定义修改为:
v-1v≡1(mod p)。
换句话说,整数v的乘法逆运算是vmod p的模逆。
B=-A的情况是特殊的,通过引入单位元素∞来解决,正如前面提到的,在这种情况下,A+B=A+(-A)=∞。B=∞的情况也是特殊的,如上文所述破解,即A+∞=A。
椭圆曲线标量乘法的定义采用该椭圆曲线加法的定义,否则保持不变。
在其他上下文中,标量v的乘法逆运算v-1的定义为:
v-1v≡1(mod n)
在上下文中,可以清楚地看到是否定义了关于mod n或mod p的乘法逆运算。
在实践中,要确定一个数字应视为mod n还是mod p,可以应用以下检查:
1.该数字是否表示EC点的坐标?
a.如果是,则为mod p
2.该数字是否用于乘以EC点?
a.如果是,则为mod n
应当注意的是,在某些情况下,两项检查都会给出肯定答案,在这种情况下,该数字必须是mod p和mod n。
椭圆曲线加密算法(ECC)
椭圆曲线算术提供了隐藏秘密值的独特功能,并构成了许多现代加密系统的基础。特别地,有限域上椭圆曲线点的标量乘法求逆是一个棘手的问题(在计算上是不可行的)。
私钥V采用整数形式,对应的公钥P是椭圆曲线εn上从“生成点”G推导出的点P,该点也是椭圆曲线εn上的一个点,如下所示:
其中“·”表示由a、b和n(椭圆曲线参数)定义的椭圆曲线εn上的椭圆曲线标量乘法。
对于足够大的V,实际执行V椭圆曲线加法推导P是困难的,即在计算上是不可行的。然而,如果V已知,则P可以通过利用椭圆曲线运算的代数特性来更有效地计算。可用于计算P的高效算法的一个示例是“双加”算法,重要的是,这只有在V已知的情况下才能实现。
相反,如果V未知,则即使G和P已知,也没有在计算上可行的方法来推导出V(即求逆标量乘法)(这就是所谓的“离散对数问题”)。攻击者可以尝试通过从G开始并重复执行椭圆曲线点加法对P进行“蛮力”计算直到达到P;此时,他将知道V是他必须执行的椭圆曲线点加法的次数;但事实证明,这在计算上是不可行的。因此,V在上述意义上满足了陷门的要求。
在ECC中,公钥P、生成者密钥G和椭圆曲线εn是公开的,并且假定是已知的,而私钥V是秘密的。
椭圆曲线数字签名验证算法(ECDSA)
在区块链系统中,用户或其他实体通常持有用于证明其身份的私钥V,相应的公钥P将通过以下等式计算:
P=V·G
私钥V可用于使用ECDSA对数据m(“消息”)进行签名。
例如,可以在以下内容中找到ECDSA的更多信息,其全部内容以引入方式并入本文:“RFC 6979-数字签名算法(DSA)和椭圆曲线数字签名算法(ECDSA)的确定性使用”,Tools.ietf.org,2019年。
图6C示出了签名生成函数(签名生成者_600,其生成公钥-私钥对(V,P)的ECDSA签名(r,s))的示意性功能框图。ECDSA签名是一对值,在本文中分别称为r部分(r)和s部分(s)。
签名生成基于用于推导出公钥P的相同椭圆曲线εn和生成点G,因此椭圆曲线参数a,b和n以及生成点G被示为签名生成者600的输入。
签名生成者600的临时密钥生成者602生成“临时”密钥k∈[1,n-1],即范围介于1到n-1(含)。
r部分生成者604根据k计算对应的临时公钥,如下所示:
R=k·G
然后取计算点的x坐标([ ]x表示取椭圆曲线点的x坐标的过程):
r=[R]xmod n
其是签名的r部分。
s部分生成者606使用k mod n的模逆k-1(即,k-1k≡1(mod n)如上所述)和消息m的哈希值(表示为H(m),必要时截断)计算签名的s部分(s),如下所示:
s=k-1(H(m)+rV)mod n
在本示例中,消息m包括要包括在事务608中的数据(本示例中的一个或多个事务输出)。这可以称为对消息m进行签名的过程,并且该消息m可以称为事务的已签名部分。
消息m和签名(r,s)反过来构成事务608的一部分。在本示例中,签名(r,s)作为解锁脚本的一部分包括在事务608的输入中。
图6D示出了用于验证事务608的签名验证函数(签名验证者)620的示意性功能框图。由签名验证者620执行的计算基于相同的椭圆曲线εn和生成点G,如上所述,它们是公开的。
虽然签名需要私钥V作为输入,即需要知道私钥才能生成有效的签名,但核实签名(r,s)只需要签名对(r,s)、消息m和公钥P。为了验证签名,签名验证者620对事务m的已签名部分进行哈希处理(应用与用于生成签名(r,s)的哈希函数相同的哈希函数H)。然后使用以下计算执行验证过程:
r′=H(m)s-1·G+rs-1·P
当且仅当[R′]xmod n=r时签名才有效(即签名验证成功),否则签名无效(即签名验证失败)。在本示例中,r表示包括在事务608中的签名的r部分。
例如,在签名验证过程中使用的公钥P可以在先前事务的锁定脚本中指定。在这种情况下,使用在先前事务的锁定脚本中指定的公钥以及(后续)事务608的已签名部分m和签名(r,s)来执行签名验证,并且除非已经基于对应于在先前事务中指定的公钥P和后续事务608的已签名部分m的私钥V生成签名(r,s),否则该签名验证将失败。因此,只有持有私钥V的人才能声明先前事务的输出(通常通过将他们自己的公钥包括在后续事务608的输出中),并且在不核实签名(r,s)无效的情况下无法更改后续事务608的已签名部分m。
知识证明
“R难题(r-puzzle)”是一种事务脚本,允许花费方使用任何有效的公钥-私钥对来对输入UTXO进行签名。该密钥对可以是特定于应用程序的,也可以是出于一次性使用目的而随机生成的。
在此类知识证明中,签名者使用秘密数k来导出签名(r,s)的r部分。
使用R难题的示例性锁定脚本可以采用以下形式:
OP_OVER OP3 OP_SPLIT OP_NIP OP_1OP_SPLIT OP_SWAP OP_SPLIT OP_DROP
OP_HASH160<HASH(r)>OP_EQUALVERIFY OP_CHECKSIG
应当理解的是,将使用执行哈希处理的任何操作码来代替OP_HASH160,例如OP_RIPEMD160、OP_SHA1、OP_SHA256或OP_Hash256。
为简洁起见,锁定脚本可以表示为:
OP_OVER[Extract_r]OP_HASH160<HASH(r)>OP_EQUALVERIFY OP_CHECKSIG
其中Extract_r是从签名中提取r的操作码集合的缩写。Extract_r通过以下方式得出:
OP3 OP_SPLIT OP_NIP OP_1OP_SPLIT OP_SWAP OP_SPLIT OP_DROP
上述脚本删除签名的前3个字节,然后提取签名的r部分,然后删除签名的其余部分。
解锁脚本采用以下形式:
<Sig><PK>
其中签名采用(r,s)的形式,其中r是从秘密数k导出的,<PK>是签名者的公钥。
提供解锁脚本的签名者应该知道r,使得kG=(x,y)并且r=x mod n,即签名者知道k,其与G相乘时产生一个点,在取模数n时,该点的x坐标是r。
<Hash(r)>在锁定脚本中提供,因此是公共的。秘密是k。脚本执行如下表所示。
签名者可以使用任何私钥-公钥对来对消息进行签名。这是因为在创建锁定脚本时既不使用私钥,也不使用对应的公钥。因此,提供锁定脚本的一方不需要知道在生成事务时谁将提供解锁脚本。
支付到R难题也可以表示为P2RP HASH(r)。
签名树
默克尔树
默克尔树是分层数据结构,能够对数据集合进行安全验证。在默克尔树中,树中的每个节点均提供有索引对(i,j),并且表示为N(i,j)。索引i、j只是与树中的特定位置相关的数字标签。
默克尔树的一个重要特征是,其每个节点的构造由以下方程式控制:
其中H是加密哈希函数。
图5中示出了根据这些方程式构建的二进制默克尔树。从图中可以看出,i=j情况对应于叶节点,该叶节点仅仅是数据Di的对应第i分组的哈希。i≠j情况对应于内部节点或父节点,其通过递归地哈希和级联子节点直到找到一个父节点(默克尔根)而生成。
例如,节点N(0,3)由四个数据包D0,…,D3构造为
N(0,3)=H(N(0,1)||N(2,3))
=[H(N(0,0)||N(1,1))||H(N(2,2)||N(3,3))]
=[H(H(D0)||H(D1))||H(H(D2)||H(D3))]。
树的深度M被定义为树中节点的最低级别,节点的深度m是节点所在的层级。例如,mroot=0且mleaf=M,其中在图5中,M=3。
对于比特币和一些其他区块链中的默克尔树,哈希函数是双重SHA256,即应用标准哈希函数SHA-256两次:H(x)=SHA256(SHA256(x))。
默克尔证明
默克尔树的主要功能是验证某个数据包Di是N个数据包的列表或集合的成员。该验证机制称为默克尔证明,涉及为给定的数据包Di和默克尔根R获取一组称为默克尔路径的哈希。数据包的默克尔证明只是通过反复哈希和级联的方式重建根R所需的最小哈希列表,通常称为“认证证明”。
如果证明者知道所有分组D0,…,DN-1及其顺序,则可以简单地执行存在证明。然而,这确实需要比默克尔证明大得多的存储开销,并且需要整个数据集可供证明者使用。
使用默克尔证明和使用整个列表的比较如下表所示,其中使用了二进制默克尔树,并假设数据块的数量N正好等于2的整数幂。
下表示出了默克尔树中叶节点的数量与默克尔证明所需的哈希数量(默克尔证明)之间的关系。
在这个简化场景中(其中数据包的数量等于叶节点的数量),已发现,计算默克尔证明所需的哈希值的数量以对数方式缩放。显然,计算涉及log2N个哈希的默克尔证明比存储N个数据哈希并计算显示证明要高效和实用得多。
方法
如果给定默克尔根R,则希望证明数据块D0属于由R表示的有序列表可以按如下所述执行默克尔证明:
i.从可信源获取默克尔根R。
ii.从源获取默克尔证明Γ。在这种情况下,Γ是哈希的集合:
Γ={N(1,1),N(2,3),N(4,7)}。
iii.使用D1和Γ按如下所述计算默克尔证明:
a.对数据块进行哈希处理以得到:
B(0,0)=H(D0)。
b.与N(1,1)级联并进行哈希处理以得到:
N(0,1)=H(N(0,0)||N(1,1))。
c.与N(2,3)级联并进行哈希处理以得到:
N(0,3)=H(N(0,1)||N(2,3))。
d.与N(4,7)级联并进行哈希处理以获取根:
N(0,7)=H(N(0,3)||N(4,7)),
R′=N(0,7)。
e.将计算得出的根R′与(i)中获取的根R进行比较:
1.如果R′=R,则确认树中存在D0,从而确认数据集D。
2.如果R′≠R,则证明失败,无法确认D0是的成员。
这是一种有效机制,可为作为由默克尔树及其根表示的数据集的一部分的某些数据提供存在证明。例如,如果数据D0对应于区块链事务,并且根R作为区块头的一部分公开可用,则可以快速证明该事务包含在该区块中。
图6示出了作为我们的示例性默克尔树的一部分验证存在D0的过程。这表明对给定区块D0和根R执行默克尔证明,仅使用必要的最少哈希值就可有效地“向上”遍历默克尔树。
构建默克尔证明所需的最少信息
在构建单叶的默克尔证明时,所需的最少信息为
1.叶的索引:叶在默克尔树的叶层中的位置。
2.哈希值的有序列表:计算默克尔根所需的哈希值。
为了阐明叶的索引的工作原理,请考虑图5所示的默克尔树。鲍勃知道树的根R,但不知道树的所有叶。D0的默克尔分支由一个索引0和三个哈希值(用圆圈圈出)组成。该索引用于指示所提供的哈希值应级联到所计算的哈希值的左侧还是右侧。
假设默克尔树具有N=2M个叶。给定层级0处的索引i,使得i0=i,b0=i0mod 2,即
/>
p0是索引为i0的叶节点的成对叶节点的索引。它们被称为对,这是因为此类叶节点被级联和哈希处理,以在默克尔树中计算其父哈希节点(参见上文)。索引为p0的节点也称为“所提供的哈希”或“所需的数据”,因为其必须在计算i0叶节点的默克尔根时提供。
因此,可以在层级m定义,使得
bm=immod 2
则所提供哈希的索引为
上面的方程式假定索引从0开始。
签名树
签名树是针对阈值签名要求的高效替代方案,其中需要阈值数量的参与方对事务进行签名。通过这种方法创建默克尔树,其中该默克尔树叶中的每个叶可以表示一个花费条件。锁定脚本包括默克尔树的根和用于验证默克尔证明的操作码。解锁脚本包括默克尔证明和花费条件中的一个花费条件(即,叶节点中的一个叶节点,或者可从其导出叶节点的信息)。
参考图5的默克尔树,从可能的签名者的公钥导出叶节点Dn。
1/N多重签名
在1/N多重签名等效默克尔树中,锁定脚本生成步骤如下:
1.计算所涉及的公钥的哈希,并将这些哈希作为树的叶,即,例如用户1具有公钥P1,假设X1=Hash(P1);
2.计算默克尔根;以及
3.形成以下锁定脚本:
OP_6OP_PICK SHA256(OP_SWAP OP_IF OP_SWAP OP_ENDIF OP_CAT OP_SHA256)*3<Root>OP_EQUALVERIFY OP_CHECKSIG
其中字符串(OP_SWAP OP_IF OP_SWAP OP_ENDIF OP_CAT OP_SHA256)*3表示括号之间的操作码重复次。
解锁脚本由签名、公钥和默克尔证明组成。
默克尔证明由<sibling_node><0if sibling is to the left and 1 if it isto the right>组成。
例如,对于用户5,其中公钥P5是图5的默克尔树的数据项D4,将提供以下解锁脚本:
<Sig><PK><N(0,3)><0><N(6,7)><1><N(5,5)><1>
脚本执行如下:
默克尔证明构建
在本文中,[Merkle Root Derivation]用作以下各项的缩写:
(OP_SWAP OP_IF OP_SWAP OP_ENDIF OP_CAT OP_SHA256)重复t次,其中t是默克尔证明的长度,通过得出。
每次,该字符串都会使得级联两个同级树节点,并计算该级联的哈希,该哈希是两个同级树节点的父节点。
[Merkle Root Derivation]<Merkle Tree point A><0 if A is left,or 1otherwise><Merkle Tree point>→<Parent node>
为了说明,字符串的该部分的执行如下:
M/N多重签名
上述方法可以用于允许N个签名者中的M个签名者的阈值。在这种情况下,每个叶对应于M/N组合(即,N选M(N choose M))中的一个组合。
例如,如果有5个用户{U1,U2,U3,U4,U5},并且需要这5个用户中的4个用户进行签名,即4/5多重签名,则用通过以下方式得出的叶Xi构建树:
X1→U1,U2,U3,U4
X2→U1,U2,U3,U5
X3→U1,U2,U4,U5
X4→U1,U3,U4,U5
X5→U2,U3,U4,U5
由于存在奇数个叶,因此引入“虚拟dummy”叶X6,使得存在偶数个叶。虚拟叶可以具有值1、某个其他预定义的常量或其同级叶的值(即,设置X6:=X5)。
锁定脚本将包括树的根。解锁脚本需要提供默克尔证明,以证明指向根的链接。
脚本内椭圆曲线点加法检查
脚本内椭圆曲线点加法检查(IECPAC)提供了一种用于检查脚本中的P1+P2=P3的方法,其中Pi=(xi,yi)是椭圆曲线(EC)点。它建立以下函数:
<Point AddP1,P2,λ,P3>
该函数将P1,P2,λ,P3作为其输入,并且在λ是P1与P2之间的线的梯度同时P3=P1+P2的情况下返回TRUE。这两个验证在脚本中完成。
该函数包括以下两个步骤:
1.通过检查下述内容验证λ的值:在P1≠P2的情况下:
λ(x2-x1)mod p=y2-y1mod p
或者,在P1=P2的情况下:
2.通过检查P3=(x3,y3)的坐标满足以下方程式核实P3的值:
x3=λ2-x1-x2mod p
y3=λ(x1-x3)-y1mod p
这种方法可以扩展到任意数量的点。例如,要验证三个EC点的加法P=P1+P2+P3,执行如下运算:
<Point Add Multi P1,P2,P3,λ′,λ,P>:=<Point Add P1,P2,λ′,P′><Point AddP′,P3,λ,P>
其中P′=P1+P2,值λ′是P1与P2之间的梯度,并且值λ是P′与P3之间的梯度。
可以在解锁脚本中提供P1,P2,P3和λ,并且在脚本中执行检查。
默克尔树的R难题
根据本发明的实施例,可以有利地组合R难题和签名树的概念,以提供锁定区块链事务的输出的灵活且安全的方式。第一用户(例如,爱丽丝103a)构建第一事务,该第一事务包括锁定脚本,该锁定脚本锁定该第一事务的输出。锁定脚本被配置为要求由第二用户(例如,鲍勃103b)或一组用户生成的第二事务的解锁脚本包括默克尔证明部分、签名部分和公钥。为了成功解锁锁定脚本,签名部分必须包括r部分,该r部分在哈希处理后产生形成默克尔树的一部分的哈希值。锁定脚本使用该哈希值和默克尔证明来执行默克尔证明,并验证它与锁定脚本中包括的默克尔树的节点(或部分)匹配(测试1)。例如,该节点可以是默克尔树的默克尔根。此外,使用公钥来核实签名部分(测试2)。只有在满足每项测试时,锁定脚本和解锁脚本才能成功执行。
一组用户中的每个用户都知道秘密值k。默克尔树被定义为节点基于从用户的秘密值导出的r或R值(或“r部分”)。如上所述:
r=[R]xmod n
R=kG
其中ECDSA签名采用(r,s)的形式。
本文使用的术语“r部分”是指R和r,其中r是ECDSA签名的r部分。
应当注意的是,虽然本文参考的是ECDSA签名,但是应当理解的是,ECDSA仅仅是一种类型的数字签名方案,并且通常可以使用任何等效方案。
1/N R值
图7示出了用于实现系统的示例性默克尔树、第一事务Tx1和第二事务Tx2,在该系统中需要N个用户中的1个用户来解锁第一用户103a生成的第一事务Tx1的锁定脚本203A。
在这种情况下,每个用户Ui具有秘密ki。默克尔树的每个叶节点是从这些用户中的一个用户的秘密值ki导出的r部分的哈希。
执行以下步骤:
1.计算Ri=kiG=(xi,yi);
2.得出ri=ximod N;
3.计算叶值Xi=Hash(ri);
4.与这些用户中的其余用户或协调者共享Xi,以便可以构建默克尔树;
5.从叶Xi计算树的默克尔根Root。
由于无法从Xi导出ri,因此与其他用户共享Xi不会影响安全性。
默克尔根也称为“默克尔树部分”。类似地,默克尔树的叶节点或中间节点也可以称为默克尔树部分。
锁定脚本可以采用以下形式:
<2t+1>OP_PICK[Extract_r]SHA_256[Merkle Root Derivation]<Root>OP_EQUALVERIFY OP_CHECKSIG
其中
解锁脚本可以采用以下形式:
<Sig><PK><Merkle Proof>
也就是说,解锁脚本包括采用(ri,si)形式的签名,其中ri是锁定脚本的r部分、签名者的公钥PK和默克尔证明部分。
解锁脚本202A在第二用户103b生成的第二事务Tx2中提供。在图7的示例中,用户5生成解锁脚本202A。在该实例中,默克尔证明是<Z1><0><Y4><1><X6><1>。
当与解锁脚本202A一起执行时,解锁脚本203A使得能够执行以下步骤:
1.从解锁脚本202A中提取签名的r部分;
2.对r部分进行哈希处理;
3.使用所提取的r部分和解锁脚本202A的默克尔证明来生成候选默克尔树根(步骤A);
4.通过对候选默克尔证明等于锁定脚本203A中提供的默克尔根(目标默克尔根)进行检查来验证候选默克尔证明;以及
5.使用解锁脚本202A中提供的公钥来验证签名。
只要满足以下所有条件,解锁脚本对提供的任何<Sig><PK>有效:
1.从签名中提取的r值的哈希与树叶中的一个树叶匹配;
2.所提供的默克尔证明计算与锁定脚本中的值匹配的根;以及
3.该对<Sig><PK>通过OP_CHECKSIG核实。
M/N R值
图8示出了用于实现系统的示例性默克尔树、第一事务Tx1和第二事务Tx2,在该系统中需要N个用户中的M个用户来解锁第一用户103a生成的第一事务Tx1的锁定脚本203B。
同样,每个用户Ui具有秘密ki。然而,在这种情况下,默克尔树的每个叶节点是从一起可以解锁锁定脚本202B的一组用户的秘密值ki导出的r部分的组合的哈希。
在2/4系统中,每个叶Xi对应于6个可能的4选2组合中的一个组合。
X1→U1,U2→X1=Hash(rU1+rU2)
X2→U1,U3→X2=Hash(rU1+rU3)
X3→U1,U4→X3=Hash(rU1+rU4)
X4→U2,U3→X4=Hash(rU2+rU3)
X5→U2,U4→X5=Hash(rU2+rU4)
X6→U3,U4→X6=Hash(rU3+rU4)
对应的默克尔树具有6个叶。也就是说,不存在X7或X8。为了平衡树,将没有叶节点的Y4设置为1。Y4称为“虚拟”节点。相反,如果存在奇数个叶节点,则虚拟节点将是虚拟叶节点,也等于1。
虽然对上述rUi值进行求和,但是应当理解的是,可以以任何其他方式组合这些值,例如通过将一组用户中的每个用户的r部分级联或相乘。
锁定脚本可以包括2个r提取器、单个默克尔证明和2个OP_CHECKSIG:
OP_7OP_PICK[Extract_r]OP_10 OP_PICK[Extract_r]OP_ADD OP_SHA256[MerkleRoot Derivation]<Root>OP_EQUALVERIFY OP_CHECKSIG OP_CHECKSIG
解锁脚本包括两个<Sig><PK>和一个默克尔证明:
<Sig1><PK1><Sig2><PK2><Merkle Proof>
也就是说,解锁脚本202B包括用户中的每个用户的签名-密钥对,每个签名包括r部分和默克尔证明部分。
针对X6的脚本执行如下,其中U3使用k3来计算r3并提供<SigU3><PKU3>,并且U4类似地使用k4并提供<SigU4><PKU4>:
参考图8,两个用户U1和U3生成包括解锁脚本202B的第二事务。该组合rU1+rU3对应于叶节点X2,使得所提供的默克尔证明是<Z2><1><Y2><1><X1><0>。
当锁定脚本203B与解锁脚本202B一起执行时,执行以下步骤:
1.从解锁脚本202B中提取签名中的每个签名的r部分;
2.对两个r部分进行求和,并对该求和进行哈希处理;
3.使用所提取的r部分和解锁脚本202B的默克尔证明来生成候选默克尔树根(步骤A);
4.通过检查候选默克尔证明是否等于锁定脚本203B中提供的目标默克尔根来验证候选默克尔证明;以及
5.使用解锁脚本202B中提供的对应公钥来验证签名中的每个签名。
只要满足以下所有条件,解锁脚本对提供的任何<Sig><PK>有效:
1.从签名中提取的r值的组合的哈希与树叶中的一个树叶匹配;
2.所提供的默克尔证明计算与锁定脚本中的值匹配的根;以及
3.两个签名-密钥对<Sig><PK>均通过OP_CHECKSIG核实。
上述方法可以扩展到任何M/N,使得锁定脚本可以通过以下方式得出:
<2t+1>OP_PICK[Extract_r]<2t+4>OP_PICK[Extract_r]OP_ADD OP_SHA256[Merkle Root Derivation<Root>OP_EQUALVERIFY OP_CHECKSIG*M
其中t是默克尔证明的长度,M是阈值,即所需签名者的数量,而OP_CHECKSIG*M表示重复OP_CHECKSIG M次。
使用上述默克尔树(其中叶节点是M个r值的组合的哈希)是针对M/N签名要求的更高效的解决方案。这是因为锁定脚本和解锁脚本比针对M/N系统的替代解决方案更小,在该系统中,对于M个签名者,存在M个不同路径,每个叶对应于单个用户,使得默克尔树将具有N个叶。
在M个不同路径的情况下,解锁脚本包含M个默克尔证明,其中单个默克尔证明的长度为个节点。
然而,如果每个叶节点被设置为对应于N选M种可能性中的一种可能性,则树具有个叶,并且解锁脚本包含/>个节点的单个默克尔证明。
对于所有正整数N和M,其中M≤N,始终成立。
因此,由于减少了树和脚本的大小并因此降低了成本,因此使用上述M/N树更便宜、更高效。
上面提出的方法需要重复OP_CHECKSIGM次。为了消除这一要求,每组用户(对应于默克尔树中的叶)拥有单个签名密钥。这将OP_CHECKSIG操作码的数量减少到1,并减小解锁脚本的大小。这降低了成本并提高了效率,因为解锁脚本和锁定脚本都更短,并且它们的执行步骤更少。
R点椭圆曲线加法
可以修改包括R难题叶节点的签名树,从而使用EC点加法来生成叶。然后,使用IECPAC来检查从解锁脚本中提取的EC点实际上是同样从解锁脚本中提取的M个EC点R1,…,RM之和。一旦执行了IECPAC检查,就使用默克尔证明导出来核实锁定脚本中提供的指向树叶的链接/>以及随后指向Root值的链接。
与上一节一样,形成了默克尔树,其中叶中的每个叶对应于可能的N选M组合中的每个组合。
IEPCA方法的使用提供了一种用于证明用户知道叶数据(即,求和R值)和从其导出叶数据的R值(或r部分)(即,M个用户的R值)的技术。
个体签名方案
图9示出了用于实现系统的示例性默克尔树、第一事务Tx1和第二事务Tx2,在该系统中需要N个用户中的M个用户来解锁第一用户103a生成的第一事务Tx1的锁定脚本203C。
同样,每个用户Ui具有秘密ki。默克尔树的每个叶节点是从M个r值之和导出的x坐标的哈希,该M个r值之和是从一起可以解锁锁定脚本202C的一组用户的秘密值ki导出的。也就是说,对于M=2,其中/>
提供2/4多重签名系统作为示例。默克尔树的每个叶Xi对应于用户的6个可能的4选2组合中的一个组合,如图8的示例中所示,这些用户可以解锁锁定脚本203C。例如,叶X1由用户U1和U2生成。再次将Y4设置为1以平衡默克尔树。
在个体签名方案(individual signature scheme)中,每个组成员提供他们自己的签名。
执行以下步骤:
1.每个Ui具有秘密值ki;
2.计算Ri=kiG=(xi,yi);
3将椭圆曲线点相加以得出
4.
N选M组中的每个组与其他用户或协调者共享Xi,以便构建默克尔树。
虽然默克尔树本身类似于图8所示,但是锁定脚本203C和解锁脚本202C包括用于IECPAC的附加组件。
锁定脚本203C包含:
1.树的根;
2.两个OP_CHECKSIG操作码;
3.两个Extract_r操作码字符串;
4.用于IECPAC的操作码字符串;
5.默克尔根导出操作码字符串。
第二事务由用户1和用户3提供,对应于叶节点X3。解锁脚本202C包括:
1.两个签名和两个公钥,每对对应于用户中的一个用户:<r1,s1><PK1><r3,s3><PK3>
2.椭圆曲线点
3.两个EC点R1,R3、之间的梯度;
4.<Merkle Proof>。
IECPAC使用该梯度来验证/>
对于用户中的每个用户,可以使用R或r来构建默克尔树。在图9的示例中,每个Xi是求和R(或其x坐标)的哈希,例如和/>叶原像将是/>也就是说,解锁脚本202C中包括的叶原像与从哪种类型的r部分导出叶节点相关。
当锁定脚本203C与解锁脚本202C一起执行时,执行以下步骤:
1.从签名中提取rU1和rU3;
2.使用ri=ximod n从R1,R3中提取r1和r3。检查所提取的ri是否与匹配(步骤A);
3.如上所述使用IECPAC算法来检查(步骤B);
4.使用来计算X3,其中/>
5.从<Merkle Proof>和X3计算候选Merkle Root(步骤C);
6.检查候选默克尔根是否等于锁定脚本中提供的目标默克尔根(步骤D);以及
7.单独核实2个签名。
从解锁脚本中包括的中提取用于计算XU3的值/>
在M>2的一般情况下,锁定脚本包含M个OP_CHECKSIG操作码、M个Extract_r操作码字符串、(M-1)个IECPAC字符串和单个Merkle Root derivation操作码字符串。
解锁脚本包含M个签名和公钥、(M-1)个梯度值<λ1>…<λM-1>和M个EC点Ri、M-2个中间EC点、充当用于运行IECPAC的所有M个点之和的EC点以及单个默克尔证明。
每组一个签名
为了减少锁定脚本和解锁脚本的长度以及随后的执行时间,可以修改图9的方法,使得每组用户共享单个签名。
在这种情况下,N选M(N-choose-M)组中的每组选择单个R难题来表示该组。IECPAC用于向外部观察者证明所提供的签名是由多个用户生成的。该实施例假设每组成员之间具有高信任级别,因为任何组成员都可以提供签名并修改事务。
图10示出了使用IECPAC的单个签名实施例的示例性实现方式。如上所述,在2/4系统中存在四个单独的用户,每个用户具有自己的秘密值ki。
默克尔树具有个叶/>构建如下:
1.每个组成员计算Ri=kiG并将其与该组中的其他成员共享
2.计算EC点加法
3.通过得出叶
因此,在图10的示例中,存在6个叶,每个叶从与叶节点相关联的签字人组中的两个用户的R值之和导出。
锁定脚本203D包含:
1.单个OP_CHECKSIG操作码;
2.单个Extract_r操作码字符串;
3.用于运行IECPAC(M-1)次的字符串操作码;
4.单个Merkle Root derivation操作码字符串;以及
5.默克尔根。
解锁脚本202D由该组中的用户中的单个用户U1或U3提供,并且包含:
1.单个签名和对应的公钥;
2.梯度值
3.<R1>,<R3>;
4.默克尔证明;以及
5.
通常,对于任何M/N组,解锁脚本包含:
1.单个签名和对应的公钥;
2.梯度值<λ1>…<λM-1>;
3.<R1>…<RM>;
4.默克尔证明;以及
5.
为了能够生成签名所有组成员共享他们的秘密ki。这是因为签名者必须知道值/>才能计算/>其中/>
当锁定脚本203D与解锁脚本202D一起执行时,执行以下步骤:
1.从签名中提取rx3并用其检查[RX3]xmod n=rx3(步骤A);
2.使用如上所述的IECPAC连同RU1、RU3以及梯度λ来检查RU1+RU3=RX3(步骤B);
3.使用来计算X3;
4.从<Merkle Proof>和X3计算候选Merkle Root(步骤C);
5.检查候选默克尔根是否等于锁定脚本中提供的目标默克尔根(步骤D);以及
6.核实签名。
在更一般的M/N实施例中,上述步骤1使用解锁脚本中提供的所有(M-1)个梯度和M个R值,运行IEPAC方法M-1次,并且包括M-2个中间EC点。
值Xi可以通过使用从如上所述的组签名中提取的rxi来计算,也可以通过使用与该组(RUi)的每个单独用户对应的解锁脚本中提供的R值来计算,即X3=hash([RU1+RU3]x)。
无论是使用单个组签名还是多个个体签名实施例,IECPAC复杂性都会与M呈线性增长。
路径选择
在上述示例中,在锁定脚本中提供默克尔根,并且任何用户都可以提供解锁脚本,只要他们知道k和默克尔证明即可,其中k=k1+k2+…+kM。
为了限制可以提供解锁脚本的用户,锁定脚本创建者可以改为在锁定脚本中提供默克尔树的节点。以这种方式,只有其r值被用于生成位于默克尔树中所述节点下方的叶节点的用户可以充当解锁脚本创建者。
图11A至图11C示出了包括8个叶节点的默克尔树,每个Xi是Hash(ri),即每个节点对应于单个用户。这些附图中的每个附图示出了路径连同默克尔树一起从叶节点(该叶节点从r部分导出,该r部分从解锁脚本中提取)遍历到锁定脚本中提供的默克尔树部分,如虚线所示。
在每个示例中,与X3对应的用户3提供解锁脚本,该解锁脚本包括签名中的r3,如上所述。
图11A示出了一个示例,其中锁定脚本包含默克尔根Root,使得8个用户中的任何用户都可以解锁该锁定脚本。这里,默克尔证明包括X4、Y1和Z2。
以下锁定脚本可以通过{U1,…,U8}中的任一项解锁:
OP_7OP_PICK[Extract_r]SHA_256[Merkle Root Derivation]<Root>OP_EQUALVERIFY OP_CHECKSIG
相反,如果锁定脚本包括Z1,例如,如图11B所示,则只有用户1至用户4可以解锁该锁定脚本。解锁脚本中提供的默克尔证明部分比锁定脚本包括根的情况下的默克尔证明部分短默克尔树的一个层级。也就是说,解锁脚本的默克尔证明部分缩短了两项:<Z2><1>。
在这种情况下,锁定脚本如下所示:
OP_5OP_PICK[Extract_r]SHA_256[Merkle Root Derivation’]<Z1>OP_EQUALVERIFY OP_CHECKSIG
使得用户{U1,…,U4}中的任何用户都可以提供解锁脚本。
例如,如图11C所示,事务的创建者可以通过在锁定脚本中插入Y2,进一步将可能的脚本解锁者限制为两个。这里,只有用户3和用户4可以解锁事务。
在这种情况下,锁定脚本可以采用以下形式:
OP_5OP_PICK[Extract_r]SHA_256[Merkle Root Derivation”]<Y2>OP_EQUALVERIFY OP_CHECKSIG
应当注意的是,第一锁定脚本中的[Merkle Root Derivation]从3点默克尔证明导出根,而第二锁定脚本和第三锁定脚本中的[Merkle Root Derivation]分别需要2点默克尔证明和1点默克尔证明。点的数量是指解锁脚本的默克尔证明部分中提供的节点值的数量,用于计算候选默克尔证明。
可以修改上述实施例中的任何实施例的锁定脚本以提供默克尔树的节点而不是默克尔根,并且因此定义可以创建解锁脚本的用户的子集或多组用户的子集。
结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络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.根据第一方面,提供了一种生成区块链事务的计算机实现的方法,其中多个第二方中的每一方具有相应秘密数k,从所述相应秘密数k能导出相应r部分,其中默克尔树已被定义,所述默克尔树的至少一个叶节点基于所述相应r部分中的至少一个相应r部分,其中所述方法由第一方执行并且包括:
生成第一区块链事务,其中所述第一区块链事务包括第一锁定脚本,所述第一锁定脚本包括目标默克尔树部分,所述目标默克尔树部分对应于所述默克尔树,在与第二区块链事务的第一解锁脚本一起执行时,所述第一锁定脚本被配置为:
从所述第一解锁脚本中提取r部分,
生成从所提取的r部分导出的哈希值,
基于所生成的哈希和所述第一解锁脚本的默克尔证明部分来计算候选默克尔树部分,
验证所计算的候选默克尔树部分与所述目标默克尔树部分匹配,
基于所述第一解锁脚本的公钥来验证所述第一解锁脚本的签名部分;以及,
将所述第一区块链事务提供给区块链网络的一个或多个节点。
语句2.根据语句1所述的方法的一个实施例,其中所述r部分是从所述第一解锁脚本的所述签名部分的椭圆曲线数字签名算法(ECDSA)签名中提取的,所述r部分是所述ECDSA签名的r部分。
语句3.根据语句2所述的方法的一个实施例,其中所述默克尔树的每个叶节点是多个r部分的组合的哈希,其中所述第一锁定脚本被配置为:从所述第一解锁脚本中提取多个r部分(multiple r-portions)并组合所述多个r部分,其中所述哈希值是所组合的多个r部分的哈希。
语句4.根据语句3所述的方法的一个实施例,其中所述r部分的组合是使用加法和级联中的一种来进行的。
语句5.根据语句1所述的方法的一个实施例,其中所述默克尔树的所述至少一个叶节点是多个r部分之和的哈希,其中所述第一锁定脚本被配置为:
从所述第一解锁脚本中提取多个r部分,所述多个r部分中的每个r部分对应于所述多方中的一方;
计算所述多个提取的r部分之和(sum);
从所述第一解锁脚本中提取求和r部分(summation r-portion),所述求和r部分是所述多个r部分之和;以及,
基于所计算的所述多个提取的r部分之和以及所提取的求和r部分来核实所提取的多个r部分,
其中所述多个r部分和所述求和r部分是椭圆曲线点。
语句6.根据语句5所述的方法的一个实施例,其中所述哈希值是以下各项中的一项的哈希:所计算的所述多个r部分之和、所提取的求和r部分。
语句7.根据语句5或6所述的方法的一个实施例,其中所述第一锁定脚本还被配置为:
从所述第一解锁脚本中提取一个或多个梯度值;以及,
基于所提取的一个或多个梯度值和所述多个提取的r部分,对于所提取的一个或多个梯度值中的每个梯度值等于所述多个提取的r部分中的两个r部分之间的梯度进行验证。
语句8.根据语句7所述的方法的一个实施例,其中所述梯度值的数量比与所述秘密数k中的一个秘密数k对应的所提取的多个r部分的数量少1。
语句9.根据语句3至8中任一项所述的方法的一个实施例,其中所述第一锁定脚本被配置为:验证所述第一解锁脚本的多个签名部分中的每个签名部分,所述多个签名部分中的每个签名部分被提供有对应公钥,所述多个签名部分中的每个签名部分的所述验证是基于所提供的对应公钥来进行的。
语句10.根据语句9所述的方法的一个实施例,其中在所述第一解锁脚本中提供所述对应公钥。
语句11.根据从属于语句1的语句5至8中任一项所述的方法的一个实施例,其中从所述解锁脚本的签名部分中提取所述求和r部分。
语句12.根据语句1或2所述的方法的一个实施例,其中所述默克尔树的所述至少一个叶节点是多个r部分的组合的哈希,其中所提取的r部分等于与所述第一锁定脚本的所述默克尔树部分对应的所述叶节点的所述多个r部分的组合。
语句13.根据前述任一项语句所述的方法的一个实施例,其中所述默克尔树部分是所述默克尔树的默克尔根。
语句14.根据语句1至10中任一项所述的方法的一个实施例,其中所述默克尔树部分是所述默克尔树的除所述默克尔根之外的节点。
语句15.根据语句1或从属于语句1的语句5至14中任一项所述的方法的一个实施例,其中所述r部分是椭圆曲线点。
语句16.根据第二方面,提供了一种生成区块链事务的计算机实现的方法,其中多个第二方中的每一方具有秘密数k,从所述秘密数k能导出r部分,其中默克尔树已被定义,所述默克尔树的至少一个叶节点基于多个相应r部分中的至少一个相应r部分,其中第一区块链事务包括第一锁定脚本,所述第一锁定脚本包括目标默克尔树部分,所述目标默克尔树部分对应于所述默克尔树,在与第二区块链事务的第一解锁脚本一起执行时,所述第一锁定脚本被配置为:从所述第一解锁脚本中提取r部分,生成从所提取的r部分导出的哈希值,基于所生成的哈希和所述第一解锁脚本的默克尔证明部分来计算候选默克尔树部分,验证所计算的候选默克尔树部分与所述第一锁定脚本的所述目标默克尔树部分匹配,以及基于所述第一解锁脚本的公钥来验证所述第一解锁脚本的签名部分,其中所述方法由所述第二方中的至少一个第二方执行并且包括:
生成所述第二区块链事务,所述第二区块链事务包括输入,所述输入引用所述第一区块链事务的所述第一锁定脚本,和所述第一解锁脚本,所述第一解锁脚本包括所述默克尔证明部分、所述签名部分、和所述公钥;以及,
将所述第二区块链事务提供给区块链网络的一个或多个节点。
语句17.根据语句16所述的方法的一个实施例,其中所述签名部分包括所述第一解锁脚本的所述签名部分的椭圆曲线数字签名算法(ECDSA)签名,所述r部分是所述ECDSA签名的r部分。
语句18.根据语句17所述的方法的一个实施例,其中所述r部分是从所述多个第二方中的多个第二方的所述秘密数k导出的多个r部分的组合。
语句19.根据语句16所述的方法的一个实施例,其中所述第一解锁脚本还包括所述r部分。
语句20.根据语句15至18中任一项所述的方法的一个实施例,其中所述第一解锁脚本还包括一个或多个梯度值,所述第一锁定脚本被配置为:从所述第一解锁脚本中提取所述一个或多个梯度值;以及,基于所提取的一个或多个梯度值和从所述解锁脚本中提取的多个提取的r部分,来验证所提取的一个或多个梯度值中的每个梯度值等于所述多个提取的r部分中的两个r部分之间的梯度。
语句21.根据语句20所述的方法的一个实施例,其中所述第一解锁脚本包括梯度值的数量,所述梯度值的数量比从所述解锁脚本中提取、且与所述多个秘密数k中的一个秘密数k对应的r部分的数量少1。
语句22.根据前述任一项语句所述的方法的一个实施例,其中所述r部分是从与所述秘密数对应的公钥导出的。
语句23.根据第三方面,提供了一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及,
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项语句所述的方法。
语句24.根据第四方面,提供了一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据语句1至21中任一项所述的方法。
Claims (24)
1.一种生成区块链事务的计算机实现的方法,其中多个第二方中的每一方具有相应秘密数k,从所述相应秘密数k能导出相应r部分,其中默克尔树已被定义,所述默克尔树的至少一个叶节点基于所述相应r部分中的至少一个相应r部分,其中所述方法由第一方执行并且包括:
生成第一区块链事务,其中所述第一区块链事务包括第一锁定脚本,所述第一锁定脚本包括目标默克尔树部分,所述目标默克尔树部分对应于所述默克尔树,在与第二区块链事务的第一解锁脚本一起执行时,所述第一锁定脚本被配置为:
从所述第一解锁脚本中提取r部分,
生成从所提取的r部分导出的哈希值,
基于所生成的哈希和所述第一解锁脚本的默克尔证明部分来计算候选默克尔树部分,
验证所计算的候选默克尔树部分与所述目标默克尔树部分匹配,
基于所述第一解锁脚本的公钥来验证所述第一解锁脚本的签名部分;以及
将所述第一区块链事务提供给区块链网络的一个或多个节点。
2.根据权利要求1所述的方法,其中所述r部分是从所述第一解锁脚本的所述签名部分的椭圆曲线数字签名算法(ECDSA)签名中提取的,所述r部分是所述ECDSA签名的r部分。
3.根据权利要求2所述的方法,其中所述默克尔树的每个叶节点是多个r部分的组合的哈希,其中所述第一锁定脚本被配置为:从所述第一解锁脚本中提取多个r部分并组合所述多个r部分,其中所述哈希值是所组合的多个r部分的哈希。
4.根据权利要求3所述的方法,其中所述r部分使用加法和级联中的一种来组合。
5.根据权利要求1所述的方法,其中所述默克尔树的所述至少一个叶节点是多个r部分之和的哈希,其中所述第一锁定脚本被配置为:
从所述第一解锁脚本中提取多个r部分,所述多个r部分中的每个r部分对应于所述多方中的一方;
计算所述多个提取的r部分之和;
从所述第一解锁脚本中提取求和r部分,所述求和r部分是所述多个r部分之和;以及
基于所计算的所述多个提取的r部分之和以及所提取的求和r部分来核实所提取的多个r部分,
其中所述多个r部分和所述求和r部分是椭圆曲线点。
6.根据权利要求5所述的方法,其中所述哈希值是以下各项中的一项的哈希:所计算的所述多个r部分之和、所提取的求和r部分。
7.根据权利要求5或6所述的方法,其中所述第一锁定脚本还被配置为:
从所述第一解锁脚本中提取一个或多个梯度值;以及
基于所提取的一个或多个梯度值和所述多个提取的r部分,验证所提取的一个或多个梯度值中的每个梯度值等于所述多个提取的r部分中的两个r部分之间的梯度。
8.根据权利要求7所述的方法,其中所述梯度值的数量比与所述秘密数k中的一个秘密数k对应的所提取的多个r部分的数量少1。
9.根据权利要求3至8中任一项所述的方法,其中所述第一锁定脚本被配置为:验证所述第一解锁脚本的多个签名部分中的每个签名部分,所述多个签名部分中的每个签名部分被提供有对应公钥,所述多个签名部分中的每个签名部分的所述验证基于所提供的对应公钥。
10.根据权利要求9所述的方法,其中在所述第一解锁脚本中提供所述对应公钥。
11.根据从属于权利要求1的权利要求5至8中任一项所述的方法,其中从所述解锁脚本的签名部分中提取所述求和r部分。
12.根据权利要求1或2所述的方法,其中所述默克尔树的所述至少一个叶节点是多个r部分的组合的哈希,其中所提取的r部分等于与所述第一锁定脚本的所述默克尔树部分对应的所述叶节点的所述多个r部分的组合。
13.根据前述任一项权利要求所述的方法,其中所述默克尔树部分是所述默克尔树的默克尔根。
14.根据权利要求1至10中任一项所述的方法,其中所述默克尔树部分是所述默克尔树的除所述默克尔根之外的节点。
15.根据权利要求1或从属于权利要求1的权利要求5至14中任一项所述的方法,其中所述r部分是椭圆曲线点。
16.一种生成区块链事务的计算机实现的方法,其中多个第二方中的每一方具有秘密数k,从所述秘密数k能导出r部分,其中默克尔树已被定义,所述默克尔树的至少一个叶节点基于多个相应r部分中的至少一个相应r部分,其中第一区块链事务包括第一锁定脚本,所述第一锁定脚本包括目标默克尔树部分,所述目标默克尔树部分对应于所述默克尔树,在与第二区块链事务的第一解锁脚本一起执行时,所述第一锁定脚本被配置为:从所述第一解锁脚本中提取r部分,生成从所提取的r部分导出的哈希值,基于所生成的哈希和所述第一解锁脚本的默克尔证明部分来计算候选默克尔树部分,验证所计算的候选默克尔树部分与所述第一锁定脚本的所述目标默克尔树部分匹配,以及基于所述第一解锁脚本的公钥来验证所述第一解锁脚本的签名部分,其中所述方法由所述第二方中的至少一个第二方执行并且包括:
生成所述第二区块链事务,所述第二区块链事务包括输入,所述输入引用所述第一区块链事务的所述第一锁定脚本,和所述第一解锁脚本,所述第一解锁脚本包括所述默克尔证明部分、所述签名部分、和所述公钥;以及
将所述第二区块链事务提供给区块链网络的一个或多个节点。
17.根据权利要求16所述的方法,其中所述签名部分包括所述第一解锁脚本的所述签名部分的椭圆曲线数字签名算法(ECDSA)签名,所述r部分是所述ECDSA签名的r部分。
18.根据权利要求17所述的方法,其中所述r部分是从所述多个第二方中的多个第二方的所述秘密数k导出的多个r部分的组合。
19.根据权利要求16所述的方法,其中所述第一解锁脚本还包括所述r部分。
20.根据权利要求16至19中任一项所述的方法,其中所述第一解锁脚本还包括一个或多个梯度值,所述第一锁定脚本被配置为:从所述第一解锁脚本中提取所述一个或多个梯度值;以及,基于所提取的一个或多个梯度值和从所述解锁脚本中提取的多个提取的r部分,来验证所提取的一个或多个梯度值中的每个梯度值等于所述多个提取的r部分中的两个r部分之间的梯度。
21.根据权利要求20所述的方法,其中所述第一解锁脚本包括梯度值的数量,所述梯度值的数量比从所述解锁脚本中提取的与所述多个秘密数k中的一个秘密数k对应的r部分的数量少1。
22.根据前述任一项权利要求所述的方法,其中从与所述秘密数对应的公钥导出所述r部分。
23.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项权利要求所述的方法。
24.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据权利要求1至22中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2113092.7 | 2021-09-14 | ||
GBGB2113092.7A GB202113092D0 (en) | 2021-09-14 | 2021-09-14 | Generating blockchain transactions |
PCT/EP2022/072787 WO2023041270A1 (en) | 2021-09-14 | 2022-08-15 | Generating blockchain transactions |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117941317A true CN117941317A (zh) | 2024-04-26 |
Family
ID=78149292
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280061792.6A Pending CN117941317A (zh) | 2021-09-14 | 2022-08-15 | 生成区块链事务 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN117941317A (zh) |
GB (1) | GB202113092D0 (zh) |
WO (1) | WO2023041270A1 (zh) |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2584154A (en) * | 2019-05-24 | 2020-11-25 | Nchain Holdings Ltd | Knowledge proof |
-
2021
- 2021-09-14 GB GBGB2113092.7A patent/GB202113092D0/en not_active Ceased
-
2022
- 2022-08-15 CN CN202280061792.6A patent/CN117941317A/zh active Pending
- 2022-08-15 WO PCT/EP2022/072787 patent/WO2023041270A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
GB202113092D0 (en) | 2021-10-27 |
WO2023041270A1 (en) | 2023-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20220024125A (ko) | 해시 함수 공격 | |
CN113875186A (zh) | 知识证明 | |
JP2023531048A (ja) | ブロックチェーンネットワークにおけるデータを妥当性確認する方法及び装置 | |
US20230308287A1 (en) | Threshold signatures | |
CN113875190A (zh) | 包括基于哈希的验证的可运行代码的区块链交易 | |
JP2022533752A (ja) | 知識証明 | |
US20230316272A1 (en) | Divisible tokens | |
CN113906713A (zh) | 包括基于哈希的验证的可运行代码的区块链交易 | |
CN115211073A (zh) | 公钥生成方法 | |
CN116508291A (zh) | 默克尔证明实体 | |
CN116113921A (zh) | 区块链上的伪随机选择 | |
US20230308292A1 (en) | Digital signatures | |
CN117044161A (zh) | 阻止敏感数据 | |
KR20220024124A (ko) | 지식 증명 | |
WO2023110551A1 (en) | Zero knowledge proof based child key authenticity | |
CN117280653A (zh) | 多方区块链地址方案 | |
CN118044151A (zh) | 传播锁定脚本 | |
CN116547945A (zh) | 默克尔证明实体 | |
CN117941317A (zh) | 生成区块链事务 | |
CN118302989A (zh) | 签名验证 | |
US20240214179A1 (en) | Blockchain-implemented hash function | |
CN117337436A (zh) | 多方区块链地址方案 | |
CN117280349A (zh) | 多方区块链地址方案 | |
CN117121434A (zh) | 区块链实现的散列函数 | |
WO2023036548A1 (en) | Signature verification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |