本公开涉及一种从外部状态导出分层密钥结构的子密钥(例如,私钥)的方法。例如,密钥可以用于对区块链事务进行签名和/或生成区块链地址。
背景技术:
1、在区块链技术环境中,“钱包应用程序”或仅仅是“钱包”通常是指一种应用程序,除了其他方面,该应用程序被配置为存储特定方拥有的密钥(即,公钥和/或私钥)的集合。
2、为了维护公共区块链的隐私,建议避免重复使用从私钥导出的公钥。这可能导致钱包成为随机生成的私钥的集合,需要安全存储并经常备份这些随机生成的私钥,以确保密钥不会丢失或被盗。通过避免重复使用密钥,这种类型的钱包会很快产生“密钥包”问题。
3、分层确定性(hierarchical deterministic,hd)钱包的发明是为了提高密钥存储和重新生成的效率,从而解决该密钥包问题。hd钱包在隐私方面带来了额外的好处,并且能够与不同的系统或子系统共享钱包的分支。这种类型的钱包可以从单个随机种子生成许多密钥,是目前最常用的区块链钱包类型。
4、钱包实现方式通常遵循比特币改进提案32(bip32),该提案描述了如何从父密钥导出多个子密钥。一些实现方式还使用bip44,该提案定义了钱包内各分支的用途。在一种hd钱包实现方式中,主私钥是从随机种子中导出的。该主私钥用于导出数代密钥(子代、孙代等)。
5、图4示出了hd钱包中出现的所得树状结构。该数据结构是一种强大的机制,用于管理钱包的安全性及其在恢复期间回收资金的能力。根据该实现方式,用户(即,钱包所有者)或观察者可以在没有对应私钥的情况下创建一系列公钥。由于需要存储的秘密较少,因此泄露的风险也较低。此外,如果密钥丢失,可以通过种子密钥恢复。
6、用于从父密钥导出子密钥的等式取决于所述父密钥的公钥或私钥是否会用作导出函数的输入;使用父私钥会生成“增强”子密钥,而使用父公钥会生成“普通”(即,非增强,符合bip32术语)子密钥。
7、子密钥是使用子密钥导出(child key derivation,ckd)函数生成的。ckd函数的特定形式取决于特定的钱包实现方式,但子密钥通常基于父密钥和索引。索引使父密钥能够生成多个子密钥,即,一个父密钥可以有多个子密钥。通常,索引取序列中的值,父密钥的第一子密钥取序列中的第一个值(例如,0),父密钥的第二子密钥取序列中的下一个值(例如,1),依此类推。
8、应当注意的是,在撰写本文时,如果只知道父公钥和链码,则不可能导出增强子公钥。请求向普通子密钥支付意味着接收者可以只给出父公钥(和链码),而发送者可以通过导出多个普通(即,非增强)子密钥来发送支付。这样,资金接收者就不需要明确地将每个地址提供给发送者。这确保可以发送多个支付,同时最大限度地减少相同双方之间的通信,并增强在公共区块链上处理事务时的隐私。
9、普通子私钥ski的等式为:
10、ski=skpar+hmac512l(cpar,pkpar||index), (1)
11、增强子私钥sk′i的等式为:
12、sk′i=skpar+hmac512l(cpar,skpar||index′), (2)
13、其中
14、·skpar是父密钥的私钥,
15、·pkpar是父密钥的公钥,
16、·hmac512l(■)是使用sha512哈希函数的hmac函数结果的左侧32个字节,
17、·cpar是父密钥的链码,定义为cpar=hmac-sha512r(cgrandparent,pgrandparent||indexpar),
18、·索引是子密钥的计数器,每次计算新的子密钥时都会增加该计数器,其是从0开始的。按照惯例,对于普通密钥,0≤索引<231;对于增强密钥,231≤索引′<232。
技术实现思路
1、可以使用一种称为“本福特钱包benford’s wallet”的协议(请参见https://nchain.com/2019/10/22/benfords-wallet/和英国专利申请gb 1913667.0)来提高隐私性,其背后的理念是将事务的输出分割为多个输出,其中在这些输出的足够大的数据集中,值的分割将遵循本福特定律。所述钱包的目的是混淆一个支付的全部价值,以便隐藏相同数额的定期支付。然而,为了能够向审计者证明该支付的全部价值,本福特钱包描述了以这种方式接收支付的公钥的计算中包括的外部数据,例如费用清单(invoice)。这意味着必须存储与费用清单相关的数据,并且会重新引入密钥包问题。
2、因此,需要将外部数据结合到子密钥的导出中,而不会重新引入密钥包问题。
3、根据本文公开的一个方面,提供了一种导出分层密钥结构的密钥的计算机实现的方法,其中所述密钥结构包括多层级层次结构,所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由第一方执行并且包括:生成目标子密钥的目标索引,其中所述目标索引是基于将至少一个目标消息输入第一哈希函数的第一结果生成的;以及,基于如下内容导出所述层次结构中某一层级的所述目标子密钥:a)所述层次结构中的先前层级的父密钥、和b)第二结果,其中所述第二结果是将至少i)所述父密钥和ii)所述目标索引输入第二哈希函数的结果。
4、本申请的发明人已经意识到,将子密钥链接到外部数据是有利的。外部数据在下文中通常称为“消息”,但该消息不一定是一方或多方之间通信意义上的消息(例如,电子邮件),尽管并不排除这种情况。通常,消息可以是用户或机器生成的任何类型的数据项。消息用于生成索引,而索引又用于导出子密钥。也就是说,本发明的实施例改变了索引的性质——索引现在基于消息的哈希,而不是取序列中的下一个未使用的值。
5、现在,外部数据可以包括在子密钥的导出中,这样就可以向第三方(例如,审计者)提供证据,证明子密钥链接到费用清单等一些外部数据。与本福特钱包不同,钱包恢复只需要hd钱包的种子。该方法还可促进无忧钱包迁移,而无需用户或不同的钱包提供者执行任何额外的工作。虽然不限于任何特定的钱包协议,但该解决方案并没有改变bip32中规定的hd钱包协议,而是为用于导出密钥的索引赋予了额外的意义。通过使用种子和一条或多条消息来确定性地导出钱包数据文件,在钱包迁移和恢复方面获得了目前对钱包用户有限制的若干优势。这些将在下面详细讨论。
6、应当注意的是,虽然本文提供的示例性用例主要与区块链有关,但是所描述的实施例通常适用于任何相关环境中的密钥使用。例如,子密钥可以用作私钥,以生成应用于许多技术领域的数字签名。又如,子密钥可以在任何环境中用作加密密钥。
1.一种导出分层密钥结构的密钥的计算机实现的方法,其中所述密钥结构包括多层级层次结构,所述多层级层次结构包括主层级以及一个或多个子层级,其中所述主层级包括主密钥,每个子层级包括一个或多个子密钥,给定层级的每个相应子密钥链接到先前层级的一个密钥,其中所述先前层级的所述一个密钥是所述相应子密钥的相应父密钥,并且其中所述方法由第一方执行并且包括:
2.根据权利要求1所述的方法,其中所述目标子密钥基于所述第二结果的第一部分。
3.根据权利要求2所述的方法,所述方法包括:生成所述目标子密钥的目标链码,其中所述目标链码基于所述第二结果的第二部分。
4.根据前述任一项权利要求所述的方法,其中所述目标子密钥是通过将iii)所述父密钥的相应链码输入所述第二哈希函数而导出的。
5.根据前述任一项权利要求所述的方法,其中所述第二哈希函数是hmac函数。
6.根据前述任一项权利要求所述的方法,其中所述父密钥是私钥,并且其中所述目标子密钥是私钥。
7.根据权利要求6所述的方法,其中输入至所述第二哈希函数的所述父密钥是对应于所述父密钥的公钥。
8.根据权利要求6或7所述的方法,所述方法包括:生成对应于所述目标子密钥的目标公钥。
9.根据权利要求1至5中任一项所述的方法,其中所述父密钥是公钥,其中所述目标子密钥是公钥,并且其中所述目标子密钥是基于与所述第二结果对应的公钥导出的。
10.根据前述任一项权利要求所述的方法,所述方法包括以下各项中的任何一项或多项:
11.根据权利要求10所述的方法,其中所述区块链包括区块链事务,所述区块链事务包括发送到所述目标区块链地址的输出,并且其中所述方法包括:
12.根据权利要求10所述的方法,其中所述区块链包括区块链事务,所述区块链事务包括发送到所述目标区块链地址的输出,并且其中所述方法包括:使用所述目标区块链地址来标识所述区块链事务。
13.根据前述任一项权利要求所述的方法,其中所述目标子密钥是公钥,并且其中所述方法包括:使用所述目标子密钥对消息进行加密;或者,其中所述目标子密钥是私钥,并且其中所述方法包括:使用所述目标子密钥对已经使用对应公钥加密的消息进行解密。
14.根据前述任一项权利要求所述的方法,所述方法包括:通过至少将所述父密钥、和所述目标消息提供给第三方,来证明所述目标子密钥与所述消息之间的链接。
15.根据前述任一项权利要求所述的方法,其中所述目标消息包括认证机构颁发的数字证书。
16.根据前述任一项权利要求所述的方法,其中所述主密钥是认证公钥,所述认证公钥已通过认证机构颁发的数字证书进行认证。
17.根据权利要求15和16所述的方法,其中所述目标消息包括对所述认证公钥进行认证的所述数字证书。
18.根据权利要求15所述的方法,其中所述数字证书对第三方所拥有的公钥进行认证。
19.根据前述任一项权利要求所述的方法,所述方法包括:导出一个或多个附加子密钥,其中生成每个相应附加子密钥包括:
20.根据权利要求18所述的方法,其中所述附加子密钥中的部分或全部附加子密钥是基于与所述目标子密钥相同的父密钥而导出的。
21.根据权利要求18或19所述的方法,其中所述附加子密钥中的部分或全部附加子密钥是基于与所述目标子密钥不同的父密钥而导出的。
22.根据权利要求20所述的方法,其中所述目标子密钥是所述附加子密钥中的一个或多个附加子密钥的父密钥。
23.根据权利要求18或19所述的方法,其中所述附加子密钥中的部分或全部附加子密钥与所述目标子密钥处于所述层次结构中的同一层级。
24.根据权利要求19所述的方法,其中用于导出所述目标子密钥以及所述附加子密钥中的一个或多个附加子密钥中的每个附加子密钥的所述相应索引是基于将至少所述消息和相应计数器值输入所述第一哈希函数的相应第一结果来导出的。
25.根据权利要求19所述的方法,所述方法包括:
26.根据权利要求1至17中任一项所述的方法,所述方法包括:导出一个或多个附加子密钥,其中导出每个相应附加子密钥包括:
27.根据权利要求18至26中任一项所述的方法,所述方法包括:
28.根据权利要求18至27中任一项所述的方法,所述方法包括:
29.根据前述任一项权利要求所述的方法,其中所述的导出所述目标子密钥包括:恢复所述目标子密钥,其中所述的恢复所述目标子密钥包括:
30.一种计算机设备,所述计算机设备包括:
31.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在一个或多个处理器上运行时,执行根据前述任一项权利要求所述的方法。