钱包
概念
钱包里只含有钥匙。 “钱币”被记录在比特币网络的区块链中。 用户通过钱包中的密钥签名交易,从而来控制网络上的钱币。
分类
非确定性钱包
其中每个密钥都是从随机数独立生成的。密钥彼此无关。简称 JBOK 钱包。
确定性钱包
其中所有的密钥都是从一个主密钥派生出来,这个主密钥即为种子(seed)。称为分级确定性钱包或 HD 钱包。
优势:
- 树状结构可以被用来表达额外的组织含义。
2.它可以允许让使用者去建立一个公共密钥的序列而不需要访问相对应的私钥。
如果您正准备开发一个比特币钱包,那么它应该被构建为一个 HD 钱包,一个种子被编码为助记词代码进行备份,遵循 BIP-32,BIP-39,BIP-43 和 BIP-44 标准。
钱包技术细节
创建助记词
从助记词生成种子
BIP-39 中的可选密码短语
如果没有使用密码短语,助记词是用由常量字符串“助记词”构成的盐进行延伸,从任何给定的助记词产生一个特定的 512 位种子。
从种子创建HD钱包
私有子密钥的衍生
子密钥衍生函数是基于单项哈希函数。这个函数结合了:
一个母私钥或者公共钥匙(ECDSA 未压缩键)
一个叫做链码(256 bits)的种子
一个索引号(32 bits)
这三个项目(母私钥,链码,索引)相结合并散列可以生成子密钥
链码是用来给这个过程引入确定性随机数据的,使得索引不能充分衍生其他的子密钥。最初的链码种子(在密码树的根部)是用随机数据构成的,随后链码从各自的母链码中衍生出来。
改变索引可以让我们延长母密钥以及创造序列中的其他子密钥。每一个母密钥可以有 2,147,483,647 (2^31) 个子密钥。
扩展密钥
密钥以及链码这两个重要的部分被结合之后,就叫做扩展密钥(extended key)
一个扩展密钥包括一个私钥(或者公钥)以及一个链码。一个扩展密钥可以创造出子密钥并且能创造出密钥树结构中的整个分支。分享扩展密钥就可以访问整个分支。