赞
踩
HD Wallets( hierarchical deterministic wallets),在HD Wallet出现之前,比特币钱包是通过随机数生成互不相关的多个私钥。这种类型的钱包被称作非确定钱包(或随机钱包)。然而,一般情况下,区块链中的用户为了保证自己的匿名性,往往会生成多个私钥,以保证每次交易不会被追踪,非确定性钱包的方法会随机生成多个公私钥对,这些秘钥需要反复备份,导入在使用秘钥进行签名,占用空间,使用不便。因此,有成员提出了使用一个“种子”和单向哈希函数来生成一组私钥的方法,该方法不需要一次生成多个私钥,只需要记住种子值,即可推导出多个子私钥。而**BIP32(秘钥派生)**就是这种方法的其中之一。
BIP32算法的目的就是,只需要一个种子,就可以推导出其他所有子孙私钥的信息,从而避免了随机生成多个私钥而带来的繁琐操作。
BIP32秘钥派生算法的整体流程如下所示:
下面的过程是一个父私钥推断出子私钥 ( k i , c i ) ← C K D p r i v ( ( k p a r , c p a r ) , i ) (k_i,c_i)\leftarrow CKDpriv((k_{par},c_{par}),i) (ki,ci)←CKDpriv((kpar,cpar),i),其中 k p a r k_{par} kpar代表父私钥, c p a r c_{par} cpar代表父私钥的链码, i i i代表索引值。
公钥派生函数用 ( k i , c i ) ← C K D p u b ( ( k p a r , c p a r ) , i ) (k_i,c_i)\leftarrow CKDpub((k_{par},c_{par}),i) (ki,ci)←CKDpub((kpar,cpar),i), 生成子公钥的过程类似于子私钥的生成过程。
下一步是级联几个CKD构造来构建一个树。我们从一个根开始,即主扩展密钥m。通过对i的几个值求值CKDpriv(m,i),我们得到了许多一级派生节点。由于这些密钥中的每一个都是扩展密钥,因此CKDpriv也可以应用于这些密钥。一个详细的秘钥派生树如下图所示:
树中的每个叶节点对应于一个实际的秘钥,而内部节点对应于从它们派生的键的集合。叶节点的链代码被忽略,只有它们嵌入的私钥或公钥是相关的。由于这种构造,知道扩展私钥允许重建所有子代私钥和公钥,知道扩展公钥允许重建所有非硬化公钥。
大多是翻译官方文档中的内容,掺杂了一点个人理解,有不对的地方请各位大神指教。
BIP0032文档:
数字钱包 HD Wallet(BIP32密钥派生)
EBCPA: Efficient Blockchain-Based Conditional Privacy-Preserving Authentication for VANETs
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。