CN117121434A - 区块链实现的散列函数 - Google Patents
区块链实现的散列函数 Download PDFInfo
- Publication number
- CN117121434A CN117121434A CN202280025794.XA CN202280025794A CN117121434A CN 117121434 A CN117121434 A CN 117121434A CN 202280025794 A CN202280025794 A CN 202280025794A CN 117121434 A CN117121434 A CN 117121434A
- Authority
- CN
- China
- Prior art keywords
- script
- transaction
- public key
- hash
- 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
Links
- 238000013515 script Methods 0.000 claims abstract description 323
- 238000000034 method Methods 0.000 claims abstract description 91
- 230000006870 function Effects 0.000 claims description 167
- 238000012545 processing Methods 0.000 claims description 19
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 238000009795 derivation Methods 0.000 claims description 9
- 230000002829 reductive effect Effects 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 2
- 230000001419 dependent effect Effects 0.000 claims description 2
- 238000013507 mapping Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 description 10
- 238000004422 calculation algorithm Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 230000000873 masking effect Effects 0.000 description 5
- 230000001902 propagating effect Effects 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 4
- 238000012795 verification Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 238000013475 authorization Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 238000005065 mining Methods 0.000 description 3
- 230000000644 propagated effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 239000000427 antigen Substances 0.000 description 2
- 102000036639 antigens Human genes 0.000 description 2
- 108091007433 antigens Proteins 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 208000019651 NDE1-related microhydranencephaly Diseases 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000000890 antigenic effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000000007 visual effect Effects 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
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
- H04L9/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)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
一种使用区块链事务实现散列函数(HF)的计算机实现的方法,其中所述方法由第一方执行并且包括:生成第一区块链事务;以及,将所述第一区块链事务提交到区块链事务的一个或多个节点;其中,所述第一区块链事务包括锁定脚本,所述锁定脚本被配置为在与包括目标数据项的第二区块链事务的解锁脚本一起被执行时生成所述目标数据项的散列结果。
Description
技术领域
本公开涉及一种使用区块链事务实现散列(hash)函数的方法。
背景技术
区块链是指一种分布式数据结构,其中在分布式对等(P2P)网络(以下称为“区块链网络”)中的多个节点中的每个节点处维护区块链的副本,并且广泛公开该副本。区块链包括一系列数据区块,其中每个区块包括一个或多个事务(transaction)。除所谓的“coinbase事务”外,每个事务都指向序列中的先前事务,该序列可以跨越一个或多个区块,回到一个或多个coinbase事务。coinbase事务将在下文进一步讨论。提交给区块链网络的事务包括在新区块中。新区块的创建过程通常称为“挖掘”,该过程涉及多个节点中的每个节点争相执行“工作证明”,即,基于等待被包括在区块链的新区块中的一组定义的有序且核实有效的未决事务的表示解决加密难题。应当注意的是,区块链可以在一些节点处被修剪(prune),并且区块的发布可以通过仅发布区块头来实现。
区块链中的事务可用于以下目的中的一个或多个:传送数字资产(即,一定数量的数字通证);对虚拟化分类账或注册表中的一组条目进行排序;接收和处理时间戳条目;和/或对索引指针按时间排序。也可利用区块链实现区块链上的层级附加功能。例如,区块链协议可允许在事务中存储附加的用户数据或数据索引。能够存储在单个事务中的最大数据容量没有预先指定的限制,因此可以并入越来越复杂的数据。例如,这可用于在区块链中存储电子文档、音频或视频数据。
区块链网络的节点(通常称为“矿工”)执行分布式事务注册和验证过程,这将后续更详细地描述。总之,在该过程中,节点核实事务并将这些事务插入到区块模板中,这些事务尝试为该区块模板标识有效的工作证明解。一旦找到有效的解,新区块便会被传播到网络的其它节点,从而使得每个节点能够在区块链上记录新区块。为了将事务记录在区块链中,用户(例如,区块链客户端应用程序)将该事务发送到网络中的节点中的一个节点进行传播。接收该事务的节点可以争相寻找将核实有效的事务并入新区块的工作证明解。每个节点被配置为执行相同的节点协议,该协议将包括用于确认事务有效的一个或多个条件。无效事务将不会传播或并入到区块中。假定事务已经核实有效,从而在区块链上被接受,则该事务(包括任何用户数据)将因此在区块链网络中的每个节点上作为不可改变的公共记录进行注册和索引。
成功解决工作证明难题可创建最新区块的节点通常被奖励一个称为“coinbase事务”的新事务,该事务分发数字资产数额,即通证数量。无效事务的检测和拒绝是通过竞争节点的行动来执行的,这些竞争节点充当网络的代理并且通过激励报告和阻止不正当行为。信息的广泛发布使得用户可以连续地审计节点的性能。仅发布区块头使得参与者可以确保区块链具有持续完整性。
在“基于输出的”模型(有时称为基于UTXO的模型)中,给定事务的数据结构包括一个或多个输入和一个或多个输出。任何可花费输出包括指定数字资产数额的元素,该元素可从进行中的事务序列导出。可花费输出有时称为UTXO(“未花费事务输出”)。输出还可以包括锁定脚本,该锁定脚本指定输出的未来赎回条件。锁定脚本是限定核实和传送数字通证或资产所必需的条件的谓词。事务(除coinbase事务之外)的每个输入包括指向先前事务中的此类输出的指针(即引用),并且还可以包括解锁脚本,用于解锁指向输出的锁定脚本。因此,考虑一对事务,将其称为第一事务和第二事务(或“目标”事务)。第一事务包括指定数字资产数额的至少一个输出,并且包括定义解锁该输出的一个或多个条件的锁定脚本。第二目标事务包括至少一个输入和解锁脚本,该至少一个输入包括指向第一事务的输出的指针;该解锁脚本用于解锁第一事务的输出。
在此类模型中,当第二目标事务被发送到区块链网络以在区块链中传播和记录时,在每个节点处应用的有效性条件之一将是解锁脚本满足在第一事务的锁定脚本中定义的一个或多个条件中的所有条件。另一条件将是第一事务的输出尚未被另一早期有效事务赎回。根据这些条件中的任何一个条件发现目标事务无效的任何节点都不会传播该事务(作为有效事务,但可能注册无效事务),也不将该事务包括在要记录在区块链中的新区块中。
另一种事务模型是基于账户的模型。在这种情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由节点单独存储到区块链中,并不断更新。
发明内容
散列函数是接受任意长度的输入并给出固定长度的输出的函数。散列函数有两种常见用途。一种用途是将密钥值对转换为索引值对以用于表查找,在这种情况下,密钥被散列处理为索引。为此,在编程中通常使用乘法散列。另一种主要用途是在密码学领域,在这种情况下,散列函数通常称为加密散列函数。在这种情况下,安全要求会产生更复杂的散列函数。例如,SHA256是在区块链技术中使用的加密散列函数。
SHA256等加密散列函数经常用于区块链事务的锁定脚本。例如,众所周知的锁定脚本是使用下述OP_HASH160操作码的支付到公钥散列(P2PKH)锁定脚本。
大多数区块链(例如,比特币)都有一种有限的脚本语言,这种有限的脚本语言包括有限数量的函数,即运算符。例如,在比特币中,这些函数称为操作码。在撰写本文时,比特币脚本语言(Script)仅限于可以用于实现散列函数的五个操作码。OP_RIPEMD160是被配置为使用RIPEMD-160散列函数对输入进行散列处理的操作码。OP_SHA1是被配置为使用SHA-1散列函数对输入进行散列处理的操作码。OP_SHA256是被配置为使用SHA-256散列函数对输入进行散列处理的操作码。OP_HASH160是被配置为首先使用SHA-256散列函数对输入进行处理,然后使用RIPEMD-160散列函数对输入进行散列处理的操作码。最后,OP_HASH256是被配置为使用SHA-256散列函数对输入进行两次散列处理的操作码。例如,请参见https://wiki.bitcoinsv.io/index.php/Opcodes_used_in_Bitcoin_Script。其他区块链也同样受到限制。在许多情况下,使用散列函数将是有益的,所述散列函数不限于由现有的操作码集实现的散列函数。然而,引入新的操作码并不可取,因为这会破坏区块链的稳定性并降低其可信度。因此,希望扩大可以使用所述现有的操作码集(或更一般的函数)在脚本中实现的散列函数的范围。
此外,一些可用的操作码(例如,OP_HASH256)涉及对输入应用多个加密散列函数,因此计算成本高昂。因此,希望能够实现比涉及多个加密散列运算的散列函数计算成本低的散列函数。
根据本文公开的一个方面,提供了一种使用区块链事务实现散列函数HF的计算机实现的方法,其中所述方法由第一方执行并且包括:生成第一区块链事务;以及,将所述第一区块链事务提交到区块链事务的一个或多个节点;其中,所述第一区块链事务包括锁定脚本,所述锁定脚本被配置为在与包括目标数据项的第二区块链事务的解锁脚本一起被执行时生成所述目标数据项的散列结果,其中所述锁定脚本包括HF脚本,所述HF脚本被配置为通过至少执行以下步骤来生成所述散列结果:基于将所述目标数据项与第一参数相乘来生成第一中间结果,基于将第二参数与所述第一中间结果相加来生成第二中间结果,基于所述第二中间结果对第三参数的取模运算来生成第三中间结果,以及基于所述第三中间结果对第四参数的取模运算来生成所述散列结果。
通用散列是指从一组散列函数中选择一个散列函数,然后基于所述选择的散列函数针对任何给定输入计算输出的算法。通用散列的主要目标是减少碰撞的可能性,并避免最坏情况的输入(对于一些散列函数,存在一组最坏情况的输入,对于所述一组最坏情况的输入,计算它们的散列值所花费的时间将比平均时间长得多)。
所述第一区块链事务的所述散列函数(HF)脚本被配置为实现散列函数。在一些实施例中,所述散列函数涉及将输入与第一参数(A)相乘,将所述输入与第二参数(b)相加,取模数p,然后取模数n。在一些示例中,可以执行其他(小项)运算。因此,所述HF脚本被配置为实现新的散列函数,而不是当前作为所述区块链的原始脚本语言的一部分提供的散列函数。此外,与在一些区块链上提供的现有散列函数(例如,OP_HASH160)相比,所述HF脚本的计算成本更低。
在一些实施例中,所述HF脚本被用作P2PKH脚本的一部分,而不是OP_HASH160操作码,因此以较少的计算实现相同的结果(将输出锁定到公钥散列)。
在一些实施例中,可以使用通用散列函数从相同的公钥生成多个不同的区块链地址。每个地址可以用于:锁定事务的不同输出;和/或锁定不同事务的不同输出。每个不同输出可以包括所述HF脚本的实例,每个实例包括(并因此被锁定到)所述地址中的一个不同的地址。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3A示出了客户端应用程序的示意性框图;
图3B示出了可由图3A的客户端应用程序表示的示例性用户界面的示意性模型;
图4示出了用于处理事务的一些节点软件的示意性框图;
图5是用于将区块链事务提交到区块链的一个示例性系统的示意性框图;
图6是用于将区块链事务提交到区块链的另一个示例性系统的示意性框图;
图7示意性地示出了分层确定性密钥集;
图8示出了用于转换为二进制表示的示例性脚本;
图9示出了用于执行点标量乘法的示例性脚本;
图10示出了用于执行逆模计算的示例性脚本;
图11示出了用于对两个不同的点执行点加法的示例性脚本;
图12示出了用于对两个相同的点执行点加法的示例性脚本;
图13示出了用于对两个点执行点加法的示例性脚本;
图14示出了用于将数据转换为压缩密钥格式的示例性脚本;
图15示意性地示出了混合散列索引方案。
具体实施方式
1.示例性系统概述
图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,该数据字段可指向先前事务。
2.基于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赎回的条件并不一定包括对签名进行验证。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
3.侧信道
如图1所示,爱丽丝和鲍勃的计算机设备102a、120b中的每个计算机设备上的客户端应用程序都可以包括附加通信功能。此附加功能可使爱丽丝103a建立与鲍勃103b的单独侧信道107(在任何一方或第三方的鼓动下)。侧信道107使得能够脱离区块链网络交换数据。此类通信有时称为“链下”通信。例如,这可用于在爱丽丝与鲍勃之间交换事务152,而不将该事务(尚未)注册到区块链网络106上或将其发布到链150上,直到其中一方选择将其广播到网络106上。以这种方式共享事务有时称为共享“事务模板”。事务模板可能缺少形成完整事务所需的一个或多个输入和/或输出。替代地或附加地,侧信道107可用于交换任何其它事务相关数据,例如密钥、议付数额或条款、数据内容等。
通过与区块链网络106相同的分组交换网络101可建立侧信道107。替代地或附加地,侧信道301可以经由诸如移动蜂窝网络的不同网络或者诸如无线局域网络的局域网建立,甚至经由爱丽丝和鲍勃的设备102a、102b之间的直接有线或无线链路建立。通常,在本文中任何地方所指的侧信道107可以包括经由一项或多项联网技术或通信介质的任何一条或多条链路,这些链路用于“链下”交换数据,即脱离区块链网络106交换数据。在使用多条链路的情况下,链下链路束或集合整体上可以称为侧信道107。因此,应当注意的是,如果说爱丽丝和鲍勃通过侧信道107交换某些信息或数据等,则这不一定意味着所有这些数据都必须通过完全相同的链路或甚至相同类型的网络发送。
4.客户端软件
图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元素,为了简洁起见,未对其进行说明。
5.节点软件
图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)。
6.定义
定义1–乘法散列:
假设具有表大小2m、模数2n和奇整数a∈{1,…,2n-1},则将乘法散列函数h定义为
也就是说,给定x,
1.计算ax mod 2n–取ax的n个最低有效位;以及
2.右移(n-m)个位–取从步骤1所得结果的m个最高有效位。
定义2–散列函数的增量函数
假设f:A→B是散列函数。对于任意两个元素x,y∈A,定义
定义3–一组散列函数的增量函数
假设是H一组散列函数。定义
δH(x,y)=∑f∈Hδf(x,y)。
定义4–通用散列
假设H是从A到B的一组散列函数。对于A中的所有x,y,H是通用函数,δH(x,y)≤|H|/|B|。
应当注意的是,δH(x,y)对该组中引起碰撞x≠y的散列函数的数量进行计数,同时|H|/|B|指示散列函数相对于范围大小的丰富程度。
示例
假设其中p≥m是质数,并且m>n。在这种情况下,H是通用函数。
应当注意的是,|H|=p(p-1),并且|B|=n。证明可以在J.L.Carter和M.N.Wegman的“通用类散列函数”(Universal Classes of Hash Functions)中找到。
定义5–加密散列。
如果散列函数H符合以下条件,则该散列函数是加密安全的:
1.抗原像–给定h=H(m),在计算方面难以找到m;
2.抗第二原像–给定h=H(m)和m,在计算方面难以找到m′,使得H(m′)=h;
3.抗碰撞–在计算方面难以找到一对消息m和m′,使得H(m)=H(m′)。
7.脚本内散列函数
图5示出了用于使用区块链事务实现散列函数的示例性系统500。该系统包括第一方(例如,爱丽丝103a)和第二方(例如,鲍勃103b)。该系统还包括区块链网络106的一个或多个节点104。应当注意的是,爱丽丝103a和鲍勃103b仅分别用作第一方和第二方的便利标签,并且不必被配置为执行上面结合图1至图4描述为与爱丽丝103a和鲍勃103b相关联的所有动作,尽管并不排除这种情况。
如图所示,爱丽丝103a被配置为生成第一区块链事务Tx1并将该第一区块链事务Tx1提交到区块链网络106。该第一区块链事务包括一个或多个输入以及一个或多个输出。这些输出中的至少一个输出(“第一输出”)包括锁定脚本(“第一锁定脚本”),该锁定脚本包括散列函数(HF)脚本。应当注意的是,这里的“第一”仅用作标签,并不一定意味着任何形式的排序。HF脚本是被配置为在与第二事务Tx2的解锁脚本一起执行时生成(即,计算、计算等)包括在解锁脚本中的输入(“目标输入”)的散列(“散列结果”)。目标输入可以是任何类型的数据项,例如数字、字符串等。例如,目标输入可以是公钥。第一锁定脚本可以由HF脚本组成;或者,第一锁定脚本可以包括HF脚本以及一个或多个数据项和/或脚本的附加部分。例如,HF脚本可以形成较大脚本的一部分。
在图5中,第二事务Tx2被示出为由鲍勃103b传输到区块链网络106。也不排除第二事务Tx2可以由爱丽丝103a提交到区块链网络106。
HF脚本被配置为执行至少四个数学运算。每个运算可以由区块链脚本语言(例如,比特币脚本)的单个函数(例如,操作码)来执行。或者,这些运算中一些或全部运算可以根据多个函数执行。第一运算涉及通过将目标数据项与第一参数相乘来计算第一中间结果。第一运算可以包括所述乘法。或者,第一运算可以涉及一个或多个附加子运算(例如,加法、减法等)。第二运算涉及通过将第二参数与第一中间结果相加来计算第二中间结果。第二运算可以包括所述加法。第三运算涉及基于使用第三参数对第二中间结果执行第一取模运算来计算第三中间结果。换句话说,第三中间结果基于将第二中间结果除以第三参数后的余数。第三运算可以包括所述第一取模运算。第四运算涉及基于使用第四参数对第三中间结果执行第二取模运算来计算散列结果。换句话说,第四中间结果基于将第三中间结果除以第四参数后的余数。第四运算可以包括所述第二取模运算。在一些示例中,HF脚本实现的散列函数可以称为“通用散列函数”,因为该散列函数满足通用散列的定义(定义4)。
例如,HF脚本可以采用以下形式:
<a>OP_MUL<b>OP_ADD<p>OP_MOD<n>OP_MOD,
其中a是第一参数,b是第二参数,p是第三参数,n是第四参数。技术人员将熟悉操作码。
HF脚本可以被配置为输出第一中间结果、第二中间结果、第三中间结果和第四中间结果中的一个、一些或全部。例如,一个或多个结果可以输出到存储器。在脚本语言是基于堆栈的脚本语言的情况下,存储器可以是存储器堆栈。在一些示例中,仅将散列结果输出到存储器等。
第一参数a可以是任意非零数,并且可以随机选择。第二参数b可以是任意数,并且可以随机选择。第三参数p可以是任意正数,例如质数(例如,与特定椭圆曲线相关联的质数)。例如,p可以是定义一些区块链使用的Secp256k1椭圆曲线的质数。第四参数n采用2L的形式,其中L被选择用于定义散列结果的长度。通常,L可以是任意适当数,例如160、256、512等。下面进一步提供参数的一些示例性值的进一步细节。
在一些实施例中,第一锁定脚本可以包括预期散列结果。该预期散列结果通过将通用散列函数应用于预期数据项(例如,预期值)来生成。在这里,“预期”是指预定。爱丽丝103a可以自行生成预期散列结果,也可以从其他位置获取预期散列结果,例如不同方、区块链本身、网页等。在“链下”(即,不使用区块链事务)将通用散列函数应用于预期数据项。例如,可以在爱丽丝的计算设备105a上计算预期散列结果。
第一锁定脚本被配置为要求由HF脚本生成的散列结果(即,在脚本执行期间)与预期散列结果相匹配。也就是说,第二事务Tx2的解锁脚本对第一区块链事务的第一锁定脚本进行解锁的条件是解锁脚本包括预期数据项,并且预期数据项被散列处理为预期散列结果。这可以使用散列难题来实现。实现散列难题本身对技术人员来说是熟悉的。
预期数据项可以是预期公钥,例如鲍勃的公钥PKB。在该示例中,预期散列结果可以用作区块链地址。除了要求预期数据项是预期公钥之外,第一锁定脚本还可以要求Tx2的解锁脚本包括使用与预期公钥对应的私钥生成的签名。例如,第一锁定脚本可以要求解锁脚本包括鲍勃的公钥PKB(其被散列处理为预期散列结果)和使用鲍勃的私钥skB生成的鲍勃的签名。这种形式的锁定脚本通常称为支付到公钥散列(P2PKH)脚本。然而,应当注意的是,第一区块链事务不必涉及向鲍勃103b支付,并且通常可以用于任何目的,例如向鲍勃103b发送消息、在区块链150上存储数据等。
例如,第一锁定脚本可以采用以下形式:
OP_DUP[UHFa,b,p,n]<UHFa,b,p,n(PK)>OP_EQUALVERIFY OP_CHECKSIG
其中[UHFa,b,p,b]是HF脚本的简写,<UHFa,b,p,n(PK)>是通过将通用散列函数(UHF)应用于预期公钥而生成的预期散列结果。
因此,第一锁定脚本要求解锁脚本采用以下形式:
<Signature><PK>,
这与标准P2PKH脚本相同。
到目前为止,P2PKH脚本采用以下形式:
OP_DUP OP_HASH160<HASH160(PK)>OP_EQUALVERIFY OP_CHECKSIG
在该脚本中,OP_HASH160获取给定的公钥PK并输出其散列值。然后,将散列值与脚本中给出的预期散列值<HASH160(PK)>进行比较。HASH160是复合函数(即,算法),可以描述为:
1.将SHA256应用于输入的公钥;
2.将RIPEMD160应用于步骤1中的输出;
3.向步骤2中的输出添加前缀以指示网络类型(Mainnet、TestNet、Regtest);
4.将双重SHA256应用于步骤3中的输出;
5.将步骤4中的输出的前8个字节作为校验和;
6.将校验和与步骤3中的输出相加;以及
7.将base58编码应用于步骤6中的输出。
应当注意的是,步骤7是可逆的。也就是说,给定步骤7中的输出,可以应用base58解码来计算步骤6中的输出。然而,由于所使用的加密函数的单向性,因此在计算上无法完全反转以获取输入的公钥。
锁定脚本中的HASH160的主要目的是确保解锁脚本中仅使用预期公钥。如上所述,HASH160需要四个散列(一个SHA256、一个RIPEMD160和一个双重SHA256)。通过HF脚本实现的通用散列函数可以较少的计算实现相同的结果。在P2PKH中,HF脚本也比HASH160高效得多,因为它只涉及一次乘法、一次加法和两次取模运算。
现在返回到HF脚本的参数,在一些示例中,第三参数p可以被选择为与Secp256k1(在比特币中使用的椭圆曲线)一起提供的质数,
y2=x3+7 mod p,
其中p=2256-232-29-28-27-26-24-1。
第四参数可以被选择为n=2160,使得函数的输出具有与HASH160的输出相同的长度。
第一参数a和第二参数b可以由用户从随机选择,只要a不是零,应当注意的是,a的范围和大小会影响碰撞概率,如下所述。
在下文中,q用于表示由Secp256k1定义的群的阶,该群包含q个点,其中q是质数。这意味着存在q-1个非同一性点。由于这些非同一性点都不具有2阶(因为q是奇质数),因此可以推断每个点具有不等于自身的逆。这意味着存在(q-1)/2个具有不同x坐标的非同一性点,可以表示为(xi,±yi),其中i=1,…,(q-1)/2。
公钥可以压缩形式表示为(xi,+)或(xi,-)。应当注意的是,已知Secp256k1,可以计算出y坐标,并使用符号来标识唯一的y值。假设xi∈[0,p-1],并将-xi用作(xi,-)的通用散列函数的输入。
这为通用散列函数建立了输入空间,其中m=p,并且在具备符号的情况下,可以做出以下声明:
给定h=UHFa,b,p,n(x),随机选择公钥的概率小于其中UHFa,b,p,n(x′)=h。
应当注意的是,如果n=2160,,则概率小于这是可忽略的。这意味着可以通过降低单向性要求来实现抗碰撞,并实现比HASH160更高的效率。单向性会自然地引起离散对数问题,这将在下面的证明之后详细说明。
如果公钥是随机选择的,则只需证明满足方程式UHFa,b,p,n(x′)=h的x′的数量小于
需要求解的具有约束条件的方程式如下
ax′+b≡h mod p mod n, (1)
条件如下:
1≤a≤p-1 (2)
0≤b≤p-1 (3)
0≤h≤n-1 (4)
-p<x′<p (5)
最后一个不等式是对x′的解的数量进行计数所需的范围。如上所述,x的符号表示y坐标采用的值。第一步骤是将模运算转换为整数运算。存在整数k1,使得
ax′+b≡h+k1n mod p (6)
-p<h+k1n<p (7)
从(4)和(7),条件如下
-p-n<k1n<p
因此,k1的可能值的数量由界定。
类似地,存在整数k2,使得
ax′+b=h+k1n+k2p (9)
从(2)、(3)和(5),条件如下
-ap<ax′+b<ap+p (10)
结合(7)和(9),条件如下
-ap-p<k2p<ap+p (11)
-a-1<k2<a+1 (12)
(9)还意味着h-b+k1n+k2p可除以a,并且可以写为
h-b+k1n+k2p≡0 mod a (13)
对于任意选定值k1,k2≡-(h-b+k1n)p-1mod a。这给出了k2∈[0,a)的唯一解和[-a,a]范围内的最多另外两个解。如果k2=0是解,则a和-a是另外两个解。给定(12)中的约束条件,可以推断最大值数k2可以采用3。因此,可以采用的总值数x′由以下条件界定
因此,满足方程式UHFa,b,p,n(x′)=h的随机选择的公钥x′的概率由以下条件界定
最后一个不等式是从事实p<2q-2和导出的,其中p是来自Secp256k1的质数,并且q是对应群的阶。
应当注意的是,可以通过将概率的上界保留为以下形式来概括结果
其中p和n是通用散列函数中的模数,并且是输入空间的大小。
此外,可以证明为什么可以假设公钥是随机选择的。计算与给定的通用散列输出相匹配的公钥很简单。然而,计算出该公钥的私钥在计算上是不可行的。因此,为了成功地生成与给定的通用散列输出对应的签名,必须首先生成私钥,然后检查对应的公钥是否具有匹配的散列值。假设难以求解离散对数问题,可以说在这种情况下公钥只能随机选择。
上述描述已经证明,在脚本中使用通用散列函数代替HASH160是安全的,因为碰撞概率可忽略不计。此外,还已经证明通过ECDSA签名的离散对数问题可以有效地实现单向性。因此,一些实施例提供了使用通用散列函数更高效地实现P2PKH脚本。
图6示出了用于在脚本中生成公钥的示例性系统600。在这些实施例中,第一事务Tx1的第一锁定脚本可以包括公钥导出(PKD)脚本,并且PKD脚本可以包括HF脚本。PKD脚本被配置为在执行时基于包括在第二事务Tx2的解锁脚本中的父公钥PKparent来生成子公钥PKchild。也就是说,第二事务的解锁脚本可以包括父公钥PKparent,例如爱丽丝103a或鲍勃103b拥有的公钥,并且PKD脚本被配置为计算父公钥PKparent的子公钥PKchild。在这些示例中,目标数据项包括父公钥的链码cparent、父公钥PKparent和子公钥的索引。例如,第一锁定脚本可以被配置为将子公钥PKchild输出到堆栈等存储器。
图7示出了分层确定性(hierarchical deterministic,HD)密钥集(也称为HD钱包)的示例。此处,主密钥是基于种子生成的。每个子密钥集中的子密钥都是基于主密钥生成的。每个相应孙密钥集中的孙密钥都是基于相应子密钥集生成的。在该示例中,主密钥是父密钥。然而,标签“父”和“子”可用于指代第n个层级中的公钥和第n+1个层级中的公钥,其中第n+1个层级中的公钥是基于第n个层级中的公钥生成的。
PKD脚本可以被配置为使用以下方程式来生成子公钥:
PKchild=PKparent+UHFa,b,p,n(cparent||Pparent||index)·G
其中UHFa,b,p,n由HF脚本实现,cparent||Pparent||index是目标数据项,UHFa,b,p,n(cparent||Pparent||index)是散列结果。从上面的公式可以看出,PKD脚本被配置为对散列结果与生成点G执行点乘法(·)。PKD脚本还被配置为使用该乘法的结果对父公钥执行点加法(+)。
在一些示例中,PKD脚本可以被配置为使用以下方程式来生成子公钥:
其中是由HF脚本生成的散列结果的左侧256个字节。应当注意的是,在该示例中,n=2512。
例如,PKD脚本可以采用以下伪形式:
OP_DUP<0x20>OP_SPLIT OP_SWAP OP_ROT<0x20>OP_LEFT[Hex tobinary][Point scalar nultiplication][Pointaddition]
其中输入是父链码、索引和父公钥,结果将是如上所述的子公钥。
HF脚本片段可以简单地实现为
<a>OP_MUL<b>OP_ADD<p>OP_MOD<n512>OP_MOD
其中a和b是至少512位的整数,理想情况下p被选择为n的倍数以确保输出均匀分布。[Hex to binary]、[Point scalar multiplication]和[Point addition]是伪脚本,其示例如下所示。
PKD脚本可以用作HD钱包的可选子密钥。比特币改进提案(BIP)32HD钱包已经在区块链生态系统中得到广泛应用,并且提供一种从单个秘密种子中导出大量ECDSA密钥对的机制。密钥导出算法使用HMAC-SHA512来从父链码、父公钥和索引生成两个256位的字符串,HMAC-SHA512L(cparent,Pparent∥index)和MHAC-SHA512R(cparent,Pparent∥index)。左侧256位字符串用于子密钥对导出,而右侧256位字符串用作其他密钥对导出的链码。除了HMAC-SHA512提供输出所需的位长度之外,目前还不清楚HMAC-SHA512被选择用于BIP32的其他原因。HMAC-SHA512被设计为对称认证方案,以确保各方之间消息的真实性和完整性。在HD钱包的情况下,不存在真实性或完整性要求。因此,HMAC-SHA512可以用具有n=2512的通用散列函数代替。这允许以分层确定性方式执行脚本内密钥导出,这在以前是不可行的,因为SHA512在区块链脚本语言中不能用作操作码。
在链上显式导出密钥的一个好处在于,一方可以证明他们拥有的两个公钥之间的链接,因此存在关于该证明的不可变记录。这在公钥基础设施(PKI)的上下文中尤其有用,其中可以对单个公钥(例如,身份密钥)进行认证。例如,一方可以证明用于签署事务的公钥链接到经认证的公钥。借助关于链接位于链上的该证明,可以通过扩展对相关公钥进行认证。
在链上计算子公钥的另一个好处在于,该子公钥可以用于签署事务,但从不显式存储在链上。因此,如果攻击者搜索包含给定子公钥的事务,他们不会找到使用该方法的事务,从而增加了隐私度。
现在返回到上面提供的示例性PKD脚本。由于在计算子密钥Pchild时需要使用父密钥两次,因此第一操作码OP_DUP<0x20>OP_SPLIT OP_SWAP OP_ROT复制输入的父密钥Pparent。然后,它将副本拆分成其x和y坐标(分别对应于左侧和右侧32个字节),并将这些坐标置于堆栈底部,因为这是最终函数[Point addition]所需的格式。执行这些操作码后,堆栈的状态如下:
<Pparent> |
<Pparent(x)> |
<Pparent(y)> |
然后,执行HF脚本片段执行该函数后,堆栈的状态如下:
然后,后续操作码<0x20>OP_SPLIT OP_DROP丢弃HF脚本的结果的右侧32个字节。此时,该点之后堆栈的状态如下:
然后,将产生的数字从十六进制更改为二进制。应当注意的是,如果散列结果已经是二进制,则不需要进行该转换。接下来,为了计算[Point scalar multiplication],函数的输入必须为二进制,因此定义了一个函数(即,二进制转换脚本),以将HMAC的十六进制结果转换为字节,每个字节表示一个二进制数字。图8中示出了该转换的示例性脚本。
以下是执行[Hex to binary]函数时的说明性示例。在该示例中,十六进制<0x07>被转换为其二进制表示0111。在该示例中,n=1。左侧列表示堆栈,右侧列表示备用堆栈。堆栈先从左到右,然后从上到下流动。
该函数将十六进制<0x07>转换为其二进制表示<0x00010101>,其中每个字节表示一位。应当注意的是,0x前缀表示其后面的字节是十六进制数字,因此<0x00010101>实际上不同于以二进制表示的0x07,但下一操作码读取该表示的方式会将视其为以二进制表示的该数字。如果完全按照编写方式读取,则<0x00010101>相当于以十进制表示的65793。执行函数[Hex to binary]后的堆栈状态如下:
函数[Hex to binary]产生一个字符串,其中每个字节现在表示一位。对于该特定示例性PKD脚本,必须使用以下操作码将字符串拆分为数组:
[OP_1OP_SPLIT OP_SWAP]256
其中,方括号的次方表示应重复该操作的次数(在该示例中为256次)。这会产生长度为256的二进制数组,其中表示最低有效位的字节位于堆栈顶部。数组中的每个字节表示一位,并且是<0x01>或<0x00>。上述流程涉及在转换为二进制时级联二进制表示,然后将结果拆分为数组。进行该拆分的原因在于,要求采用低位优先格式的结果。该结果可以在不进行级联的情况下实现,但需要跟踪堆栈的深度,然后在保持顺序的同时不断地将堆栈项目置于顶部。将结果级联到一个字符串中,利用备用堆栈,然后进行拆分,就像上述根据脚本所实现的那样简单得多。
下面举例说明如何在脚本中执行点标量乘法。[Point scalar multiplication]函数(即,PSM脚本)。[Point scalar nultiplication]函数将HMAC函数结果(在一些示例中,仅HMAC函数结果的左侧32个字节)作为二进制表示并返回为了便于表示,使用以下定义:然后,可以计算对应的点q·G。要在脚本中计算q·G,首先要预先计算q0=20·G,q1=21·G,…,q255=2255·G。这样可以计算0≤q<2256的任何可能的q·G。这是因为,在将二进制表示作为输入的情况下,如果该二进制表示的第i个数字是1,则将对应的2i与q·G的计算的当前状态相加。如果第i个数字是0,则不会将对应的2i与q•G的计算的当前状态相加。图9中示出了用于实现这一点的示例性PSM脚本。假设输入q采用低位优先二进制数组的形式,图9中的示例性脚本计算q·G,其中<qi(x)>表示2i·G的x坐标,<qi(y)>表示2i·G的y坐标。
当q的对应位等于1时,该函数将点2i·G与q·G的当前状态相加。该函数使用[Point addition](即,点加法脚本),如下所述。[Point scalar multipllocation]函数首先将<0x00><0x00>推到堆栈中,此操作的目的是充当起始点(在该示例中,充当单位元素)。由于[Point addition]将两个点作为输入,而不是最初将<0x00><0x00>推到堆栈中,因此第一次执行时将只有一个输入,并且将导致错误。本质上,<0x00><0x00>充当单位元素,因为[Point addition]的定义方式如下:如果一个点是<0x00><0x00>,则函数仅输出另一个点。应当注意的是,选择该记数作为单位元素是安全的,因为点(0,0)不是secp256k1椭圆曲线上的点。此时,该点处堆栈的状态如下:
<(q·G)(x)> |
<(q·G)(y)> |
<Pparent(x)> |
<Pparent(y)> |
其中,最上面的两项是q·G的计算结果的x坐标和y坐标。
[Point addition]函数是在子密钥导出中使用的最终函数。这会产生[Pointscalar multiplication]的结果和Pparent密钥(在函数[Pchildderivation]的前几个操作码中复制之后一直存储在堆栈底部),并将Pchild返回到堆栈。在定义完整函数之前,需要计算几个函数。其中包括:
●[Inverse mod p]
●[Different Point addition]
●[Same Point addition]
首先,描述脚本中模逆p的示例,它将用于对两个点执行加法。费马小定理指出m-1=mp-2modp。请注意,此处的p与HF脚本的第四参数并不相同。假设输入p已知,则可以使用图11中所示的代码来对m模p进行求逆,即计算mp-2modp。<pn-1><pn-2>…<p0>表示数组,其中该数组的每一项对应于(p-2)的二进制索引,即p′=p-2=p020+p121+…+pn-12n-1,其中图10中的操作码计算函数[Inverse mod p],给定输入为<m>。
在该示例中,n为256,这是p的二进制长度。在将p-2的二进制数组推到堆栈上后,与OP_ROLL组合的操作码<(n+1)>将<m>置于堆栈顶部。在该点处将p-2推到堆栈中,以确保该逆函数是自包含的,因此可轻松用于其他情况。同样,方括号的次方的记数表示该代码的重复次数。
图11示出了用于执行点加法的示例性脚本。在该示例中,示例性脚本对两个不同的点执行点加法。对两个不同的点执行加法时,输入为<y2><x2><y1><x1>,其中每个坐标是32个字节的十六进制坐标。然后,图12中的代码计算函数[Different Point addition],从而将<y3><x3>返回到堆栈。下面示出了图11的代码中每行末尾的堆栈状态。堆栈状态从输入开始,然后依次执行每行示例性代码。
这就完成了在脚本中对不同的点执行加法的计算。
图12示出了用于执行点加法的另一示例性脚本。在该示例中,示例性脚本对相同的点执行点加法。对两个相同的点执行加法时,输入为<y1><x1><y1><x1>,其中每个坐标是32个字节的十六进制坐标。然后,图12中的代码计算函数[Same Point addition],从而将<y2><x2>返回到堆栈。下面示出了图12的代码中每行末尾的堆栈状态。堆栈状态从输入开始,然后依次执行每行示例性代码。应注意,a(与HF脚本的第一参数不同)是由椭圆曲线定义的常数,在该示例中为secp256k1,因此a=7。
图13示出了用于执行点加法的另一示例性脚本。在该示例中,示例性脚本检查要对其执行加法的两个点是相同的点还是不同的点,并相应地执行操作。应当注意的是,图13中的粗体文本解释了该行代码正在执行的操作,数字(i)对应于上面给出的点加法的定义。假定输入采用<y2><x2><y1><x1>形式,其中每个坐标是32个字节的十六进制坐标。
第一行旨在检查第二个点是否为<0x00><0x00>,在所选记数中,第二个点是无穷远点,因为已知该点不在secp256k1曲线上。如果第二个点是无穷远点,则第一个点<y1><x1>返回到堆栈,这对应于点加法的定义(4)。应当注意的是,在示例性代码中,无穷远点仅显示为第二个点。
然后,第一OP_ELSE中的第一行检查x坐标是否相等。如果相等,则检查y坐标是否也相等。如果相等,则检查y=0是否成立,在这种情况下,返回无穷远点,这对应于点加法的定义(3)。如果y≠0,则代码对一个点与该点自身执行点加法,即上文定义的函数[SamePoint addition],这对应于点加法定义的定义(2)。接下来,如果y值不同,则这些点必须互逆,从而返回无穷远点,因此返回<0x00><0x00>。这对应于点加法的定义(3)。最后,如果x值不同,则代码执行不同的点加法[Different Point addition],这对应于点加法的定义(1)。
这就完成了脚本中点加法的计算,最终完成了脚本中子密钥的计算。此时,堆栈的最终状态如下:
<Pchild(x)> |
<Pchild(y)> |
图14示出了用于将堆栈上的数据转换为压缩密钥格式的示例性脚本。该示例性函数将密钥的x和y坐标作为输入,并返回压缩公钥格式。对于输入<P(y)><P(x)>,图14中的操作码定义了函数[Compressed Key fomat]。前3个操作码检查子密钥的y坐标是偶数还是奇数。然后,后续操作码根据该结果在x坐标后附加正确的前缀。这会产生压缩子密钥,从而使堆栈的最终状态如下:
<Pchild> |
或者,如果实际上希望生成非压缩格式的结果,则可以使用以下函数:
[Uncompressed Key format]=OP_SWAP OP_CAT<0x04>OP_SWAP OP_CAT
在一些实施例中,HF脚本可以用于生成密钥值对中的密钥,该密钥值对可以用于查找表。包括钱包在内的许多应用程序需要高效的查找操作来标识已花费的、未花费的或应用程序相关的公钥。构建查找表的一种高效方法是,使用通用散列函数来创建密钥值对中的密钥。上述脚本内通用散列方法有效地将密钥值对中的密钥的副本放在链上。这允许无缝集成到本地查找表,因为它们共享相同的密钥(散列值)。对于具有较少量公钥的应用程序,它们可以通过截取散列值同时将完整值保持在链上来减少通用散列输出的字节数。
例如,爱丽丝103a可以将预期散列结果或预期散列结果的精简版本(例如,前四个前导字节)与(即,映射到)第一事务的对应预期公钥和/或事务标识符一起存储在查找表中。换句话说,(精简)预期散列结果是密钥值对的密钥,其中值是预期公钥和/或事务标识符。对于不同的散列结果、公钥和事务标识符,查找表可以包括这种类型的多个密钥值对。爱丽丝103a可以使用(精简)预期散列值作为查找项,以查找对应的公钥和/或事务标识符。
到目前为止描述的示例仅考虑为给定公钥生成单个预期散列结果。也就是说,这些示例仅描述了生成<UHFa,b,p,n(PK)>,其中<UHFa,b,p,n(PK)>是通过将通用散列函数(UHF)应用于预期公钥PK而生成的预期散列结果。这用于将事务的输出锁定到公钥,使得需要公钥和(可选地)对应的签名来解锁输出。下面将描述如何使用UHF来为给定公钥导出多个预期散列结果。这些预期散列结果将称为区块链地址。
如上所述,UHF取决于四个参数:a,b,n和q。上面的示例描述了如何通过将UHF应用于具有一组固定参数的公钥来从公钥生成单个地址(预期散列结果)。现在,通过更改参数的值,可以从相同的公钥中导出多个地址。也就是说,可以更改参数a,b,n和q的值,以生成不同的地址。在一些示例中,仅更改单个参数。在其他示例中,可以更改多个参数的值。例如,可以更改所有参数的值。
可以为参数a的每个可能值生成地址。类似地,可以为参数b的每个可能值生成地址。在一些示例中,可以为a和b的每个可能组合生成地址。在这些示例中,参数n和q的值可以是固定的。或者,参数n和q的值可以是可变的。
参数可以采用任何合适的值,包括上述任何值。
不同的地址可以用于锁定不同的事务输出。例如,可以使用从相同公钥中导出的地址中的一个不同地址来锁定相同事务的一个或多个输出。附加地或替代地,可以使用从相同公钥中导出的地址中的一个不同地址来锁定一个或多个不同事务的一个或多个输出。
锁定输出的锁定脚本采用与上述相同的形式。例如,锁定脚本可以采用以下形式:
OP_DUP[UHFa,b,p,n]<UHFa,b,p,n(PK)>OP_EQUALVERIFY OP_CHECKSIG
其中[UHFa,b,p,n]是以下各项的简写:
<a>OP_MUL<b>OP_ADD<p>OP_MOD<n>OP_MOD。
a、b、n和q的值在锁定脚本中定义,并且对应于用于生成对应地址的值。也就是说,用于生成地址的参数的值与包括相同地址的锁定脚本中显示的值相同。
对应的解锁脚本采用以下形式:
<Signature><PK>
可以看到,对于每个地址,解锁脚本的形式保持相同。也就是说,尽管地址根据用于导出地址的参数而改变,但是锁定脚本仍然使用从中导出地址的公钥和与公钥对应的签名(即,使用与公钥对应的私钥生成)来解锁。
返回参考图5,爱丽丝103a可以使用与鲍勃相同的公钥来生成多个地址。通过使用通用散列函数对公钥进行散列处理来生成每个地址,其中针对每个不同的地址更改UHF的至少一个参数的值。由爱丽丝103a生成并提交到网络106的第一事务可以包括多个输出,每个输出包括将输出锁定到这些地址中的一个地址的锁定脚本的实例。也就是说,锁定脚本包括地址,并且要求解锁脚本包括公钥,该公钥将由HF脚本进行散列处理以生成地址。附加地或替代地,爱丽丝103a可以生成一个或多个附加事务。每个事务包括至少一个输出,该至少一个输出锁定到从鲍勃的公钥中导出的地址中的一个地址。
在一些示例中,可以通过使用加密散列函数对通用散列函数的结果进行散列处理来生成地址。也就是说,爱丽丝103a可以使用通用散列函数(再次更改UHF的一个或多个参数的值以生成每个不同的地址)来导出多个地址,然后使用加密散列函数对这些地址中的每个地址进行散列处理。为方便起见,UHF输出的地址现在将称为“中间地址”或“中间散列结果”。因此,爱丽丝103a生成多个不同的中间地址,并对每个中间地址进行散列处理以生成对应的最终地址。在这些示例中,该最终地址用作区块链地址,即区块链事务的输出中显示的地址。
在这些示例中,每个锁定脚本被配置为生成中间地址,然后对中间地址进行散列处理以生成最终地址。将最终地址与锁定脚本中包括的预期最终地址进行比较。根据锁定脚本的形式,UHF的参数可以包括在解锁脚本中而不是锁定脚本中。下面给出了一个示例。
加密散列函数可以是任何合适的散列函数。例如,加密散列函数可以是RIPEMD160、SHA256、SHA512等。在一些示例中,加密散列函数可以是多个散列函数的组合。例如,加密散列函数可以是HASH160,其包括首先使用SHA256进行散列处理,然后使用RIPEMD160进行散列处理。
如上所述,在生成单个地址的情况下,为了便于引用,爱丽丝103a可以将多个不同的地址(中间地址和/或最终地址)存储在查找表中。地址可以与索引或从中导出地址的公钥相关联。
8.索引散列
本节提供了所述实施例的进一步示例。
8.1加密散列
加密散列函数是从任意大小的输入生成不可预测、固定长度的输出的单向函数,并且经常在比特币事务脚本中使用,以隐藏原像输入。其中一个最常见的示例是在P2PKH事务中屏蔽公钥。正如所强调的,P2PKH事务的规模比P2PK事务更大,因此总体事务成本更高。P2PKH通常涉及以下锁定脚本:
OP_DUP OP_HASH160<HASH160(PK)>OP_EQUALVERIFY OP_CHECKSIG。
在这种设置中,锁定资金的人员必须知道接收方的公钥的散列值(称为地址)。发送方将资金锁定到该散列值。这具有屏蔽公钥的效果。HASH160是在链上用于执行此操作的算法,并且包括以下8个步骤:
1.SHA256();
2.RIPEMD160();
3.向网络类型的输出添加前缀;
4.SHA256();
5.SHA256();
6.取步骤5中的输出的前8个字节;
7.将其与步骤3中的输出相加;以及
8.base58编码。
HASH160的输出是不可预测且确定性的,例如,相同的输入将始终生成相同的输出。
公钥通常不与个人身份相关联,因此不需要屏蔽来维护个人隐私。然而,攻击者可能将多个事务之间的共性联系起来。例如,如果攻击者鲍勃知道有关爱丽丝的真实信息,鲍勃可能会将公钥链接到爱丽丝。这不会以任何方式损害爱丽丝的资金安全,但是可能允许鲍勃跟踪爱丽丝与该公钥相关的事务,从而降低她的隐私。
HASH160算法为以上述方式锁定的P2PKH事务脚本中的公钥提供掩码,一方从链上可用的散列值中导出公钥在计算上是不可行的。然而,由于算法是确定性的,因此相同的公钥将始终生成相同的散列值。因此,如果多次使用,这将允许攻击者简单地将相同的链上P2PKH散列值匹配在一起。
此外,为了解锁资金,接收方仍然必须在链上提供其原像公钥。一旦被接受,网络就可以将该公钥与P2PKH散列值相关联,并且可以连接与该公钥相关联的任何其他链上P2PKH事务。因此,强烈建议一方应始终更改其用于新事务的公钥,以便增加隐私。这会引发以下问题,即以这种方式屏蔽会提供什么功能,尤其是考虑到使用P2PKH相对于P2PK所产生的额外成本。如果对于每个事务应更改公钥,则将账户链接到公钥是不可行的,从而减轻对屏蔽账户的需求。此外,打破ECDSA的安全性目前被视为在计算上是不可行的,因此通过散列处理提供的额外安全层似乎是不必要的。
8.2通用散列
如上所述,通用散列是指通常采用以下形式的散列形式:
HashUHF(x)=((ax+b)mod p)mod n
其中x是输入,a,b,p和n是通常保密的预定和随机整数。通用散列函数(UHF)具有两个主要属性:
1.确定性(Deterministic)-HashUHF(x)=HashUHF(y),当x=y时;
2.均匀映射分布 对于两个随机选择的输入x,y。
该第二条件定义了UHF均匀地分布输出,使得两个不同输入散列处理为相同值的概率在输出大小n的情况下小于或等于1。
如图所示,UHF仅利用一次乘法、一次加法和两次取模运算。因此,多次执行这种类型的散列处理来创建输出索引是非常高效的。这远比HASH160更高效,如上所述,HASH160利用更多步骤,这些步骤中的每个步骤更复杂。
此外,与加密散列函数相比,UHF允许从计算这些加密散列函数的一方对所使用的参数进行一定程度的选择。这种灵活性可以用于提供目前在HASH160中不可用的功能。
8.3索引散列
P2PKH事务中的公钥散列确保,公钥的所有者在花费资金之前不会将该公钥泄露给其他用户。这会在用户的私钥与公共网络之间创建额外安全层,从而在一定程度上增加隐私。然而,由于从公钥中导出私钥目前被视为在计算上是不可行的,因此这可能被视为是不必要的。此外,由于HASH160是确定性的,因此一旦用户解锁资金,攻击者就可以容易地将公钥的相同散列值连接在一起,并将它们链接到公钥。因此,建议用户更改其用于每个事务的公钥,以增加隐私。由此,在P2PKH事务与P2PK事务中使用HASH160进行屏蔽似乎仅限于将锁定脚本的大小减少13字节,但将解锁脚本的大小增加33字节。
UHF允许对参数进行一定程度的控制,这些参数可生成比脚本中当前使用的加密散列函数明显更多的功能。本公开描述了可以如何使用该功能从单个公钥生成多个散列地址、将多个公钥链接到公共散列地址,并与加密散列结合使用以从单个地址提供多个安全地址。由于UHF利用的是简单算法,因此它非常高效。
8.4通用散列函数
生成散列地址Ai的示例性通用散列函数(UFH)在此处被确定为:
Ai=HashUHF(Pi)=[aPi+b mod n]mod n
其中Pi表示第i个用户的公钥的压缩版本,其是x坐标的整数值,具有用于2个可能的对应y值的正指示符或负指示符。假设xi∈[0,p-1],并将-xi用作(xi,-)的通用散列函数的输入。
HASH160始终为相同的公钥生成相同的输出地址。如果私钥-公钥对被重复使用,攻击者可以简单地将相同的散列公钥值关联在一起。一旦解锁公钥在事务期间被泄露,攻击者就可以将所有这些散列值链接到公钥,并且掩码是冗余的。因此,建议用户为每个事务创建新公钥。这可能很繁琐,并且对于每个新事务,需要将每个新公钥传输给资助方。
使用乘法散列函数,可以从单个公钥中生成索引地址。其中a和b是为所创建的每个新地址随机生成的(p和n也可以根据用例进行更改)。这可以高效地记录在离线存储的查找表中。公钥可以与索引相关联,并且对应的地址可以使用该索引或公钥来搜索。
HashUHF(Pi)=[aiPi+bimod p]mod n。
上表可以用于为单个公钥生成最大数量(n)的不同屏蔽地址,其中ai,bi是随机选择的。这将允许资助方在知道接收方的单个公钥的情况下,向该方生成多个事务,而不具有重复的锁定脚本地址。此外,接收方不需要知道这一过程,并且只需要输入他们的公钥和签名。与接收方必须为每个事务生成新公钥并将其发送给资助方相比,这是一种更高效的解决方案。
虽然不太可能,但是可能需要谨慎检查生成相同地址的单独ai,bi的碰撞情况,模数n。如下所述,该掩码系统的安全性与值n相关。因此,很可能会根据所需的安全级别选择这些地址,并根据寻址方案选择固定地址。
两个随机选择的公钥(Pi和Pj)与相同的散列地址碰撞(例如,UHFa,b,p,n(Pi)=UHFa,b,p,n(Pj)))的概率由以下条件界定:
其中p被设置为与UHF的输入空间中相同的值,在这种情况下,为与Secp256k1一起提供的p质数。
8.5参数选择
Pi–该压缩公钥值被视为随机值,因为收受人无法选择他们希望将资金发送到哪些公钥。
p–可以选择p作为与Secp256k1(在比特币寻址中使用的椭圆曲线)一起提供的质数。可以使用该值,因为该值可最大限度地提高第一模数的抗碰撞性。由于会有效地将较小的输入大小(p)分散在较大的输出大小上,因此任何较大的数字都将是有益的。任何较大的数字具有固定值2256-232-29-28-27-26-24-1。可以选择p的其他值。
n–被选择用于增加或减小碰撞概率。n值越小,输出大小越小,从而导致碰撞次数越多。在所有安全性从比特币ECC密钥对安全性中导出的情况下,较大的n被视为更“安全”,因为碰撞次数较少,因此将有较少的非预期公钥解析到该地址以访问资金。例如,还可以更改该n值以更改固定长度输出大小,例如设置最大值n=2160,使其具有与Hash160等相同的固定长度输出。通常可以根据需要固定n。
a,b–值a和值b可以由用户从随机选择。然而,a不能等于零,可以从范围p中选择a,b,使得:1≤a≤p-1和0≤b≤p-1。这将为散列方案提供最大数量的选择和可变性。a或b的范围和大小不会影响碰撞概率。
8.6脚本
下面突出显示了可以如何锁定和解锁事务:
锁定脚本:OP_DUP<a>OP_MUL<b>OP_ADD<p>OP_MOD<q>OP_MOD<Ai>OP_EQUALVERIFYOP_CHECKSIGVERIFY
解锁脚本:<Sigi><Pi>
其中Pi表示公共地址的压缩形式。
8.7事务大小
上述锁定脚本包含7个操作码(OP_MUL、OP_ADD、OP_MOD、OP_MOD、OP_EQUAL和OP_CHECKSIGVERIFY),每个操作码的大小为1字节。散列地址Ai在脚本上将需要最多32个字节,但是该值基于变量模数n,如上所述。
锁定脚本大小主要取决于四个输入参数大小(a、b、p和n的大小)。如上所述,这些可以由用户确定。p值可以是最大值32字节(因为这是取自Secp256k1的模数2256的最大输入空间)。由此,可以根据需要选择a、b和n的大小。
如上所示,使用UHF事务的事务大于标准P2PK和P2PKH。对于上述UHF锁定脚本a,b,p和n值表示总共121个字节中的80个字节。适当时,可以通过选择较小的参数来显著减少事务大小。这将涉及安全性和可变性,这将在下一节中讨论。
减少脚本参数大小的另一种方法将是通过直接推入位来表示值。例如,如果n被选择恰好作为值2256,而不是该范围内的某个值,则可以将2256表示为1664。这样,只需使用以下操作码将值1664(其十六进制形式为1,后跟64个0)推入脚本内:
OP_1<64>OP_LSHIFT
这样做将仅使用4个字节的内存,而不是表示范围0-2256内的任意数所需的32字节。然而,只有针对参数使用精确的16次方,此类方法才会更高效。例如,可以将模数p固定为2256–232–977(来自Secp256k1)。可以使用上述方法更高效地表示这一点,如下所示:
OP_1<64>OP_LSHIFT OP_1OP_8OP_LSHIFT OP_SUB<977>OP_SUB
上述方法将执行以下操作:
1.推入1并左移64位,从而形成值2256;
2.推入1并左移8位,从而形成值232;
3.从2256中减去232;
4.推入值977并从先前输出中减去该值。
该方法以12个字节而不是32个字节形成p值Secp256k1。
8.8安全性
UHF允许多个不同的公钥散列处理为相同的解锁地址。这可在解锁公钥之前提供对公钥的屏蔽。首先,散列链上地址不同于其预期公钥。其次,如果攻击者希望努力导出哪些公钥可以解锁脚本,他们将需要计算可能与该地址碰撞的所有可能的公钥。
例如,假设选择已导致单个链上散列地址发生10亿次可能的公钥碰撞的模数n值。这意味着攻击者将需要导出10亿个公钥,以针对链上锁定脚本进行求解。这将要求攻击者针对UHF进行求解,然后从输入空间p中导出与该模数n碰撞的所有值。因此,攻击者可以导出并存储所有p/n个值,但是这不会在很大程度上帮助攻击者标识/跟踪单个用户的公钥地址的活动。当考虑到攻击者将不得不以这种方式跟踪许多UHF锁定脚本时,可以将UHF描述为以牺牲一定安全性为代价的屏蔽函数。
如上所述,从ECC密钥对安全性中导出UHF的安全性。计算出与可以解锁脚本地址的公钥对应的私钥在计算上是不可行的。即使在有10亿个公钥可以求解以在锁定脚本中形成相同地址的情况下,这仍然会给攻击者提供大约的机会来导出每次尝试形成公钥的私钥。
8.9混合散列
如上所述,UHF提供了加密散列无法提供的附加功能。然而,导出可以针对链上UHF求解的潜在公钥Pi可能有些无关紧要:
Ai=[aPi+b mod p]mod n
前提是提供a、b、p、n和Ai,这些在链上都将是可见的。
通过HASH160等加密散列函数传递UHF输出Ai,可以应对该漏洞。这将结合加密散列的抗原像特性和UHF的灵活性。将其称为混合散列,因为它涉及两种形式的散列函数。图15中示意性地示出了这一点。
通过HASH160提供的抗原像特性将使得从公开可见的地址散列中导出Ai在计算上是不可行的,这又使得计算针对求解的潜在公钥Pi是不可行的。尽管需要更多运算,但是该混合散列将提供上述所有功能。各方可以通过更改UHF参数来创建散列索引表,该散列索引表从单个公钥高效地输出多个地址。通过HASH160传递时,这些不同的地址值也将具有非常不同的值然而,从计算原像值Ai现在将是不可行的,并且因此针对该地址求解一个或多个公钥将是不可行的。散列索引表可以采用以下形式:
其中,
锁定脚本和解锁脚本可以采用以下形式:
锁定脚本:OP_DUP OP_TOALTSTACK OP_MUL OP_ADD OP_MOD OP_MOD OP_HASH160OP_EQUALVERIFY OP_FROMALTSTACK OP_CHECKSIG
解锁脚本:<Sigi><n><p><bi><ai><Pi>
通过在混合散列中使用抗原像特性,现在可以选择将所有UHF参数偏移到解锁脚本,以使锁定脚本更紧凑。这具有显著减少UTXO存储空间的益处,但也需要解锁方知道散列索引表。此外,可以通过将它们级联到地址中并验证该值来强制实施UHF值a、b、p和n。
UHF(索引散列)的功能现在得到增强,因为计算可以针对链上UHF求解的公钥在计算上是不可行的。此外,锁定脚本大小显著小于多签名事务中的锁定脚本大小,从而减少了节点使用的UTXO存储器大小。如图所示,这包括加密和通用散列,以便最好地模糊地址。
9.示例性用例
9.1单用户
本节描述了上述实施例的示例性用例。爱丽丝103a经营一款在线游戏。鲍勃103b是爱丽丝所经营游戏的常客玩家。爱丽丝103a定期为鲍勃103b生成事务以获取他的奖金。鲍勃103b较懒,并且使用冷存储钱包,使得每次玩游戏需要不断生成新的私钥-公钥对,这会给他带来不便。为了降低通信成本,鲍勃103b请求爱丽丝103在向他生成的所有支付事务中使用相同的公钥。鲍勃103b希望确保在这些单独的事务中分配给他的UTXO在花费之前不能被外部方链接。因此,爱丽丝103a使用所描述的索引散列系统来向鲍勃103b发送定期支付。
鲍勃103b将为爱丽丝103a生成一次性公钥P。然后,爱丽丝103a将为该单个公钥创建安全的链下查找表。通过以下方式生成地址的最大数量n:
爱丽丝103a现在可以使用这些索引的混合散列来生成最大数量n的不同地址爱丽丝103a和鲍勃103b可以放心,因为知道这些事务中的每个事务将具有不同的链上地址,使得恶意行为者难以将这些不同的链上地址关联在一起。此外,加密散列函数确保该同一恶意行为者无法计算用于导出这些密钥的公钥P。
鲍勃103b只需要使用相同的公钥和相关的数字签名来解锁所有这些事务,使得该过程对他来说比不断更新和传输其公钥简单得多。
9.2公开谜题比赛
类似地,对于上述示例,爱丽丝103a希望外包一些公开可用记录的验证。然而,现在她不希望将这些公开可用记录与任何特定公钥绑定在一起,而是仅希望可以验证记录的任何人都能够解锁相关联的资金。这可以根据以下方程式通过在以下链接地址方案中设置足够小的n来实现:
Ai=[aPi+b mod p]mod n
例如,如果q=2,则所有公钥和对应签名中的一半可以解锁脚本。这将不是理想的,因为对于比特币节点来说,简单地用自身的公钥和签名来代替事务解决方案来认领他们未曾认领的资金将是非常微不足道的。
然而,爱丽丝可以将q值设置为足够高,使得未知求解方可以生成私钥-公钥对,该私钥-公钥对例如平均在几天内离线满足地址系统的要求。这将确保,流氓比特币节点在区块的平均挖掘时间(10分钟)内生成自己满意的私钥-公钥对将是不可行的。假设至少有一些表现良好的矿工,原始事务将被核实有效并发布到比特币网络中,然后坏比特币节点才能生成替代事务来窃取相关联的资金。
10.结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络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.一种使用区块链事务实现散列函数HF的计算机实现的方法,其中所述方法由第一方执行并且包括:
生成第一区块链事务;以及,
将所述第一区块链事务提交到区块链事务的一个或多个节点;
其中,所述第一区块链事务包括锁定脚本;所述锁定脚本被配置为,在与包括目标数据项的第二区块链事务的解锁脚本一起被执行时,生成所述目标数据项的散列结果;其中所述锁定脚本包括HF脚本,所述HF脚本被配置为通过至少执行以下步骤来生成所述散列结果:
基于将所述目标数据项与第一参数相乘来生成第一中间结果,
基于将第二参数与所述第一中间结果相加来生成第二中间结果,
基于所述第二中间结果对第三参数的取模运算来生成第三中间结果,以及,
基于所述第三中间结果对第四参数的取模运算来生成所述散列结果。
语句2.根据语句1所述的方法,其中所述第一锁定脚本被配置为至少输出所述散列结果。作为一个示例,所述散列结果可以被输出至存储器,例如堆栈。
语句3.根据语句1或2所述的方法,其中所述锁定脚本包括预期散列结果,并且其中所述锁定脚本被配置为要求目标散列结果与所述预期散列结果相匹配,以便由所述解锁脚本解锁。
语句4.根据语句3所述的方法,其中所述预期散列结果是通过将所述散列函数应用于预期公钥而生成的。
语句5.根据语句4所述的方法,其中所述锁定脚本被配置为:要求所述目标数据项是所述预期公钥,并且包括使用与所述预期公钥对应的私钥生成的签名。
语句6.根据语句4或5所述的方法,所述方法包括:
将所述预期散列结果或其精简版本存储在映射到以下各项中的至少一项的查找表:所述预期公钥,与所述第一区块链事务相关联的数据,和/或与花费所述第一区块链事务的输出的花费事务相关联的数据。
语句7.根据语句6所述的方法,其中:
与所述第一区块链事务相关联的所述数据包括所述第一区块链事务的事务标识符和/或所述第一区块链事务本身;和/或
与所述花费事务相关联的所述数据包括所述花费事务的事务标识符和/或所述花费事务本身。
语句8.根据语句6或7所述的方法,其中所述查找表包括多个不同的散列结果或其精简版本,每个不同的散列结果通过将通用散列函数应用于不同的公钥而生成,并且其中每个不同的散列结果被映射到以下各项中的至少一项:所述不同的公钥,与包括所述不同的散列结果的相应区块链事务相关联的数据,和/或与花费所述相应区块链事务的输出的相应花费事务相关联的数据。
语句9.根据语句1或2所述的方法,其中所述锁定脚本包括公钥导出PKD脚本,所述PKD脚本被配置为生成父公钥的子公钥,其中所述PKD脚本包括所述HF脚本,并且其中所述解锁脚本包括所述父公钥,并且其中所述目标数据项至少包括父公钥的链码和所述父公钥,并且其中所述PKD脚本被配置为基于所述父公钥和所述散列结果来生成所述子公钥。所述第一锁定脚本可以被配置为输出所述子公钥。
语句10.根据语句9所述的方法,其中所述目标数据项包括附加数据。
语句11.根据语句10所述的方法,其中所述附加数据包括以下各项中的至少一项:所述子公钥的索引,时间戳,和/或消息。
语句12.根据语句9至11中任一项所述的方法,其中所述PKD脚本包括二进制转换脚本、点乘法脚本和点加法脚本,其中所述二进制转换脚本被配置为将所述散列结果转换为二进制表示,其中所述点乘法脚本被配置为将所述散列结果的所述二进制表示与椭圆曲线的生成点进行点乘法以生成中间公钥,并且其中所述点加法脚本被配置为将所述中间公钥与所述父公钥进行点加法以生成所述子公钥。
语句13.根据语句12所述的方法,其中所述散列结果被表示为十进制或十六进制表示,并且其中所述二进制转换脚本被配置为将所述散列结果的所述十进制或十六进制表示转换为所述二进制表示。
语句14.根据前述任一项语句所述的方法,其中所述第一参数是任意非零数,所述第二参数是任意数,所述第三参数是正数,所述第四参数是2^L,其中选择L来确定(define)所述散列结果的长度。
语句15.根据语句14所述的方法,其中p是确定(define)sec9256k1椭圆曲线的质数。
语句16.根据语句14或15所述的方法,其中L是以下各项中的一项:32、64、128、160、256或512。
语句17.根据前述任一项语句所述的方法,其中所述散列函数被确定(define)为HashUHF(P)=[aiP+bimod p]mod n,其中ai是所述第一参数,bi是所述第二参数,p是所述第三参数,n是所述第四参数,并且其中所述方法包括:
对于所述第一参数、所述第二参数、所述第三参数、所述第四参数中的一个、一些或全部的不同相应值,通过将所述散列函数HashUHF(P)应用于所述预期公钥P,来为所述预期公钥P生成多个不同的相应预期散列结果。
语句18.根据语句17所述的方法,其中所述第一区块链事务包括多个相应输出,每个相应输出包括相应锁定脚本,所述相应锁定脚本被配置为当与包括相应目标公钥的不同相应区块链事务的相应解锁脚本一起执行时生成所述相应目标公钥的相应散列结果,其中所述相应锁定脚本包括相应HF脚本,所述相应HF脚本被配置为通过至少执行以下步骤来生成所述相应散列结果:
基于将所述目标数据项与相应第一参数相乘来生成相应第一中间结果;
基于将相应第二参数与所述相应第一中间结果相加来生成相应第二中间结果;
基于所述相应第二中间结果对相应第三参数的取模运算来生成相应第三中间结果;以及,
基于所述相应第三中间结果对相应第四参数的取模运算来生成所述相应散列结果;
其中每个相应锁定脚本包括所述多个预期散列结果中的相应一个预期散列结果,并且其中所述相应锁定脚本被配置为:a)要求相应目标散列结果与所述相应预期散列结果相匹配,以及b)要求所述相应解锁脚本包括使用所述预期公钥生成的相应签名,以便由所述解锁脚本解锁。
语句19.根据语句17或18所述的方法,所述方法包括:
生成一个或多个其他区块链事务,其中每个其他事务包括一个或多个相应输出,每个相应输出包括相应锁定脚本,所述相应锁定脚本被配置为当与包括相应目标公钥的不同相应区块链事务的相应解锁脚本一起执行时生成所述相应目标公钥的相应散列结果,其中所述相应锁定脚本包括相应HF脚本,所述相应HF脚本被配置为通过至少执行以下步骤来生成所述相应散列结果:
基于将所述目标数据项与相应第一参数相乘来生成相应第一中间结果;
基于将相应第二参数与所述相应第一中间结果相加来生成相应第二中间结果;
基于所述相应第二中间结果对相应第三参数的取模运算来生成相应第三中间结果;以及,
基于所述相应第三中间结果对相应第四参数的取模运算来生成所述相应散列结果;
其中每个相应锁定脚本包括所述多个预期散列结果中的相应一个预期散列结果,并且其中所述相应锁定脚本被配置为:a)要求相应目标散列结果与所述相应预期散列结果相匹配,以及b)要求所述相应解锁脚本包括使用所述预期公钥生成的相应签名,以便由所述解锁脚本解锁。
语句20.根据语句17至19中任一项所述的方法,其中所述的为所述预期公钥P生成所述多个不同相应预期散列结果包括:i)对于所述第一参数、所述第二参数、所述第三参数、所述第四参数中的一个、一些或全部的不同相应值,通过将所述散列函数HashUHF(P)应用于所述预期公钥P,来生成相应中间散列结果;以及ii)使用加密散列函数对所述相应中间散列结果进行散列处理。
语句21.根据从属于语句18或19的语句20所述的方法,其中所述相应第三中间结果对由所述相应HF脚本生成的所述相应第四参数的取模运算结果是相应中间散列结果,并且其中所述相应HF脚本被配置为通过使用所述加密散列函数对所述相应中间散列结果进行散列处理来生成所述相应预期散列结果。
语句22.根据语句20或21所述的方法,其中所述加密散列函数是以下各项中的一项:RIPEMD160、SHA256、或RIPEMD160与SHA256的组合。
语句23.根据语句17至22中任一项所述的方法,所述方法包括:
将所述多个预期散列结果或其相应精简版本存储在映射到以下各项中的至少一项的查找表:所述预期公钥或其索引。
语句24.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及,
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项语句所述的方法。
语句25.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据语句1至16中任一项所述的方法。
根据本文公开的另一方面,可以提供一种方法,所述方法包括所述第一方和所述第二方的所述动作。
根据本文公开的另一方面,可以提供一种系统,所述系统包括所述第一方和所述第二方的所述计算机设备。
Claims (25)
1.一种使用区块链事务实现散列函数HF的计算机实现的方法,其中所述方法由第一方执行并且包括:
生成第一区块链事务;以及
将所述第一区块链事务提交到区块链网络的一个或多个节点;
其中,所述第一区块链事务包括锁定脚本,所述锁定脚本被配置为在与包括目标数据项的第二区块链事务的解锁脚本一起被执行时生成所述目标数据项的散列结果,其中所述锁定脚本包括HF脚本,所述HF脚本被配置为通过至少执行以下步骤来生成所述散列结果:
基于将所述目标数据项与第一参数相乘来生成第一中间结果,基于将第二参数与所述第一中间结果相加来生成第二中间结果,
基于所述第二中间结果对第三参数的取模运算来生成第三中间结果,以及
基于所述第三中间结果对第四参数的取模运算来生成所述散列结果。
2.根据权利要求1所述的方法,其中所述第一锁定脚本被配置为至少输出所述散列结果。
3.根据权利要求1或2所述的方法,其中所述锁定脚本包括预期散列结果,并且其中所述锁定脚本被配置为要求目标散列结果与所述预期散列结果相匹配,以便由所述解锁脚本解锁。
4.根据权利要求3所述的方法,其中所述预期散列结果是通过将所述散列函数应用于预期公钥而生成的。
5.根据权利要求4所述的方法,其中所述锁定脚本被配置为:要求所述目标数据项是所述预期公钥,并且包括使用与所述预期公钥对应的私钥生成的签名。
6.根据权利要求4或5所述的方法,所述方法包括:
将所述预期散列结果或其精简版本存储在查找表,所述查找表映射到以下各项中的至少一项:所述预期公钥,与所述第一区块链事务相关联的数据,和/或与花费所述第一区块链事务的输出的花费事务相关联的数据。
7.根据权利要求6所述的方法,其中:
与所述第一区块链事务相关联的所述数据包括所述第一区块链事务的事务标识符和/或所述第一区块链事务本身;和/或
与所述花费事务相关联的所述数据包括所述花费事务的事务标识符和/或所述花费事务本身。
8.根据权利要求6或7所述的方法,其中所述查找表包括多个不同的散列结果或其精简版本,每个不同的散列结果通过将通用散列函数应用于不同的公钥而生成,并且其中每个不同的散列结果被映射到以下各项中的至少一项:所述不同的公钥,与包括所述不同的散列结果的相应区块链事务相关联的数据,和/或与花费所述相应区块链事务的输出的相应花费事务相关联的数据。
9.根据权利要求1或2所述的方法,其中所述锁定脚本包括公钥导出PKD脚本,所述PKD脚本被配置为生成父公钥的子公钥,其中所述PKD脚本包括所述HF脚本,并且其中所述解锁脚本包括所述父公钥,并且其中所述目标数据项至少包括父公钥的链码和所述父公钥,并且其中所述PKD脚本被配置为基于所述父公钥和所述散列结果来生成所述子公钥。
10.根据权利要求9所述的方法,其中所述目标数据项包括附加数据。
11.根据权利要求10所述的方法,其中所述附加数据包括以下各项中的至少一项:所述子公钥的索引,时间戳,和/或消息。
12.根据权利要求9至11中任一项所述的方法,其中所述PKD脚本包括二进制转换脚本、点乘法脚本和点加法脚本,其中所述二进制转换脚本被配置为将所述散列结果转换为二进制表示,其中所述点乘法脚本被配置为将所述散列结果的所述二进制表示与椭圆曲线的生成点进行点乘法以生成中间公钥,并且其中所述点加法脚本被配置为将所述中间公钥与所述父公钥进行点加法以生成所述子公钥。
13.根据权利要求12所述的方法,其中所述散列结果被表示为十进制或十六进制表示,并且其中所述二进制转换脚本被配置为将所述散列结果的所述十进制或十六进制表示转换为所述二进制表示。
14.根据前述任一项权利要求所述的方法,其中所述第一参数是任意非零数,所述第二参数是任意数,所述第三参数是正数,所述第四参数是2^L,其中选择L来确定所述散列结果的长度。
15.根据权利要求14所述的方法,其中p是确定sec9256k1椭圆曲线的质数。
16.根据权利要求14或15所述的方法,其中L是以下各项中的一项:32、64、128、160、256或512。
17.根据前述任一项权利要求所述的方法,其中所述散列函数被确定为HashUHF(P)=[aiP+bimod p]mod n,其中ai是所述第一参数,bi是所述第二参数,p是所述第三参数,n是所述第四参数,并且其中所述方法包括:
对于所述第一参数、所述第二参数、所述第三参数、所述第四参数中的一个、一些或全部的不同相应值,通过将所述散列函数HashUHF(P)应用于所述预期公钥P,来为所述预期公钥P生成多个不同的相应预期散列结果。
18.根据权利要求17所述的方法,其中所述第一区块链事务包括多个相应输出,每个相应输出包括相应锁定脚本,所述相应锁定脚本被配置为当与包括相应目标公钥的不同相应区块链事务的相应解锁脚本一起执行时生成所述相应目标公钥的相应散列结果,其中所述相应锁定脚本包括相应HF脚本,所述相应HF脚本被配置为通过至少执行以下步骤来生成所述相应散列结果:
基于将所述目标数据项与相应第一参数相乘来生成相应第一中间结果;
基于将相应第二参数与所述相应第一中间结果相加来生成相应第二中间结果;
基于所述相应第二中间结果对相应第三参数的取模运算来生成相应第三中间结果;以及
基于所述相应第三中间结果对相应第四参数的取模运算来生成所述相应散列结果;
其中每个相应锁定脚本包括所述多个预期散列结果中的相应一个预期散列结果,并且其中所述相应锁定脚本被配置为:a)要求相应目标散列结果与所述相应预期散列结果相匹配,以及b)要求所述相应解锁脚本包括使用所述预期公钥生成的相应签名,以便由所述解锁脚本解锁。
19.根据权利要求17或18所述的方法,所述方法包括:
生成一个或多个其他区块链事务,其中每个其他事务包括一个或多个相应输出,每个相应输出包括相应锁定脚本,所述相应锁定脚本被配置为当与包括相应目标公钥的不同相应区块链事务的相应解锁脚本一起执行时生成所述相应目标公钥的相应散列结果,其中所述相应锁定脚本包括相应HF脚本,所述相应HF脚本被配置为通过至少执行以下步骤来生成所述相应散列结果:
基于将所述目标数据项与相应第一参数相乘来生成相应第一中间结果;
基于将相应第二参数与所述相应第一中间结果相加来生成相应第二中间结果;
基于所述相应第二中间结果对相应第三参数的取模运算来生成相应第三中间结果;以及
基于所述相应第三中间结果对相应第四参数的取模运算来生成所述相应散列结果;
其中每个相应锁定脚本包括所述多个预期散列结果中的相应一个预期散列结果,并且其中所述相应锁定脚本被配置为:a)要求相应目标散列结果与所述相应预期散列结果相匹配,以及b)要求所述相应解锁脚本包括使用所述预期公钥生成的相应签名,以便由所述解锁脚本解锁。
20.根据权利要求17至19中任一项所述的方法,其中所述的为所述预期公钥P生成所述多个不同相应预期散列结果包括:i)对于所述第一参数、所述第二参数、所述第三参数、所述第四参数中的一个、一些或全部的不同相应值,通过将所述散列函数HashUHF(P)应用于所述预期公钥P,来生成相应中间散列结果;以及ii)使用加密散列函数对所述相应中间散列结果进行散列处理。
21.根据从属于权利要求18或19的权利要求20所述的方法,其中所述相应第三中间结果对由所述相应HF脚本生成的所述相应第四参数的取模运算结果是相应中间散列结果,并且其中所述相应HF脚本被配置为通过使用所述加密散列函数对所述相应中间散列结果进行散列处理来生成所述相应预期散列结果。
22.根据权利要求20或21所述的方法,其中所述加密散列函数是以下各项中的一项:RIPEMD160、SHA256、或RIPEMD160与SHA256的组合。
23.根据权利要求17至22中任一项所述的方法,所述方法包括:
将所述多个预期散列结果或其相应精简版本存储在映射到以下各项中的至少一项的查找表:所述预期公钥或其索引。
24.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项权利要求所述的方法。
25.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据权利要求1至23中任一项所述的方法。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2104938.2 | 2021-04-07 | ||
GB2201957.4 | 2022-02-15 | ||
GB2201957.4A GB2615596A (en) | 2022-02-15 | 2022-02-15 | Blockchain-implemented hash function |
PCT/EP2022/055704 WO2022214255A1 (en) | 2021-04-07 | 2022-03-07 | Blockchain-implemented hash function |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117121434A true CN117121434A (zh) | 2023-11-24 |
Family
ID=80820927
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280025794.XA Pending CN117121434A (zh) | 2021-04-07 | 2022-03-07 | 区块链实现的散列函数 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117121434A (zh) |
GB (1) | GB2615596A (zh) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060218176A1 (en) * | 2005-03-24 | 2006-09-28 | International Business Machines Corporation | System, method, and service for organizing data for fast retrieval |
US11288342B2 (en) * | 2016-09-15 | 2022-03-29 | Telefonaktiebolaget Lm Ericsson (Publ) | Integrity protected capacity license counting |
IL312460A (en) * | 2017-05-23 | 2024-06-01 | Mat Llc | A distributed register for physical material |
US11412383B2 (en) * | 2018-01-03 | 2022-08-09 | Helium Systems , Inc. | Systems and methods for providing and using a decentralized wireless network |
US20200139631A1 (en) * | 2018-11-07 | 2020-05-07 | Velo3D, Inc. | Data assurance in three-dimensional forming |
US11182866B2 (en) * | 2019-02-20 | 2021-11-23 | Aon Risk Services, Inc. Of Maryland | Digital property authentication and management system |
US11405207B2 (en) * | 2019-07-31 | 2022-08-02 | The Toronto-Dominion Bank | Dynamic implementation and management of hash-based consent and permissioning protocols |
-
2022
- 2022-02-15 GB GB2201957.4A patent/GB2615596A/en active Pending
- 2022-03-07 CN CN202280025794.XA patent/CN117121434A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
GB202201957D0 (en) | 2022-03-30 |
GB2615596A (en) | 2023-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230291585A1 (en) | Method of generating a public key | |
CN115997369A (zh) | 用于在区块链网络中验证数据的方法和装置 | |
CN116547945A (zh) | 默克尔证明实体 | |
CN116830085A (zh) | 生成区块链事务以及核实区块链事务 | |
CN117044161A (zh) | 阻止敏感数据 | |
CN116508291A (zh) | 默克尔证明实体 | |
CN118451682A (zh) | 基于零知识证明的子密钥真实性 | |
US20230134619A1 (en) | Method of generating a hash-based message authentication code | |
CN115885497A (zh) | 数字签名 | |
CN117280653A (zh) | 多方区块链地址方案 | |
JP2024523923A (ja) | ティア化されたコンセンサス | |
CN118302989A (zh) | 签名验证 | |
CN117561697A (zh) | 部分基于sha的哈希函数 | |
CN117652124A (zh) | 区块链区块和存在证明 | |
CN117121434A (zh) | 区块链实现的散列函数 | |
US20240214179A1 (en) | Blockchain-implemented hash function | |
CN117337436A (zh) | 多方区块链地址方案 | |
WO2023156099A1 (en) | Identity-linked blockchain addresses | |
CN117280349A (zh) | 多方区块链地址方案 | |
TW202306368A (zh) | 對區塊鏈交易施行條件之技術(一) | |
TW202318444A (zh) | 對區塊鏈交易施行條件之技術(二) | |
CN117941317A (zh) | 生成区块链事务 | |
CN117693926A (zh) | 区块链区块和存在证明 | |
WO2024041866A1 (en) | Blockchain transaction | |
CN117678193A (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 |