CN116547942A - 密钥导出方法 - Google Patents
密钥导出方法 Download PDFInfo
- Publication number
- CN116547942A CN116547942A CN202180076292.5A CN202180076292A CN116547942A CN 116547942 A CN116547942 A CN 116547942A CN 202180076292 A CN202180076292 A CN 202180076292A CN 116547942 A CN116547942 A CN 116547942A
- Authority
- CN
- China
- Prior art keywords
- key
- target
- blockchain
- transaction
- index
- 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
- 238000000034 method Methods 0.000 title claims abstract description 157
- 238000009795 derivation Methods 0.000 title description 62
- 230000006870 function Effects 0.000 claims description 71
- 238000012545 processing Methods 0.000 claims description 19
- 238000000638 solvent extraction Methods 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 2
- 239000004973 liquid crystal related substance Substances 0.000 claims 1
- 238000013515 script Methods 0.000 description 45
- 238000005192 partition Methods 0.000 description 24
- 238000005336 cracking Methods 0.000 description 18
- 230000008569 process Effects 0.000 description 17
- 239000000243 solution Substances 0.000 description 15
- 238000011084 recovery Methods 0.000 description 12
- 238000012550 audit Methods 0.000 description 11
- 230000008901 benefit Effects 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 230000001902 propagating effect Effects 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 4
- 238000009826 distribution Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 238000013508 migration Methods 0.000 description 4
- 230000005012 migration Effects 0.000 description 4
- 238000003860 storage Methods 0.000 description 4
- 238000013475 authorization Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000001343 mnemonic effect Effects 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 239000003623 enhancer Substances 0.000 description 2
- 238000002474 experimental method Methods 0.000 description 2
- 230000001965 increasing effect Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000008929 regeneration Effects 0.000 description 2
- 238000011069 regeneration method Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 101000882406 Staphylococcus aureus Enterotoxin type C-1 Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000010200 validation analysis Methods 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/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
-
- 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/3263—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 certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements
- H04L9/3268—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 certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements using certificate validation, registration, distribution or revocation, e.g. certificate revocation list [CRL]
-
- 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/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- 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/0866—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving user or device identifiers, e.g. serial number, physical or biometrical information, DNA, hand-signature or measurable physical characteristics
-
- 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/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
- H04L9/3242—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving keyed hash functions, e.g. message authentication codes [MACs], CBC-MAC or HMAC
-
- 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/3263—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 certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements
-
- 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/3263—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 certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements
- H04L9/3265—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 certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements using certificate chains, trees or paths; Hierarchical trust model
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Power Engineering (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
一种导出分层密钥结构的密钥的计算机实现的方法,其中所述方法由第一方执行并且包括:生成目标子密钥的目标索引,其中所述目标索引是基于将至少一个目标消息输入第一哈希函数的第一结果生成的;以及,基于a)所述层次结构中的先前层级的父密钥、以及b)将至少i)所述父密钥和ii)所述目标索引输入第二哈希函数的第二结果,导出密钥结构的层次结构中的一个层级的所述目标子密钥。
Description
技术领域
本公开涉及一种从外部状态导出分层密钥结构的子密钥(例如,私钥)的方法。例如,密钥可以用于对区块链事务进行签名和/或生成区块链地址。
背景技术
在区块链技术环境中,“钱包应用程序”或仅仅是“钱包”通常是指一种应用程序,除了其他方面,该应用程序被配置为存储特定方拥有的密钥(即,公钥和/或私钥)的集合。
为了维护公共区块链的隐私,建议避免重复使用从私钥导出的公钥。这可能导致钱包成为随机生成的私钥的集合,需要安全存储并经常备份这些随机生成的私钥,以确保密钥不会丢失或被盗。通过避免重复使用密钥,这种类型的钱包会很快产生“密钥包”问题。
分层确定性(hierarchical deterministic,HD)钱包的发明是为了提高密钥存储和重新生成的效率,从而解决该密钥包问题。HD钱包在隐私方面带来了额外的好处,并且能够与不同的系统或子系统共享钱包的分支。这种类型的钱包可以从单个随机种子生成许多密钥,是目前最常用的区块链钱包类型。
钱包实现方式通常遵循比特币改进提案32(BIP32),该提案描述了如何从父密钥导出多个子密钥。一些实现方式还使用BIP44,该提案定义了钱包内各分支的用途。在一种HD钱包实现方式中,主私钥是从随机种子中导出的。该主私钥用于导出数代密钥(子代、孙代等)。
图4示出了HD钱包中出现的所得树状结构。该数据结构是一种强大的机制,用于管理钱包的安全性及其在恢复期间回收资金的能力。根据该实现方式,用户(即,钱包所有者)或观察者可以在没有对应私钥的情况下创建一系列公钥。由于需要存储的秘密较少,因此泄露的风险也较低。此外,如果密钥丢失,可以通过种子密钥恢复。
用于从父密钥导出子密钥的等式取决于所述父密钥的公钥或私钥是否会用作导出函数的输入;使用父私钥会生成“增强”子密钥,而使用父公钥会生成“普通”(即,非增强,符合BIP32术语)子密钥。
子密钥是使用子密钥导出(child key derivation,CKD)函数生成的。CKD函数的特定形式取决于特定的钱包实现方式,但子密钥通常基于父密钥和索引。索引使父密钥能够生成多个子密钥,即,一个父密钥可以有多个子密钥。通常,索引取序列中的值,父密钥的第一子密钥取序列中的第一个值(例如,0),父密钥的第二子密钥取序列中的下一个值(例如,1),依此类推。
应当注意的是,在撰写本文时,如果只知道父公钥和链码,则不可能导出增强子公钥。请求向普通子密钥支付意味着接收者可以只给出父公钥(和链码),而发送者可以通过导出多个普通(即,非增强)子密钥来发送支付。这样,资金接收者就不需要明确地将每个地址提供给发送者。这确保可以发送多个支付,同时最大限度地减少相同双方之间的通信,并增强在公共区块链上处理事务时的隐私。
普通子私钥ski的等式为:
ski=skpar+HMAC512L(cpar,pkpar||index), (1)
增强子私钥sk′i的等式为:
sk′i=skpar+HMAC512L(cpar,skpar||index′), (2)
其中
·skpar是父密钥的私钥,
·pkpar是父密钥的公钥,
·HMAC512L(■)是使用SHA512哈希函数的HMAC函数结果的左侧32个字节,
·cpar是父密钥的链码,定义为cpar=HMAC-SHA512R(cgrandparent,Pgrandparent||indexpar),
·索引是子密钥的计数器,每次计算新的子密钥时都会增加该计数器,其是从0开始的。按照惯例,对于普通密钥,0≤索引<231;对于增强密钥,231≤索引′<232。
发明内容
可以使用一种称为“本福特钱包Benford’s wallet”的协议(请参见https://nchain.com/2019/10/22/benfords-wallet/和英国专利申请GB 1913667.0)来提高隐私性,其背后的理念是将事务的输出分割为多个输出,其中在这些输出的足够大的数据集中,值的分割将遵循本福特定律。所述钱包的目的是混淆一个支付的全部价值,以便隐藏相同数额的定期支付。然而,为了能够向审计者证明该支付的全部价值,本福特钱包描述了以这种方式接收支付的公钥的计算中包括的外部数据,例如费用清单(invoice)。这意味着必须存储与费用清单相关的数据,并且会重新引入密钥包问题。
因此,需要将外部数据结合到子密钥的导出中,而不会重新引入密钥包问题。
根据本文公开的一个方面,提供了一种导出分层密钥结构的密钥的计算机实现的方法,其中所述密钥结构包括多层级层次结构,所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由第一方执行并且包括:生成目标子密钥的目标索引,其中所述目标索引是基于将至少一个目标消息输入第一哈希函数的第一结果生成的;以及,基于如下内容导出所述层次结构中某一层级的所述目标子密钥:a)所述层次结构中的先前层级的父密钥、和b)第二结果,其中所述第二结果是将至少i)所述父密钥和ii)所述目标索引输入第二哈希函数的结果。
本申请的发明人已经意识到,将子密钥链接到外部数据是有利的。外部数据在下文中通常称为“消息”,但该消息不一定是一方或多方之间通信意义上的消息(例如,电子邮件),尽管并不排除这种情况。通常,消息可以是用户或机器生成的任何类型的数据项。消息用于生成索引,而索引又用于导出子密钥。也就是说,本发明的实施例改变了索引的性质——索引现在基于消息的哈希,而不是取序列中的下一个未使用的值。
现在,外部数据可以包括在子密钥的导出中,这样就可以向第三方(例如,审计者)提供证据,证明子密钥链接到费用清单等一些外部数据。与本福特钱包不同,钱包恢复只需要HD钱包的种子。该方法还可促进无忧钱包迁移,而无需用户或不同的钱包提供者执行任何额外的工作。虽然不限于任何特定的钱包协议,但该解决方案并没有改变BIP32中规定的HD钱包协议,而是为用于导出密钥的索引赋予了额外的意义。通过使用种子和一条或多条消息来确定性地导出钱包数据文件,在钱包迁移和恢复方面获得了目前对钱包用户有限制的若干优势。这些将在下面详细讨论。
应当注意的是,虽然本文提供的示例性用例主要与区块链有关,但是所描述的实施例通常适用于任何相关环境中的密钥使用。例如,子密钥可以用作私钥,以生成应用于许多技术领域的数字签名。又如,子密钥可以在任何环境中用作加密密钥。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3A示出了客户端应用程序的示意性框图;
图3B示出了可由图3A的客户端应用程序表示的示例性用户界面的示意性模型;
图4示意性地示出了HD钱包中密钥的树状结构;
图5示意性地示出了子扩展私钥和链码的生成;
图6示意性地示出了用于HD钱包的示例性子密钥导出函数;
图7示意性地示出了根据本发明的一些实施例的示例性系统;
图8示意性地示出了在使用随机密钥索引时的外部数据分层确定性(externaldata hierarchical deterministic,EDHD)钱包结构,图中示出了在对一些输入(即,外部数据)使用哈希函数时如何生成随机输出(即,EDHD钱包中的密钥索引);
图9示意性地示出了根据本福特定律生成的事务;
图10示意性地示出了EDHD钱包结构的示例,其中密钥导出分支由数字证书进行表征。
具体实施方式
示例性系统概述
图1示出了一种用于实现区块链150的示例性系统100。系统100可以包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个区块链节点104,该多个区块链节点可以被设置成在分组交换网络101内形成对等(P2P)网络106。虽然未示出,但是区块链节点104可以被设置为近完全图。因此,每个区块链节点104高度连接到其它区块链节点104。
每个区块链节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个区块链节点104包括处理装置,该处理装置包括一个或多个处理器,例如一个或多个中央处理单元(CPU)、加速器处理器、专用处理器和/或现场可编程门阵列(FPGA),以及其它设备,例如专用集成电路(ASIC)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或多个存储器单元,其采用一个或多个存储器介质,例如诸如硬盘等磁介质、诸如固态硬盘(SSD)、闪存或电可擦可编程只读存储器(EEPROM)等电子媒介和/或诸如光盘驱动器等光学介质。
区块链150包括一系列数据区块151,其中在分布式或区块链网络106中的多个区块链节点104中的每个节点处维护区块链150的相应副本。如上所述,维护区块链150的副本不一定意味着完全存储区块链150。相反,只要每个区块链节点150存储每个区块151的区块头(下面讨论),区块链150就可以进行数据修剪。区块链中的每个区块151均包括一个或多个事务152,其中该上下文中的事务是指一种数据结构。数据结构的性质将取决于用作事务模型或计划的一部分的事务协议类型。给定的区块链全程使用一个特定的事务协议。在一种常见的事务协议中,每个事务152的数据结构至少包括一个输入和至少一个输出。每个输出指定将数字资产的数量表示为财产的数额,其一个示例是输出被密码锁定到的用户103(需要该用户的签名或其它解进行解锁,从而进行赎回或花费)。每个输入指向先前事务152的输出,从而链接这些事务。
每个区块151还包括区块指针155,其指向区块链中先前创建的区块151,以定义区块151的顺序。每个事务152(除coinbase事务之外)包括指向上一事务的指针,以定义事务序列的顺序(注:事务152的序列可进行分支)。区块151的区块链一直追溯到创始区块(Gb)153,该创始区块是区块链中的第一区块。区块链150中早期的一个或多个原始事务152指向创始区块153,而非先前事务。
每个区块链节点104被配置为将事务152转发到其它区块链节点104,从而使得事务152在整个网络106中传播。每个区块链节点104被配置为创建区块151,并将相同区块链150的相应副本存储在其相应的存储器中。每个区块链节点104还维护等待并入到区块151中的事务152的有序集(或“池”)154。有序池154通常称为“内存池”。在本文中,该术语并不意在限制于任何特定的区块链、协议或模型。该术语是指节点104已接受为有效的有序事务集,并且对于该有序事务集,强制节点104不接受试图花费相同输出的任何其它事务。
在给定的当前事务152j中,输入(或每个输入)包括指针,该指针引用事务序列中先前事务152i的输出,指定该输出将在当前事务152j中被赎回或“花费”。通常,先前事务可以是有序集154或任何区块151中的任何事务。尽管为了确保当前事务有效,将需要存在先前事务152i并核实其有效,但是在创建当前事务152j甚至向网络106发送当前事务152j时,不必存在先前事务152i。因此,在本文中,“先前”是指由指针链接的逻辑序列中的前任,而不一定是时间序列中的创建时间或发送时间,因此,不一定排除无序创建或发送事务152i、152j的情况(参见下面关于孤立事务的讨论)。先前事务152i同样可以称为先行事务或前任事务。
当前事务152j的输入还包括输入授权,例如先前事务152i的输出被锁定到的用户103a的签名。反过来,当前事务152j的输出可以加密锁定到新用户或实体103b。因此,当前事务152j可将先前事务152i的输入中定义的数额转移到当前事务152j的输出中定义的新用户或实体103b。在某些情况下,事务152可具有多个输出,以在多个用户或实体间分割输入数额(其中一个可以是原始用户或实体103a,以便进行变更)。在某些情况下,事务还可以具有多个输入,将一个或多个先前事务的多个输出中的数额汇总在一起,并重新分配到当前事务的一个或多个输出。
根据基于输出的事务协议,例如比特币,当诸如个体用户或组织这类的一方103希望颁布新的事务152j时(由该方采用的自动程序或人为地),该颁布方将该新事务从其计算机终端102发送到接收者。颁布方或接收者将最终向网络106的一个或多个区块链节点104(现在通常是服务器或数据中心,但原则上也可以是其它用户终端)发送该事务。另外还不排除颁布新事务152j的一方103可以将事务直接发送到一个或多个区块链节点104,并且在一些示例中,可以不将事务发送到接收者。接收事务的区块链节点104根据在每个区块链节点104处应用的区块链节点协议来检查事务是否有效。区块链节点协议通常要求区块链节点104检查新事务152j中的加密签名是否与预期签名相匹配,这取决于事务152的有序序列中的上一事务152i。在这种基于输出的事务协议中,这可以包括检查新事务152j的输入中包括的一方103的密码签名或其它授权是否与新事务分配的先前事务152i的输出中定义的条件匹配,其中该条件通常包括至少检查新事务152j的输入中的密码签名或其它授权是否解锁新事务的输入所链接到的上一事务152i的输出。条件可以至少部分地由包括在先前事务152i的输出中的脚本来定义。或者,这可仅由区块链节点协议单独确定,或可通过其组合确定。无论采用哪种方式,如果新事务152j有效,区块链节点104会将其转发到区块链网络106中的一个或多个其它区块链节点104。这些其它区块链节点104根据相同的区块链节点协议应用相同的测试,并因此将新事务152j转发到一个或多个其它节点104等等。通过这种方式,新事务在区块链节点104的整个网络中进行传播。
在基于输出的模型中,给定输出(例如,UTXO)是否分配(例如,花费)的定义是,根据区块链节点协议,其是否通过另一个随后事务152j的输入有效赎回。事务有效的另一个条件是其试图赎回的先前事务152i的输出尚未被另一个事务赎回。同样,如果无效,则事务152j将不会在区块链150中传播(除非被标记为无效并且被传播用于提醒)或记录。这可防止重复花费,即事务处理者对同一个事务的输出分配超过一次。另一方面,基于账户的模型通过保持账户余额防止重复花费。因为同样存在定义的事务顺序,账户余额在任何时候均具有单一定义的状态。
除了核实事务有效之外,区块链节点104还争相成为在通常称为挖矿的过程中创建事务区块的第一个节点,而该过程由“工作量证明”支持。在区块链节点104处,新事务被添加到尚未出现在记录在区块链150上的区块151中的有效事务的有序池154。然后,区块链节点争相通过尝试解决加密难题以组装有序事务集154中事务152的新有效事务区块151。通常情况下,这包括搜索“随机数”值,从而当随机数与未决事务有序池154的表示并置且进行哈希处理时,哈希值的输出满足预定条件。例如,预定条件可以是哈希值的输出具有某个预定义的前导零数。注意,这仅仅是一种特定类型的工作量证明难题,并且不排除其它类型。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而在试图解决难题的每个区块链节点104处消耗大量的处理资源。
解决难题的第一区块链节点104在网络106上宣布难题解决,提供解决方案作为证明,然后网络中的其它区块链节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,就可以直接检查该解决方案是否使哈希值的输出满足条件)。第一区块链节点104将一个区块传播到接受该区块的其它节点达成阈值共识,从而执行协议规则。然后,有序事务集154被每个区块链节点104记录为区块链150中的新区块151。区块指针155还分配给指向该区块链中先前创建的区块151n-1的新区块151n。创建工作量证明解所需的大量工作(例如采用哈希的形式)发出信号通知第一节点104的意图以遵循区块链协议。这些规则包括如果它分配与先前核实有效的事务相同的输出,则不接受事务为有效,否则称之为重复花费。一旦创建,区块151就不能修改,因为它在区块链网络106中的每个区块链节点104处进行标识和维护。区块指针155还向区块151施加顺序。由于事务152记录在网络106中每个区块链节点104处的有序区块中,因此提供了事务的不可改变公共分类账。
应当注意的是,在任何给定时间争相解决难题的不同区块链节点104可以基于在任何给定时间尚未发布的事务的池154的不同快照来这样做,具体取决于它们何时开始搜索解或接收事务的顺序。解决相应难题的人员首先定义新区块151n中包括的事务152及其顺序,并且更新当前的未发布事务池154。然后,区块链节点104继续争相从新定义的未发布事务有序池154中创建区块,等等。此外,还存在解决可能出现的任何“分叉”的协议,其中两个区块链节点104彼此在很短的时间内解决难题,从而在节点104之间传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。应当注意的是,这不会影响网络的用户或代理,因为同一事务将出现在两个分叉中。
根据比特币区块链(和大多数其它区块链),成功构造新区块104的节点被授予在分配附加限定数量数字资产的新特殊类型事务中新分配附加的、接受的数额的数字资产的能力(与代理间或用户间事务相反,该事务将一定数量的数字资产从一个代理或用户转移到另一个代理或用户)。这种特殊类型的事务通常称为“coinbase事务”,但是也可以称为“启动事务”或“产生事务”。它通常形成新区块151n的第一事务。工作量证明发出信号通知构造新区块的节点的意图以遵循协议规则,从而允许稍后赎回该特定事务。在可以赎回该特殊事务之前,区块链协议规则可能需要成熟期,例如100个区块。通常,常规(非生成)事务152还将在其输出中的一个输出中指定附加事务费用,以进一步奖励创建其中发布该事务的区块151n的区块链节点104。该费用通常称为“事务费用”,并在下文中讨论。
由于事务核实和发布中涉及的资源,通常至少每个区块链节点104采用包括一个或多个物理服务器单元的服务器的形式,或者甚至整个数据中心。但是,原则上来说,任何给定区块链节点104均可采用一个用户终端或联网在一起的一组用户终端的形式。
每个区块链节点104的存储器均存储被配置为在区块链节点104的处理装置上运行的软件,以根据区块链节点协议执行其相应的角色并处理事务152。应当理解的是,在本文中归因于区块链节点104的任何动作均可通过在相应计算机设备的处理装置上运行的软件执行。节点软件可以在应用层或诸如操作系统层或协议层的较低层或这些层任意组合的一个或多个应用中实现。
扮演消费用户角色的多方103中的每一方的计算机设备102也连接到网络101。这些用户可以与区块链网络106交互,但不参与核实事务或构造区块。其中一些用户或代理103可以充当事务中的发送者和接收者。其它用户可以与区块链150交互,而不必充当发送者或接收者。例如,一些当事方可以充当存储区块链150的副本(例如,已经从区块链节点104获得区块链的副本)的存储实体。
各方103中的一些或所有当事方可以作为不同网络的一部分连接,例如覆盖在区块链网络106之上的网络。区块链网络的用户(经常称为“客户端”)可以被称为是包含区块链网络106的系统的一部分;然而,这些用户不是区块链节点104,因为它们不执行区块链节点所需的角色。相反,每一方103可以与区块链网络106交互,从而通过连接到区块链节点106(即,与区块链节点106通信)来利用区块链150。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,以及第二方103b及其相应的计算机设备102b。应当理解的是,更多此类当事方103及其相应的计算机设备102可能存在并参与系统100,但为了方便起见,未进行说明。每一方103均可以是个人或组织。仅出于说明目的,在本文中,第一方103a称为爱丽丝,第二方103b称为鲍勃,但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
每一方103的计算机设备102包括相应的处理装置,其包括一个或更多个处理器,例如一个或更多个CPU、图形处理单元(GPU)、其他加速器处理器、特定应用程序处理器和/或FPGA。每一方103的计算机设备102还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等磁介质、诸如SSD、闪存或EEPROM等电子媒介和/或诸如光盘驱动器等的光学介质。每一方103的计算机设备102上的存储器存储软件,其包括被设置为在处理装置上运行的至少一个客户端应用程序105的相应实例。应当理解的是,在本文中归因于给定方103的任何行动均可通过在相应计算机设备102的处理装置上运行的软件执行。每一方103的计算机设备102包括至少一个用户终端,例如台式或笔记本电脑、平板电脑、智能手机或诸如智能手表等的可穿戴设备。给定方103的计算机设备102还可包括一个或更多个其他网络资源,诸如通过用户终端访问的云计算资源。
客户端应用程序105最初可通过例如从服务器下载的适当计算机可读存储介质,或通过诸如可移动SSD、闪存密钥、可移动EEPROM、可移动磁盘驱动器、软盘或磁带等的可移动存储设备、诸如CD或DVD ROM等的光盘或可移动光驱等提供至任何给定方103的计算机设备102。
客户端应用程序105至少包括“钱包”功能。这有两个主要功能。其中一个功能是使相应方103能够创建、授权(例如签名)事务152并将其发送到一个或多个位比特币节点104,然后在区块链节点104的网络中传播,从而包括在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产数额。在基于输出的系统中,该第二功能包括整理分散在区块链150中属于相关方的各种事务152的输出中定义的数额。
注意:虽然各种客户端功能可以描述为集成到给定客户端应用程序105中,但这不一定是限制性的,相反,在本文中所描述的任何客户端功能可以在由两个或更多个不同应用程序组成的套件中实现,例如经由API进行接口连接或一个应用程序作为另一个应用程序的插件。更通俗地说,客户端功能可以在应用层或诸如操作系统的较低层或这些层的任意组合实现。下面将根据客户端应用程序105进行描述,但应当理解的是,这不是限制性的。
每个计算机设备102上的客户端应用程序或软件105的实例可操作地耦合到网络106的区块链节点104中的至少一个。这可以启用客户端105的钱包功能,以将事务152发送至网络106。客户端105还可联络区块链节点104,以在区块链150中查询相应方103作为接收者的任何事务(或实际上在区块链150中检查其它方的事务,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供事务信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据事务协议制定和发送事务152。如上所述,每个区块链节点104运行软件,该软件被配置为根据区块链节点协议核实事务152并转发事务152以便在区块链网络106中传播。事务协议和节点协议相互对应,给定事务协议和给定节点协议一起实现给定的事务模型。相同的事务协议用于区块链150中的所有事务152。网络106中的所有节点104使用相同的节点协议。
当给定方103(比方说爱丽丝)希望发送拟包含在区块链150中的新事务152j时,她将根据相关事务协议(使用其客户端应用程序105中的钱包功能)制定新事务。然后,她将事务152从客户端应用程序105发送到她所连接的一个或多个区块链节点104。例如,这可能是与爱丽丝的计算机102最佳连接的区块链节点104。当任何给定区块链节点104接收新事务152j时,其将根据区块链节点协议及其相应的角色进行处理。这包括首先检查新接收的事务152j是否满足变为“有效”的特定条件,具体示例稍后将详细讨论。在一些事务协议中,有效条件可通过事务152中包含的脚本在每个事务的基础上进行配置。或者,条件可仅仅是节点协议的内置功能,或通过组合脚本和节点协议进行定义。
如果新接收的事务152j通过有效性测试(即:“有效”的条件下),接收事务152j的任何区块链节点104将向在区块链节点104处维护的有序事务集154中添加新的核实有效事务152。进一步地,接收事务152j的任何区块链节点104随后将核实有效事务152传播至网络106中的一个或多个其它区块链节点104。由于每个区块链节点104应用相同的协议,因此假定事务152j有效,这意味着事务很快将在整个网络106中传播。
一旦进入在给定区块链节点104处维护的未决事务有序池154,该区块链节点104将开始争相解决其各自的包含新事务152的池154的最新版本上的工作量证明难题(请记住,其它区块链节点104可以尝试基于不同的事务池154来解决难题。但是,首先解决难题的人将定义包括在最新区块151中的事务集合。最终,区块链节点104将解决有序池154的一部分的难题,该有序集154包括爱丽丝的事务152j)。一旦包括新事务152j的池154完成工作量证明,其将不可变地成为区块链150中区块151中的一个区块的一部分。每个事务152包括指向早前事务的指针,因此事务的顺序也被不可变地记录下来。
不同的区块链节点104可以首先接收给定事务的不同实例,并且因此在一个实例被发布到新区块151中之前具有关于哪个实例“有效”的冲突视图,此时所有区块链节点104同意所发布的实例是唯一的有效实例。如果区块链节点104将一个实例接受为有效实例,然后发现第二实例已记录在区块链150中,则区块链节点104必须接受这一点,并将丢弃(即,视为无效)其最初接受的实例(即,在区块151中尚未公布的实例)。
作为基于账户的事务模型的一部分,由一些区块链网络操作的另一种类型的事务协议可称为“基于账户的”协议。在基于账户的情况下,每个事务均不通过参考过去事务序列中先前事务的UTXO来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由网络的节点单独存储到区块链中,并不断更新。在此类系统中,事务使用账户的运行事务记录(也称为“头寸”)进行排序。该值由发送者签名作为其加密签名的一部分,并作为事务引用计算的一部分进行哈希处理。此外,可选的数据字段也可以在事务中签名。例如,如果数据字段中包含上一事务的ID,该数据字段可指向上一事务。
基于UTXO的模型
图2示出了示例性事务协议。这是基于UTXO的协议的示例。事务152(简称“Tx”)是区块链150的基本数据结构(每个区块151包括一个或多个事务152)。下面将通过参考基于输出或基于“UTXO”的协议进行描述。但这并不限于所有可能的实施例。应当注意的是,虽然参考比特币描述了示例性基于UTXO的协议,但是它同样可以在其它示例区块链网络上实现。
在基于UTXO的模型中,每个事务(“Tx”)152包括数据结构,其包括一个或多个输入202和一个或多个输出203。每个输出203可包括未花费事务输出(UTXO),其可用作另一新事务的输入202的来源(如果UTXO尚未赎回)。UTXO包括指定数字资产数额的值。这表示分布式分类账上的一组通证。UTXO还可包含其来源事务的事务ID以及其它信息。事务数据结构还可包括标头201,其可包括输入字段202和输出字段203的大小指示符。标头201还可包括事务的ID。在实施例中,事务ID是事务数据(不含事务ID本身)的哈希值,且存储在提交至节点104的原始事务152的标头201中。
比方说爱丽丝103a希望创建转移相关数字资产数额至鲍勃103b的事务152j。在图2中,爱丽丝的新事务152j标记为“Tx1”。该新事务获取在序列中先前事务152i的输出203中锁定至爱丽丝的数字资产数额,并至少将此类数额中的一部分转移至鲍勃。在图2中,先前事务152i标记为“Tx0”。Tx0和Tx1只是任意的标记,其不一定意味着Tx0指区块链151中的第一事务且Tx1指池154中的下一事务。Tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前(即先行)事务。
当爱丽丝创建其新事务Tx1时,或至少在她将该新事务发送至网络106时,先前事务Tx0可能已经有效并包括在区块链150的区块151中。该事务此时可能已包括在区块151中的一个区块中,或者可能仍在有序集154中等待,在这种情况下,该事务将很快包括在新区块151中。或者,Tx0和Tx1可以创建并一起发送至网络106;或者,如果节点协议允许缓冲“孤立”事务,Tx0甚至可以在Tx1之后发送。本文事务序列上下文中使用的“先前”和“后续”一词是指由事务中指定的事务指针定义的序列中的事务顺序(哪个事务指向哪个其他事务等等)。它们同样可以替换为“前任”和“继任”、“先行”和“后代”或“父项”和“子项”等。这不一定指其创建、发送至网络106或到达任何给定区块链节点104的顺序。然而,指向先前事务(先行事务或“父事务”)的后续事务(后代事务或“子事务”)不会有效除非父事务有效。在父事务之前到达区块链节点104的子事务被视为孤立事务。根据节点协议和/或节点行为,其可被丢弃或缓冲一段时间,以等待父事务。
先前事务Tx0的一个或更多个输出203中的一个包括特定的UTXO,标记为UTXO0。每个UTXO包括指定UTXO表示的数字资产数额的值以及锁定脚本,该锁定脚本定义后续事务的输入202中的解锁脚本必须满足的条件,以使后续事务有效,从而成功赎回UTXO。通常情况下,锁定脚本将数额锁定至特定方(该数额的事务的受益人)。即,锁定脚本定义解锁条件,该解锁条件通常包括以下条件:后续事务的输入中的解锁脚本包括先前事务被锁定到的一方的加密签名。
锁定脚本(亦称scriptPubKey)是节点协议识别的域特定语言中写入的一段代码。此类语言的特定示例称为“脚本(Script)”(S大写),其可由区块链网络所使用。锁定脚本指定花费事务输出203所需的信息,例如爱丽丝签名的要求。解锁脚本出现在事务的输出中。解锁脚本(亦称scriptSig)是提供满足锁定脚本标准所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在事务的输入202中。
因此在示出的示例中,Tx0的输出203中的UTXO0包括锁定脚本[Checksig PA],该锁定脚本需要爱丽丝的签名Sig PA,以赎回UTXO0(严格来说,是为了使试图赎回UTXO0的后续事务有效)。[Checksig PA]包含爱丽丝的公私密钥对中的公钥PA的表示(即哈希)。Tx1的输入202包括指向Tx1的指针(例如,通过其事务ID(TxID0),其在实施例中是整个事务Tx0的哈希值)。Tx1的输入202包括在Tx0中标识UTXO0的索引,以在Tx0的任何其他可能输出中对其进行标识。Tx1的输入202进一步包括解锁脚本<Sig PA>,该解锁脚本包括爱丽丝的加密签名,该签名由爱丽丝通过将其密钥对中的私钥应用于预定的部分数据(有时在密码学中称为“消息”)创建。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
当新事务Tx1到达区块链节点104时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或更多个标准)。在实施例中,这涉及并置两个脚本:
<Sig PA><PA>||[Checksig PA]
其中“||”表示并置,“<…>”表示将数据放在堆栈上,“[…]”表示由锁定脚本组成的函数(在该示例中指基于堆栈的语言)。同样,脚本可以使用公共堆栈一个接一个地运行,而不是并置脚本。无论采用哪种方式,当一起运行时,脚本使用爱丽丝的公钥PA(包括在Tx0的输出的锁定脚本中),以认证Tx1的输入中的解锁脚本是否包含爱丽丝签名预期部分的数据时的签名。也需要包括预期的部分数据本身(“消息”),以便执行此认证。在实施例中,签名的数据包括整个Tx1(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
本领域技术人员将熟悉通过公私密码进行验证的细节。基本上而言,如果爱丽丝已使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息,诸如节点104等其它实体可验证消息必须已经由爱丽丝签名。签署通常包括对消息进行哈希,签署哈希值和将此标记到消息作为签名,从而使公钥的任何持有者能够验证签名。因此,应当注意的是,在实施例中,在本文中对签名特定数据片段或事务部分等的任何引用可以意味着对该数据片段或事务部分的哈希值进行签名。
如果Tx1中的解锁脚本满足Tx0的锁定脚本中指定的一个或多个条件(因此,在所示示例中,如果在Tx1中提供了爱丽丝的签名并进行验证),则区块链节点104认为Tx1有效。这意味着区块链节点104会将Tx1添加到待定事务有序池154。区块链节点104还会将事务Tx1转发到网络106中的一个或多个其它区块链节点104,以便其会在整个网络106中传播。一旦Tx1有效并包括在区块链150中,这会将UTXO0从Tx0定义为已花费。应当注意的是,Tx1仅在花费未花费事务输出203时才有效。如果其试图花费另一事务152已经花费的输出,则即使满足所有其它条件,Tx1也将无效。因此,区块链节点104还需要检查先前事务Tx0中引用的UTXO是否已经花费(即,其是否已经形成另一有效事务的有效输入)。这是为何区块链150对事务152施加定义的顺序很重要的原因之一。在实践中,给定区块链节点104可维护单独的数据库,标记已花费事务152的UTXO 203,但最终定义UTXO是否已花费取决于是否在区块链150中形成了另一有效事务的有效输入。
如果给定事务152的所有输出203中指定的总数额大于其所有输入202所指向的总数额,则这是大多数事务模型中的另一失效依据。因此,此类事务不会传播或包括在区块151中。
请注意,在基于UTXO的事务模型中,给定UTXO需要作为一个整体使用。不能“留下”UTXO中定义为已花费的一部分数额,而同时又花费另一部分。但UTXO的数额可以在后续事务的多个输出之间分割。例如,Tx0的UTXO0中定义的数额可以在Tx1中的多个UTXO之间分割。因此,如果爱丽丝不想将UTXO0中定义的所有数额都给鲍勃,她可以使用剩余部分在Tx1的第二输出中自己找零,或者支付给另一方。
在实践中,爱丽丝通常还需要包括用于比特币节点104的费用,该比特币节点104在区块151中成功包含爱丽丝的事务104。如果爱丽丝未包括此类费用,则Tx0可能会被区块链节点104拒绝,并且因此尽管在技术上有效,但可能不会传播并且包括在区块链150中(如果区块链节点104不希望接受事务152,节点协议不强迫区块链节点104接受)。在一些协议中,事务费用不需要其自身的单独输出203(即不需要单独的UTXO)。相反,输入202指向的总数额与给定事务152的输出203指定的总数额之间的任何差额都将自动提供给发布事务的区块链节点104。例如,假设指向UTXO0的指针是Tx1的唯一输入,并且Tx1仅具有一个输出UTXO1。如果在UTXO0中指定的数字资产数额大于在UTXO1中指定的数额,则可以由赢得工作量证明竞赛以创建包含UTXO1的区块的节点104分配该差值。替代地或附加地,这不一定排除可以在其自身事务152的其中一个UTXO 203中明确指定事务费用。
爱丽丝和鲍勃的数字资产由区块链150中任何位置的任何事务152中的锁定至他们的UTXO组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种事务152的UTXO中。区块链150中的任何位置均未存储定义给定方103的总余额的一个数字。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其它随后事务中尚未花费的各种UTXO值整理在一起。为实现这一点,其可以查询存储在任何一个位比特币节点104处的区块链150的副本。
应当注意的是,脚本代码通常用示意图表示(即使用非精确语言)。例如,可以使用操作码(opcode)来表示特定功能。“OP_...”是指脚本语言的特定操作码。举例来说,OP_RETURN是脚本语言操作码,当在锁定脚本的开始处在操作码前加上OP_FALSE时,操作码创建事务的不可花费输出,该输出可以在事务内存储数据,从而将数据不可改变地记录在区块链150中。例如,数据可包括需存储在区块链中的文件。
通常,事务的输入包含对应于公钥PA的数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ECDSA。数字签名对特定的数据段进行签名。在实施例中,对于给定事务,签名将对部分事务输入以及部分或全部事务输出进行签名。对输出的特定部分进行签名取决于SIGHASH标志。SIGHASH标志通常是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
锁定脚本有时称为“scriptPubKey”,指其通常包括相应事务被锁定到的当事方的公钥。解锁脚本有时称为“scriptSig”,指其通常提供相应的签名。但是更通俗地说,在区块链150的所有应用中,UTXO赎回的条件并不一定包括对签名进行验证。更通俗地说,脚本语言可用于定义任何一个或多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
侧信道
如图1所示,爱丽丝和鲍勃的计算机设备102a、120b中的每个计算机设备上的客户端应用程序都可以包括附加通信功能。此附加功能可使爱丽丝103a建立与鲍勃103b的单独侧信道107(在任何一方或第三方的鼓动下)。侧信道107使得能够脱离区块链网络交换数据。此类通信有时称为“链下”通信。例如,这可用于在爱丽丝与鲍勃之间交换事务152,而不将该事务(尚未)注册到区块链网络106上或将其发布到链150上,直到其中一方选择将其广播到网络106上。以这种方式共享事务有时称为共享“事务模板”。事务模板可能缺少形成完整事务所需的一个或多个输入和/或输出。替代地或附加地,侧信道107可用于交换任何其它事务相关数据,例如密钥、议付数额或条款、数据内容等。
通过与区块链网络106相同的分组交换网络101可建立侧信道107。替代地或附加地,侧信道301可以经由诸如移动蜂窝网络的不同网络或者诸如无线局域网络的局域网建立,甚至经由爱丽丝和鲍勃的设备102a、102b之间的直接有线或无线链路建立。通常,在本文中任何地方所指的侧信道107可以包括经由一项或多项联网技术或通信介质的任何一条或多条链路,这些链路用于“链下”交换数据,即脱离区块链网络106交换数据。在使用多条链路的情况下,链下链路束或集合整体上可以称为侧信道107。因此,应当注意的是,如果说爱丽丝和鲍勃通过侧信道107交换某些信息或数据等,则这不一定意味着所有这些数据都必须通过完全相同的链路或甚至相同类型的网络发送。
客户端软件
图3A示出了用于实现本公开方案的实施例的客户端应用程序105的示例性实施方式。客户端应用程序105包括事务引擎401和用户界面(UI)层402。根据上文讨论的方案以及稍后将进一步详细讨论的内容,事务引擎401被配置为实现客户端105的基础事务相关功能,诸如制定事务152,通过侧信道301接收和/或发送事务和/或其他数据,和/或发送事务至一个或更多个节点104以通过区块链网络106传播。
该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元素,为了简洁起见,未对其进行说明。
HD钱包
BIP32
根据BIP32规范,HD钱包协议详细介绍了两种核心机制:
1.密钥导出——用于从单个种子导出密钥对树的系统。
2.导出路径——在此类树的顶部定义钱包结构。
下面概述了根据BIP32协议创建HD钱包所涉及的步骤。完整的讨论请参见https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki。
密钥导出
I.生成二进制种子。用户首先选择种子S,通常是12个单词的短语(在128位到512位之间)。BIP39中概述的规范通常用于从助记码生成二进制种子。用户也可以决定用密码短语来保护其助记符(详见BIP39)。
II.生成主扩展私钥。主私钥m是从种子导出的,如下所示:
1.计算
其中opad是128字节大小的外部填充,包括值为0x5c的重复字节;ipad是128字节大小的内部填充,包括值为0x36的重复字节。
2.将I分割为两个32字节序列,IL和IR。
3.使用parse256(IL)将32字节序列解释为256位数(最高有效字节优先)主扩展私钥m,IR作为256位数主链码。
III.生成子扩展私钥。给定父扩展密钥和密钥索引i,可以计算对应的子扩展密钥。有关从父公钥和父私钥导出子公钥的附加CKD函数,请参考BIP32。子私钥ski是使用以下函数从父私钥skpar及其对应的链码cpar导出的:
CKDpriv((skpar,cpar),i)→(ski,ci)。 (3)
在执行函数CKDpriv时,需采取以下步骤:
1.检查密钥索引是否i≥231,即,子密钥是否是增强密钥。
i.如果是=>增强密钥,则使用函数:
I=HMAC_SHA512(Key=cpar,Data=0x00||ser256(skpar)||ser32(i)),
其中ser256(skpar)将整数skpar序列化为32字节序列,ser32(i)将32位无符号整数i序列化为4字节序列,最高有效字节优先。
ii.如果不是=>普通子密钥,则使用函数:
I=HMAC_SHA512(Key=cpar,Data=serP(skpar·G)||ser32(i)),
其中serP(skpar·G)使用SEC1的压缩格式将坐标对skpar·G=(x,y)序列化为字节序列:(0x02 or 0x03)||ser256(x),其中头字节取决于省略的y坐标的奇偶校验。
2.将I分割为两个32字节序列,IL和IR。
3.返回的子密钥ski=parse256(IL)+skpar(mod n)。
4.返回的链码ci=IR。
图5中示意性地示出了该过程。
IV.序列化扩展密钥格式。扩展公钥(xpub)或私钥(xprv)是78字节数据结构的base58编码序列化:
[magic][depth][parent fingerprint][key index][chain code][key]
表1中汇总了各个数据元素的描述。
应当注意的是,父指纹是一种快速检测钱包软件中的父节点和子节点的方法。在内部,可使用完整的160位标识符处理指纹中的任何哈希碰撞。
表1,扩展密钥的base58编码序列化中使用的数据元素。
在转换为base58表示之前,首先要添加32位校验和(从双重SHA-256校验和导出),从而生成最多112个字符的字符串,该字符串在mainnet上以“xprv”或“xpub”开头,或在testnet上以“tprv”或“tpub”开头。
在导入序列化xpub时,实现方式还必须验证公钥数据中的X坐标是否对应于曲线上的某个点。如果不对应,则扩展公钥视为无效。
导出路径
普通密钥和增强密钥的32位密钥索引i范围分别为0x00至0x7fffffff(0至231-1)和0x80000000至0xffffffff(231-232)。使用下标符号(ih),或者更常见的是使用素数符号表示增强密钥。区块链开发人员通常使用ASCII撇号,而不是unicode素数符号。例如,第一普通密钥(0x00)为i=0,第一增强密钥(0x80000000)为i′=0′。
图6示出了取自BIP32规范的示意图中的子密钥导出路径。导出路径被定义为由“/”分隔的n密钥索引的n元组。对于BIP32 HD钱包,路径包括3个层级或深度(m/i/j/k),定义为:
m/account′/change/address_index。
主私钥m之后的第一层级i包含公开的BIP32钱包结构。此处的密钥空间可以进行分割,以便用户能够将其资金安排到不同的“账户”中,与传统银行账户类似,例如,用于组织的不同部门。默认账户是数字0’(增强密钥索引),并按顺序增加。
在第二层级j,每个账户包括两个密钥对链:内部密钥对链和外部密钥对链。外部密钥链(j=0的常量索引)用于生成新的公共接收地址,而内部密钥链(j=1的常量索引)用于所有其他操作,例如更改地址或不需要与外部通信的任何内容。
最后一个层级k表示从索引0开始编号并按顺序增加的地址。
BIP43-目的字段
BIP43规范(https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki)的出台是为了规范BIP32中定义的树状结构中的字段。具体地,该规范将主密钥之后的第一层级重新定义为专用字段。导出路径定义为:
m/purpose′/*
其中*表示以下层级,具体取决于目的字段中的数据。如果将其设置为零(i=0′),可以预期导出路径中还有两个层级,因为这是默认的BIP32钱包结构。
BIP44-多账户层次结构
在BIP43的应用中,目的字段设置为44’,对应于根据BIP44(https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)预定义的五层树状结构。具体地,介绍了在HD钱包的不同分支中处理多个币,并将默认值分配给比特币(j=0′)。此处,导出路径定义为:
m/purpose′/coin_type′/account′/change/address_index
地址间隙限制
为了发现账户,BIP44介绍了地址间隙限制的概念。
可以将钱包软件编程为停止搜索超过一定限制的连续未使用地址。这是因为地址索引是按顺序增加的。间隙限制不是标准化的,通常是用户可配置的。通常,将间隙限制设置为20个密钥,尽管一些钱包设置了100个甚至1000个密钥的限制。应当注意的是,间隙限制仅适用于同级密钥,而不适用于父子密钥。假设使用标准导出路径,搜索通常限于两个层级的深度。
账户发现:
当用户从外部源导入种子时,钱包软件可以使用地址间隙限制,以通过以下方式发现账户:
1.设置索引=0。
2.导出与索引对应的账户节点。
3.导出该账户的外部链节点。
4.扫描外部链的地址;遵守间隙限制。
5.如果在外部链上没有发现事务,则停止发现。
6.如果有一些事务,则将账户索引增加1,并从步骤2开始重复。
由于内部链只接收来自相关外部链的币,因此对区块链的扫描只涉及外部链。当用户试图通过生成新地址来超过外部链的间隙限制时,钱包软件应发出警告。
钱包恢复
不同的钱包提供商有不同的协议,用以在钱包恢复期间回收资金。向交易所提供HD钱包服务的公司可以很容易地拥有数千个未使用的连续地址,并且通常会忽略BIP44中公开的间隙限制。相反,这些公司会维护所有生成地址的列表,并对其进行单独索引,而不是作为HD钱包数据结构。以这种方式维护已知事务的缓存,用户无需在每次登录软件时重新查询区块链,从而使该过程更节省时间,同时还使轻量级客户端只用少量节点就能扩展其用户容量。
追踪UTXO或整个事务的钱包提供者往往将该信息存储在钱包服务器中。依赖于完整节点的HD钱包可以维护完整的事务索引,而服务器系统可能会保持附加到每个新地址的运行索引。对于发布的每个区块,钱包软件将根据钱包服务器中的每个地址检查新区块中的每个事务。使用预先索引的数据和/或借助于布隆过滤器,该过程会变得更加高效。
导出子密钥
本发明的实施例提供了一种导出分层密钥结构的子密钥的新方法。通常,分层密钥结构包括多个层级,每个层级包括与先前层级的至少一个密钥链接的一个或多个密钥。第一层级是个例外,通常称为主层级,包括主密钥。主密钥通常从可以是任意数据的种子导出。在主层级之后,有一个或多个子层级。第n-1层级的密钥可以是第n层级的一个或多个子密钥的父密钥。类似地,第n层级的密钥虽然是第n-1层级的父密钥的子密钥,但也可以是第n+1层级的一个或多个子密钥的父密钥。并非给定层级的所有密钥都必须是父密钥。例如,密钥结构可能有许多可以追溯到主密钥的密钥分支。一些分支可能比其他分支更长,这意味着这些分支包括所属层级比其他分支更高(即,更大、更远或更深)的密钥。
图7示出了用于实现本发明的实施例的示例性系统700。该系统包括被配置为导出密钥结构的一个或多个子密钥的密钥导出实体701。虽然BIP32是作为用于导出密钥结构的示例性协议提供的,但是密钥导出实体701并不限于导出符合该协议的密钥。例如,密钥导出实体701导出的密钥的长度可以与BIP32要求的长度不同。相反,密钥导出实体701可以导出符合BIP32的每项要求的密钥。此外,密钥导出实体701导出的密钥不需要用作对区块链事务进行签名的签名密钥或充当区块链地址的公钥,例如用于支付到公钥哈希(P2PKH)地址。
在一些示例中,密钥导出实体701可以被配置为执行如结合图1至图3所述的归因于爱丽丝103a(或实际上是鲍勃103b)的部分或全部操作。该系统可以包括区块链网络106的一个或多个节点104。附加地或替代地,该系统可以包括一个或多个第三方702,例如用户、组织、机器等。在一些示例中,至少一个第三方702可以被配置为执行如结合图1至图3所述的归因于爱丽丝103a(或实际上是鲍勃103b)的部分或全部操作。
密钥导出实体701具有包括一个或多个父密钥的现有密钥结构。主密钥是一个或多个子密钥的父密钥。属于密钥结构的更深层级的一个或多个子密钥本身可以是一个或多个子密钥的父密钥。例如,子密钥的父密钥本身可以是主密钥的子密钥。或者,密钥导出实体701第一次生成密钥结构,其中所生成的密钥结构包括至少一个父密钥。密钥结构是基于种子生成的。具体地,主密钥是基于种子生成的,而所有其他密钥都是至少间接地从主密钥导出的。
密钥导出实体701具有想要链接到密钥结构的子密钥的消息。消息可以是任何类型的外部数据。此处,外部数据是指导出子密钥通常不需要的数据。例如,父密钥不会被归类为外部数据,因为导出子密钥始终需要父密钥。外部数据的示例包括通信消息(文本、电子邮件等)、个人标识符(例如,姓名、出生日期、地址、护照号等)、费用清单、文本文件(例如,法律文件)等。
消息用于导出索引,而索引又用于导出子密钥。索引基于(即,根据)消息的哈希。换句话说,消息经过哈希处理,结果用于生成索引。在一些示例中,结果是索引。在其他示例中,对结果执行一次或多次附加运算,以生成索引。附加运算的一个示例是模运算,如果需要,该运算可以用于将哈希结果转换为特定大小的索引。也不排除可以执行其他运算来将哈希结果转换为一定大小。例如,如果需要4字节索引,可以选择哈希结果的前4个字节。可以作出不同的选择,例如,取最后4个字节。
可以使用任何哈希函数(例如,SHA256)对消息进行哈希处理。在一些示例中,可以对消息应用多个哈希函数,并且/或可以多次对消息应用给定的哈希函数。
生成索引后,密钥导出实体701基于(即,根据)父密钥和索引导出子密钥。更具体地,子密钥基于父密钥以及至少父密钥和索引的哈希。也就是说,子密钥ski的导出通常如下:
ski=f(skpar,hash(skpar,i))
其中f()是子密钥导出函数,skpar是父密钥。应当注意的是,虽然ski通常表示私钥,但是也可以使用其他类型的密钥,例如公钥。
在一些示例中,子密钥是通过将父密钥和哈希结果相加导出的:
ski=akpar+hash(akpar,i)
其中+表示椭圆曲线加法。
哈希函数可以是任何哈希函数,可以是也可以不是用于生成索引的同一哈希函数。在一些示例中,子密钥可以基于哈希结果的一部分(即,组件)。例如,哈希结果可能大于密钥导出实体701要求的密钥大小。在这种情况下,密钥导出实体701可以取哈希结果的一部分(例如,左侧n个字节),并将该部分用作子密钥。在需要链码来导出密钥的示例中(接下来讨论),哈希结果的另一部分(例如,剩余部分)可以用作子密钥的链码。
子密钥可以是父密钥cpar的链码的函数,即:
ski=f(akpar,hash(Skpar,cpar,i))
通常,密钥结构的密钥是基于父密钥和哈希结果(哈希结果基于父密钥和索引,在该示例中是父密钥的链码)导出的。子密钥的链码是哈希结果的一部分,其中哈希结果的另一部分用于导出子密钥本身。链码是添加的熵,确保子密钥不直接依赖于其父密钥。
在导出子密钥后,密钥导出实体701可以选择存储或删掉消息(该消息用于生成索引)。类似地,在将子密钥用于特定目的后,密钥导出实体701可以选择存储或删掉子密钥(和/或链码)。
如上所述,可以使用任何适当的哈希函数来生成子密钥。作为特定示例,哈希函数可以是HMAC函数,例如HMAC-512。根据所需的密钥长度,可以使用其他HMAC。HMAC有两个输入。例如,一个输入可以是父链码,另一个输入可以是父密钥和索引的级联。可以使用其他输入组合,例如,父密钥作为一个输入,与索引级联的链码作为另一个输入;或父密钥作为一个输入,索引作为另一个输入。
技术人员将熟悉公钥-私钥对。简而言之,公钥是通过对私钥应用函数来生成的,例如生成点的椭圆曲线乘法。密钥导出实体701可以使用所述技术来生成私钥或公钥。
在一些示例中,用于导出子密钥的父密钥是私钥。生成的子密钥也是私钥。此类密钥通常称为增强密钥,可以通过下式给出:
skchild=skparent+HMAC-SHA512L(cparent,skparent||index)
应当注意的是,哈希函数可以采取其他形式。
在其他示例中,用于导出子密钥的父密钥可以是公钥。在这种情况下,子密钥是基于父密钥以及与哈希结果对应的公钥导出的。也就是说,哈希结果转换为公钥,子密钥基于该公钥,例如:
pkchild=pkparent+HMAC-SHA512L(cparent,pkparent||index)·G
其中,·G表示椭圆曲线乘以生成点。
在另一示例中,哈希函数之外的父密钥可以是私钥,而输入哈希函数的父密钥可以是公钥。生成的子密钥是私钥。此类密钥通常称为非增强密钥,可以通过下式给出:
skchild=skparent+HMAC-SHA512L(cparent,pkparent||index)
密钥导出实体701可以导出与子私钥对应的公钥,例如
pkchild=skchild·G
这些密钥可以是对称方案的密钥,而不是非对称加密方案的密钥。
通常,密钥导出实体701导出的子密钥可以用于任何适当的应用,例如消息加密和解密。例如,可以使用子公钥对消息进行加密,或者可以使用子私钥对已经使用对应子私钥加密的消息进行解密。在子密钥是对称密钥的情况下,可以使用同一个子密钥对消息进行加密和解密。
子密钥也可以用于生成数字签名。也就是说,子密钥可以是用于基于消息和私钥生成数字签名的私钥。可以使用对应的公钥对签名进行验证。
子密钥可以用于区块链事务环境中的应用。例如,子密钥可以是区块链事务的输出锁定到其上的公钥,例如使用P2PK或P2PKH输出。密钥导出实体701可以生成包括锁定到子密钥的输出的事务。或者,密钥导出实体701可以向第三方702提供子密钥,而该第三方702可以生成包括锁定到子密钥的输出的事务。密钥导出实体701可以向第三方702提供子密钥本身,或提供基于子密钥的区块链地址,例如子密钥的哈希。应当注意的是,生成事务可以包括生成缺少至少一个字段的事务模板。事务模板可以传递给第三方702或密钥导出实体701来完成,这取决于谁生成了该事务模板。已完成事务随后可以传输到区块链网络106。
如果区块链包括锁定到子公钥的事务,则密钥导出实体701可以生成事务,该事务包括引用输出并被配置为解锁该输出的输入。该输入可以包括使用对应的子私钥生成的签名。根据所引用输出的锁定脚本,输入也可以包括子公钥。
密钥导出实体701可能想要或需要向第三方702证明已经基于消息生成子密钥。证明链接所需的信息取决于子密钥的导出方式。至少需要父密钥和消息。密钥导出实体701可以将一个或两个数据项传输给第三方702,例如,取决于第三方702是否已经可以访问父密钥或消息。例如,父密钥可以是第三方702已知的公钥。第三方702可以基于消息生成索引,即,通过至少对消息进行哈希处理来生成索引。然后可以对父密钥和索引进行哈希处理,然后与父密钥结合,以导出子密钥。如果子密钥是使用父密钥的链码导出的,第三方702还需要知道链码,链码可以由密钥导出实体701提供。
作为可选特征,密钥导出实体701可以将数字证书嵌入密钥结构中。数字证书由认证机构颁发给一方,并认证数据项属于特定方或以其他方式与特定方相关联。在这种情况下,将数字证书颁发给密钥导出实体701(或至少是操作密钥导出实体701的一方)。数字证书可以认证密钥属于密钥导出实体701。认证密钥可以是密钥结构的密钥,例如主密钥。通过基于数字证书生成子密钥的索引,可以将数字证书嵌入密钥结构中。换句话说,用于生成子密钥的索引的消息可以包括数字证书。数字证书可以属于密钥所有者(即,密钥导出实体701)或资金发送者,并且/或可以包括除证书之外的消息,例如,出于审计原因在费用清单和费用清单支付人之间创建链接。对密钥进行认证实现了对身份的加密证明,而将数字证书嵌入密钥导出函数(通过索引)则不能;但确实在密钥和某人的身份之间创建了链接,例如出于审计目的。
附加地或替代地,主密钥可以是认证密钥。也就是说,主密钥可以进行认证,但不需要嵌入密钥结构中。应当注意的是,认证密钥通常是公钥,因为其密钥进行认证的一方不希望泄露他们的私钥。通过将密钥所有者的身份链接到钱包,这为通过HD钱包审计费用清单的想法提供了整体解决方案。
现在回到子密钥的导出,密钥导出实体701可以导出多个不同的子密钥。每个子密钥可以按上述方式导出。也就是说,每个子密钥可以基于相应的索引导出,该索引基于消息。在一些示例中,每个新导出的子密钥使用不同的消息。或者,不同的密钥可以使用同一消息。然而,在这种情况下,子密钥必须具有不同的父密钥,以确保没有两个子密钥是相同的。
一些子密钥可能具有同一父密钥。也就是说,使用所述技术导出的一些子密钥可以在密钥结构的同一层级导出,并链接到同一父密钥。一些子密钥可能具有不同的父密钥,但不同的父密钥属于密钥结构的同一层级,因此其子密钥属于同一层级。一些子密钥可能具有属于密钥结构的不同层级的父密钥。在这种情况下,直接基于消息导出的子密钥将存在于密钥结构的不同层级。也不排除一些新导出的子密钥可能是之前导出的子密钥的子密钥。也就是说,直接基于消息导出的子密钥可以是同样直接基于相应消息生成的一个或多个子密钥的父密钥。
在一些示例中,当基于同一父密钥导出多个子密钥时,可以使用同一消息来生成索引,但该消息可以与不同的数据项级联或以其他方式结合。也就是说,索引基于消息和数据项的哈希。数据项可以是计数器值,该计数器值在每增加一个子密钥时会递增。例如,第一子密钥的索引可以是与第一计数器值(例如,0)级联的消息的哈希,第二子密钥的索引可以是与第二计数器值(例如,1)级联的消息的哈希,依此类推。
在其他示例中,用于生成不同子密钥的索引的相应消息可以是整个更大的同一消息的相应部分。例如,可以将整个消息分割为若干块,然后使用消息的每个块生成用于导出相应子密钥的相应索引。
在一些其他示例中,其索引基于消息哈希的子密钥可以是一个或多个子密钥的父密钥,这些子密钥的相应索引是在使用序列中的递增值的传统意义上生成的,如BIP32中所述。在这些示例中,密钥导出实体701可以选择基于消息导出密钥结构中仅单个层级的子密钥。
密钥导出实体701可以将多个子密钥中的一个或多个子密钥发送给第三方702。附加地或替代地,密钥导出实体701可以为多个子密钥中的每个子密钥生成相应的区块链地址,并将这些地址发送给第三方702。这些地址可以包括在一个或多个事务模板中,例如每个地址一个模板。
密钥导出实体701可以生成一个或多个区块链事务(可以是事务模板),每个事务具有锁定到所导出子密钥中的一个子密钥的至少一个输出。每个事务可以包括锁定到子密钥中的相应子密钥的单个输出,或者一个或多个事务可以包括锁定到子密钥中的相应子密钥的多个输出。密钥导出实体701可以将事务发送到区块链网络,或发送给第三方702。事务的数量和这些事务的输出可以基于英国专利申请GB1913667.0中描述的技术。
现在将讨论所描述的实施例的进一步具体示例。
外部数据HD钱包
公开了一种在HD钱包(“EDHD钱包”)的密钥导出中包括外部数据(ED)的新方法。公开了外部消息映射到HD钱包中密钥导出路径中的索引,而不是在计算公钥-私钥对时明确地包括外部消息。
用户(即,密钥导出实体701)可以分配仅用于依赖于外部数据的密钥的HD钱包,也可以通过将整个分支专门用于与外部数据对应的密钥,将外部数据合并到预先存在的钱包中。在图6的示例中,分支从主节点(即,主密钥)开始从左到右。例如,图6所示的一个分支由以下节点组成:m、m/0、m/0/0、m/0/0/0。另一个分支由以下节点组成:m、m/i、m/i/1、m/i/1/1。
例如,如果导出路径遵循BIP44,用户可以选择账户索引(深度3),以将与账户相关的外部数据合并到该分支的所有导出子密钥中。或者,可以将地址索引(深度5)与分支中的单个费用清单相关联。下面将探讨在不同深度沿HD钱包的不同分支合并外部数据的意义。
为了导出钱包中的特定密钥,公开了以下计算。假设有想要用来在公钥上留下指纹的消息,首先计算消息m模232的哈希(例如,使用SHA256哈希函数)
索引index=hash(m)mod 232 (4)
这样就可以在HD钱包导出中作为子密钥的索引使用。应当注意的是,经哈希处理的消息模232由SHA256哈希函数结果的右侧4个字节给出。为了恢复密钥,将结果限制在范围0≤索引<232内。应当注意的是,这是特定于BIP32钱包的,对于其他协议,可以选择不同范围的可能索引值。例如,如果索引可以在由5个字节给出的范围内取值,则索引将由索引=hash(m)mod 240给出。
然后选择依赖于该消息的密钥,对于普通密钥和增强密钥,分别定义为等式(1)或等式(2)。应当注意的是,此处不改变HD钱包协议,只是赋予索引意义。
应当注意的是,在HD钱包协议中,231以下的索引保留给普通密钥,而231以上的索引用于增强密钥。由于选择了将范围限制在232,因此在该协议中,子密钥成为增强密钥或普通密钥的几率是相等的。如果想明确选择想要增强密钥还是普通密钥,只需将索引计算修改为
索引=hash(m)mod 231 (5)
适用于普通密钥:
索引′=(hash(m)mod 231)+231 (6)
适用于增强密钥。这些范围意味着在二进制表示中,普通密钥索引始终以0开头,而增强密钥索引始终以1开头,因为索引的长度始终正好为32位。这就完成了对如何将外部数据映射到特定密钥的描述。
图8示出了以这种方式生成密钥索引时所得到的钱包结构。由于一些数据的哈希会产生不可预测的输出,因此EDHD钱包中的密钥索引是随机生成的,而不是像在传统HD钱包中那样按顺序递增。
外部数据审计
基于上面的示例性定义,商家(密钥导出实体701的示例)有每年生成超过20亿个费用清单的空间。这对于制造台式电脑和笔记本电脑、平板电脑、智能手机和智能音箱的大型消费性设备公司或“科技巨头”(例如,每年可能销售数亿台设备的公司)来说绰绰有余。在完成该纳税年度的财务审计后,大型公司可能会每年生成一个新的EDHD钱包。
应当记住的是,在密钥对的计算中引入外部数据的原因之一是进行审计,从而在外部数据和数字密钥之间提供可证明链接。在这种情况下,为了证明子密钥是从外部数据导出的,需要向审计者(例如,第三方702)提供在子密钥导出中使用的索引。这需要共享HMAC512函数的原像,因此父密钥也必须共享。对于增强密钥,这意味着共享父私钥,这在区块链标准中是不可取的,因此不建议这样做。解决该问题的一种方法是简单地强制EDHD钱包只包含普通密钥,这样所有密钥都可以轻松地进行审计。这是通过将结果的范围限制为仅包括普通密钥来实现的,如等式(5)所示。
第二种方法是修改BIP32程序,以简化对增强密钥的审计。这在本福特钱包中得到了证明,其中增加了额外的步骤,以将费用清单消息包含在HMAC256计算中。该方法在公钥和费用清单之间创建了可证明链接,但不能用于证明子密钥链接到父密钥。
第三种方法是假设HD钱包协议是安全的。实际上,这意味着HD钱包的导出方式有行业标准,没有人能改变这一点。目前,HD钱包密钥(存储在钱包软件中,但不出现在链上事务中)的序列化格式包括4个字节,用于指示与该密钥对应的关于从其父密钥导出的索引。如果可以假设该索引是正确的,则可以通过验证在该位置给出的索引对应于正确的外部数据来对增强密钥进行审计。这种假设也与这样一种预期有关,即钱包提供者受到激励,诚实地维护自己的声誉。
通常,审计者的要求远低于加密证明的要求。最终,审计者只需要某种形式的证据来证明商家提供的费用清单是有效的。使用具有增强密钥的EDHD钱包仍然为商家提供了标识与特定费用清单相关联的公钥的方法。商家可以将这些公钥连同一个或多个费用清单一起交给审计者,并充分说服审计者相信其有效性,因为输出值的总和将等于费用清单值。因此,用户可以自行决定是否要采用上述建议方法中的任何一种方法进行审计。
所公开的解决方案允许HD钱包依赖于外部数据,以便对其进行审计。值得注意的是,这种解决方案仍然允许密钥在丢失的情况下进行恢复,而不需要知道相关的外部数据。
对间隙限制的限制
EDHD钱包协议采用了HD钱包恢复的优点,其中所有私钥/公钥对都可以单独从种子重新生成。为了确保钱包永远不会丢失,可以安全地存储种子(或将种子分为几个份额,并将这些份额分散,以确保安全)。为了重新生成钱包中的密钥,大多数钱包实现方式会搜索存储在钱包服务器(如果存储用户的事务历史记录,就不需要扫描区块链)中的UTXO集,直至达到根据BIP44准则通常设置为20的地址间隙限制。这意味着,如果有20个未收到支付的连续地址,钱包软件就会停止搜索过程,并假定钱包中不再有密钥。
考虑这样一种场景,即企业HD钱包用户爱丽丝生成并向其客户端分发20个接收地址(间隙限制为20的最大可能)。她在等待客户端支付,但没有客户端响应她的支付请求,爱丽丝需要为一些新的潜在客户端生成更多的地址。
如果用户以这种方式快速连续生成20个地址,钱包软件必须编程,使第21个生成的地址环绕并重复使用第1个生成的地址。
在正常情况下,地址不会重复使用,每次支付都会分配一个新地址。这符合安全数字密钥管理的最佳加密做法。
上面这个简单的示例强调了连续地址生成的限制性,这是钱包实现地址间隙限制的核心要求。然而,钱包软件可以解决该问题,在加密安全方面进行权衡。
由于每个钱包提供者的恢复过程存在差异,因此在不同的钱包服务之间迁移种子时,地址间隙限制仍然存在问题。因此,如果用户决定使用新的钱包提供者,在钱包服务器中追踪地址可能行不通。因此,对于需要提前调查钱包迁移是否可行的用户来说,间隙限制的限制性可能会很麻烦。
EDHD钱包恢复
现在考虑拥有EDHD钱包和一系列费用清单的商家。商家向可信第三方702备份其种子,并使用其钱包进行日常业务。如果商家丢失了其钱包数据文件,但仍然有费用清单,他们可以通过备份种子和费用清单集立即标识每个费用清单所使用的公钥或密钥集(在使用本福特EDHD钱包的情况下)。
如果商家同时丢失了钱包数据文件和费用清单,他们仍然可以通过暴力破解检查所使用的公钥来恢复钱包,因为只需要检查232个索引的列表。也就是说,商家可以生成所有可能的地址,并检查是否有支付给这些地址中的任何一个地址的UTXO。应当注意的是,如果所有费用清单均丢失,要完全恢复EDHD钱包中的所有密钥,就必须消除地址间隙限制,以便软件搜索4字节范围内的所有地址。在安全性方面,费用清单本身不需要像钱包种子那样安全,因为泄露费用清单只会导致失去一些隐私,而不会对商家造成损害。
还有一种附加选项是存储子密钥导出中使用的外部数据,这样就存在应该导出的索引列表。可以像BIP39所描述的那样显式地存储索引或对应于每个索引的助记符。如果这些数据遭到破坏,攻击者就无法标识具体的地址或事务,除非知道导出路径中的父密钥。对于与费用清单对应的外部数据,出于审计目的,无论如何都必须存储这些数据,因此无需额外存储外部数据。
在钱包迁移方面,钱包数据文件是从种子和费用清单确定性地导出的,这使得钱包之间的转移非常简单。这是因为用于计算密钥的索引是已知的,或者可以通过费用清单计算出来。这是因为种子和费用清单是唯一需要的数据片段,其他一切(即,密钥的重新生成)都是确定性的。由于如上所述的密钥导出路径存在差异,因此对于希望从不同的钱包提供者迁移种子的用户来说,目前这是一项严重的限制。
特征和好处
在从种子和费用清单(或者更一般地,其他外部数据)确定性地导出钱包数据文件时,带来了钱包用户目前无法获得的若干独特好处。如上所述,这些好处中的一个好处是能够在不同的钱包提供者之间轻松迁移。另一个好处是,现在可以在接收资金之前标识密钥,因为已经使用费用清单生成了密钥,而不是依赖于密钥是否以任何顺序使用。可以利用本发明的实施例提供以下示例中的任何一个或多个示例:
●可扩展——不受传统HD钱包的连续性限制。
●可定制——提高了包括用于不同目的的外部数据的灵活性。
●可恢复——事务和费用清单可以单独从种子中恢复。
●可互操作——在不同的钱包提供者之间轻松转移数据。
●可审计——提供了一种在钱包中标识和构建密钥的新方法。
理论基准
现在提供一系列理论分析,以响应与钱包恢复相关的问题,以及在使用所公开的外部数据索引解决方案时潜在哈希碰撞的风险。除非明确说明,以下理论研究基于四个假设:
a)不知道地址间隙限制;
b)不知道密钥导出路径;
c)只使用过P2PKH脚本来生成地址;以及
d)可以访问存储在钱包服务器中的整个UTXO集。
钱包恢复
恢复EDHD钱包中使用的私钥-公钥对涉及两个步骤:
1.使用所有可能的导出路径生成所有可能的密钥;以及
2.验证哪些密钥是活动密钥(与未花费事务相关联的密钥)。
在下文中,分析了使用两种方法对钱包的所有可能密钥进行暴力破解的计算复杂性:账户/索引暴力破解和消息暴力破解。
账户/索引暴力破解
理论上,通过向导出路径添加新的层级,可以生成无限多的密钥。在标识活动密钥时,假设使用BIP44,其中前3个层级是固定的。例如,在比特币的情况下,前3个层级是m/44’/0’,后跟账户(仅增强地址)、零钱(始终为0)和地址索引。为此,使用这种方法对钱包进行暴力破解需要探索导出路径的所有可能的账户和索引。
如果不使用地址间隙限制来中断活动密钥搜索,需要对所有可能的账户(31位,即约20亿个账户)进行暴力破解。每个账户都有32位密钥:约40亿个地址索引,约20亿个增强密钥以及约20亿个普通密钥。因此,对于20亿个账户中的每个账户,必须生成40亿个地址,然后检查UTXO集中哪些账户有未花费事务。
以用于搜索虚荣地址的“预期密钥搜索率”为基准,可以假设现代GPU每秒可以处理1500万到20亿个密钥(Mkey/s)。因此,为每个账户生成40亿个可能的密钥所需的时间在2秒到5分钟之间(密钥数量/GPU处理能力)。
然后,对于每个密钥,验证其在UTXO集中是否有未花费事务。假设UTXO集存储在RAM中,因此测试非常快,估计密钥生成和UTXO检查的整个过程需要5秒到5分钟,具体取决于所使用的GPU。由于必须探索所有可能的索引,因此无论是搜索1个活动地址还是1000个活动地址,完成该过程的时间都是恒定的,除非知道活动地址的数量(在这种情况下,可以在达到该数量时执行提前停止)。
正如所假设的,不知道关于账户的任何信息,还必须探索所有的账户空间(由231位组成)。因此,必须对约20亿个可能的账户重复暴力破解过程。使用最快的GPU(5秒内完成对约40亿个地址索引的暴力破解),每个账户需要5秒,因此探索约20亿个账户需要约340年。
如果将该过程并行化,例如通过并行运行100个GPU,时间可以缩短至3.4年。应当注意的是,一个此类GPU的成本在2000英镑到3000英镑之间,不包括3年的电费,因此恢复一个钱包是一项巨大的投资,对大多数用户来说可能不可行。
如果重新引入20个非活动地址的间隙限制,暴力破解过程所花费的时间将远远短于5秒,可以有把握地假定每个账户花费的时间不到1毫秒。如果想对所有的账户进行测试,需要花费的总时间为1毫秒x20亿个可能的账户,即约25天。
如果在账户生成中也引入了间隙限制,可能只需要检查数百个账户,而不是所有20亿个可能的账户。在这种情况下,整个过程可以在1秒左右完成。应当注意的是,即使对于更高的间隙限制(例如,100),也是如此。
密钥暴力破解示例
现在使用两种广泛使用的GPU,对暴力破解HD钱包中的密钥所需的时间进行比较。在第一个实验中,考虑了高级GPU,GeForce RTX 2080SUPER(2000Mkey/s),而在第二个实验中,考虑了中级GeForce GTX 780Ti(50Mkey/s)。应当注意的是,“大小”列是指导出路径中随机生成的密钥索引位的总数(例如,导出路径中的1个深度是32位,2个深度是64位等)。研究结果如表2所示。
表2,使用两种不同的GPU对HD钱包中的密钥进行暴力破解所花费的时间。
计算结果表明,使用任何一种类型的GPU都可以很容易地对单个32位密钥索引进行暴力破解(在上面的示例中为2秒或85秒)。应当注意的是,这与选择的索引(即,地址索引或账户)无关。
然而,在随机生成两个索引(例如,地址索引和账户)时,情况更加复杂。事实上,地址索引(32位)加上账户(32位)的总大小为64位,即使使用顶级GPU,其计算成本也太高了,无法暴力破解。仅生成所有密钥就需要292年,还不包括检查哪些公钥具有有效的未花费事务的时间。
一种混合解决方案可以是只随机地创建一些索引的子空间。例如,账户索引可以限制为8位或16位,其余位可以确定性地生成或简单地设置为零。通常,可以按下式计算混合密钥索引
indexhybrid=hash(m)mod 216 (7)
适用于普通密钥,前置零,以创建32位整数;
index′hybrid=(hash(m)mod 216)+231 (8)
适用于增强密钥。
表3,使用两种不同的GPU对HD钱包中随机生成的密钥索引进行暴力破解所花费的时间。
表3汇总了对随机地址索引、账户和混合解决方案进行暴力破解所需的时间。结果显示,对从随机索引导出的密钥进行暴力破解所需的时间与出现哈希碰撞的可能性之间存在权衡,在对混合索引的随机组件使用较小的位空间时,出现哈希碰撞的可能性会增加。对于希望将外部数据嵌入多个导出深度(例如,地址和账户层级)的用户,建议为任何额外的随机密钥索引选择混合解决方案。例如,32位随机生成的地址索引可以与8位或16位混合随机账户索引结合使用。这些密钥索引可以一起提供,例如,在任何审计过程中提供。然而,如果需要单独考虑索引,例如在身份验证过程中,则建议使用较大的16位混合随机索引,以最大限度地减少哈希碰撞的可能性。
消息暴力破解
账户/索引暴力破解的替代方案是对消息m而不是整个账户(即,索引空间)进行暴力破解。消息暴力破解包括生成所有可能的消息,例如费用清单或用于生成密钥的任何其他信息,而不是密钥本身。当消息空间小于账户/索引空间时,这种方法比穷举密钥搜索更高效,因为从小消息空间生成的可能密钥是全部可能密钥的子集。例如,如果知道费用清单消息表示为带有常量部分和一些变量的字符串,如下所示:
m=‘Sold bicycle for 3 BSV with frame number XXXX and date YY/YY/YYYY’
则可以对消息的变量部分(XXXX和YY/YY/YYYY)进行暴力破解,而不是对约40亿个地址索引进行暴力破解。
假设想要挖掘过去10年的费用清单,那么变量YY/YY/YYYY就有3650(365天x10年)个不同的值。同样,假设用某种逻辑每年最多生成1,000,000个费用清单,那么变量XXXX就有1,000,000个不同的值。因此,要探索的空间是1,000,000x3650=~36亿个组合,这与对地址索引进行暴力破解的数量级相同。在这种情况下,对索引或消息进行暴力破解的复杂性类似,因此需要的时间量类似。
如果能减少要探索的空间,挖掘费用清单会很方便。例如,如果最多有1,000个可能的费用清单,并且只考虑1年,那么有1,000x365=365,000个组合可以在约0.2毫秒(而不是5秒)内进行暴力破解。对所有账户进行暴力破解需要大约5天(而不是340年)来完成。应当注意的是,让昂贵的GPU全天候运行5天,只是为了对一个HD钱包进行暴力破解,这仍然不是一种具有成本效益的选择,因此应使用确定性方法来解决账户管理。
哈希碰撞
现在评估两条消息m(外部数据)生成相同的32位索引并因此映射到EDHD钱包中同一子密钥的概率。该问题是生日悖论的泛论,因此可以使用以下(近似)公式来计算至少两个密钥索引相同的概率,假定n条消息的范围为[1,d]:
因此,d=232范围内的碰撞概率为:
表4中给出了一些示例,例如,插入10,000条消息的碰撞概率为1.1%,而插入100,000条消息的碰撞概率约为68.8%(这意味着,平均只有31.2%的消息具有唯一的导出路径)。如果想要避免碰撞,通常认为低于10-6的碰撞概率是可接受的,因此对于钱包实现方式来说是合理的,这意味着每个账户使用消息m(例如,费用清单)生成的密钥不应超过100个。为了增加每个账户的密钥数量,可以实现碰撞管理工具。例如,如果消息m生成了已经在使用的索引,可以稍微修改该消息(例如,增加计数器)。
或者,可以接受碰撞。这不会造成任何资金损失,因为唯一的影响是地址会被重复使用(这可能会导致失去少许隐私)。要将费用清单唯一地链接到事务,除了公钥之外,还可以使用费用清单数额和时间等其他因素。插入n个密钥的估计碰撞次数可以按下式计算:
重复次数
如表4最后一列所示,随着消息数量的增加,预计会出现一些碰撞:例如,当使用50,000条消息时,预计的重复次数为0.29次;当使用100,000条消息时,预计的重复次数会增加到1.16次。这意味着,当从100,000条不同的消息开始生成密钥时,平均而言,这些消息中的两条消息将共享同一公钥(即,两个费用清单共享同一地址)。
消息数量(n) | 碰撞概率 | 碰撞计数 |
10 | 1.06e-8 | 1.06e-8 |
100 | 1.16e-6 | 1.16e-6 |
1000 | 1.16e-4 | 1.16e-4 |
10,000 | 1.16e-2 | 1.16e-2 |
50,000 | 2.52e-1 | 0.29 |
100,000 | 6.88e-1 | 1.16 |
500,000 | 1-2.29e-13 | 29.1 |
1,000,000 | 1-2.76e-51 | 116.4 |
表4,哈希碰撞概率和预期碰撞次数。
本福特钱包
一种称为本福特钱包的钱包设计提供了一种机制,该机制可保护通过公共区块链处理事务的商家和用户的隐私,同时确保法规遵从性。简而言之,费用清单数据用于导出输出地址,这对审计很有用。同时,在多个事务中将费用清单值分布到多个输出地址,从而混淆费用清单值,这可提高链上隐私性。
该协议可互换地使用链码或共享秘密,以在不同的输出地址之间链接费用清单消息m。这两种方法都通过在等式(1)或等式(2)之后引入额外的步骤来修改(3)中所示的广义BIP32 CKD函数,以便从m的哈希导出普通私钥或增强私钥
ski=skpar+HMAC256(HMAC512L(■),m)mod n (12)
这两种方法都重新引入了密钥包问题,因为外部数据是通过向子密钥导出路径添加额外的步骤而包括在内的。上面针对EDHD钱包描述的方法解决了该问题,因为该方法在现有的BIP32框架内运作,而无需引入任何可能导致密钥包情况的额外步骤。
可以将本福特钱包和EDHD钱包结合起来,以获得两者的好处。例如,可以根据上述索引映射将费用清单嵌入HD钱包中,同时根据本福特定律将事务分割到不同的输出地址,从而混淆费用清单值。
由于本福特钱包需要一个费用清单,并从中生成若干个输出地址,因此需要注意根据EDHD钱包方案对其进行调整,如前所述,该方案将一个费用清单映射到一个输出地址。
有几种选项可以做到这一点:
1.添加计数器——通过在费用清单消息m的开头级联整数n,为每个输出地址生成一个新的费用清单消息,使得mBenford=n||invoice。计数器以增量的方式增加到归属于一个费用清单的输出地址的总数。例如,如果n=3,密钥导出实体701通过下式生成三个索引和对应的密钥:
indexi=hash(mBenford,i)mod 231
其中
mBenford,0=0||invoice
mBenford,1=1||invoice
mBenford,2=2||invoice
2.分割费用清单——在n个不同的输出地址将消息分割为n个相等的数据块。
3.导出路径有两个深度——单个费用清单的输出值可以在导出路径的两个深度上分割。例如,费用清单消息(mBenford=invoice)可以用于导出父密钥,其余输出地址则是前n-1个子密钥。这种方法意味着,在导出路径的不同深度嵌入外部数据时,也不会造成钱包恢复时间损失。
如上所述,这些技术需要知道费用清单值的n个分区。由n表示的随机分区可以确定性地从费用清单消息本身导出,与等式(4)中导出密钥索引的方式相同,但将模数修改为费用清单分区数量的实际上限(例如,10个分区)。这对本福特-EDHD钱包进行了描述。
实现本福特定律的随机分区
为了让鲍勃(即,密钥导出实体701)在许多输出和许多事务中随机分割3BSV的费用清单,需要执行以下两项任务:
1.随机选择要使用的输出数量和事务数量。
2.在选定数量的输出中随机分割BSV的费用清单值。
使用两种不同的随机分区方法,分两步实现这些目标。第一步是对小整数进行分区,并从该集合中进行统一的随机选择。第二步是使用较大数量(以聪为单位的费用清单值)的统一随机切片,以便创建一组加起来等于该较大数量的分区。在这两个步骤中所涉及的随机化导致本福特定律应用于事务数量、每个输出的事务数量以及输出值本身。
在下文中,只要求用户鲍勃提前选择一个参数N,定义为N=最大输出数量。在现实场景中,预计该数量较小,例如小于20。
I.事务和输出分布。用户鲍勃定义了整数N,如上所述,该整数表示他愿意分割费用清单的最大输出数量。将描述输出m个事务模板的过程,总共有n个输出,其中n≤N。
步骤1:识别或查找满足1≤k≤N的每个整数k的整数分区。整数分区是总和为n的(无序)数字的不同组合。例如,k=3和k=4的整数分区为:
3、 4、
2+1、 3+1、
1+1+1、 2+2、
2+1+1、
1+1+1+1。
可以看出,3有3个可能的整数分区,4有5个可能的整数分区。整数分区的数量不是线性增长的。下表给出了每个整数k≤50的分区数量。
k | 分区数量 | k | 分区数量 | k | 分区数量 | k | 分区数量 | k | 分区数量 |
1 | 1 | 11 | 56 | 21 | 792 | 31 | 6842 | 41 | 44583 |
2 | 2 | 12 | 77 | 22 | 1002 | 32 | 8349 | 42 | 53174 |
3 | 3 | 13 | 101 | 23 | 1255 | 33 | 10143 | 43 | 63261 |
4 | 5 | 14 | 135 | 24 | 1575 | 34 | 12310 | 44 | 75175 |
5 | 7 | 15 | 176 | 25 | 1958 | 35 | 14883 | 45 | 89134 |
6 | 11 | 16 | 231 | 26 | 2436 | 36 | 17977 | 46 | 105558 |
7 | 15 | 17 | 297 | 27 | 3010 | 37 | 21637 | 47 | 124754 |
8 | 22 | 18 | 385 | 28 | 3718 | 38 | 26015 | 48 | 147273 |
9 | 30 | 19 | 490 | 29 | 4565 | 39 | 31185 | 49 | 173525 |
10 | 42 | 20 | 627 | 30 | 5604 | 40 | 37338 | 50 | 204226 |
步骤2:从满足1≤k≤N的每个k的所有可能分区中统一地随机挑选一个分区。对于一些整数m,n(其中1≤m≤n≤N),可以将该分区写为n1+…+nm=n。将每个项解释为定义具有ni个输出的事务。也就是说,将构建m个事务,事务i具有ni个输出(1≤i≤m)。这在图9中示意性地示出。输出总数为n。
这两个步骤完成了在下一节中对值分区流程的初始设置。
除了必需的单个整数输入N外,建议用户鲍勃可以提供一些可选输入:
1.最小事务或输出数量:可以用于避免无关重要的情况。
2.最大事务数量:可以用于对事务费用的开销或在发送者与接收者之间传输的数据量设置上限。在一些情况下,事务数量定义了发送者需要提供的最小输入数量,可以通过该可选参数设置限制。
II.费用清单值分布。给定L BSV的费用清单值以及在上一个流程中获得的m个事务模板的列表,可以使用以下程序来填写n个输出:
1.统一地随机生成精度为10-8的n-1个数字(最小单位为1聪,10-8BSV),U1,U2,......,Un-1∈(0,1)。
2.按升序对Ui进行排序,0<U(1)<U(2)<…<U(n-1)<1。
3.对于i=1,2,......,n,按Xi=U(i)-U(i-1)计算分区,其中U(0)=0且U(n)=1。
现在有了费用清单值L,按比例分区为Xi’s,以形成n个值,m个事务模板总共有n个输出,n个值中的每个值一个。
分区Xi’s遵循本福特定律的一般解释。也就是说,Xi的前导数位越小,出现的可能性就越大。比例因子L不影响前导数位的分布。提供了L=1的详细证明,并将结果扩展到L>0的任何值。
链接到身份证书
数字证书由CA签名和颁发,在验证用户身份与证书中指定的主体公钥之间的链接时,该CA充当可信第三方702。如果用户希望对若干个密钥进行认证,向商业CA请求认证的成本可能相当高。然而,数字密钥管理的最佳加密做法建议避免重复使用公钥。因此,对于通过区块链网络处理事务的用户来说,在将其身份数据链接到整个密钥钱包时,采用确定性方法将会更加高效且更具成本效益。
认证父密钥
将身份数据链接到HD钱包中的一组密钥的最直接方法是对主公钥或从主密钥导出的账户密钥进行认证,这样就可以链接到每个相应账户持有人的身份证书。对于由普通(即,非增强)子密钥生成的地址,可以建立与钱包身份(即,账户所有者)的可证明链接。因此,可以对地址密钥进行身份审计,这些地址密钥是普通子密钥,因为这些密钥可证明地链接到已为其颁发身份证书的父密钥。
也可以通过以下方式验证子密钥是否在其父密钥被认证(即,数字证书事先就存在)后得到使用:
1.时间戳——数字证书通常包含时间戳。时间戳可以用作证据,证明证书是在链上使用子密钥之前创建的。
2.链上数字证书——如果证书本身是在链上颁发的,或者哈希提交是在链上注册的,这也提供了证据,证明证书在子密钥之前就已存在(或者至少是在链上使用子密钥之前就已存在,这在功能上是等效的)。
应当注意的是,这里与相对不太严格的费用清单审计情况有区别,在费用清单审计情况下,拥有与外部数据链接的证据就已足够。对于身份审计,将寻求一种加密证明,以根据HD钱包中的子密钥正确验证用户的身份。通过为父密钥提供身份证书,并根据费用清单导出带有索引的子密钥,即可获得非常便于审计的系统。
将数字证书映射到密钥索引
将用户身份链接到HD钱包中的密钥的替代方法是使用上述方法将数字证书映射到密钥索引。这可以通过简单地将等式4中的外部数据设置为m=数字证书来实现。然而,应当强调的是,由于上述相同的原因,使用这种方法不会为用户身份提供加密证明。
因此,必须采用附加协议来检查钱包所有者是否知道数字证书中指定的主体公钥的私钥。此类协议可能会利用基于数字签名、哈希原像知识(如果相关)或零知识证明的各种证明方法,让用户以加密方式证明对认证公钥/私钥对的所有权。
将身份数据映射到账户层级使得能够根据不同的数字证书对整个密钥分支进行分区。图10示出了如何根据“身份”分支、“商家”分支和“教育”分支使用不同的数字证书来构建EDHD钱包。账户层级的密钥索引现在是随机的,因为它们是根据相应数字证书的哈希计算得出的。应当记住的是,基于上面关于钱包恢复的讨论,由账户层级的一些外部数据的哈希生成的随机索引应限制在较小的位空间。
BIP44比特币EDHD钱包的完整导出路径可以写为:
m/44’/0’/(hybrid_random_account’)/0/(random_address_index)
其中当m=digital certificate(数字证书)时,使用等式8生成hybrid_random_account’密钥索引;当m=invoice message(费用清单消息)时,使用等式5生成random_address_index。可以进一步开发每个分支的结构,以适应不同的业务应用。如果考虑“商家”分支,商家可以对应于退还(refund)分配深度4的子密钥,其中创建深度3的子密钥需要哈希原像(即,原始费用清单),使得可以通过将UTXO数额从费用清单密钥转移到深度4的子密钥对退还进行授权,深度4的子密钥是专门为发放退还而生成的。
此外,还可以扩展将数字证书映射到密钥索引的方法,以创建不同身份之间的链接。例如,可以将其他人的身份证书合并到自己的钱包中,例如,收受者的身份证书和费用清单可以映射到商家钱包使用的输出地址。证书和费用清单可以按以下方式结合:
索引index=hash(digital certificate||invoice)mod 232 (13)
现在有一种方法,可以在商家的钱包软件中将用户(买方)的身份链接到销售(费用清单)。这对于汽车或房屋销售等高价值的事务特别有用。
结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络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.一种导出分层密钥结构的密钥的计算机实现的方法,其中所述密钥结构包括多层级层次结构(a hierarchy of levels),所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由第一方执行并且包括:
生成目标子密钥的目标索引,其中所述目标索引是基于将至少一个目标消息输入第一哈希函数的第一结果生成的;以及,
基于a)所述层次结构中的先前层级的父密钥、以及b)将至少i)所述父密钥和ii)所述目标索引输入第二哈希函数的第二结果,导出所述层次结构中的一个层级的所述目标子密钥。
语句2.根据语句1所述的方法,其中所述目标子密钥基于所述第二结果的第一部分。
语句3.根据语句2所述的方法,所述方法包括:生成所述目标子密钥的目标链码,其中所述目标链码基于所述第二结果的第二部分。
语句4.根据前述任一项语句所述的方法,其中所述目标子密钥是通过将iii)所述父密钥的相应链码输入所述第二哈希函数而导出的。
语句5.根据前述任一项语句所述的方法,其中所述第二哈希函数是基于哈希的消息认证码(hash-based message authentication code,HMAC)函数。
语句6.根据前述任一项语句所述的方法,其中所述父密钥是私钥,并且其中所述目标子密钥是私钥。
语句7.根据语句6所述的方法,其中被输入至所述第二哈希函数的所述父密钥是对应于所述父密钥的公钥。
语句.根据语句6或7所述的方法,所述方法包括:生成对应于所述目标子密钥的目标公钥。
语句9.根据语句1至5中任一项所述的方法,其中所述父密钥是公钥,其中所述目标子密钥是公钥,并且其中所述目标子密钥是基于与所述第二结果对应的公钥来导出的。
语句10.根据前述任一项语句所述的方法,所述方法包括以下各项中的任何一项或多项:
生成包括锁定到所述目标子密钥的输出的区块链事务,并将所述区块链事务发送到区块链网络和/或发送至第二方;
基于所述目标子密钥计算目标区块链地址,并将所述目标区块链地址发送至所述第二方;和/或,
将所述目标子密钥发送至所述第二方,以生成所述目标区块链地址。
语句11.根据语句10所述的方法,其中所述区块链包括区块链事务,所述区块链事务包括被发送到所述目标区块链地址的输出,并且其中所述方法包括:
导出候选子密钥序列和对应候选区块链地址,其中每个候选子密钥是基于所述父密钥以及b)将至少i)所述父密钥和ii)相应候选索引输入第二哈希函数的第二结果而导出的,其中所述相应候选索引是所述索引可以取的能值序列中的相应值、并且对于每个候选子密钥来说是不同的;
标识区块链事务,所述区块链事务包含被发送到所述候选区块链地址中的至少一个候选区块链地址的输出;以及,
基于所述标识,确定所述目标子密钥是具有所述对应候选区块链地址的所述候选子密钥,所标识的区块链事务的所述输出锁定到所述对应候选区块链地址。
语句12.根据语句10所述的方法,其中所述区块链包括区块链事务,所述区块链事务包括被发送到所述目标区块链地址的输出,并且其中所述方法包括:使用所述目标区块链地址来标识所述区块链事务。
语句13.根据前述任一项语句所述的方法,其中所述目标子密钥是公钥,并且其中所述方法包括:使用所述目标子密钥对消息进行加密;或者,其中所述目标子密钥是私钥,并且其中所述方法包括:使用所述目标子密钥对已经使用对应公钥加密的消息进行解密。
所述加密的消息可以发送给不同方或从不同方接收。
语句14.根据前述任一项语句所述的方法,所述方法包括:通过至少将所述父密钥、和所述目标消息提供给第三方,来证明所述目标子密钥与所述消息之间的链接。
在所述目标子密钥是基于所述链码生成的情况下,也可提供所述父密钥的所述链码。
语句15.根据前述任一项语句所述的方法,其中所述目标消息包括认证机构颁发的数字证书。
语句16.根据前述任一项语句所述的方法,其中所述主密钥是认证公钥,所述认证公钥已通过认证机构颁发的数字证书进行认证。
语句17.根据语句15和16所述的方法,其中所述目标消息包括对所述认证公钥进行认证的所述数字证书。
语句18.根据语句15所述的方法,其中所述数字证书对第三方所拥有的公钥进行认证。
例如,所述第三方可以是生成区块链事务的客户,所述区块链事务包括锁定到基于所述目标消息导出的所述子密钥的输出。
语句19.根据前述任一项语句所述的方法,所述方法包括:导出一个或多个附加子密钥,其中生成每个相应附加子密钥包括:
生成所述相应子密钥的相应索引,其中所述相应索引是基于将至少相应消息输入所述第一哈希函数的相应第一结果而生成的;以及,
基于a)所述层次结构中的先前层级的相应父密钥、以及b)将至少i)所述相应父密钥和ii)所述相应索引输入所述第二哈希函数的相应第二结果,导出所述层次结构中的一个层级的所述相应子密钥。
语句20.根据语句18所述的方法,其中所述附加子密钥中的部分或全部附加子密钥是基于与所述目标子密钥相同的父密钥而导出的。
语句21.根据语句18或19所述的方法,其中所述附加子密钥中的部分或全部附加子密钥是基于与所述目标子密钥不同的父密钥而导出的。
语句22.根据语句20所述的方法,其中所述目标子密钥是所述附加子密钥中的一个或多个附加子密钥的父密钥。
语句23.根据语句18或19所述的方法,其中所述附加子密钥中的部分或全部附加子密钥与所述目标子密钥处于所述层次结构中的同一层级。
语句24.根据语句19所述的方法,其中用于导出所述目标子密钥以及所述附加子密钥中的一个或多个附加子密钥中的每个附加子密钥的所述相应索引是基于将至少所述消息和相应计数器值输入所述第一哈希函数的相应第一结果来导出的。
语句25.根据语句19所述的方法,所述方法包括:
将整个消息分割为多个组成部分,其中用于导出所述目标子密钥以及所述附加子密钥中的一个或多个附加子密钥中的每个附加子密钥的所述相应索引是基于将所述整个消息的至少一个不同组成部分输入所述第一哈希函数的相应第一结果来导出的。
语句26.根据语句1至17中任一项所述的方法,所述方法包括:导出一个或多个附加子密钥,其中导出每个相应附加子密钥包括:
基于a)所述目标子密钥、以及b)将至少i)所述目标子密钥和ii)相应索引输入所述第二哈希函数的相应第二结果,来导出所述相应子密钥,其中所述相应索引是序列中的相应值。
语句27.根据语句18至26中任一项所述的方法,所述方法包括:
生成与每个所生成的子密钥对应的相应区块链地址;以及,
将所述相应区块链地址发送给不同方。
语句28.根据语句18至27中任一项所述的方法,所述方法包括:
生成一个或多个区块链事务,每个区块链事务包括一个或多个输出,其中每个输出锁定到所生成的子密钥中的相应子密钥;以及,
将所述一个或多个区块链事务发送到所述区块链网络,和/或将所述一个或多个区块链事务发送给所述不同方。
语句29.根据前述任一项语句所述的方法,其中所述的导出所述目标子密钥包括:恢复所述目标子密钥,其中所述的恢复所述目标子密钥包括:
基于对应种子生成所述主密钥;以及,
基于所述主密钥导出所述目标子密钥的所述父密钥。
所述父密钥可以直接从所述主密钥导出,即,所述目标子密钥的所述父密钥本身是所述主密钥的子密钥。或者,所述父密钥可以通过导出属于所述密钥结构不同相应层级的一个或多个密钥而间接从所述主密钥导出。
语句30.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及,
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项语句所述的方法。
语句31.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据前述任一项语句所述的方法。
Claims (31)
1.一种导出分层密钥结构的密钥的计算机实现的方法,其中所述密钥结构包括多层级层次结构,所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由第一方执行并且包括:
生成目标子密钥的目标索引,其中所述目标索引是基于将至少一个目标消息输入第一哈希函数的第一结果生成的;以及
基于a)所述层次结构中的先前层级的父密钥、以及b)将至少i)所述父密钥和ii)所述目标索引输入第二哈希函数的第二结果,导出所述层次结构中的一个层级的所述目标子密钥。
2.根据权利要求1所述的方法,其中所述目标子密钥基于所述第二结果的第一部分。
3.根据权利要求2所述的方法,所述方法包括:生成所述目标子密钥的目标链码,其中所述目标链码基于所述第二结果的第二部分。
4.根据前述任一项权利要求所述的方法,其中所述目标子密钥是通过将iii)所述父密钥的相应链码输入所述第二哈希函数而导出的。
5.根据前述任一项权利要求所述的方法,其中所述第二哈希函数是HMAC函数。
6.根据前述任一项权利要求所述的方法,其中所述父密钥是私钥,并且其中所述目标子密钥是私钥。
7.根据权利要求6所述的方法,其中输入至所述第二哈希函数的所述父密钥是对应于所述父密钥的公钥。
8.根据权利要求6或7所述的方法,所述方法包括:生成对应于所述目标子密钥的目标公钥。
9.根据权利要求1至5中任一项所述的方法,其中所述父密钥是公钥,其中所述目标子密钥是公钥,并且其中所述目标子密钥是基于与所述第二结果对应的公钥导出的。
10.根据前述任一项权利要求所述的方法,所述方法包括以下各项中的任何一项或多项:
生成包括锁定到所述目标子密钥的输出的区块链事务,并将所述区块链事务发送到区块链网络和/或第二方;
基于所述目标子密钥计算目标区块链地址,并将所述目标区块链地址发送至所述第二方;和/或
将所述目标子密钥发送至所述第二方,以生成所述目标区块链地址。
11.根据权利要求10所述的方法,其中所述区块链包括区块链事务,所述区块链事务包括发送到所述目标区块链地址的输出,并且其中所述方法包括:
导出一系列候选子密钥和对应候选区块链地址,其中每个候选子密钥是基于所述父密钥以及b)将至少i)所述父密钥和ii)相应候选索引输入第二哈希函数的第二结果而导出的,其中所述相应候选索引是所述索引可以取的一系列可能值中的相应值、并且对于每个候选子密钥来说是不同的;
标识包含发送到所述候选区块链地址中的至少一个候选区块链地址的输出的区块链事务;以及
基于所述标识,确定所述目标子密钥是具有所述对应候选区块链地址的所述候选子密钥,所标识的区块链事务的所述输出锁定到所述对应候选区块链地址。
12.根据权利要求10所述的方法,其中所述区块链包括区块链事务,所述区块链事务包括发送到所述目标区块链地址的输出,并且其中所述方法包括:使用所述目标区块链地址来标识所述区块链事务。
13.根据前述任一项权利要求所述的方法,其中所述目标子密钥是公钥,并且其中所述方法包括:使用所述目标子密钥对消息进行加密;或者,其中所述目标子密钥是私钥,并且其中所述方法包括:使用所述目标子密钥对已经使用对应公钥加密的消息进行解密。
14.根据前述任一项权利要求所述的方法,所述方法包括:通过至少将所述父密钥、和所述目标消息提供给第三方,来证明所述目标子密钥与所述消息之间的链接。
15.根据前述任一项权利要求所述的方法,其中所述目标消息包括认证机构颁发的数字证书。
16.根据前述任一项权利要求所述的方法,其中所述主密钥是认证公钥,所述认证公钥已通过认证机构颁发的数字证书进行认证。
17.根据权利要求15和16所述的方法,其中所述目标消息包括对所述认证公钥进行认证的所述数字证书。
18.根据权利要求15所述的方法,其中所述数字证书对第三方所拥有的公钥进行认证。
19.根据前述任一项权利要求所述的方法,所述方法包括:导出一个或多个附加子密钥,其中生成每个相应附加子密钥包括:
生成所述相应子密钥的相应索引,其中所述相应索引是基于将至少相应消息输入所述第一哈希函数的相应第一结果而生成的;以及
基于a)所述层次结构中的先前层级的相应父密钥、以及b)将至少i)所述相应父密钥和ii)所述相应索引输入所述第二哈希函数的相应第二结果,导出所述层次结构中的一个层级的所述相应子密钥。
20.根据权利要求18所述的方法,其中所述附加子密钥中的部分或全部附加子密钥是基于与所述目标子密钥相同的父密钥而导出的。
21.根据权利要求18或19所述的方法,其中所述附加子密钥中的部分或全部附加子密钥是基于与所述目标子密钥不同的父密钥而导出的。
22.根据权利要求20所述的方法,其中所述目标子密钥是所述附加子密钥中的一个或多个附加子密钥的父密钥。
23.根据权利要求18或19所述的方法,其中所述附加子密钥中的部分或全部附加子密钥与所述目标子密钥处于所述层次结构中的同一层级。
24.根据权利要求19所述的方法,其中用于导出所述目标子密钥以及所述附加子密钥中的一个或多个附加子密钥中的每个附加子密钥的所述相应索引是基于将至少所述消息和相应计数器值输入所述第一哈希函数的相应第一结果来导出的。
25.根据权利要求19所述的方法,所述方法包括:
将整个消息分割为多个组件,其中用于导出所述目标子密钥以及所述附加子密钥中的一个或多个附加子密钥中的每个附加子密钥的所述相应索引是基于将所述整个消息的至少一个不同组件输入所述第一哈希函数的相应第一结果来导出的。
26.根据权利要求1至17中任一项所述的方法,所述方法包括:导出一个或多个附加子密钥,其中导出每个相应附加子密钥包括:
基于a)所述目标子密钥、以及b)将至少i)所述目标子密钥和ii)相应索引输入所述第二哈希函数的相应第二结果,来导出所述相应子密钥,其中所述相应索引是序列中的相应值。
27.根据权利要求18至26中任一项所述的方法,所述方法包括:
生成与每个所生成的子密钥对应的相应区块链地址;以及
将所述相应区块链地址发送给不同方。
28.根据权利要求18至27中任一项所述的方法,所述方法包括:
生成一个或多个区块链事务,每个区块链事务包括一个或多个输出,其中每个输出锁定到所生成的子密钥中的相应子密钥;以及
将所述一个或多个区块链事务发送到所述区块链网络,和/或将所述一个或多个区块链事务发送给所述不同方。
29.根据前述任一项权利要求所述的方法,其中所述的导出所述目标子密钥包括:恢复所述目标子密钥,其中所述的恢复所述目标子密钥包括:
基于对应种子生成所述主密钥;以及
基于所述主密钥导出所述目标子密钥的所述父密钥。
30.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项权利要求所述的方法。
31.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据前述任一项权利要求所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2017904.0 | 2020-11-13 | ||
GB2017904.0A GB2600970A (en) | 2020-11-13 | 2020-11-13 | Key derivation method |
PCT/EP2021/078601 WO2022100958A1 (en) | 2020-11-13 | 2021-10-15 | Key derivation method |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116547942A true CN116547942A (zh) | 2023-08-04 |
Family
ID=74045998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180076292.5A Pending CN116547942A (zh) | 2020-11-13 | 2021-10-15 | 密钥导出方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20230396450A1 (zh) |
EP (1) | EP4193565A1 (zh) |
JP (1) | JP2023548917A (zh) |
KR (1) | KR20230101892A (zh) |
CN (1) | CN116547942A (zh) |
GB (1) | GB2600970A (zh) |
WO (1) | WO2022100958A1 (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2533457B8 (en) * | 2011-06-10 | 2019-12-11 | BlackBerry Limited | Secure implicit certificate chaining |
US10951401B2 (en) * | 2018-03-30 | 2021-03-16 | Bitnomial, Inc. | Digital asset transfer system for secure digital asset transactions |
KR20200064017A (ko) * | 2018-11-28 | 2020-06-05 | 주식회사 코인즈월렛 | 블록체인 기법을 이용한 fido2.0 암호키를 생성하는 방법 |
-
2020
- 2020-11-13 GB GB2017904.0A patent/GB2600970A/en active Pending
-
2021
- 2021-10-15 JP JP2023528164A patent/JP2023548917A/ja active Pending
- 2021-10-15 EP EP21793920.6A patent/EP4193565A1/en active Pending
- 2021-10-15 CN CN202180076292.5A patent/CN116547942A/zh active Pending
- 2021-10-15 US US18/034,340 patent/US20230396450A1/en active Pending
- 2021-10-15 WO PCT/EP2021/078601 patent/WO2022100958A1/en active Application Filing
- 2021-10-15 KR KR1020237019359A patent/KR20230101892A/ko unknown
Also Published As
Publication number | Publication date |
---|---|
GB2600970A (en) | 2022-05-18 |
US20230396450A1 (en) | 2023-12-07 |
EP4193565A1 (en) | 2023-06-14 |
JP2023548917A (ja) | 2023-11-21 |
GB202017904D0 (en) | 2020-12-30 |
WO2022100958A1 (en) | 2022-05-19 |
KR20230101892A (ko) | 2023-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6514830B2 (ja) | 分散型ハッシュテーブル及びピア・ツー・ピア分散型台帳を利用してデジタルアセットのオーナシップを検証する方法及びシステム | |
JP7449423B2 (ja) | ブラインド化された帰結選択のためのブロックチェーンで実装されるセキュリティー・システムおよび方法 | |
JP2022533753A (ja) | 知識証明 | |
CN114982193A (zh) | 使用区块链事务的数字合约 | |
US20230046315A1 (en) | Mapping keys to a blockchain overlay network | |
CN115211073A (zh) | 公钥生成方法 | |
EP4035326A1 (en) | Divisible tokens | |
EP4022839A1 (en) | Cryptographically linked identities | |
CN116508291A (zh) | 默克尔证明实体 | |
CN115885497A (zh) | 数字签名 | |
CN114514550A (zh) | 将请求分区成区块链的交易 | |
CN118044151A (zh) | 传播锁定脚本 | |
CN117280653A (zh) | 多方区块链地址方案 | |
CN116547945A (zh) | 默克尔证明实体 | |
CN116547942A (zh) | 密钥导出方法 | |
CN116569515A (zh) | 密钥生成方法 | |
TW202345545A (zh) | 用於證明與驗證子金鑰真實性之技術 | |
CN117136527A (zh) | 用于区块链实现的数据应用程序中的签名验证的改进方法和系统 | |
CN117561697A (zh) | 部分基于sha的哈希函数 | |
CN117795516A (zh) | 一种计算机实现的方法和系统 | |
WO2024028077A1 (en) | Wrapped encryption | |
JP2024073535A (ja) | ブロックチェーンを用いる論理ゲート機能の実装 | |
CN117693926A (zh) | 区块链区块和存在证明 | |
CN117121434A (zh) | 区块链实现的散列函数 | |
CN117337436A (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 |