CN116569515A - 密钥生成方法 - Google Patents

密钥生成方法 Download PDF

Info

Publication number
CN116569515A
CN116569515A CN202180076572.6A CN202180076572A CN116569515A CN 116569515 A CN116569515 A CN 116569515A CN 202180076572 A CN202180076572 A CN 202180076572A CN 116569515 A CN116569515 A CN 116569515A
Authority
CN
China
Prior art keywords
key
path
data
sub
transaction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202180076572.6A
Other languages
English (en)
Inventor
杰克·欧文·戴维斯
西蒙·奥迪什
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Blockchain Licensing Jsc
Original Assignee
Blockchain Licensing Jsc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Blockchain Licensing Jsc filed Critical Blockchain Licensing Jsc
Publication of CN116569515A publication Critical patent/CN116569515A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/0819Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
    • H04L9/083Key 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/0833Key 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/0836Key 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/16Obfuscation or hiding, e.g. involving white box

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种生成分层密钥结构的密钥的计算机实现的方法,其中所述方法由密钥生成者执行并且包括:获取子密钥导出路径,其中所述子密钥导出路径包括元素序列,所述元素序列包括一个或多个元素的一个或多个集合,每个元素集合是基于数据路径的相应数据项生成的,并且其中所述序列中的每个元素对应于所述密钥结构的相应层级中的密钥的相应位置;以及,基于所述子密钥导出路径生成一个或多个子密钥,其中每个相应子密钥是基于相应元素生成的,所述相应元素在所述序列中位于所述相应位置,且属于与所述相应元素对应的所述相应层级。

Description

密钥生成方法
技术领域
本公开涉及一种生成分层密钥结构的密钥(例如,私钥)的方法。例如,密钥可以用于加密数据、对区块链事务进行签名以及生成区块链地址。
背景技术
在区块链技术环境中,“钱包应用程序”或仅仅是“钱包”通常是指一种应用程序,除了其他方面,该应用程序被配置为存储特定方拥有的密钥(即,公钥和/或私钥)的集合。
为了维护公共区块链的隐私,建议避免重复使用从私钥导出的公钥。这可能导致钱包成为随机生成的私钥的集合,需要安全存储并经常备份这些随机生成的私钥,以确保密钥不会丢失或被盗。通过避免重复使用密钥,这种类型的钱包会很快产生“密钥包”问题。
分层确定性(hierarchical deterministic,HD)钱包的发明是为了提高密钥存储和重新生成的效率,从而解决该密钥包问题。HD钱包在隐私方面带来了额外的好处,并且能够与不同的系统或子系统共享钱包的分支。这种类型的钱包可以从单个随机种子生成许多密钥,是目前最常用的区块链钱包类型。
钱包实现方式通常遵循比特币改进提案32(BIP32),该提案描述了如何从父密钥导出多个子密钥,以及BIP44,该提案定义了钱包内各分支的用途。在一种HD钱包实现方式中,主私钥是从随机种子中导出的。该主私钥用于导出数代密钥(子代、孙代等)。
图4示出了HD钱包中出现的所得树状结构。该数据结构是一种强大的机制,用于管理钱包的安全性及其在恢复期间回收资金的能力。根据该实现方式,观察者可以在没有对应私钥的情况下创建一系列公钥。由于需要存储的秘密较少,因此泄露的风险也较低。此外,如果密钥丢失,可以通过种子密钥恢复。
用于从父密钥导出子密钥的等式取决于所述父密钥的公钥或私钥是否会被使用;使用父私钥会生成“增强”子密钥,而使用父公钥会生成“普通”(即,非增强,符合BIP32术语)子密钥。
子密钥是使用子密钥导出(child key derivation,CKD)函数生成的。CKD函数的特定形式取决于特定的钱包实现方式,但子密钥通常基于父密钥和索引。索引使父密钥能够生成多个子密钥,即,一个父密钥可以有多个子密钥。通常,索引取序列中的值,父密钥的第一子密钥取序列中的第一个值(例如,0),父密钥的第二子密钥取序列中的下一个值(例如,1),依此类推。
应当注意的是,在撰写本文时,如果只知道父公钥和链码,则不可能导出增强子公钥。请求向普通子密钥支付意味着接收者可以只给出父公钥(和链码),而发送者可以通过导出多个非增强子密钥来发送支付。这样,资金接收者就不需要明确地将每个地址提供给发送者。这确保可以发送多个支付,同时最大限度地减少相同双方之间的通信,并增强在公共区块链上处理事务时的隐私。
根据BIP32协议,普通子私钥ski的等式为:
ski=skpar+HMAC512L(cpar,pkpar||index), (1)
增强子私钥ski′的等式为:
ski′=skpar+HMAC512L(cpar,skpar||index′), (2)
其中
●skpar是父密钥的私钥,
●pkpar是父密钥的公钥,
●HMAC512L(■)是使用SHA512哈希函数的HMAC函数结果的左侧32个字节,
●cpar是父密钥的链码,
●索引是子密钥的计数器,每次计算新的子密钥时都会增加该计数器,其是从0开始的。按照惯例,对于普通密钥,0≤索引<231;对于增强密钥,231≤索引′<232
发明内容
近年来,区块链技术越来越普遍地用于面向数据的应用程序。现在,较为常见的是,寻求将区块链事务用作数据封装机制的应用程序,从而使得应用程序数据能够不可变地记录在区块链上。这在将所述数据本身和可能与所述数据相关联的小额支付相结合的能力方面具有额外的好处。
用于对区块链事务进行签名的加密密钥(例如,ECDSA密钥对)通常是使用上面讨论的BIP-32分层确定性密钥导出标准导出的。该标准允许从单个种子中恢复钱包,所述单个种子还可以使用BIP-39助记符标准确保人类可读。BIP-32标准利用分层路径从主种子熵中导出各个密钥,并且BIP-44标准已经普及了将密钥层次结构拆分成用于不同资金分区(即,单独的“账户”)的单独分支的概念。
需要提高面向数据的区块链应用程序与BIP标准或类似标准等分层密钥导出协议之间的互操作性,到目前为止,这些分层密钥导出协议通常仅用于提供货币意义上的层次结构。
根据本文公开的一个方面,提供了一种生成分层密钥结构的密钥的计算机实现的方法,其中所述密钥结构包括多层级层次结构(a hierarchy of levels),所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由密钥生成者(key generator)执行并且包括:获取子密钥导出路径,其中所述子密钥导出路径包括元素序列,所述元素序列包括一个或多个元素的一个或多个集合,每个元素集合是基于数据路径的相应数据项生成的,并且其中所述序列中的每个元素对应于所述密钥结构的相应层级中的密钥的相应位置;以及,基于所述子密钥导出路径生成一个或多个子密钥,其中每个相应子密钥是基于相应元素生成的,所述相应元素在所述序列中位于所述相应位置,且属于与所述相应元素对应的所述相应层级。
根据本文公开的一个方面,提供了一种生成数据路径的计算机实现的方法,所述数据路径由密钥生成者用于生成分层密钥结构的密钥,其中所述密钥结构包括多层级层次结构,所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由路径生成者(path generator)执行并且包括:获取数据路径,所述数据路径包括一个或多个数据项;为所述数据路径的每个相应数据项生成一个或多个元素的相应集合,其中每个相应的元素集合一起表示所述数据项,并且每个元素集合中的每个元素是整数;基于一个或多个元素的所述相应集合生成子密钥导出路径;以及,输出所述子密钥导出路径。
所述子密钥导出路径中的每个元素对应于所述密钥结构中的特定密钥的位置。每个元素是基于来自数据路径的数据项生成的。例如,所述数据路径可以表示分层数据结构,其中每个数据项属于所述层次结构的不同层级。例如,所述数据结构可以具有地理性质,具有从国家/地区到特定地址(例如,国家/地区、城市、街道地址、门牌号)的数据路径。或者,所述数据路径可以表示以特定顺序存储数据项的非分层数据结构。例如,所述数据结构可以包括个人标识符,例如,姓名、年龄、性别、国籍等。无论所述数据项表示什么,每个数据项都用于生成所述密钥导出路径的元素。因此,基于所述密钥结构中与所述元素对应的所述位置生成的所述密钥直接基于所述数据项。
为所述密钥导出路径中的每个元素生成密钥。也就是说,生成与所述密钥导出路径中的所述元素序列对应的密钥序列。与所述密钥导出路径中的第n个元素对应的密钥是与所述序列中的第n+1个元素对应的密钥的父密钥(要生成的最后一个密钥除外)。因此,以父子链接的形式或间接(例如,祖孙链接)将每个所生成的密钥链接到每个其他所生成的密钥。
以这种方式生成密钥的一个优点在于,在这些密钥丢失或在使用后删除等情况下,稍后可以快速、轻松地重新生成相同的密钥。也就是说,可以使用相同的数据路径来生成相同的密钥导出路径,进而能够生成相同的密钥。一旦重新生成所述密钥,即可按预期使用它们。
一些实施例涉及生成与应用程序中正在使用的特定数据项相关的数据路径,并将该数据路径转换为从中导出后续密钥的密钥导出路径。然后,可以将这些密钥用于多种目的,包括:生成ECDSA密钥对,用于对区块链事务进行签名;或生成对称密钥(例如,AES密钥),用于在将数据项添加到区块链事务之前加密所述数据项。
此外,在一些实施例中,在将所述数据路径本身转换为导出路径之前对其进行混淆处理。这允许一方执行路径转换和密钥导出过程,而该方无需访问底层数据或透露应用程序的数据库的整体结构。
应当注意的是,所述分层密钥结构不限于BIP32协议提出的结构,尽管这是一个选项。还应注意的是,虽然本文提供的示例性用例主要与区块链有关,但是所描述的实施例通常适用于任何相关环境中的密钥使用。例如,子密钥可以用作私钥,以生成应用于许多技术领域的数字签名。又如,子密钥可以在任何环境中用作加密密钥。
附图说明
为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
图1是一种用于实现区块链的系统的示意性框图;
图2示意性地示出了可记录在区块链中的事务的一些示例;
图3A示出了客户端应用程序的示意性框图;
图3B示出了可由图3A的客户端应用程序表示的示例性用户界面的示意性模型;
图4示意性地示出了HD钱包中密钥的树状结构;
图5示意性地示出了子扩展私钥和链码的生成;
图6示意性地示出了用于HD钱包的示例性子密钥导出函数;
图7示意性地示出了用于生成子密钥的示例性系统;
图8示意性地示出了路径转换过程;
图9示意性地示出了在路径转换之后发生的密钥导出过程;
图10示意性地示出了路径混淆过程;
图11示意性地示出了从数据路径到所生成的密钥集的流程;以及
图12a和图12b示意性地示出了加密和广播数据的示例性过程。
具体实施方式
示例性系统概述
图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层级的父密钥的子密钥,但也可以是第n+1层级的一个或多个子密钥的父密钥。并非给定层级的所有密钥都必须是父密钥。例如,密钥结构可能有许多可以追溯到主密钥的密钥分支。一些分支可能比其他分支更长,这意味着这些分支包括所属层级比其他分支更高(即,更大、更远或更深)的密钥。
图7示出了用于实现本发明的实施例的示例性系统700。该系统包括被配置为生成密钥结构的一个或多个子密钥的密钥生成者701。虽然BIP32是作为用于生成密钥结构的示例性协议提供的,但是密钥生成者701并不限于生成符合该协议的密钥。例如,密钥生成者701生成的密钥的长度可以与BIP32要求的长度不同。相反,密钥生成者701可以生成符合BIP32的每项要求的密钥。此外,密钥生成者701生成的密钥不需要出于以下目的生成,即用作对区块链事务进行签名的签名密钥或充当区块链地址的公钥,例如用于支付到公钥哈希(P2PKH)地址。
换言之,虽然将描述以下内容,尽管本文的实施例是根据对BIP协议的示例性应用来描述的,但是更一般地,本文公开的原理可以应用于任何分层密钥导出协议,由此从父密钥导出一个或多个层级的子密钥。
密钥生成者701可以是独立的功能或实体,或者密钥生成者701可以由不同的实体组成,例如爱丽丝103a或鲍勃103b。系统700还可以包括路径生成者702。虽然与密钥生成者701分开示出,但是路径生成者702可以由密钥生成者701的组件代替,例如,单个实体可以执行归因于密钥生成者701和路径生成者702的动作。
该系统还可以包括区块链网络106的一个或多个节点104。附加地或可替换地,该系统可以包括一个或多个第三方,例如爱丽丝103a和鲍勃103b等用户、组织、机器等,其可选角色将在下文进行讨论。
密钥生成者701具有包括至少一个父密钥的现有密钥结构。父密钥可以是主密钥,也可以是属于更深层级的子密钥(例如,主密钥的子密钥)。或者,密钥生成者701第一次生成密钥结构,其中所生成的密钥结构包括至少一个父密钥。密钥结构是基于种子生成的。具体地,主密钥是基于种子生成的,而所有其他密钥都是至少间接地从主密钥导出的。
密钥生成者701获取子密钥导出(CKD)路径。CKD路径可以由密钥生成者701生成(如下所述),或者也可以从路径生成者702接收。CKD路径包括元素序列。元素序列由一个或多个元素的组群或集合组成。在一些示例中,可以某种方式区分这些组群;或者,在其他示例中,可能无法仅从元素来判断它们是如何划分为组群的。就仅生成密钥的目的而言,各个组群是否可识别并不重要。CKD路径中的每个元素都是基于数据项生成的。也就是说,每个元素都是数据项的函数。数据项属于数据路径,这将在下文进行讨论。每个元素组群都是基于相同的数据项生成的,而不同的组群是基于不同的数据项生成的。密钥生成者701可能知道也可能不知道元素是如何生成的。同样,就生成密钥的目的而言,密钥生成者701是否知道元素是如何生成的并不重要。
CKD路径中的每个元素对应于待要在密钥结构中生成的密钥的位置。在获取CKD路径之后,密钥生成者701在与CKD路径中的元素对应的位置处生成相应的密钥。
例如,CKD路径可以包括四个元素(m/i/j/k)=(m/2/1/3)。密钥生成者701将在密钥结构中与这些元素对应的位置处生成密钥。在一些示例中,密钥生成者701可以访问这些密钥中的至少一个密钥,因此不需要重新生成这些密钥,例如,密钥生成者701可以存储主密钥m。在该示例中,密钥生成者701将生成以下密钥:m/2、m/2/1和m/2/1/3。密钥m/2/1/3是密钥m/2/1的子密钥,m/2/1是密钥m/2/的子密钥,m/2/是密钥m的子密钥。应当注意的是,m/2/1/3实际上不是密钥,而用于指示密钥在密钥结构中的位置。本领域技术人员将意识到,只有在已经生成父密钥、祖密钥和主密钥的情况下才能生成密钥m/2/1/3。
在基于CKD路径生成子密钥之后,密钥生成者701可以存储这些密钥和/或输出这些密钥。密钥生成者可以仅存储或输出这些密钥中的部分密钥。输出密钥可以包括:将该密钥发送给第三方;和/或将该密钥输出到密钥生成者701或包括密钥生成者701的实体控制的函数。密钥生成者701可以接收关于输出哪些密钥的指示,例如,与序列中的元素对应的索引。也就是说,第三方(例如,CKD路径或数据路径的提供者)可以请求与CKD路径中的第三个、第七个和第十三个元素对应的密钥。
技术人员将熟悉公钥-私钥对。简而言之,公钥是通过对私钥应用函数来生成的,例如生成点的椭圆曲线乘法。密钥生成者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可以向第三方提供子密钥,而该第三方可以生成包括锁定到子密钥的输出的事务。密钥生成者701可以向第三方提供子密钥本身,或提供基于子密钥的区块链地址,例如子密钥的哈希。应当注意的是,生成事务可以包括生成缺少至少一个字段的事务模板。事务模板可以传递给第三方或密钥生成者701来完成,这取决于谁生成了该事务模板。已完成事务随后可以传输到区块链网络106。
如果区块链包括锁定到子公钥的事务,则密钥生成者701可以生成事务,该事务包括引用输出并被配置为解锁该输出的输入。该输入可以包括使用对应的子私钥生成的签名。根据所引用输出的锁定脚本,输入也可以包括子公钥。
密钥生成者701可以将多个子密钥中的一个或多个子密钥发送给第三方。附加地或替代地,密钥生成者701可以为多个子密钥中的每个子密钥生成相应的区块链地址,并将这些地址发送给第三方。这些地址可以包括在一个或多个事务模板中,例如每个地址一个模板。
密钥生成者701可以生成一个或多个区块链事务(可以是事务模板),每个事务具有锁定到所生成子密钥中的一个子密钥的至少一个输出。每个事务可以包括锁定到子密钥中的相应子密钥的单个输出,或者一个或多个事务可以包括锁定到子密钥中的相应子密钥的多个输出。密钥生成者701可以将事务发送到区块链网络,或发送给第三方。
现在返回到CKD路径,CKD路径可以包括一个或多个子路径。CKD路径的每个元素组群可以有一个子路径;或者,等同地,数据路径的每个数据项可以有一个子路径。给定CKD路径的每个子路径以同一元素(即,序列中的初始元素)开始,并以相应的“终端元素”结束。换句话说,终端元素是子路径中的结束(即,最终)元素。CKD路径中的每个元素属于不同的层级,并且每个子路径以属于序列中不同层级的终端元素(本文中称为“终端层级”)结束。例如,一个子路径的终端元素可以属于序列中的第三层级,而另一个子路径的终端元素可以属于序列中的第六层级。
每个结束元素对应于密钥结构的不同层级的密钥的位置。因此,假设层级从初始值(例如,零)增加,则给定子路径中的元素越多,该密钥的层级(即,深度)越大。在一些示例中,密钥生成者701可以仅存储和/或输出与这些子路径末端对应的密钥。这意味着密钥生成者可以为每个数据项存储和/或输出一个密钥。使用上述示例,其中CKD路径包括四个元素(m/i/j/k)=(m/2/1/3),CKD路径可以包括两个子路径(m/i/j)和(m/i/j/k)。这两个子路径以同一元素m开始,但分别以不同层级的终端元素j和k结束。密钥生成者可以存储和/或输出与两个子路径对应的两个密钥。应当注意的是,虽然子路径的终端元素在不同层级结束,但是终端元素的实际值可能是相同的。
如上所述,CKD路径可以由密钥生成者之外的实体(例如,路径生成者702)生成。或者,密钥生成者可以基于数据路径来生成CKD路径。
数据路径包括一个或多个数据项。通过将每个数据项转换为表示给定数据项的元素组群来生成CKD路径。在一些示例中,可以将给定数据项转换为单个元素或映射到单个元素。在一些示例中,可以将给定数据项转换为共同表示该数据项的多个元素。换言之,给定元素组群对给定数据项进行编码。
将数据项转换为一个或多个元素的一种特定方式是生成多个固定长度(即,固定位长度)的整数,这些整数一起对该数据项进行编码。例如,每个元素可以是31位或32位整数。以31位整数为例,数据项的大小可以为31位或更小,在这种情况下,该数据项可以由单个元素表示。或者,数据项的大小可以大于31位,在这种情况下,需要多个元素来表示该数据项。通常,表示元素所需的元素的数量n由n=d/i给出,其中d是数据项的位长度,i是元素的位长度。在包括BIP32钱包在内的一些密钥结构中,父密钥最多可以具有2n个子密钥。在这种情况下,固定长度的整数最多为n位。
在密钥生成者701基于数据路径生成CKD路径的实施例中,数据路径可以从不同实体接收,也可以由密钥生成者701生成。例如,密钥生成者可以基于与文件夹结构对应的特定数据项集合来构建数据路径。也就是说,数据项可以具有固有结构。或者,密钥生成者可以将数据项排列成用于生成数据路径的结构。
可选地,用于生成CKD的数据路径可以是非混淆数据路径的混淆版本。也就是说,原始非混淆数据路径的数据项可以进行混淆处理。然后,基于混淆数据项生成CKD的元素。密钥生成者可以接收混淆数据路径而不是数据路径。或者,所生成的密钥可以接收原始数据路径,并在生成CKD之前对数据项进行混淆处理。在一些示例中,单独对每个数据项进行混淆处理。
如图7所示,路径生成者702可以不同于密钥生成者701。在这些实施例中,路径生成者702被配置为基于数据路径生成CKD,并将CKD输出到密钥生成者701。数据路径可以从第三方(例如,爱丽丝103a等用户)接收。路径生成者702使用上述技术生成CKD。
现在将讨论所描述的实施例的进一步具体示例。
在许多面向数据的区块链应用程序中,在区块链事务中打包并记录在区块链150上的数据通常是根据应用逻辑本身定义的较大数据结构的一部分。
用于生成密钥以对这些事务进行签名的密钥导出过程通常独立于这种总体数据结构,这意味着应用程序不仅必须监控和跟踪与其自身数据库相关联的结构,还必须监控和跟踪用于对相关区块链事务进行签名的密钥的分层结构。
本节将描述密钥导出协议,该协议旨在统一这两种结构,从而将数据库结构并入密钥导出机制中。这大致涉及以下两个阶段:
●路径转换–在该阶段,将基于数据库结构的数据路径转换为与BIP-32标准兼容的密钥导出路径。
●密钥导出–在该阶段,使用所转换的路径生成用于签名、加密或其他目的的密钥集。
在基本描述这两个阶段之后,还规定了一个可选预处理阶段–路径混淆,在该阶段,在路径转换过程之前对基于数据库结构的数据路径进行混淆处理,使得负责执行路径转换的任何人都不会获得关于数据库结构本身的任何信息。这对于可以调用第三方服务提供者来执行路径转换和密钥导出步骤的应用是有用的。
路径转换
该方法的第一阶段是路径转换。在该阶段,应用程序选择要包括在区块链事务中并记录在区块链上的一段数据(例如,基于区块链的Twitter应用程序)。
应用程序还将为该数据项生成对应的数据路径,该数据路径将根据该应用程序使用的数据结构确定。对于基于区块链的Twitter的示例,数据路径可以采用BitTweet/AliceID/PostID/CommentID/Timestamp的形式,该形式将对应于数据项,该数据项是用户爱丽丝对区块链Twitter应用程序“BitTweet”上的特定帖子做出的评论。该数据路径也类似于在个人计算机上找到的文件夹和文件结构。
然后,应用程序执行路径转换以生成导出路径,如下表所示。
类型 数据
明文数据路径 App/UserID/Post/Comment/Time
原始导出路径(截断) 0/6/…/2/0/42/4/…/7
原始导出路径(完整) 0/6/300/5/1945/3/2/0/42/4/68/495/31/7
上面的表格示出了关于如何能够将可以采用基于文本的简单形式(例如,ASCII编码)的数据路径转换为仅由数字或索引组成的密钥导出路径的示例。
这里应当注意的一个关键方面是,为了与第2.1节中所述的BIP-32密钥导出路径格式兼容,导出路径中的每个索引的大小必须为31位(或者,如果要包括增强密钥,则为32位)。在将数据路径的每个元素转换为密钥导出路径的对应元素时,必须考虑这一点。
对于上表所示的示例,假设UserID的长度为180位。这意味着总共需要个索引来创建与数据路径的UserID元素唯一对应的导出路径的子路径6/300/5/1945/3/2。应当注意的是,该子路径6,300,5,1945,3,2中的索引在这里只是31位整数的十进制表示。
这里的关键观察结果是,数据路径的任何给定元素都可能导致密钥导出路径中存在多个元素。这对于确保与唯一数据项对应的每个数据路径也将对应于唯一导出路径至关重要。在使用导出路径来导出这些密钥时,将在第3.2节中阐明这一点的重要性。
应用程序执行的该路径转换过程的示例性实现方式如下:
1.选择数据项及其对应的数据路径。
2.将数据路径的每个元素拆分成块,每个块的长度为31位。
3.创建导出路径:
1.对于每个元素,将其每个块级联为:“Chunk1”+“Chunk2”+…
2.将在3.1中生成的子路径级联为:“Elm1Chunks”+“Elm2Chunks”+…
应当注意的是,+在这里表示级联。
该过程将产生与所提供的数据路径唯一对应的密钥导出路径,并且该过程的总体效果如图8所示。该过程可以由专门的“路径转换者”实体执行。
从所转换的路径导出密钥
假设已将数据路径转换为密钥导出路径,现在可以使用该导出路径来生成密钥集。这些密钥可以用于执行与数据相关的任何加密操作,例如,加密数据或对包含随后记录在区块链上的数据的事务进行签名。
如上表所示,仅选择从分别对应于UserID和Time字段的每个较长子路径生成一个密钥。
采用以下惯例:
仅为数据路径中的每个元素导出一个密钥。
这是因为,希望从原始数据路径导出的每个密钥对于该数据路径都是唯一的。因此,基于整个路径导出密钥,该密钥依赖于从数据路径获取的所有数据块,如上一节所述。
如果要为这些子路径的中间组件导出密钥,可能会发现使用不同的(例如)UserID数据可生成相同的密钥。例如,假设有两条采用以下形式的数据路径:
App/UserID1/Post/Comment/Time
App/UserID2/Post/Comment/Time
以及对应的完整导出路径:
0/6/300/5/1945/3/2/0/42/4/68/495/31/7
0/6/300/5/2000/4/6/0/42/4/68/495/31/7
如果仅使用最多到第4个索引位置(包括第4个索引位置)的索引为路径的每个中间组件导出密钥,则会注意到该路径是相同的0/6/300/5,尽管该路径部分基于两个不同用户的唯一ID。这将产生以下结果,即还会导致为两个用户导出相同的密钥。
这促使在仅基于前两个数据路径元素App/UserID生成密钥时使用完整子路径,该完整子路径现在将对应于导出路径中最多到第6个索引(包括第6个索引)的子路径。这将产生从两个唯一路径导出的两个唯一密钥:
0/6/300/5/1945/3/2
0/6/300/5/2000/4/6
图9以可视方式示出了与路径转换协议配合使用的这种密钥导出惯例。
对转换过程进行混淆处理
在路径转换和密钥导出功能可能被转移到第三方服务提供者的应用程序中,可能会希望在路径转换过程中添加额外的阶段,由此在路径转换中使用明文数据路径之前对明文数据路径本身进行混淆处理。
这个额外的混淆步骤在调用路径转换操作之前执行,并且将导致路径转换者在混淆数据路径上,而不是在原始形式的数据路径上执行操作。在这里引入混淆步骤的主要优点在于,该步骤可确保路径转换和密钥导出过程,并且区块链事务最终包括在区块链上不会泄露关于应用程序的数据结构的任何信息。这允许对包括应用程序数据的区块链事务进行完全私有但更高效的管理。
应当注意的是,由于对数据路径进行混淆处理带来的影响,导出路径以及由此导出的密钥集不同于基于初始数据路径的导出路径和密钥集。
在原始数据路径上执行的实际混淆操作应当在数据路径的元素上逐元素执行,并且可能包括以下任何过程:
●随机化;
●使用秘密XOR密钥进行XOR加密;
●使用映射函数进行替换;
●加密;和/或
●使用哈希函数。
图10和图11示出了实际路径混淆步骤。图10示出了由第三方服务提供者等路径混淆实体执行的路径混淆过程,该路径混淆过程可视化为黑框。图11针对具体情形示出了路径混淆者在从选择数据路径到密钥生成的整个流程中的使用情况。
示例性用例:加密的数据事务
考虑这样一种场景,其中应用程序的所有者爱丽丝希望在区块链150上记录其应用程序数据,但她并不具备实现其自身数据加密或正确地生成区块链事务的专业技术。爱丽丝希望使用第三方鲍勃的服务来帮助实现这些功能。应当注意的是,爱丽丝和鲍勃在这里仅用作便捷标签,并不一定意味着他们充当与如上所述的爱丽丝103a和鲍勃103b相同的角色,尽管并不排除这种情况。
最终目标是生成下表所示形式的区块链事务,其中她的数据使用密钥集k1,k2,…,k5总共加密五次。
爱丽丝和鲍勃执行的过程使用上述路径混淆、路径转换和密钥生成,在图12a和图12b中以可视化方式示出。这些附图分别示出了一般工作流程和填充有示例性数据的工作流程。
结论
一旦给出本文的公开内容,所公开技术的其它变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。
例如,上面的一些实施例已经根据比特币网络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.一种生成分层密钥结构的密钥的计算机实现的方法,其中所述密钥结构包括多层级层次结构,所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由密钥生成者执行并且包括:
获取子密钥导出路径,其中所述子密钥导出路径包括元素序列,所述元素序列包括一个或多个元素的一个或多个集合,每个元素集合是基于数据路径的相应数据项生成的,并且其中所述序列中的每个元素对应于所述密钥结构的相应层级中的密钥的相应位置;以及,
基于所述子密钥导出路径生成一个或多个子密钥,其中每个相应子密钥是基于相应元素生成的,所述相应元素在所述序列中位于所述相应位置,且属于与所述相应元素对应的所述相应层级。
[每个元素集合是基于所述数据路径的相应数据项生成的,这意味着每个元素集合是所述相应数据项的函数。]
语句2.根据语句1所述的方法,所述方法包括:存储和/或输出所生成的子密钥中的一个或多个生成的子密钥。
语句3.根据语句2所述的方法,其中所述子密钥导出路径包括多个子路径,每个元素集合一个子路径,其中每个子路径包括相同的初始元素和不同的相应最终元素;以及,
其中所述的存储和/或输出所述一个或多个生成的子密钥包括:为每个子路径存储和/或输出一个子密钥,其中所述子密钥是基于所述相应最终元素生成的。
语句4.根据前述任一项语句所述的方法,其中获取所述子密钥导出路径包括:接收所述子密钥导出路径。
语句5.根据语句1至3中任一项所述的方法,所述方法包括:
获取所述数据路径,并且其中获取所述子密钥导出路径包括:基于所获取的数据路径生成所述子密钥导出路径。
语句6.根据语句5所述的方法,其中生成所述子密钥导出路径包括:
为所述数据路径的每个相应数据项生成相应的元素集合,其中每个相应的元素集合一起表示所述数据项,并且每个元素集合中的每个元素是整数。
语句7.根据语句6所述的方法,其中每个整数的表示形式是十进制表示或十六进制表示。
语句8.根据语句6或7所述的方法,其中每个整数是固定长度的整数。
语句9.根据语句8所述的方法,其中每个父密钥最多能够具有2n个子密钥,其中n是所述固定长度的整数。
语句10.根据语句5至9中任一项所述的方法,其中获取所述数据路径包括:接收所述数据路径。
语句11.根据语句10所述的方法,其中所述接收的数据路径是非混淆数据路径的混淆版本,所述混淆数据路径的每个数据项是所述非混淆数据路径的相应非混淆数据项的混淆版本。
语句12.根据语句5至9中任一项所述的方法,其中获取所述数据路径包括:生成所述数据路径。
语句13.根据语句10或12所述的方法,所述方法包括:生成所述数据路径的混淆版本,其中所述子密钥导出路径是基于所述混淆数据路径生成的。
在实施例中,所述方法可以包括:获取所述数据路径,并生成所述数据路径的所述混淆版本。所述方法可以包括:为所述混淆数据路径的每个相应的混淆数据项生成相应的元素集合,其中每个相应的元素集合一起表示所述混淆数据项。
语句14.根据语句11或13所述的方法,其中所述数据路径的每个数据项被单独进行混淆处理。
语句15.根据语句11、13或14中任一项所述的方法,其中所述数据路径的每个数据项使用以下各项中的一项或多项进行混淆处理:
随机化;
使用加密密钥进行的加密;
使用XOR密钥进行的XOR加密;
使用映射函数进行的替换;和/或,
哈希函数。
语句16.根据前述任一项语句所述的方法,其中所述数据路径对应于文件夹结构,并且其中每个数据项属于所述文件夹结构的不同文件夹。
语句17.根据语句2或其任何从属语句所述的方法,其中所述的输出包括以下各项中的至少一项:
将所述一个或多个生成的子密钥输出到加密函数,所述加密函数被配置为基于所述一个或多个生成的子密钥中的至少一个生成的子密钥来加密数据;
将所述一个或多个生成的子密钥输出到签名函数,所述签名函数被配置为基于所述一个或多个生成的子密钥中的至少一个生成的子密钥来生成数字签名;
将所述一个或多个生成的子密钥发送给不同方;
为所述一个或多个生成的子密钥中的每个生成的子密钥生成相应的区块链地址,并将所述相应的区块链地址输出到所述不同方;
生成区块链事务,所述区块链事务包括输出,所述输出锁定到所述一个或多个生成的子密钥中的至少一个生成的子密钥。
语句18.一种生成数据路径的计算机实现的方法,所述数据路径由密钥生成者用于生成分层密钥结构的密钥,其中所述密钥结构包括多层级层次结构,所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由路径生成者执行并且包括:
获取数据路径,所述数据路径包括一个或多个数据项;
为所述数据路径的每个相应数据项生成一个或多个元素的相应集合,其中每个相应的元素集合一起表示所述数据项,并且每个元素集合中的每个元素是整数;
基于一个或多个元素的所述相应集合生成子密钥导出路径;以及,
输出所述子密钥导出路径。
语句19.根据语句18所述的方法,其中所述的输出所述子密钥导出路径包括:将所述子密钥导出路径输出到所述密钥生成者,所述密钥生成者被配置为基于所述子密钥导出路径生成一个或多个子密钥。
语句20.根据语句18或19所述的方法,其中每个整数的表示形式是十进制表示或十六进制表示。
语句21.根据语句18至20所述的方法,其中每个整数是固定长度的整数。
语句22.根据语句21所述的方法,其中每个父密钥最多能够具有2n个子密钥,其中n是所述固定长度的整数。
语句23.根据语句18至22中任一项所述的方法,其中获取所述数据包括:接收所述数据路径。
语句24.根据语句18至22中任一项所述的方法,其中获取所述数据包括:生成所述数据路径。
语句25.根据语句18至24中任一项所述的方法,其中所获取的数据路径是非混淆数据路径的混淆版本。
语句26.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及,
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项语句所述的方法。
语句27.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据前述任一项语句所述的方法。
根据本文公开的另一方面,可以提供一种方法,所述方法包括所述密钥生成者和所述路径生成者的动作。
根据本文公开的另一方面,可以提供一种系统,所述系统包括所述密钥生成者和所述路径生成者的计算机设备。

Claims (27)

1.一种生成分层密钥结构的密钥的计算机实现的方法,其中所述密钥结构包括多层级层次结构,所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由密钥生成者执行并且包括:
获取子密钥导出路径,其中所述子密钥导出路径包括元素序列,所述元素序列包括一个或多个元素的一个或多个集合,每个元素集合是基于数据路径的相应数据项生成的,其中所述数据路径包括多个数据项,并且其中所述序列中的每个元素对应于所述密钥结构的相应层级中的密钥的相应位置;以及
基于所述子密钥导出路径生成一个或多个子密钥,其中每个相应子密钥是基于相应元素生成的,所述相应元素在所述序列中位于所述相应位置,且属于与所述相应元素对应的所述相应层级。
2.根据权利要求1所述的方法,所述方法包括:存储和/或输出所生成的子密钥中的一个或多个生成的子密钥。
3.根据权利要求2所述的方法,其中所述子密钥导出路径包括多个子路径,每个元素集合一个子路径,其中每个子路径包括相同的初始元素和不同的相应最终元素;以及
其中所述的存储和/或输出所述一个或多个生成的子密钥包括:为每个子路径存储和/或输出一个子密钥,其中所述子密钥是基于所述相应最终元素生成的。
4.根据前述任一项权利要求所述的方法,其中获取所述子密钥导出路径包括:接收所述子密钥导出路径。
5.根据权利要求1至3中任一项所述的方法,所述方法包括:
获取所述数据路径,并且其中获取所述子密钥导出路径包括:基于所获取的数据路径生成所述子密钥导出路径。
6.根据权利要求5所述的方法,其中生成所述子密钥导出路径包括:
为所述数据路径的每个相应数据项生成相应的元素集合,其中每个相应的元素集合一起表示所述数据项,并且每个元素集合中的每个元素是整数。
7.根据权利要求6所述的方法,其中每个整数的表示形式是十进制表示或十六进制表示。
8.根据权利要求6或7所述的方法,其中每个整数是固定长度的整数。
9.根据权利要求8所述的方法,其中每个父密钥最多能够具有2n个子密钥,其中n是所述固定长度的整数。
10.根据权利要求5至9中任一项所述的方法,其中获取所述数据路径包括:接收所述数据路径。
11.根据权利要求10所述的方法,其中所述接收的数据路径是非混淆数据路径的混淆版本,所述混淆数据路径的每个数据项是所述非混淆数据路径的相应非混淆数据项的混淆版本。
12.根据权利要求5至9中任一项所述的方法,其中获取所述数据路径包括:生成所述数据路径。
13.根据权利要求10或12所述的方法,所述方法包括:生成所述数据路径的混淆版本,并且其中所述的基于所获取的数据路径生成所述子密钥导出路径包括:基于所述混淆数据路径生成所述子密钥导出路径,并且其中所述的为所述数据路径的每个相应数据项生成相应的元素集合包括:为所述混淆数据路径的每个相应数据项生成所述相应的元素集合。
14.根据权利要求11或13所述的方法,其中所述数据路径的每个数据项被单独进行混淆处理。
15.根据权利要求11、13或14中任一项所述的方法,其中所述数据路径的每个数据项使用以下各项中的一项或多项进行混淆处理:
随机化;
使用加密密钥进行的加密;
使用XOR密钥进行的XOR加密;
使用映射函数进行的替换;和/或
哈希函数。
16.根据前述任一项权利要求所述的方法,其中所述数据路径对应于文件夹结构,并且其中每个数据项属于所述文件夹结构的不同文件夹。
17.根据权利要求2或其任何从属权利要求所述的方法,其中所述的输出包括以下各项中的至少一项:
将所述一个或多个生成的子密钥输出到加密函数,所述加密函数被配置为基于所述一个或多个生成的子密钥中的至少一个生成的子密钥来加密数据;
将所述一个或多个生成的子密钥输出到签名函数,所述签名函数被配置为基于所述一个或多个生成的子密钥中的至少一个生成的子密钥来生成数字签名;
将所述一个或多个生成的子密钥发送给不同方;
为所述一个或多个生成的子密钥中的每个生成的子密钥生成相应的区块链地址,并将所述相应的区块链地址输出到所述不同方;
生成区块链事务,所述区块链事务包括输出,所述输出锁定到所述一个或多个生成的子密钥中的至少一个生成的子密钥。
18.一种生成数据路径的计算机实现的方法,所述数据路径由密钥生成者用于生成分层密钥结构的密钥,其中所述密钥结构包括多层级层次结构,所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由路径生成者执行并且包括:
获取数据路径,所述数据路径包括多个数据项;
为所述数据路径的每个相应数据项生成一个或多个元素的相应集合,其中每个相应的元素集合一起表示所述数据项,并且每个元素集合中的每个元素是整数;
基于一个或多个元素的所述相应集合生成子密钥导出路径;以及
输出所述子密钥导出路径。
19.根据权利要求18所述的方法,其中所述的输出所述子密钥导出路径包括:将所述子密钥导出路径输出到所述密钥生成者,所述密钥生成者被配置为基于所述子密钥导出路径生成一个或多个子密钥。
20.根据权利要求18或19所述的方法,其中每个整数的表示形式是十进制表示或十六进制表示。
21.根据权利要求18至20所述的方法,其中每个整数是固定长度的整数。
22.根据权利要求21所述的方法,其中每个父密钥最多能够具有2n个子密钥,其中n是所述固定长度的整数。
23.根据权利要求18至22中任一项所述的方法,其中获取所述数据包括:接收所述数据路径。
24.根据权利要求18至22中任一项所述的方法,其中获取所述数据包括:生成所述数据路径。
25.根据权利要求18至24中任一项所述的方法,其中所获取的数据路径是非混淆数据路径的混淆版本。
26.一种计算机设备,所述计算机设备包括:
存储器,所述存储器包括一个或多个存储器单元;以及
处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据前述任一项权利要求所述的方法。
27.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据前述任一项权利要求所述的方法。
CN202180076572.6A 2020-11-13 2021-10-28 密钥生成方法 Pending CN116569515A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2017883.6 2020-11-13
GB2017883.6A GB2600965A (en) 2020-11-13 2020-11-13 Key generation method
PCT/EP2021/079948 WO2022101023A1 (en) 2020-11-13 2021-10-28 Key generation method

Publications (1)

Publication Number Publication Date
CN116569515A true CN116569515A (zh) 2023-08-08

Family

ID=74045996

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180076572.6A Pending CN116569515A (zh) 2020-11-13 2021-10-28 密钥生成方法

Country Status (6)

Country Link
US (1) US20230421366A1 (zh)
EP (1) EP4245008A1 (zh)
JP (1) JP2023552687A (zh)
CN (1) CN116569515A (zh)
GB (1) GB2600965A (zh)
WO (1) WO2022101023A1 (zh)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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 암호키를 생성하는 방법

Also Published As

Publication number Publication date
WO2022101023A1 (en) 2022-05-19
US20230421366A1 (en) 2023-12-28
JP2023552687A (ja) 2023-12-19
GB2600965A (en) 2022-05-18
GB202017883D0 (en) 2020-12-30
EP4245008A1 (en) 2023-09-20

Similar Documents

Publication Publication Date Title
CN113924747A (zh) 区块链交易数据字段验证
CN115997369A (zh) 用于在区块链网络中验证数据的方法和装置
US20230046315A1 (en) Mapping keys to a blockchain overlay network
US20230291585A1 (en) Method of generating a public key
CN115917546A (zh) 生成区块链地址
JP2023554148A (ja) 機密データのブロック
US20230134619A1 (en) Method of generating a hash-based message authentication code
CN116830085A (zh) 生成区块链事务以及核实区块链事务
CN115885497A (zh) 数字签名
CN116157796A (zh) 警报账户
CN117280653A (zh) 多方区块链地址方案
CN116547945A (zh) 默克尔证明实体
CN116569515A (zh) 密钥生成方法
US20230396450A1 (en) Key derivation method
US20240171407A1 (en) Improved methods &amp; systems for signature verification in blockchain-implemented data applications
WO2024028077A1 (en) Wrapped encryption
CN117121434A (zh) 区块链实现的散列函数
CN117678193A (zh) 区块链区块和存在证明
WO2023057149A1 (en) Redacting content from blockchain transactions
TW202345545A (zh) 用於證明與驗證子金鑰真實性之技術
CN117693926A (zh) 区块链区块和存在证明
CN117561697A (zh) 部分基于sha的哈希函数
CN117337436A (zh) 多方区块链地址方案
CN117941317A (zh) 生成区块链事务
CN117652124A (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