CN115053226A - 将密钥映射到区块链覆盖网络 - Google Patents
将密钥映射到区块链覆盖网络 Download PDFInfo
- Publication number
- CN115053226A CN115053226A CN202080090103.5A CN202080090103A CN115053226A CN 115053226 A CN115053226 A CN 115053226A CN 202080090103 A CN202080090103 A CN 202080090103A CN 115053226 A CN115053226 A CN 115053226A
- Authority
- CN
- China
- Prior art keywords
- key
- transaction
- data storage
- node
- seed
- 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
- 238000013507 mapping Methods 0.000 title description 3
- 230000006870 function Effects 0.000 claims abstract description 124
- 238000000034 method Methods 0.000 claims abstract description 101
- 238000013500 data storage Methods 0.000 claims abstract description 93
- 238000013515 script Methods 0.000 claims description 65
- 238000012545 processing Methods 0.000 claims description 25
- 238000004422 calculation algorithm Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 5
- 230000001419 dependent effect Effects 0.000 claims description 2
- 230000000875 corresponding effect Effects 0.000 description 50
- 238000009795 derivation Methods 0.000 description 22
- 238000004891 communication Methods 0.000 description 15
- 238000005065 mining Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 238000012546 transfer Methods 0.000 description 7
- 230000001010 compromised effect Effects 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000000644 propagated effect Effects 0.000 description 4
- 238000009412 basement excavation Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- JLQUFIHWVLZVTJ-UHFFFAOYSA-N carbosulfan Chemical compound CCCCN(CCCC)SN(C)C(=O)OC1=CC=CC2=C1OC(C)(C)C2 JLQUFIHWVLZVTJ-UHFFFAOYSA-N 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 238000005728 strengthening Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000000454 anti-cipatory effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 208000020832 chronic kidney disease Diseases 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012946 outsourcing Methods 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000010561 standard procedure Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+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/008—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols involving homomorphic encryption
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
- H04L9/083—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) involving central third party, e.g. key distribution center [KDC] or trusted third party [TTP]
- H04L9/0833—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) involving central third party, e.g. key distribution center [KDC] or trusted third party [TTP] involving conference or group key
- H04L9/0836—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) involving central third party, e.g. key distribution center [KDC] or trusted third party [TTP] involving conference or group key using tree structure or hierarchical structure
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0869—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
-
- 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
Abstract
一种管理覆盖在区块链的数据存储事务上的覆盖网络的方法,由此所述覆盖网络的数据内容存储在所述数据存储事务的载荷中,覆盖层链接定义在所述数据存储事务之间。所述方法包括:识别所述覆盖网络的图结构,其中节点对应于所述数据存储事务中不同的一个,边对应于所述链接。每个节点与相应的第一密钥相关联,所述相应的第一密钥用于签署子数据存储事务的输入,以授权将所述子数据存储事务写入所述区块链。所述方法进一步包括:使用子密钥派生CKD函数,以确定具有与所述覆盖网络相同的所述图结构的分层第二密钥集,其中所述第二密钥启用除签署所述数据存储事务的输入之外的附加函数。
Description
技术领域
本公开涉及覆盖在区块链上的覆盖网络(例如,Metanet)并且涉及确定密钥集以映射到覆盖网络的不同节点。
背景技术
区块链是指一种分布式数据结构形式,其中在点对点(P2P)网络中的多个节点中的每个节点处维护区块链副本。区块链包括一系列数据区块,其中每个区块包括一个或更多个事务(transaction)。每个事务都可以回指序列中的先前事务,其可以扩展一个或更多区块。事务可以通过提交到网络包括在新区块中。新区块的创建过程称为“挖掘”,该过程涉及多个挖掘节点中的每个挖掘节点争相执行“工作量证明”,即基于等待包括在区块中的未决事务池解决加密难题。
区块链中的事务通常用于传递数字资产,即用作价值储存手段的数据。但是也可利用区块链实现区块链上的分层附加功能。例如,区块链协议可允许在事务输出中存储附加用户数据。现代区块链在单一事务中可储存的最大数据容量在不断增加,从而能够并入更复杂的数据。例如,这可用于在区块链中存储电子文档,甚至音频或视频数据。
网络中的每个节点可以具有以下三个角色中的任何一个、两个或全部:转发、挖掘和存储。转发节点在整个网络节点中传播事务。挖掘节点将事务挖掘到区块中。存储节点各自对区块链中的已挖掘区块存储自己的副本。为了将事务记录在区块链中,一方将该事务发送到网络中的节点中的一个节点进行传播。接收该事务的挖掘节点可以争相将该事务挖掘到新区块中。每个节点被配置为遵守相同的节点协议,该协议将包括用于确认事务有效的一个或更多个条件。无效事务将不会传播或挖掘到区块中。假定事务已经核实有效,从而在区块链上被接受,则该事务(包括任何用户数据)将因此作为不可改变的公共记录,继续存储在P2P网络中的各个节点处。
成功解决工作量证明难题以创建最新区块的矿工通常被奖励一个称为“区块创始事务”的新事务,该事务会生成新的数字资产数额。工作量证明激励矿工不要欺骗系统,在他们的区块中包括双重花费事务,因为挖掘区块需要大量计算资源,而包括试图双重花费的区块很可能不会被其他节点接受。
在“基于输出的”模型(有时称为基于UTXO的模型)中,给定事务的数据结构包括一个或更多个输入以及一个或更多个输出。任何可花费输出包括指定数字资产数额的元素,有时称为UTXO(“未花费的事务输出”)。该输出还可以包括指定用于赎回该输出的条件的锁定脚本。每个输入包括指向先前事务中的此类输出的指针,并且还可以包括解锁脚本以用于解锁指向输出的锁定脚本。因此,考虑一对事务,将其称为第一事务和第二事务(或“目标”事务)。第一事务包括指定数字资产数额的至少一个输出,并且包括定义解锁该输出的一个或更多个条件的锁定脚本。第二事务(目标事务)包括至少一个输入和解锁脚本,该至少一个输入包括指向第一事务的输出的指针;该解锁脚本用于解锁第一事务的输出。
在此类模型中,当第二事务(目标事务)被发送到P2P网络以在区块链中传播和记录时,在每个节点处应用的有效性准则之一将是:解锁脚本满足在第一事务的锁定脚本中定义的一个或更多个条件中的所有条件。另一条件将是:第一事务的输出尚未被另一早期有效事务赎回。根据这些条件中的任何一个条件发现目标事务无效的任何节点都不会传播该事务,也不会包括该事务以便挖掘到要记录在区块链中的区块中。
另一种事务模型是基于账户的模型。在这种情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由矿工单独存储到区块链中,并不断更新。
区块链网络本身属于覆盖在底层网络(例如,互联网)上的覆盖网络。然而,也可以在区块链上覆盖另一层覆盖网络。Metanet便是此方面的示例。Metanet的每个节点都是区块链上的不同事务。数据内容和Metanet元数据存储在每个此类事务的载荷中,通过OP_RETURN存储在事务的不可花费的输出中。数据内容是Metanet存储的实际用户内容,例如文本、图像、视频或音频内容等;而元数据定义了Metanet节点之间的链接。Metanet节点之间的链接或边不一定对应于区块链层的花费边。即,如果给定Metanet事务的输入指向区块链层的另一资金事务的输出,则Metanet层的相同事务或Metanet节点的父事务不一定与资金事务相同。相反,Metanet层的链接或边定义了Metanet的数据内容之间的链接。
发明内容
为了便于说明,将在Metanet以及Metanet节点和边的上下文中对本发明内容进行描述。然而,应当理解的是,这并不局限于此,或者更通俗地说,同样的原理也应用于覆盖在区块链上的任何覆盖网络的节点和边。
Metanet网络中的每个节点均可具有与某个给定函数相关联的密钥,例如,授权将数据内容写入相应Metanet节点所需的密钥。此外,对于给定函数(例如,写入),多个不同Metanet节点中的每一个都可能需要不同的单独密钥。因此,需要一组多个密钥,每个不同的Metanet节点一个密钥。
此外,所述Metanet网络中的任何给定节点实际上可具有与其相关联的大量不同潜在函数中的一个或更多个,其中每个此类函数可能需要不同的密钥。例如,将数据内容写入Metanet节点时可能需要第一密钥集中的第一密钥,而加密和/或解密给定Metanet节点的数据内容时可能需要第二密钥集中的第二密钥。因此,在多个Metanet节点上,第一函数可能需要第一密钥集(每个Metanet节点需要不同的单独第一密钥),第二函数可能需要第二密钥集(每个Metanet节点需要不同的单独第二密钥)。
给定密钥集本质上可以是分层的。这意味着在所述密钥集内,下层密钥都派生自上层父密钥,可能会跨越多代(父辈、祖辈、等),一直追溯到最终派生所述密钥集内所有密钥的公用种子。因此,所述密钥集可以描述为具有树结构等图结构,其中树中的节点对应于所述密钥集内的不同密钥,节点之间的边表示从一个密钥派生另一密钥。所述种子可被认为是树的“树干”或“根”。密钥可以使用已知类型的确定性密钥派生算法彼此派生,该确定性密钥派生算法称为子密钥派生(child key derivation,CKD)函数。多种形式的CKD函数都是已知的,从而系统设计者能够根据其希望的任意图结构派生密钥集。
需要提供更有效的方式分配、管理和/或传送Metanet网络(或类似网络)的各种密钥。
具体而言,如果给定密钥集的分层结构(根据该分层结构,彼此派生给定函数的密钥)直接映射到Metanet(或覆盖在区块链上的其它此类覆盖网络)的对应部分的Metanet节点和边的图结构(例如,树结构),则需要提供更有效的方式。换言之,对于树结构中给定点的Metanet节点(或类似节点)而言,在该Metanet节点执行给定函数所需的密钥可以在具有相同图结构的对应分层密钥集内的相同位置处找到。然后,为了确定用于给定Metanet节点的密钥,只需要知道相关种子和节点在图结构中的位置。
因此,根据本文公开的一方面,提供了一种管理覆盖在区块链的数据存储事务上的覆盖网络的方法,由此所述覆盖网络的数据内容存储在所述数据存储事务的载荷中,覆盖层链接定义在所述数据存储事务之间。所述方法包括由第一计算机设备上运行的第一软件模块:识别所述覆盖网络的图结构,所述图结构包括多个节点和节点之间的边,其中所述节点中的每一个对应于所述数据存储事务中不同的相应一个,所述边中的每一条对应于所述链接中不同的相应一个。每个节点与相应的第一密钥相关联,所述相应的第一密钥相用于在所述覆盖网络的所述图结构中签署子数据存储事务的输入,以授权将所述子数据存储事务写入所述区块链。所述第一密钥由第一种子生成。所述方法进一步包括由所述第一软件模块:使用应用于第二种子的子密钥派生(CKD)函数,以确定具有与所述覆盖网络相同的所述图结构的分层第二密钥集。每个第二密钥对应于与所述相应数据存储事务在所述图结构中相同的位置处的所述节点中不同的相应一个,其中所述第二密钥不是用于签署所述数据存储事务的输入,而是用于启用附加函数(例如,提供资金或解密)。
所述覆盖网络(例如,Metanet网络)的所述图结构可以是部分或全部所述覆盖网络的结构。
每个密钥可包括公钥-私钥对的私钥和/或公钥-私钥对的公钥。
在Metanet中,生成具有与Metanet相同结构的密钥层次结构的想法先前仅用于签署Metanet数据存储事务的输入的密钥集(有时称为结构密钥或写入密钥)。该想法从未用于生成任何其它类型密钥的层次结构,例如用于提供资金或加密的密钥集。本公开认识到该想法可扩展到其它此类密钥集。
例如,这能够将给定Metanet节点的密钥在不同的软件模块(例如,不同方的钱包,或给定钱包中的不同隔离模块)之间进行传送,只需指示该Metanet节点在图中的位置即可。给定相关密钥集的种子后,接收模块可以仅基于知道该节点的位置和图的种子,在图结构中的指示位置处为Metanet节点派生所需的密钥。这提供了一种以信令方式告知密钥的更高效方式,且数据开销更少。如果种子在选定的一组软件模块(例如,仅发送方和接收方或选定的一组当事方)之间保密,则这也会更加安全,因为密钥本身不需要在模块之间发出信号。
因此,在实施例中,所述方法可进一步包括:从所述第一软件模块向第二软件模块传送所述图结构中的一个位置的指示,从而使得所述第二软件模块能够基于所述传送位置以及所述第一种子和用于所述第一密钥的所述CKD函数来确定该位置处节点的相应第一密钥。
在分层密钥集具有树结构或其它此类图结构的情况下,如本领域技术人员所熟悉的,这意味着分层派生的密钥集。即,密钥集中的密钥从结构顶层的种子开始,以分层的方式彼此派生。换言之,图结构中的每个节点对应于相应密钥,每条边对应于密钥集内密钥的彼此派生。在分层密钥集具有与覆盖网络(例如,Metanet)相同的图结构的情况下,这意味着密钥之间分层派生的图结构与覆盖网络中数据存储事务之间链接的结构相同。换言之,图结构中的每个节点对应于密钥集中的相应密钥和覆盖网络中的相应数据存储事务,图结构中的每条边对应于密钥集中的相应依赖关系和覆盖网络中数据存储事务之间的相应链接。
在实施例中,两个或更多个不同密钥集可以使用相同的图结构,每个密钥集用于不同的函数(例如,一个用于加密和/或解密数据内容,另一个用于授权写入数据内容)。
例如,所述方法可进一步包括由所述第一软件模块:使用应用于所述第一种子的CKD函数,以将所述第一密钥确定为具有与所述覆盖网络和所述第二密钥集相同的所述图结构的分层密钥集中的密钥,每个第一密钥对应于与所述相应节点在所述图结构中相同的位置处的所述节点中不同的相应一个。
在这种情况下,密钥集使用不同的种子派生,但具有相同的层次图结构。用于确定第二密钥集的CKD函数可以是与第一密钥集相同形式的函数(但应用于不同的种子),也可以是不同形式的CKD函数。
优选地,不由第一软件模块将第二种子传送到第二软件模块,并且也不以任何其它方式允许第二软件模块访问第二种子。
因此,第一软件模块可以向第二软件模块发出Metanet图结构(或类似结构)中节点位置的指示信号,但不泄露第二种子。例如,这些模块可以是不同方的计算机设备上运行的软件,也可以是在给定方的计算机设备中运行的不同隔离模块。无论采用哪种方式,第二软件模块都可以访问第一种子,但不可以访问第二种子。例如,第一模块可以将第一种子和节点位置发送到第二模块,或者第一节点可以是第二模块预先已知的(例如,先前由第一模块或第三模块共享)。这使得第二软件模块能够基于位置和种子派生第一函数的密钥,而不是相同位置处节点的第二函数的密钥,因为它无法访问第二种子。
在这方面的示例性应用中,第一软件模块可以由客户爱丽丝的钱包构成,第二软件模块可以由服务提供商鲍勃的软件构成,鲍勃相比爱丽丝拥有更多的专业技术。爱丽丝向鲍勃付费,以将她的数据作为Metanet的节点记录在区块链的事务中。她需要将写入节点的密钥传送给鲍勃。然而,她还将对内容进行加密,且不希望将加密密钥泄露给鲍勃。鲍勃没有理由需要解密数据或以明文方式查看数据才能上传数据。
将所公开的映射第二密钥集到覆盖网络图结构的有利应用的另一(替代或附加)示例旨在确保至少对于第一软件模块,保留其密钥派生中的结构,从而另一些实体(即,第三软件模块)能够通过仅知道密钥和事务在结构中的位置(以及CKD)来恢复数据存储事务(例如,Metanet事务)的所有相关密钥。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3是覆盖在区块链上的网络的示意图;
图4是示出用于在区块链上覆盖Metanet等网络的示例性协议的示意性事务图;
图5示意性地示出了具有与Metanet节点网络的至少一部分相同的树结构的分层密钥集;
图6示意性地示出了派生多个密钥域的方案,每个密钥域都包括分层密钥集;
图7示意性地示出了图6中所示方案的不同路径类型;
图8是示出第一软件模块与第二软件模块之间密钥通信的示意性框图;
图9是由第一计算机设备执行的方法的示意性流程图;
图10是由第二计算机设备执行的方法的示意性流程图;
图11示意性地示出了在HD钱包框架中从父私钥和公钥生成子私钥和公钥的机制;
图12示意性地示出了从扩展的父公钥生成子公钥的机制。
具体实施方式
示例性系统概述
图1示出了一种用于实现区块链150的示例性系统100。系统100包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个节点104,该多个节点被设置成在分组交换网络101内形成点对点(P2P)覆盖网络106。
就本小节而言,“节点”指区块链网络106的节点104。稍后,节点还将指Metanet或覆盖在区块链上的其它此类网络的节点。
该区块链网络106的每个节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个节点104包括含一个或更多个处理器的处理装置,例如一个或更多个中央处理单元(CPU)、加速器处理器、特定应用程序处理器和/或现场可编程门阵列(FPGA)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等的磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等的电子媒介和/或诸如光盘驱动器等的光学介质。
区块链150包括一系列数据区块151,其中在P2P网络160中的多个节点中的每个节点处维护相应的区块链150副本。区块链中的每个区块151均包括一个或更多个事务152,其中该上下文中的事务是指一种数据结构。数据结构的性质将取决于用作事务模型或计划的一部分的事务协议类型。给定的区块链通常全程使用一个特定的事务协议。在一种常见的事务协议中,每个事务152的数据结构至少包括一个输入和至少一个输出。每个输出指定一个数额,该数额表示属于输出被加密锁定的用户103的数字资产值(需要该用户的签名进行解锁,从而进行赎回或花费)。每个输入指向先前事务152的输出,从而链接这些事务。
节点104中的至少一些节点扮演转发节点104F的角色,这些节点转发并因此传播事务152。节点104中的至少一些节点扮演挖掘区块151的矿工104M的角色。节点104中的至少一些节点扮演存储节点104S(有时也称为“完整副本”节点)的角色,每个存储节点均在相应的存储器中存储相同区块链150的相应副本。每个矿工节点104M还维护等待挖掘到区块151中的事务152的池154。给定节点104可以是转发节点104、矿工104M、存储节点104S或其中两个节点或所有节点的任意组合。
在给定的当前事务152j中,输入(或每个输入)包括指针,该指针引用事务序列中先前事务152i的输出,指定该输出将在当前事务152j中被赎回或“花费”。通常,当前事务可以是池154或任何区块151中的任何事务。尽管为了确保当前事务有效,将需要存在先前事务152i并核实其有效,但是在创建当前事务152j甚至向网络106发送当前事务152j时,不必存在先前事务152i。因此,在本文中,“先前”是指由指针链接的逻辑序列中的前任,而不一定是时间序列中的创建时间或发送时间,因此,不一定排除无序创建或发送事务152i、152j的情况(参见下面关于孤立事务的讨论)。先前事务152i同样可以称为先行事务或前任事务。
当前事务152j的输入还包括先前事务152i的输出被锁定到的用户103a的签名。反过来,当前事务152j的输出可以加密锁定到新用户103b。因此,当前事务152j可将先前事务152i的输入中定义的数额转移到当前事务152j的输出中定义的新用户103b。在某些情况下,事务152可具有多个输出,以在多个用户间分割输入数额(其中一个可以是原始用户103a,以便进行变更)。在某些情况下,一事务还可以具有多个输入,以将一个或更多个先前事务的多个输出中的数额汇总在一起,并重新分配到当前事务的一个或更多个输出。
上述可称为“基于输出的”事务协议,有时也称为未花费的事务输出(UTXO)的协议(其中输出称为UTXO)。用户的总余额不是用区块链中存储的任何一个数字定义的;相反,用户需要特殊“钱包”应用程序105,以整理该用户的所有UTXO值,这些UTXO值分散在区块链151的许多不同事务152中。
作为基于账户的事务模型的一部分,另一种类型的事务协议可称为“基于账户的”协议。在基于账户的情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由矿工单独存储到区块链中,并不断更新。在此类系统中,事务使用账户的运行事务记录(也称为“头寸”)进行排序。该值由发送者签名作为其加密签名的一部分,并作为事务引用计算的一部分进行哈希处理。此外,可选的数据字段也可以在事务中签名。例如,如果数据字段中包含先前事务的ID,则该数据字段可指向先前事务。
无论采用何种类型的事务协议,当用户103希望执行新事务152j时,其希望将新事务从其计算机终端102发送至P2P网络106的节点104中的一个(现在通常是服务器或数据中心,但原则上可以是其他用户终端)。此节点104根据在节点104中的每个节点处应用的节点协议检查事务是否有效。节点协议的详细信息将与相关区块链150中使用的事务协议类型相对应,一起形成整个事务模型。节点协议通常要求节点104检查新事务152j中的加密签名是否与预期签名相匹配,这取决于事务152的有序序列中的先前事务152i。在基于输出的情况下,这可包括检查新事务152j的输入中包含的用户加密签名是否与新事务花费的先前事务152i的输出中定义的条件相匹配,其中该条件通常包括至少检查新事务152j的输入中的加密签名是否解锁新事务的输入所指向的先前事务152i的输出。在一些事务协议中,条件可至少部分地由输入和/或输出中包含的自定义脚本定义。或者,这可仅由节点协议单独确定,或可通过其组合确定。无论采用哪种方式,如果新事务152j有效,当前节点会将其转发到P2P网络106中的一个或更多个其他节点104。这些节点104中的至少一些节点还作为转发节点104F,根据相同的节点协议应用相同的测试,从而将新事务152j转发到一个或更多个进一步的节点104,依此类推。通过这种方式,新事务在节点104的整个网络中进行传播。
在基于输出的模型中,给定输出(例如,UTXO)是否花费的定义是,根据节点协议,其是否通过另一个随后事务152j的输入有效赎回。事务有效的另一个条件是其试图花费或赎回的先前事务152i的输出尚未被另一个有效事务花费/赎回。同样,如果无效,事务152j将不会在区块链中传播或记录。这可防止重复花费,即花费者对同一个事务的输出花费超过一次。另一方面,基于账户的模型通过保持账户余额防止重复花费。因为同样存在定义的事务顺序,账户余额在任何时候均具有单一定义的状态。
除核实之外,节点104M中的至少一些节点在称为挖矿的过程中争先创建事务区块,该过程以“工作量证明”为基础。在挖矿节点104M处,将新事务添加到区块中尚未出现的有效事务的池中。然后,矿工争相通过尝试解决加密难题来组装事务池154中事务152的新的有效区块151。通常情况下,这包括搜索“随机数”值,从而当随机数与事务池154并置且进行哈希处理时,哈希值的输出满足预定条件。例如,预定条件可以是哈希值的输出具有某个预定义的前导零数。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而在试图解决难题的每个节点104M处消耗大量的处理资源。
解决难题的第一矿工节点104M在网络106上宣布难题解决,提供解决方案作为证明,然后网络中的其他节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,就可以直接检查该解决方案是否使哈希值的输出满足条件)。基于已在每个此类节点处检查获胜者的已宣布解决方案,获胜者已为其解决该难题的事务池154之后由充当存储节点104S的节点104中的至少一些节点记录在区块链150中作为新区块151。区块指针155还分配给指向区块链中先前创建的区块151n-1的新区块151n。工作量证明有助于降低重复花费的风险,因为创建新区块151需要大量工作,并且由于包含重复花费的任何区块都可能被其他节点104拒绝,因此挖矿节点104M受到激励,不允许在其区块中包含双重花费。一旦创建,则不可修改区块151,因为其根据相同的协议在P2P网络106中的存储节点104S中的每个存储节点进行识别和维护。区块指针155还向区块151施加顺序。由于事务152记录在P2P网络106中每个存储节点104S处的有序区块中,因此提供了事务的不可变公共分类账。
应当注意的是,在任何给定时间争相解决难题的不同矿工104M可能会根据任何给定时间的未挖掘事务池154的不同快照执行该操作,具体取决于他们何时开始搜索解决方案。解决相应难题的人员首先定义新区块151n中包含的事务152,并更新当前未挖掘事务池154。然后,矿工104M继续争相从新定义的未完成池154中创建区块,依此类推。此外,还存在解决可能出现的任何“分叉”的协议,其中两名矿工104M彼此在很短的时间内解决难题,从而传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。
在大部分区块链中,获胜矿工104M会自动获得特殊类型的新事务作为奖励,该新事务创建新的数字资产值(与将数字资产数额从一个用户转移至另一个用户的正常事务截然相反)。因此,获胜节点被视为已“挖掘”一定数量的数字资产。这种特殊类型的事务有时称为“生成”事务,其自动形成新区块151n的一部分。该奖励可激励矿工104M争相参与工作量证明。通常情况下,常规(非生成)事务152还将在其输出中的一个输出中指定附加事务费用,以进一步奖励创建其中包含事务的区块151n的获胜矿工104M。
由于挖掘中涉及的计算资源,通常至少矿工节点104M中的每个矿工节点采用服务器的形式,该服务器包括一个或更多个物理服务器单元,甚至整个数据中心。每个转发节点104M和/或存储节点104S还可采取服务器或数据中心的形式。但是,原则上来说,任何给定节点104均可采用一个用户终端或联网在一起的一组用户终端的形式。
每个节点104的存储器均存储被配置为在节点104的处理装置上运行的软件,以根据节点协议执行其相应的角色并处理事务152。应当理解的是,在本文中归因于节点104的任何动作均可通过在相应计算机设备的处理装置上运行的软件执行。节点软件可以在应用层的一个或更多个应用中实现,或者在诸如操作系统层或协议层的较低层中实现,或者在这些层的任何组合中实现。此外,在本文中使用的“区块链”一词是指一般技术类型的通用术语,不限于任何特定专有区块链、协议或服务。
扮演消费用户角色的多方103中的每一方的计算机设备102也连接到网络101。他们充当事务中的支付人和收受人,但不一定代表其他方参与挖掘或传播事务。他们不一定运行挖矿协议。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,以及第二方103b及其相应的计算机设备102b。应当理解的是,更多此类当事方103及其相应的计算机设备102可能存在并参与系统,但为了方便起见,未进行说明。每一方103均可以是个人或组织。仅出于说明目的,在本文中,第一方103a称为爱丽丝(Alice),第二方103b称为鲍勃(Bob),但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
每一方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创建、签名和发送拟在节点104的整个网络中传播的事务152,并因此包含在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产数额。在基于输出的系统中,该第二功能包括整理分散在区块链150中属于相关方的各种事务152的输出中定义的数额。
注意:虽然各种客户端功能可以描述为集成到给定客户端应用105中,但这不一定是限制性的,相反,在本文中所描述的任何客户端功能可以在由两个或更多个不同应用组成的套件中实现,例如经由API进行接口连接或一个应用作为另一个应用的插件。更通俗地说,客户端功能可以在应用层或诸如操作系统的较低层或这些层的任意组合实现。下面将根据客户端应用105进行描述,但应当理解的是,这不是限制性的。
每个计算机设备102上的客户端应用程序或软件105的实例可操作地耦合到P2P网络106的转发节点104F中的至少一个转发节点。这可以启用客户端105的钱包功能,以将事务152发送至网络106。客户端105还可联系一个、一些或所有存储节点104,以在区块链150中查询相应方103作为接收者的任何事务(或实际上在区块链150中检查其他方的事务,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供事务信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据事务协议制定和发送事务152。每个节点104运行软件,其被配置为根据节点协议核实事务152有效的软件,并且在转发节点104F的情况下转发事务152,以在整个网络106中传播此类事务。事务协议和节点协议相互对应,给定事务协议和给定节点协议一起实现给定的事务模型。区块链150中的所有事务152均采用相同的事务协议(尽管事务协议可允许其内存在不同的事务子类型)。网络106中的所有节点104采用相同的节点协议(尽管其可根据针对该子类型定义的规则区分处理不同的事务子类型,并且不同的节点还可扮演不同的角色,从而实现协议的不同对应方面)。
如上所述,区块链150包括一系列区块151,其中每个区块151包括通过如前所述的工作量证明过程创建的一个或更多个事务152的集合。每个区块151还包括区块指针155,其指向区块链中先前创建的区块151,以定义区块151的顺序。区块链150还包括有效事务池154,其等待通过工作量证明过程包含在新的区块中。每个事务152(除了一生成事务)包括指向先前事务的指针,以定义事务序列的顺序(注:事务152的序列可进行分支)。区块151的区块链一直追溯到创始区块(Gb)153,该创始区块是区块链中的第一区块。区块链150中早期的一个或更多个原始事务152指向创始区块153,而非先前事务。
当给定方103(比方说爱丽丝)希望发送拟包含在区块链150中的新事务152j时,她将根据相关事务协议(使用其客户端应用程序105中的钱包功能)制定新事务。然后,她将事务152从客户端应用程序105发送至其连接的一个或更多个转发节点104F中的一个。例如,这可以是与爱丽丝的计算机102最近或最佳连接的转发节点104F。当任何给定节点104接收新事务152j时,其将根据节点协议及其相应的角色进行处理。这包括首先检查新接收的事务152j是否满足变为“有效”的特定条件,具体示例稍后将详细讨论。在一些事务协议中,有效条件可通过事务152中包含的脚本在每个事务的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
如果新接收的事务152j通过有效性测试(即:“有效”的条件下),接收事务152j的任何存储节点104S将向在该节点104S处维护的区块链150的副本中的池154中添加新有效事务152。进一步地,接收事务152j的任何转发节点104F随后将有效事务152传播至P2P网络106中的一个或更多个其他节点104。由于每个转发节点104F应用相同的协议,因此假定事务152j有效,这意味着事务很快将在整个P2P网络106中传播。
一旦进入在一个或更多个存储节点104处维护的区块链150的副本中的池154中,矿工节点104M将开始竞相解决包括新事务152的池154的最新版本方面的工作量证明难题(其他矿工104M可继续尝试基于池154的旧视角解决难题,但首先解决难题的矿工将定义下一个新区块151的结束位置和新池154的开始位置,最终将有人解决包括爱丽丝的事务152j的池154的一部分的难题)。一旦包括新事务152j的池154完成工作量证明,其将不可变地成为区块链150中区块151中的一个区块的一部分。每个事务152包括指向早前事务的指针,因此事务的顺序也被不可变地记录下来。
不同的节点104可以首先接收给定事务的不同实例,并且因此在一个实例被挖掘到区块150中之前具有关于哪个实例“有效”的冲突视图,此时所有节点104同意所挖掘的实例是唯一的有效实例。如果节点104接受一个实例为有效实例,然后发现第二实例已记录在区块链150中,则该节点104必须接受这一点,并将丢弃(即视为无效)其最初接受的未挖掘实例。
基于UTXO的模型
图2示出了示例性事务协议。这是基于UTXO的协议的示例。事务152(简称“Tx”)是区块链150的基本数据结构(每个区块151包括一个或更多个事务152)。下面将通过参考基于输出或基于“UTXO”的协议进行描述。但这并不限于所有可能的实施例。
在基于UTXO的模型中,每个事务(“Tx”)152包括数据结构,其包括一个或更多个输入202和一个或更多个输出203。每个输出203可包括未花费的事务输出(UTXO),其可用作另一新事务的输入202的来源(如果UTXO尚未赎回)。UTXO指定数字资产数额(价值储存手段)。它还可包含其来源事务的事务ID以及其他信息。事务数据结构还可包括头部201,其可包括输入字段202和输出字段203的大小指示符。头部201还可包括事务的ID。在实施例中,事务ID是事务数据(不含事务ID本身)的哈希值,且存储在提交至矿工104M的原始事务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中的一个区块中,或者可能仍在池154中等待,在这种情况下,该事务将很快包括在新区块151中。或者,Tx0和Tx1可以创建并一起发送至网络102;或者,如果节点协议允许缓冲“孤立”事务,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的输入中的锁定脚本是否包含爱丽丝签名预期部分的数据时的签名。预期的部分数据本身(“消息”)也需要包括在Tx0中,以便执行此认证。在实施例中,签名的数据包括整个Tx0(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
本领域技术人员将熟悉通过公私密码进行认证的细节。基本上而言,如果爱丽丝已通过使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息(未加密消息),诸如节点104等其他实体可认证加密版本的消息必须已经由爱丽丝签名。签署通常包括对消息进行散列,签署哈希值和将此标记到消息的明文版本作为签名,从而使公钥的任何持有者能够认证签名。因此,应当注意的是,在实施例中,在本文中对签名特定数据片段或事务部分等的任何引用可以意味着对该数据片段或事务部分的哈希值进行签名。
如果Tx1中的解锁脚本满足Tx0的锁定脚本中指定的一个或更多个条件(因此,在所示示例中,如果在Tx1中提供了爱丽丝的签名并进行认证),则节点104认为Tx1有效。如果是挖矿节点104M,这意味着其将添加至等待工作量证明的事务154池。如果是转发节点104F,则其将事务Tx1转发到网络106中的一个或更多个其他节点104,从而将在整个网络中传播。一旦Tx1有效并包括在区块链150中,这将把Tx0中的UTXO0定义为已花费。请注意,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的第二输出中自己找零钱,或者支付给另一方。
在实践中,爱丽丝通常还将需要包括获胜矿工的费用,因为现在仅靠区块创始事务的奖励币通常不足以激励挖掘。如果爱丽丝未包括矿工的费用,Tx0可能会被矿工节点104M拒绝,因此,尽管技术上有效,但仍然不会传播并包括在区块链150中(如果矿工104M不愿意,矿工协议不会强制他们接受事务152)。在一些协议中,挖掘费不需要其自身的单独输出203(即不需要单独的UTXO)。相反,给定事务152中输入202所指向的总数额与输出203所指定的总数额之间的任何差额都将自动提供给获胜矿工104。例如,假设指向UTXO0的指针是Tx1的唯一输入,而Tx1只有一个输出UTXO1。如果UTXO0中指定的数字资产的数额大于UTXO1中指定的数额,则该差额将自动提供给获胜矿工104M。替代地或附加地,这不一定排除可以在其自身事务152的其中一个UTXO 203中明确指定矿工费用。
爱丽丝和鲍勃的数字资产由区块链150中任何位置的任何事务152中的锁定至他们的未花费UTXO组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种事务152的UTXO中。区块链150中的任何位置均未存储定义给定方103的总余额的一个数字。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其他随后事务中尚未花费的各种UTXO值整理在一起。通过查询在任何存储节点104S(例如,与相应方的计算机设备102最近或最佳连接的存储节点104S)处存储的区块链150副本,可以实现这一点。
请注意,脚本代码通常用示意图表示(即非精确语言)。例如,可写入[ChecksigPA]表示[Checksig PA]=OP_DUP OP_HASH160<H(PA)>OP_EQUALVERIFY OP_CHECKSIG。“OP_...”是指脚本语言的特定操作码。OP_CHECKSIG(又称“Checksig”)是脚本操作码,其取两个输入(签名和公钥),并使用椭圆曲线数字签名算法(ECDSA)验证签名的有效性。在运行时,移除脚本中任何出现的签名(‘sig’),但在由‘sig’输入验证的事务中仍保留附加要求,诸如哈希难题。再如,OP_RETURN是脚本语言操作码,用于创建事务的不可花费输出,其可以将元数据储存在事务中,从而将元数据不可变地记录在区块链150中。例如,元数据可包括需存储在区块链中的文件。
签名PA是数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ECDSA。数字签名对特定的数据段进行签名。在实施例中,对于给定事务,签名将对部分事务输入以及全部或部分事务输出进行签名。对输出的特定部分进行签名取决于SIGHASH标志。SIGHASH标志是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
锁定脚本有时称为“scriptPubKey”,指其包括相应事务被锁定到的当事方的公钥。解锁脚本有时称为“scriptSig”,指其提供相应的签名。但是更通俗地说,在区块链150的所有应用中,UTXO赎回的条件并不一定包括对签名进行认证。更通俗地说,脚本语言可用于定义任何一个或更多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
第2层覆盖网络
区块链网络106本身采用覆盖在网络(例如,互联网101)上的覆盖网络的形式。然而,也可以在区块链的顶层覆盖另一层覆盖网络。图3中通过示例的方式对此进行了阐述。Metanet便是此方面的示例。此类网络也可称为“第2层(layer-2)”网络,因为相对于作为底层网络基础设施的基础网络101(例如,互联网)和作为覆盖在基础网络上的第一层覆盖网络的区块链网络106而言,它是第二层覆盖网络。
该第二层覆盖网络300包括节点301和边302的网络。需要注意的是,节点301现在指Metanet(或覆盖在区块链上的其它此类网络)层的节点,而不是先前结合图1和图2所述的区块链网络106层的节点104。Metanet网络(或类似网络)的每个节点301都是区块链150上的不同相应事务152,其中每一个都将数据存储在相应事务的载荷中。因此,Metanet网络300(或类似网络)的节点301在本文中也可称为数据存储节点或数据存储事务。存储在其中的数据可包括数据内容和/或元数据,通常两者都包括在内。在基于输出的模型中,数据可存储在相应事务的不可花费的输出203中。输出可通过锁定脚本中的操作码变得不可花费,该操作码在运行时终止脚本。例如,在使用脚本语言的系统中,这可以是OP_RETURN操作码。然而,这并不局限于此,本领域技术人员将了解用于在其它区块链系统的事务中存储任意载荷数据的其它技术,例如在采用基于账户的模型的系统中。下面为基于输出的模型的示例,但这并不局限于此。
需要注意的是,第2层覆盖网络300可以只由数据构成,即完全虚拟的网络。即Metanet或诸如此类网络的节点301和边302作为覆盖在区块链150的事务152上的覆盖网络,不一定对应于底层区块链网络106或底层网络基础设施101的任何特定物理参与者或实体。
数据内容是Metanet(或类似网络)存储的实际数据,例如文本、音频、静态或动态图像,或其它文件或文档。这也可称为用户内容或用户数据。元数据实现了将网络分层置于区块链150之上的协议。在至少一些事务152中,它定义了数据内容之间的链接。这些也可称为节点301之间的边302。例如,链接或指针可包括父节点的事务ID,即TxIDparent。需要注意的是,尽管存在一定的可能性,但本文中的“链接”不一定指超文本链接。更通俗地说,链接可指任何形式的指针,该指针指向当前节点301在Metatnet层(或区块链150顶层的其它此类覆盖层)相关的另一节点301。
为方便起见,下面以Metanet为例进行描述,但应当理解的是,这并不局限于此。更通俗地说,本文中提及Metanet的任何位置都可以用覆盖在区块链上的任何覆盖网络代替。类似地,对Metanet节点的任何引用都可替换为对任何覆盖网络节点或覆盖网络的数据存储节点的引用,对Metanet链接或边的任何引用都可替换为对相关覆盖网络层的任何覆盖网络边或链接的引用。
Metanet协议定义了一种构建链上数据的方案和标准,该数据可挖掘到公共区块链上并用于许多用例中的不同应用。协议规定图结构(包括节点和边)可从多组区块链事务构建,并且这些结构可用于存储、传达、表示和分发任何性质的数据(“内容”)。通过将事务视为节点并将签名视为事务之间创建的边,Metanet协议允许创建图3所示的链上图结构。
可以看到,Metanet 300的节点301和边302形成树结构。即,父节点301链接到一个或更多个子节点301,任何给定的子节点301本身可以是链接到其自身的一个或更多个子节点的父节点,以此类推。需要注意的是,就本发明而言,相关树结构只能是更宽的树或图的子集。
图3还示出了如何更新节点301及其相关联的边302。由于事务被不可改变地记录在区块链152上,因此更新Metanet节点301时需要通过新事务152创建新的实例301’和对应的边302’。
图3所示的结构可包括嵌套域,例如网站及其页面的结构,其中“顶层域”封装其下面的子域,以此类推。一个功能性密钥域(将稍后讨论,例如写入密钥、资金密钥、加密密钥的域)可跨越许多此类结构域。不得混淆图3所示的结构“域”与稍后讨论的功能性密钥域。
图3中的圆圈表示节点,这些节点只是根据Metanet协议的规则集创建的事务。图4中示出了根据该规则集创建和格式化的事务152N的示例。
图4中右侧的事务152N表示实现Metanet的给定节点301N(子节点)的区块链150的事务152。图4中左上角的事务152P表示在Metanet层实现子节点152N的父节点的区块链150的事务。子节点事务152N具有输入202,该输入包括解锁脚本并且指向区块链150的资金事务152F的输出203。换言之,Metanet节点152N的输入消耗资金事务152F的输出。需要注意的是,资金事务152F和Metanet父事务152P不一定是相同的事务(尽管不排除这种可能性)。
子事务152N包括不可花费的输出203(例如,通过OP_RETURN变得不可花费),该输出具有载荷(从区块链层的角度而言的载荷)。该载荷可包括可能会或不会加密的Metanet的数据内容。图4中以示例的方式示出了数据内容(“数据”)由加密函数e和解密函数ek进行加密。然而,这可以用明文数据内容代替(在这种情况下,<e(Data,ek)>可以仅用图4所示的<Data>代替)。在加密数据内容的情况下,需要加密密钥ek或对应的解密密钥来解密数据,从而以明文的方式查看数据。
子事务152N的载荷还包括Metanet网络层的元数据。该元数据至少包括父事务152P的事务标识符。这会在Metanet层创建链接(边)302。Metanet协议可能还要求包括与子节点301N相关联的密钥Pnode。
资金事务152F的输出203的锁定脚本还要求将签名包含在子节点152N的输入202的解锁脚本中。具体而言,该签名必须是使用与Metanet父密钥相关联的密钥Pparent签署的签名(即,由该密钥签署的消息)。这会在区块链层创建边402(有时称为花费边)。如果子事务152N的输入202的解锁脚本中不包含所需签名,则子事务152N不会由区块链网络106的节点104核实,因此不会通过区块链网络106传播也不会记录在区块链150上。然而,同样需要注意的是,资金事务152F不一定是与Metanet父事务152P相同的区块链事务152,因此区块链层花费边402不一定与Metanet层边302相同。
图4仅概述了作为完整事务的抽象的Metanet事务的特定相关组件。除了协议标识符标志外,这些组件包括:
·公钥Pnode;
·父公钥PParent的签名SigPParent;
·节点本身的事务IDTxIDnode;
·父节点的事务IDTxIDParent;
占位符<Data>通常指可包含在Metanet节点事务中的任何内容数据。在许多应用中,也可能希望用加密密钥ek对数据进行加密,在这种情况下,事务中包含的数据转换为<e(Data,ek)>,其中是e()是适当的加密函数。
每个Metanet节点301都可只能由节点对(Pnode,TxIDnode)进行识别,该节点对是索引,可由Metanet图形继承强大的版本控制和许可控制。还应当理解的是,每个Metanet节点都包含足够的信息,以识别其自身(Pnode,TxIDnode)及其父节点(Pparent,TxIDparent)。
为了确保Metanet节点301N事务包含来自父节点301P的正确输入签名SigPParent,在许多情况下需要创建资金事务,具体可参见图4的左下角。
父密钥Pparent和/或子节点密钥Pnode可视为写入密钥,该写入密钥授权将子节点301N的数据写入区块链150。这些在本文中也可称为“结构密钥”。
分层密钥集
与区块链事务152相关联的密钥(关于特定用户或应用)通常使用分层密钥结构进行管理。例如,出现了一种称为分层确定性(HD)密钥管理的通用标准,用于处理可能与给定用户的钱包相关联的许多私钥和公钥。该标准拟通过以下方式促进许多此类密钥对的处理:确保用户钱包中的所有密钥都可以从单一熵源派生;并确保密钥使用公开已知的派生函数以确定性的方式从该种子派生。HD钱包本身是已知的,其只是使用明确标准派生密钥的钱包,该密钥拟用于称为“BIP”的多个改进协议中概述的事务,即BIP32、BIP39和BIP44。在本质上,这些标准定义了下列操作的方式:从“种子”密钥确定性地生成许多私钥和公钥;定义从种子密钥生成特定派生密钥的“路径”;并使用确定性密钥派生函数定义分层钱包结构。区块链行业中广泛应用了这些用于处理与给定用户的资金或与特定应用的事务相关联的密钥处理标准。
以确定性的方式从一个密钥派生另一个密钥的确定性算法有时称为子密钥派生(CKD)函数。因此,可以从种子开始确定密钥集,这些密钥均以分层的方式彼此相关。此类分层密钥集也具有树结构。也就是说,密钥集中的密钥以遵循树结构的派生层次结构彼此派生。即,从种子派生一个或更多个密钥,然后对于种子的每个此类子密钥,可以从该密钥派生一个或更多个密钥,以此类推。在该树结构中,每个节点都是密钥,每条边都表示该密钥从其父密钥派生。给定父密钥或种子,知道算法的任何一方都可以确定性地确定其一个或更多个子密钥或种子;但是给定子密钥时,无法(或至少在计算上无法)确定父密钥。本领域中已知多种形式的CKD,其允许生成具有所需的任意图形结构(例如,树结构)的分层密钥集。稍后将仅通过举例的方式讨论一个特定的示例。
需要注意的是:当通过将CKD应用于种子或父密钥来派生给定密钥或密钥图结构时,并不排除可以通过将CKD应用于种子/父密钥和其它数据来派生密钥或图结构。例如,在实施例中,CKD函数将以下内容作为输入:父密钥或种子、称为链码的某些其它数据以及为给定父密钥创建子密钥(多个同级密钥)的索引。同样地,可以将链码和/或索引视为使CKD形式参数化的参数。
还需要注意的是,本文中所使用的术语“种子”不一定意味着种子是整个层次结构或树中的绝对最高级别密钥。更通俗地说,可以将CKD应用于层次结构中的任何密钥,以从中生成一个或更多个子密钥。本文中“种子”只是从中派生出给定密钥集的其它子密钥的任何父密钥或值。在实施例中,种子本身可以是另一密钥的子密钥或更宽层次结构中的种子(例如,参见图6,稍后将更详细地讨论)。
Metanet结构需要采用上述框架。具体地,CKD函数可用于将定义Metanet结构的密钥P映射到HD钱包等。图5中通过示例的方式对此进行了阐述。
如上文所述,每个Metanet节点301在Metanet网络层中具有与其相关联的密钥P(参见图4的示例中所示的Pnode和Pparent)。根据树结构500生成这些密钥是有利的,该树结构直接映射到Metanet网络节点301和边302的对应树结构300。也就是说,Metanet树结构中的每个Metanet节点301只映射到密钥树500中的一个对应密钥,每条Metanet边302只映射到密钥树500中的一个对应密钥派生边。这将意味着,给定节点301在Metanet树中的位置、种子和所使用CKD函数的形式,则始终可派生该节点301所需的相关密钥。
这样做的优点是允许在软件的不同模块之间进行更安全和/或压缩(开销更低)的密钥通信。图8中示出了这一点。图8示出了第一软件模块810和第二软件模块820。例如,这些模块可以是远程通信(例如,通过互联网101)的独立计算机设备上的软件模块。并且/或者,这些模块可以是由不同方运行的软件模块。或者,这些模块可以是在同一方的相同计算机设备上运行的不同软件模块,其中两个模块之间需要至少某种程度的隔离(例如,使得一个模块遭破坏或泄露时,另一个模块不会遭破坏或泄露)。它们可以在区块链网络106的客户端103的钱包软件或区块链网络106的节点104的节点软件(例如,矿工软件)中实现。它们可以物理地存储在一个或更多个存储器单元上,并在一个或更多个处理单元上运行,该处理单元可以是前面结合图1讨论的任何类型和/或本领域技术人员熟悉的任何其它类型。
第一软件模块810将向第二软件模块820发送通信815,向第二模块820传送与Metanet 300的给定节点301相关联的密钥,以使第二软件模块820能够执行与需要密钥才能执行的节点301相关的函数。通信815可包括一个或更多个单独信号或消息。
为了传送密钥,第一模块810只需要在通信815中包括节点301在Metanet树结构中的I)位置。如果存在不同的可能选项,通信815还可包括II)所使用CKD函数的形式的指示。或者,CKD的形式对于第二模块820可以是固定的、预定且预先已知的,在这种情况下,不需要在通信815中以信令方式告知。无论采用哪种方式,如果种子对于第二模块820是预定且预先已知的,则密钥本身和种子都不需要包含在通信815中。例如,种子可以是第一模块810与第二模块820之间的共享秘密;例如,在某个初始时间点由第一模块810或第三管理员模块与第二模块820共享一次。这意味着当第一模块810在随后的时间点针对不同的Metanet节点301将密钥传送给第二模块820时,不需要显式地以信令方式告知密钥;从而降低了拦截风险和/或避免了每次为每个Metanet节点301发送密钥或种子的信令开销。
需要再次注意的是,树结构300可能只是整个Metanet图的子集。因此,种子可以只是分层域的某个级别的父密钥,而种子本身可能在树或图的更上层具有父密钥。
在其它应用中,通信815也可以包含III)种子。稍后将更详细地讨论这方面。
功能性密钥域
如果检查标准Metanet事务152N(如图4所示,可包含加密数据)及其对应的资金事务152F,则可以看到存在许多与单一Metanet节点301(Pnode、Pparent、TxIDnode、ek)相关联的不同密钥。
许多不同类型的密钥可能与Metanet节点及其对应的资金事务相关联。
例如,这些密钥可根据以下函数进行分类:
·结构(写入)密钥-Pnode,Pparent
·加密密钥-ek
·资金密钥-PFunding
应当注意的是,在Metanet事务的更复杂的示例中,可能也存在其它密钥类型,这些密钥类型涉及用于创建Metanet节点事务152N和/或执行与Metanet节点301相关的其它函数。例如,其它类型的密钥可以是便于实现应用层函数的应用层密钥,例如幂等性密钥(以确保节点301的数据不会被用于某些应用层目的超过一次或计算两次)。再如,作为替代方案或除了加密之外,数据内容可进行另一种形式的混淆,例如填充或重新排序,这可能需要对应的混淆密钥进行混淆和/或反混淆。
如前所述,利用HD钱包标准(或类似标准)的普遍性和稳健性来管理密钥是有利的,在本文公开的实施例中,这种需求扩展到任何或所有此类密钥类型,例如结构密钥、加密密钥和资金密钥。然而,可能需要单独处理和管理不同的密钥类型。此外,优选地,所有密钥都应来自同一种子,以减少泄露风险。然而,这两个要求相当矛盾。目前尚不清楚如何确保密钥分离,并同时保持所有密钥都来自同一种子密钥。如上文所述,为了进一步复杂化,此类HD密钥层次结构的另一理想特性是应将给定密钥的派生路径(至少部分地)映射到Metanet图结构。换言之,除了协调前两个相互冲突的要求外,在密钥层次结构中反映Metanet图结构(如图5所示)是必须满足的第三个要求。
下面公开了一种解决此问题的方案,即将功能性密钥域定义为HD钱包的分支,该钱包的密钥与创建特定事务所涉及的单一函数相关。
对于Metanet事务,可能需要考虑两个、三个或更多不同的函数(例如,结构函数、加密函数和资金函数),每个密钥类型都将分配HD密钥结构的独立分支。
写入密钥(即,结构密钥)Pnode、Pparent用于签署Metanet事务,加密密钥用于加密事务中包含的任何内容数据,资金密钥用于签署其UTXO被Metanet事务消耗的资金事务。
整体HD结构中的所有密钥都是唯一的,在不知道钱包的主密钥(mk)对(主种子)的情况下不能相互关联。然而,它们是相关的,因为都属于相同的Metanet结构位置。该公共位置使用嵌入在给定密钥的整体路径中的多路径类型系统进行编码。
图6示出了分配不同的功能性密钥域的示例。图6示出了示例性派生树,该派生树可使用CKD函数进行创建。优选地,树的顶层(来源或根)是主种子601M(mk)。由此派生出多个子种子,每个类型的函数各一个。每个子种子充当用于相应类型函数(例如,写入函数、加密函数和资金函数)的相应密钥集的来源/根。在所示的示例中,三个此类函数分别有三个子种子:写入种子601W,用于派生写入密钥P的密钥集,以能够写入Metanet节点301;加密种子601E,用于派生加密密钥ek的密钥集,以加密和/或解密节点301的数据内容;资金种子601F,用于派生密钥集,以为将节点301的对应事务152记录在区块链150上提供资金。种子本身可视为一种密钥类型(在全部派生自同一主密钥601M时,指子主密钥或其相关密钥集的种子)。
每个密钥集包括相应的树结构,根据该结构,相应的密钥集中的密钥彼此派生。每个此类树结构都是来自主种子601M的整体树的子树。在每个密钥集中,树结构直接映射到Metanet 300的树结构上。因此,不同密钥集的树结构彼此相同。因此,例如Metanet的每个节点301(或其相关的片段)有一个写入密钥,这些密钥的派生边与Metanet树结构300中的对应边302完全一致。与此同时,Metanet的每个节点301(或其相关的片段)有一个资金密钥,资金密钥的派生边与Metanet树结构300中的对应边302以及写入密钥集中对应的写入密钥之间的端点完全一致。类似地,对于加密和/或任何其它函数,将根据该方案为其派生密钥集。
需要注意的是:此处的给定密钥可以指私钥、公钥或公钥-私钥对。在实施例中,私钥首先根据树结构派生,然后从私钥派生对应的公钥。
还需要注意的是,对于一种或更多种函数类型(例如,加密函数),可能会生成多个密钥集,例如用于多层加密。在这种情况下,如图6底部居中位置的示例所示,每个加密密钥集具有相同的树结构。
此外,需要再次注意的是,本文中使用的“种子”不一定指更宽树结构的绝对最终主种子。例如,写入种子601W本身是主种子601M的子密钥。种子只是任何类型的密钥或值,可以用于派生其它密钥。在实施例中,不同函数(例如,601W、601E、601F)的种子实际上是从某些主种子或密钥601M派生的。本文中的种子可指特殊类型的密钥,该特殊密钥(至少在本地)是给定密钥集的层次结构中的“顶层”密钥,但也可能是更宽层次结构中的子密钥。
应当理解的是,写入、加密和资金的示例仅仅只是可在Metanet(或类似网络)中实现的不同类型函数的一些示例,对此可能需要相应的密钥集,给定函数类型的给定集中的每个节点都有一个密钥。更通俗地说,上述方案可以用于任何第一函数和第二函数的密钥集,并且在一些实施例中,可以用于第三函数或更多函数。例如,加密可以推广到任何混淆(例如,填充或重新排序)。或者,方案可用于完全不同类型的密钥,例如为了某些应用层目的(例如,幂等性)拟分配给每个Metanet节点301的应用层序列号。
返回图8可以看到所述方案的有利应用。考虑第一软件模块810希望以信令方式向第二软件模块820告知第一密钥集中的密钥的情况,但不泄露第二密钥集中的任何密钥,或者不显式地传送密钥本身。同样,第一和第二模块810可以在不同的远程计算机设备上运行,和/或由不同方运行;或者可以是给定方的软件中的隔离模块和/或在同一设备上运行。无论采用哪种方式,都需考虑第一密钥集启用第一类型函数(例如,将节点301写入Metanet),第二密钥集启用第二类型函数(例如,解密节点的数据内容)的情况。在给定密钥集中,每个密钥启用Metanet节点301中不同的对应一个的函数。为了使第二模块820能够执行与节点301中的特定一个相关的第一函数,第一软件模块810可以向第二模块820发送通信815,该通信815至少根据Metanet密钥结构300中对应节点301的I)位置指示对应的第一密钥。可选地,还可以信令方式告知II)所使用CKD函数形式和III)第一种子(从中派生第一函数的第一密钥集的种子,例如601W)。或者,II)、III)中的一者或两者可以是预定且第二模块820预先已知的。无论采用哪种方式,都不会发送第二密钥或种子(例如,601E)。因此,第二软件模块820可以派生第一函数(例如,写入函数)的相关第一密钥,因为其知道相关的第一种子以及节点301和对应的第一密钥在树结构中的位置。然而,它无法派生第二函数(例如,解密函数)的密钥,因为其没有第二密钥。
例如,第一软件模块810可以是爱丽丝103a的钱包,第二软件模块820可以是服务提供商鲍勃103b或矿工104的软件。以鲍勃为例。爱丽丝不具备将数据内容上传到Metanet300的专业技术。鲍勃向爱丽丝提供此服务。为了使鲍勃能够代表爱丽丝提供此服务,他需要将她的每个节点301(P)的写入密钥写入区块链150。然而,节点301中一个或更多个的数据内容还将使用每个此类节点的对应加密密钥进行加密。爱丽丝不希望鲍勃能够解密数据内容,而且他没有任何理由需要以加密形式上传数据内容。因此,爱丽丝可以使用所公开的方法向鲍勃传送第一密钥集中的密钥(在这种情况下为写入密钥),且不泄露第二密钥(加密密钥)。
需要注意的是,在此应用中,为了避免鲍勃能够派生第二密钥集,爱丽丝可以可选地以信令方式告知鲍勃通信815中的第一种子III),并且没有向他发送第二种子或提供以任何其它方式进行访问的权限。
在实施例中,加密密钥可以用于对称密钥方案(例如,AES),其中用于加密数据的加密密钥ek与解密数据时所需的密钥相同。或者,可以使用非对称加密方案(例,ECIES),其中需要不同的密钥来解密数据。在这种情况下,第二密钥集中的“加密”密钥可以是解密密钥,传送给第二软件模块820的“加密”密钥可以是解密密钥(通常称为“加密密钥”,因为它是在应用空间或加密上下文中使用的密钥)。
资金密钥Pfunding是爱丽丝可能想要阻止鲍勃知道的密钥的另一示例。资金密钥是爱丽丝用于签署事务的密钥,用于支付上传Metanet事务的费用,所以她可能不希望鲍勃(或任何其他人)获取这些无需提供服务便可将费用支付给自己的密钥。
需要注意的是,资金事务不一定向鲍勃支付费用。相反,资金事务只是(或至少)支付将数据存储事务记录在区块链上的费用,并且至少可能只支付挖矿费。爱丽丝可能会也可能不会在链上或链下向鲍勃支付服务费用。外包第二密钥集的更令人信服的原因可能是为了满足处理和数量要求。即,如果公司(爱丽丝)想在区块链上放置大量数据,但不想(a)为此购买原生加密令牌(数字资产),或者(b)处理使用企业级钱包进行UTXO管理和事务创建的优化问题,则他们可能只想将整个过程外包给另一方(鲍勃)。
如果爱丽丝想在区块链上放置数据并且将向鲍勃“支付”这方面的费用,则如果双方都知道资金密钥,就不一定会构成问题,因为他们只是在工作,爱丽丝可能已经通过法定货币或其它链下结算或商业事务向鲍勃支付了创建资金事务的费用。
在另一示例性用例中,第一软件模块810和第二软件模块820可以是给定钱包应用中不同的隔离函数。例如,第一模块810可以是写入函数(对应于图6中的左侧分支),第二函数可以是加密函数(对应于图6中的中间分支)。在这种情况下,如果一个模块遭破坏或泄露,则另一隔离模块的密钥集不会遭泄露或受到影响。
需要再次注意的是,密钥的派生是从树的顶层到底层的单向派生。即,不能返回上游以从子密钥中确定父密钥,但可以从父密钥中确定子密钥。因此,如果共享第一种子,则不会泄露主种子,并且因此不会泄露第二种子或从中派生的任何密钥。可以沿树的位置向上,而不能向下。在实施例中,还可对密钥施加其它限制,这意味着甚至无法沿着某些分支进行,可以使用强化过程逐个密钥进行应用。
作为采用所公开方案的另一替代或附加有利理由,软件模块810、820中的一个或两个可能希望确保保留其密钥派生中的结构,从而另一些实体(即,第三软件模块)能够通过仅知道其密钥和Metanet事务的结构/在结构中的位置(以及CKD)来恢复Metanet事务的所有相关密钥。无论第一模块810和第二模块820是否以上述方式彼此传送密钥,这一推理均可适用。
图7示出了路径类型的概念。为了确保与不同函数相关的密钥可以由不同实体单独处理,实施例使用基于函数的路径结构进行密钥派生,可分解成多个不同的路径类型,具体取决于密钥层次结构中的垂直级别。例如:
·m路径:顶层路径,可以描述层次结构中的任何内容;
·p路径:功能级路径(加密路径、写入路径、资金路径);
·b路径:Metanet图结构路径。
这些路径可以更简单地表示为每个密钥的较大总体路径的一部分,写为:m/p/b/…/…=master root/function root/structure root/…/…
对于与给定Metanet事务相关联的所有密钥,m/p/b组件后面的路径元素是相同的。这意味着Metanet事务将使用密钥Pparent进行签名,使用密钥ek加密数据,并使用密钥PFunding签署资金事务,其中所有密钥共享其相应Metanet结构根之后的公共路径子结构(/…/…)。
图9是可由第一软件模块810执行的方法的流程图。在步骤S10中,第一软件模块识别Metanet树结构300。在步骤S20中,第一软件模块810基于第一种子(例如,601W)确定第一密钥集,其树结构与Metanet相同。在步骤S30中,基于第二种子(例如,601E)确定第二密钥集,其树结构与Metanet和第一密钥集相同。优选地,第一种子和第二种子派生自同一主种子(例如,601M)。在步骤S40中,第一软件模块810向第二软件模块820发送通信815,指示Metanet节点301在树结构中的位置,以使第二模块820能够在指示位置执行与第一密钥集相关联的函数,这些密钥集与Metanet节点301相关。可选地,该通信815可以包括用于派生第一密钥集和/或第一种子的CKD函数的形式。或者,它们对于第二软件模块820可以是预先已知的。无论采用哪种方式,从第一软件模块810到第二软件模块820的通信815都不包括第二种子(也不包括主种子)。
图10是可由第二软件模块820执行的方法的流程图。在步骤T10中,第二软件模块820从第一软件模块810接收树结构中节点位置的指示。在步骤T20中,基于树结构的指示位置(以及CKD函数和第一种子),第二软件模块820从第一密钥集确定Metanet节点和对应的密钥。在步骤T30中,可根据派生的第一密钥执行与所指示的节点301相关的函数。然而,由于无法派生对应的第二密钥,因此无法执行第二函数。
本文提出的功能性密钥域的概念可用于提供以下任何一个或更多个优点或类似优点。
·事务的创建可以模块化并分成多个函数,而这些函数又可以分布在多个不同的参与者、服务或机器之间。这使得事务构建更加高效,因为每个组件都可以创建为微服务,并独立于其它组件进行优化,从而组件不需要任何其它组件的信息便可运行,这同时也提高了系统的可扩展性。
·在多组件事务创建系统中,该方法可确保在组件本身遭泄露时,不会泄露任何其它组件的密钥,因为每个组件都只能访问其自身功能性域分支中的密钥。
·当存在多个加密密钥ek1,ek2,…,ekn时,该方案允许对由多个加密层或函数操作的数据实现粒度许可和访问控制。这可用于为链上Metanet数据创建复杂的访问控制框架(ACF)。
·所有功能性域分支都来自同一熵源,可由单个高安全性组件处理事务构建系统中所有组件的安全性,该高安全性组件拥有主密钥(mk)的独家访问权。这允许定制安全性并集中到多组件系统的单个组件中,这样可能有利于优化系统的整体构建方式。
子密钥派生(CKD)函数
下面为已知CKD函数的示例。应当理解的是,这并不局限于此,本领域技术人员还知道其它CKD。
在前面采用的术语中,给定密钥集中的顶层密钥称为“种子”,从总体层次结构中的“主种子”可派生多个此类种子。在替代术语中,给定密钥集中的本地“种子”可称为“扩展”密钥(无论是公钥或私钥),主种子可称为“熵”。
主密钥的创建过程可以写为:
·从安全的伪随机数生成器生成(例如,256位)比特随机序列D,充当“钱包种子”;
·在随机比特序列上执行函数F(例如,HMAC-SHA512);
·将钱包参数分配为:
ο主秘密密钥:=F(D)左侧256位;
ο主链码:=F(D)右侧256位。
主秘密密钥是钱包的主私钥,通常包括层次结构中的私钥-公钥对。
HD钱包中可使用称为“链码”的附加熵,以确保知道给定父密钥不足以生成其子密钥。链码在HD钱包的整个密钥层次结构中确定性地生成,此处生成的“主链码”作为该钱包所有链码的确定性序列中的初始链码。
BIP39中概述了一种将主密钥所需的熵抽象为助记词的系统,使得人类能更容易记住和操纵,这已成为加密货币钱包中使用的标准技术。
扩展密钥:如前所述,HD钱包需要知道密钥以及额外的熵单位(称为链码)才能派生出子密钥。因此,“扩展”密钥的概念可用于表示与其对应链码级联的给定密钥。这些可写为:
EPriv:=(privkey,chain code)
EPub:=(pubkey,chain code)
分别用于扩展私钥和公钥。这些扩展私钥和公钥可用于使用众所周知的公共子密钥派生函数来生成派生子密钥。
子密钥派生(CKD)函数:BIP32中定义了示例性子密钥派生(CKD)函数,允许使用给定父私钥或父公钥分别派生子私钥或子公钥,其可写为:
EPrivChild,i:=CKDPriv(EPriveParent,i)
EPubChild,i:=CKDPub(EPubPaeent,i)
其中i是同级子密钥索引的32字节索引值。BIP32中可找到这些函数的完整定义。需要注意的是,给定私钥(父私钥或子私钥),通过椭圆曲线乘法等的简单应用生成对应公钥(父公钥或子公钥)则也很简单。这一事实意味着,通常而言,可以从给定父私钥派生子公钥和子私钥,而只能从给定父公钥派生子公钥。
还需要注意的是,只能确定性地向下遍历HD钱包的密钥树,而不是向上遍历。此外,在扩展公钥的情况下,也可以通过强化过程来限制向下遍历的能力。
强化密钥:在BIP32中,使用强化密钥生成HD钱包的选项。这些密钥消除了从扩展父公钥生成强化扩展子公钥的能力,对于大于232-1的索引,通过扩展CKD函数的定义可实现这一点。
多账户层次结构:BIP44中正式引入的概念是:对于涉及使用加密货币的不同账户,在HD钱包中使用不同分支和级别的密钥层次结构。然而,在所有情况下,不同的“账户”定义密钥实质上是出于相同目的,即通过签署事务来花费加密货币。
分层确定性钱包
下面进一步讨论采用椭圆曲线密码学的特定实施例的上下文中的分层确定性钱包。参考图11。
EC点乘的同态属性对HD钱包有影响。它允许从父公钥Pparent连续地构建子公钥Pchild,而不需要知道或存储对应的子公钥Schild。
图11示出了如何通过对分层确定性(HD)钱包中的父密钥对进行操作来构建子密钥对。
图11示出了在HD钱包框架中从父密钥生成子私钥和子公钥的示例性机制。
使用扩展私钥或扩展公钥可实现这一点,该扩展私钥或扩展公钥分别定义为:
ESparent:=(SParent||Cparent),
EPparent:=(PParent||Cparent)
其中C是称为链码的随机熵分量。在层次结构的给定级别,向每个密钥分配附加索引,以区分同级密钥。该索引已从图中省略,但通常用作HMAC-SHA512原像的一部分。
案例1:使用扩展私钥。给定扩展私钥ESparent,可构建子密钥对的私钥Schild和公钥Pchild。根据图表,具体定义和计算如下:
Schild:=Sparent+LHS[H(Pparent||Cparent)],
Pchild:={Sparent+LHS[H(Pparent||Cparent)]}·G。
此处,H表示加密哈希函数(例如,HMAC-SHA512),LHS表示H的512位输出中的最左侧256位。
此处,给定扩展父私钥和使用图中概述的过程,可计算出子密钥对的两个部分。
案例2:使用扩展公钥。给定扩展公钥EPparent,只能将公钥Pchild构建为:
该结果的派生依赖于椭圆曲线私钥-公钥对的同态属性。派生如下所示:
Pchild=Schild·G (*)
仅给定其父公钥的扩展公钥EPparent:=(PParent||Cparent),无法派生出该公钥的对应私钥Schild,因为需要Sparent。具体原因可在图中看到,因为必须将父私钥添加到H的输出的最左侧数字给出的确定性部分。
找到Schild的其它唯一方式是“反转”椭圆曲线点乘算法,目前这一问题十分棘手。
生成子公钥而无需查看、知道或存储对应的私钥是有利的,因为减少了存储需求,并且可以用于更安全的钱包实施方式,其中不需要存储私钥来生成用于接收支付物的区块链地址。
这种效果是EC点乘同态的直接结果,也是ECC密钥对的基本属性。
为了完整起见,图12示出了如何从扩展公钥生成子公钥的示例。
结论
应当理解,上述实施例仅通过示例的方式进行描述。
例如,上述示例中指出,覆盖层链接在Metanet事务的载荷中定义(例如,通过图4的示例中TxIDnode的输出中的TxIDparent)。但是,这不是必需的。在替代实施例中,图结构实际上不需要在链上声明,或者至少不完全是这样。例如,Metanet上可能会提供变体,其中某些数据结构存储在区块链上,但覆盖层链接可能存储在链下。签署数据存储事务的输入的密钥层次结构仍足以恢复(大部分)数据结构,但仅限于知道种子的人员(即,不是查看区块链的普通公大众),因此会提高隐私性。在进一步的变体中,Metanet(或其它此类覆盖网络)的图结构可以完全在链下定义,只有数据内容存储在链上。
此外,尽管上面已对树结构进行了描述,但更通俗地说,相同的原理适用于任何图结构。例如,给定节点301可具有两个父节点。在这种情况下,将从两个父密钥派生出对应的密钥。
更通俗地说,可以根据下述任何一个或更多个语句提供一种方法、装置或程序。
语句1:一种管理覆盖网络的方法,所述覆盖网络覆盖在区块链的数据存储事务上,由此所述覆盖网络的数据内容存储在所述数据存储事务的载荷中,且覆盖层链接定义在所述数据存储事务之间;所述方法由第一计算机设备上运行的第一软件模块执行,所述方法包括:
识别所述覆盖网络的图结构,所述图结构包括多个节点和节点之间的边,其中所述节点中的每一个节点对应于所述数据存储事务中的不同的相应一个数据存储事务,且所述边中的每一个边对应于所述链接中的不同的相应一个链接,并且其中每个节点与相应的第一密钥相关联,所述相应的第一密钥用于在所述覆盖网络的所述图结构中签署子数据存储事务的输入,以授权将所述子数据存储事务写入所述区块链,所述第一密钥由第一种子生成;以及
使用应用于第二种子的子密钥派生CKD函数,以确定分层第二密钥集,所述分层第二密钥集具有与所述覆盖网络相同的所述图结构,每个第二密钥对应于与所述相应数据存储事务在所述图结构中相同的位置处的所述节点中的不同的相应一个节点,其中所述第二密钥不是用于签署所述数据存储事务的输入,而是用于启用附加函数。
覆盖网络的所述图结构可以是部分或全部覆盖网络的结构。
每个密钥可包括公钥-私钥对的私钥和/或公钥-私钥对的公钥。
还需要注意的是:当通过将CKD应用于父密钥或种子来派生分层密钥集时,并不一定意味着CKD的唯一输入必须是父密钥或种子(无论是父公钥还是父私钥)。例如,在实施例中,CKD还可将链码和/或索引值作为输入参数。
语句2:根据语句1所述方法,进一步包括:使用应用于所述第一种子的CKD函数,以将所述第一密钥确定为具有与所述覆盖网络和所述第二密钥集相同的所述图结构的分层密钥集中的密钥,每个第一密钥对应于所述节点中的不同的相应一个节点、且与所述相应节点在所述图结构中的位置相同。
语句3:根据语句1或2所述的方法,进一步包括:从所述第一软件模块,向第二软件模块传送所述图结构中的一个位置的指示,从而使得所述第二软件模块能够基于所述传送位置以及所述第一种子和用于所述第一密钥的所述CKD函数来确定所述位置处的节点的相应第一密钥。
语句4:根据语句3所述的方法,其中所述第一种子还被传送到所述第二软件模块,所述第二模块所进行的所述确定是基于被传送到所述第二模块的所述第一种子。
这可以从第一软件模块或第三软件模块进行传送,例如在单独的第三方计算机设备上运行,或在与第一软件模块或第二软件模块相同的设备上运行,但与第一模块和第二模块隔离。
语句5:根据语句3所述方法,其中所述第一种子是所述第二软件模块预先已知的,所述第二模块所进行的所述确定是基于预先已知所述第一种子。
语句6:根据语句3、4或5所述的方法,其中用于所述第一密钥的所述CKD函数的指示还被传送到所述第二软件模块,所述第二模块所进行的所述确定是基于所述第一软件模块指示的所述CKD函数。
同样,这可以从第一软件模块或第三软件模块进行传送,例如在单独的第三方计算机设备上运行,或在与第一软件模块或第二软件模块相同的设备上运行,但与第一模块和第二模块隔离。
语句7:根据语句3、4或5所述的方法,其中所述CKD函数是所述第二软件模块预先已知的,所示第二模块所进行的所述确定是基于预先已知所述CKD函数。
语句8:根据前述任一项语句所述的方法,其中所述第一密钥中的每一个第一密钥均授权将所述相应子数据存储事务写入所述区块链。
语句9:根据前述任一项语句所述的方法,其中一个或更多个所述数据存储事务中的每一个均包括相应输入,所述相应输入指向另一事务的相应资金输出,其中所述相应输入包括相应解锁脚本,并且其中所述相应锁定脚本需要加密签名,所述加密签名基于拟包含在所述相应解锁脚本中的所述覆盖图结构中的相应父数据存储事务的所述第一密钥,以核实所述相应数据存储事务从而记录在所述区块链上。
语句10:根据语句9所述的方法,其中每个相应资金输出是除所述相应父数据存储事务之外的相应资金事务的输出。
语句11:根据语句10所述的方法,其中每个资金事务的所述输入包括基于相应资金密钥的加密签名,以核实所述资金事务从而记录在所述区块链上,并且其中所述相应资金事务的所述输出指定数字资产的数额,用于为在所述区块链上记录所述相应数据存储事务提供资金。
语句12:根据前述任一项语句所述的方法,其中每个所述链接都是所述数据存储事务的子数据存储事务与父数据存储事务之间的链接,所述链接通过以下方式在所述覆盖层形成:将所述父数据存储事务的相应事务ID包含在所述子数据存储事务的载荷中。
例如,父密钥的事务ID可包含在相应子数据存储事务的不可花费的输出中。在实施例中,此类输出可通过将操作码包含在锁定脚本中变得不可花费,该操作码用于终止脚本。例如,这将是脚本语言中的OP_RETURN操作码。
语句13:根据前述任一项权利要求所述的方法,其中所述第二软件模块无权访问所述第二种子。
语句14:根据前述任一项语句所述的方法,其中所述第二密钥是混淆密钥,所述附加函数包括混淆和/或反混淆所述相应节点的所述相应数据存储事务的数据内容。
语句15:根据语句14所述的方法,其中所述混淆密钥是加密密钥,所述附加函数包括加密和/或解密所述相应节点的所述相应数据存储事务的数据内容。
语句16:根据语句1至13中任一项所述的方法,其中所述第二密钥是资金密钥,所述附加函数包括为将所述相应节点的所述相应数据存储事务记录在所述区块链上提供资金。
语句17:根据语句1至13中任一项所述的方法,其中所述第二密钥是应用层密钥,所述附加函数包括与所述相应节点的所述相应数据存储事务相关联地执行的应用层函数。
例如,每个第二密钥都可以是相应节点的相应数据存储事务不同的相应应用层序列号,例如用于幂等性目的。
语句18:根据前述任一项语句所述的方法,进一步包括:
使用应用于第三种子的CKD算法,以确定具有与所述覆盖网络和所述第二密钥集相同的所述图结构的分层第三密钥集,每个第三密钥对应于与所述相应节点在所述图结构中相同的位置处的所述节点中不同的相应一个,所述第三密钥用于启用第三函数。
语句19:根据前述任一项语句所述的方法,其中至少所述第一种子和所述第二种子派生自同一主种子。
语句20:根据前述任一项语句所述的方法,其中所述第二软件模块在独立于所述第一计算机设备的第二计算机设备上运行。
语句21:根据语句20所述方法,其中该第一计算机设备是第一方的计算机设备,该第二计算机设备是独立于所述第一方的第二方的计算机设备。
语句22:根据语句21所述的方法,其中所述第一方使用所述方法委托所述第二方在所述区块链上记录一个或更多个所述数据存储事务,而不向所述第二方透露所述第二密钥。
语句23:根据从属于语句14或15的语句22所述方法,其中所述方法由所述第一方使用以委托所述第二方在所述区块链上记录一个或更多个所述数据存储事务,而不使所述第二方反混淆(de-obfuscate)其中存储的数据内容。
语句24:根据语句1至19中任一项所述的方法,其中所述第二软件模块在与所述第一软件模块相同的所述第一计算机设备上运行。
例如,这可以用于防止在第一软件模块遭破坏或黑客攻击时泄露第二密钥,从而使第一模块的功能与第二模块隔离。
语句25:根据前述任一项权利要求所述的方法,其中所述数据内容存储在一个或更多个所述数据存储事务的不可花费的输出中。
例如,此类输出可通过将操作码包含在锁定脚本中变得不可花费,该操作码用于终止脚本。例如,这将是脚本语言中的OP_RETURN操作码。
语句26:根据前述任一项权利要求所述的方法,其中所述覆盖层链接存储在所述数据存储事务的所述载荷之间。
语句27:根据前述任一项权利要求所述方法,其中所述图结构是树结构。
语句28:一种计算机程序产品,所述计算机程序产品包括代码,所述代码包含在计算机可读存储器上,并且被配置为当运行时根据前述任一项语句所述的方法执行操作。
语句29:一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或更多个存储器单元;以及
处理装置,所述处理装置包括一个或更多个处理单元;
其中所述存储器存储第一软件模块,所述第一软件模块被设置为在所述一个或更多个处理单元上运行,并且被配置为当运行时执行根据语句1至27中任一项所述的方法。
语句30:一种方法,所述方法由第二软件模块执行,所述方法包括:
从第一软件模块接收表示覆盖网络的图结构中节点位置的指示,其中所述覆盖网络的数据内容存储在区块链上的数据存储事务的载荷中,且覆盖层链接定义在所述数据存储事务之间,并且其中所述图结构包括多个节点和节点之间的边,所述节点中的每一个节点对应于所述数据存储事务中不同的相应一个数据存储事务,且所述边中的每一条边对应于所述链接中不同的相应一个链接;
使用所述指示位置从第一密钥的分层集确定密钥,所述分层密钥集具有与所述覆盖网络相同的所述图结构,每个第一密钥对应于与所述相应数据存储事务在所述图结构中相同的位置处的所述节点中的不同的相应一个节点,其中所述确定包括基于所述位置以及基于所述种子和用于所述密钥集的CKD函数来确定所述指示位置处的节点的相应密钥;以及
使用已确定的所述密钥执行除签署所述数据存储事务的输入之外的与所述相应数据存储事务相关的函数。
语句31:一种计算机程序产品,所述计算机程序产品包括代码,所述代码包含在计算机可读存储器上,并且被配置为当运行时根据语句30所述的方法执行操作。
语句32:一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或更多个存储器单元;以及
处理装置,所述处理装置包括一个或更多个处理单元;
其中所述存储器存储第二软件模块,所述第二软件模块被设置为在所述一个或更多个处理单元上运行,并且被配置为当运行时执行根据语句30所述的方法。
根据本文公开的另一方面,可提供一种方法,所述方法包括第一软件模块和第二软件模块的操作。
根据本文公开的另一方面,可提供一种包含在计算机可读存储器上的计算机程序产品,包括第一软件模块和第二软件模块。
根据本文公开的另一方面,可提供一种包括第一计算机设备和第二计算机设备的系统。
一旦给出本文的公开内容,所公开技术的其他变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
Claims (32)
1.一种管理覆盖网络的方法,所述覆盖网络覆盖在区块链的数据存储事务上,由此所述覆盖网络的数据内容存储在所述数据存储事务的载荷中,且覆盖层链接定义在所述数据存储事务之间;所述方法由第一计算机设备上运行的第一软件模块执行,所述方法包括:
识别所述覆盖网络的图结构,所述图结构包括多个节点和节点之间的边,其中所述节点中的每一个节点对应于所述数据存储事务中的不同的相应一个数据存储事务,且所述边中的每一个边对应于所述链接中的不同的相应一个链接,并且其中每个节点与相应的第一密钥相关联,所述相应的第一密钥用于在所述覆盖网络的所述图结构中签署子数据存储事务的输入,以授权将所述子数据存储事务写入所述区块链,所述第一密钥由第一种子生成;以及
使用应用于第二种子的子密钥派生CKD函数,以确定分层第二密钥集,所述分层第二密钥集具有与所述覆盖网络相同的所述图结构,每个第二密钥对应于与所述相应数据存储事务在所述图结构中相同的位置处的所述节点中的不同的相应一个节点,其中所述第二密钥不是用于签署所述数据存储事务的输入,而是用于启用附加函数。
2.根据权利要求1所述的方法,进一步包括:
使用应用于所述第一种子的CKD函数,以将所述第一密钥确定为具有与所述覆盖网络和所述第二密钥集相同的所述图结构的分层密钥集中的密钥,每个第一密钥对应于所述节点中的不同的相应一个节点、且与所述相应节点在所述图结构中的位置相同。
3.根据权利要求1或2所述的方法,进一步包括:
从所述第一软件模块,向第二软件模块传送所述图结构中的一个位置的指示,从而使得所述第二软件模块能够基于所述传送位置以及所述第一种子和用于所述第一密钥的所述CKD函数来确定所述位置处的节点的相应第一密钥。
4.根据权利要求3所述的方法,其中所述第一种子还被传送到所述第二软件模块,所述第二模块所进行的所述确定是基于被传送到所述第二模块的所述第一种子。
5.根据权利要求3所述的方法,其中所述第一种子是所述第二软件模块预先已知的,所述第二模块所进行的所述确定是基于预先已知所述第一种子。
6.根据权利要求3、4或5所述的方法,其中用于所述第一密钥的所述CKD函数的指示还被传送到所述第二软件模块,所述第二模块所进行的所述确定是基于所述第一软件模块指示的所述CKD函数。
7.根据权利要求3、4或5所述的方法,其中所述CKD函数是所述第二软件模块预先已知的,所示第二模块所进行的所述确定是基于预先已知所述CKD函数。
8.根据前述任一项权利要求所述的方法,其中所述第一密钥中的每一个第一密钥均授权将所述相应子数据存储事务写入所述区块链。
9.根据前述任一项权利要求所述的方法,其中一个或更多个所述子数据存储事务中的每一个子数据存储事务均包括相应输入,所述相应输入指向另一事务的相应资金输出,其中所述相应输入包括相应解锁脚本,其中所述相应资金输出包括相应锁定脚本,并且其中所述相应锁定脚本需要加密签名,所述加密签名基于拟包含在所述相应解锁脚本中的所述覆盖图结构中的相应父数据存储事务的所述第一密钥,以核实所述相应数据存储事务从而记录在所述区块链上。
10.根据权利要求9所述的方法,其中每个相应资金输出是除所述相应父数据存储事务之外的相应资金事务的输出。
11.根据权利要求10所述的方法,其中每个资金事务的所述输入包括基于相应资金密钥的加密签名,以核实所述资金事务从而记录在所述区块链上,并且其中所述相应资金事务的所述输出指定数字资产的数额,用于为在所述区块链上记录所述相应数据存储事务提供资金。
12.根据前述任一项权利要求所述的方法,其中每个所述链接都是所述数据存储事务的子数据存储事务与父数据存储事务之间的链接,所述链接通过以下方式在所述覆盖层形成:将所述父数据存储事务的相应事务ID包含在所述子数据存储事务的载荷中。
13.根据前述任一项权利要求所述的方法,其中所述第二软件模块无权访问所述第二种子。
14.根据前述任一项权利要求所述的方法,其中所述第二密钥是混淆密钥,所述附加函数包括混淆和/或反混淆所述相应节点的所述相应数据存储事务的数据内容。
15.根据权利要求14所述的方法,其中所述混淆密钥是加密密钥,所述附加函数包括加密和/或解密所述相应节点的所述相应数据存储事务的数据内容。
16.根据权利要求1至13中任一项所述的方法,其中所述第二密钥是资金密钥,所述附加函数包括为将所述相应节点的所述相应数据存储事务记录在所述区块链上提供资金。
17.根据权利要求1至13中任一项所述的方法,其中所述第二密钥是应用层密钥,所述附加函数包括与所述相应节点的所述相应数据存储事务相关联地执行的应用层函数。
18.根据前述任一项权利要求所述的方法,进一步包括:
使用应用于第三种子的CKD算法,以确定具有与所述覆盖网络和所述第二密钥集相同的所述图结构的分层第三密钥集,每个第三密钥对应于与所述相应节点在所述图结构中相同的位置处的所述节点中不同的相应一个,所述第三密钥用于启用第三函数。
19.根据前述任一项权利要求所述的方法,其中至少所述第一种子和所述第二种子派生自同一主种子。
20.根据前述任一项权利要求所述的方法,其中所述第二软件模块在独立于所述第一计算机设备的第二计算机设备上运行。
21.根据权利要求20所述的方法,其中所述第一计算机设备是第一方的计算机设备,所述第二计算机设备是独立于所述第一方的第二方的计算机设备。
22.根据权利要求21所述的方法,其中所述第一方使用所述方法委托所述第二方在所述区块链上记录一个或更多个所述数据存储事务,而不向所述第二方透露所述第二密钥。
23.根据从属于权利要求14或15的权利要求22所述的方法,其中所述方法由所述第一方使用以委托所述第二方在所述区块链上记录一个或更多个所述数据存储事务,而不使所述第二方反混淆其中存储的数据内容。
24.根据权利要求1至19中任一项所述的方法,其中所述第二软件模块在与所述第一软件模块相同的所述第一计算机设备上运行。
25.根据前述任一项权利要求所述的方法,其中所述数据内容存储在一个或更多个所述数据存储事务的不可花费的输出中。
26.根据前述任一项权利要求所述的方法,其中所述覆盖层链接存储在所述数据存储事务的所述载荷之间。
27.根据前述任一项权利要求所述的方法,其中所述图结构是树结构。
28.一种计算机程序产品,所述计算机程序产品包括代码,所述代码包含在计算机可读存储器上,并且被配置为当运行时根据前述任一项权利要求所述的方法执行操作。
29.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或更多个存储器单元;以及
处理装置,所述处理装置包括一个或更多个处理单元;
其中所述存储器存储第一软件模块,所述第一软件模块被设置为在所述一个或更多个处理单元上运行,并且被配置为当运行时执行根据权利要求1至27中任一项所述的方法。
30.一种方法,所述方法由第二软件模块执行,所述方法包括:
从第一软件模块接收表示覆盖网络的图结构中节点位置的指示,其中所述覆盖网络的数据内容存储在区块链上的数据存储事务的载荷中,且覆盖层链接定义在所述数据存储事务之间,并且其中所述图结构包括多个节点和节点之间的边,所述节点中的每一个节点对应于所述数据存储事务中不同的相应一个数据存储事务,且所述边中的每一条边对应于所述链接中不同的相应一个链接;
使用所述指示位置从第一密钥的分层集确定密钥,所述分层密钥集具有与所述覆盖网络相同的所述图结构,每个第一密钥对应于与所述相应数据存储事务在所述图结构中相同的位置处的所述节点中的不同的相应一个节点,其中所述确定包括基于所述位置以及基于所述种子和用于所述密钥集的CKD函数来确定所述指示位置处的节点的相应密钥;以及
使用已确定的所述密钥执行除签署所述数据存储事务的输入之外的与所述相应数据存储事务相关的函数。
31.一种计算机程序产品,所述计算机程序产品包括代码,所述代码包含在计算机可读存储器上,并且被配置为当运行时根据权利要求30所述的方法执行操作。
32.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或更多个存储器单元;以及
处理装置,所述处理装置包括一个或更多个处理单元;
其中所述存储器存储第二软件模块,所述第二软件模块被设置为在所述一个或更多个处理单元上运行,并且被配置为当运行时执行根据权利要求30所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1919295.4 | 2019-12-24 | ||
GB1919295.4A GB2594231A (en) | 2019-12-24 | 2019-12-24 | Mapping keys to a blockchain overlay network |
PCT/IB2020/057894 WO2021130557A1 (en) | 2019-12-24 | 2020-08-24 | Mapping keys to a blockchain overlay network |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115053226A true CN115053226A (zh) | 2022-09-13 |
Family
ID=69322912
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080090103.5A Pending CN115053226A (zh) | 2019-12-24 | 2020-08-24 | 将密钥映射到区块链覆盖网络 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230046315A1 (zh) |
EP (2) | EP4046048B1 (zh) |
JP (1) | JP2023508088A (zh) |
CN (1) | CN115053226A (zh) |
GB (1) | GB2594231A (zh) |
WO (1) | WO2021130557A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2608840A (en) * | 2021-07-13 | 2023-01-18 | Nchain Licensing Ag | Message exchange system |
GB2614221A (en) * | 2021-07-29 | 2023-07-05 | Nchain Licensing Ag | Forming peer-to-peer connections using blockchain |
WO2023006573A1 (en) * | 2021-07-29 | 2023-02-02 | Nchain Licensing Ag | Forming peer-to-peer connections using blockchain |
GB2621144A (en) * | 2022-08-02 | 2024-02-07 | Nchain Licensing Ag | Wrapped encryption |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11538031B2 (en) * | 2017-03-31 | 2022-12-27 | Vijay Madisetti | Method and system for identity and access management for blockchain interoperability |
US10567168B2 (en) * | 2017-11-16 | 2020-02-18 | International Business Machines Corporation | Blockchain transaction privacy enhancement through broadcast encryption |
US11531985B2 (en) * | 2018-01-17 | 2022-12-20 | Tzero Ip, Llc | Multi-approval system using M of N keys to generate a sweeping transaction at a customer device |
JP7121810B2 (ja) * | 2018-05-15 | 2022-08-18 | ケルビン ゼロ インコーポレーテッド | 安全なブロックチェーントランザクションおよびサブネットワークのためのシステム、方法、デバイス及び端末 |
US11336455B2 (en) * | 2019-09-25 | 2022-05-17 | International Business Machines Corporation | Consensus protocol for blockchain DAG structure |
-
2019
- 2019-12-24 GB GB1919295.4A patent/GB2594231A/en active Pending
-
2020
- 2020-08-24 CN CN202080090103.5A patent/CN115053226A/zh active Pending
- 2020-08-24 EP EP20764164.8A patent/EP4046048B1/en active Active
- 2020-08-24 EP EP23184762.5A patent/EP4242899A3/en active Pending
- 2020-08-24 JP JP2022539037A patent/JP2023508088A/ja active Pending
- 2020-08-24 WO PCT/IB2020/057894 patent/WO2021130557A1/en unknown
- 2020-08-24 US US17/788,277 patent/US20230046315A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
GB201919295D0 (en) | 2020-02-05 |
EP4242899A2 (en) | 2023-09-13 |
EP4046048A1 (en) | 2022-08-24 |
GB2594231A (en) | 2021-10-27 |
EP4046048B1 (en) | 2023-11-08 |
US20230046315A1 (en) | 2023-02-16 |
EP4242899A3 (en) | 2023-10-25 |
JP2023508088A (ja) | 2023-02-28 |
WO2021130557A1 (en) | 2021-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7364724B2 (ja) | ブロックチェーンIoT装置のためのオペレーティングシステム | |
KR102416506B1 (ko) | 블록체인을 이용한 논리 게이트 기능 구현 | |
KR101974060B1 (ko) | 분산 해시 테이블과 피어투피어 분산 대장을 사용하여 디지털 자산의 소유권을 검증하기 위한 방법 및 시스템 | |
CN115053226A (zh) | 将密钥映射到区块链覆盖网络 | |
CN113875186A (zh) | 知识证明 | |
CN115176441A (zh) | 基于身份的公钥生成协议 | |
CN114982193A (zh) | 使用区块链事务的数字合约 | |
EP3977673B1 (en) | Blockchain transaction comprising runnable code for hash-based verification | |
CN115211073A (zh) | 公钥生成方法 | |
WO2020240293A1 (en) | Blockchain transaction comprising runnable code for hash-based verification | |
CN113924748A (zh) | 知识证明 | |
CN114747172A (zh) | 加密链接身份 | |
EP4035326A1 (en) | Divisible tokens | |
Shah et al. | M-DPS: a blockchain-based efficient and cost-effective architecture for medical applications | |
CN117043772A (zh) | 区块链数据分离 | |
CN115885497A (zh) | 数字签名 | |
CN115244894A (zh) | 散列消息认证码生成方法 | |
JP2023530594A (ja) | 分散型データベースにおける許可されたイベント処理 | |
CN114514550A (zh) | 将请求分区成区块链的交易 | |
CN116547944A (zh) | 署名生成装置、认证装置和程序 | |
Clack et al. | Distributed Ledger Privacy: Ring Signatures, M\" obius and CryptoNote | |
CN116569515A (zh) | 密钥生成方法 | |
CN116547942A (zh) | 密钥导出方法 | |
Fischer | User management of a privacy-based carpooling platform | |
CN117121434A (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 |