BIP0032描述了分层确定性钱包(HD wallet)
动机:
为了解决传统非确定性钱包每当一批私钥用完后必须重新生成一批私钥并且及时备份的问题。
一.Key的派生:
1.Extended keys(可扩展密钥):
这里定义了从父key派生子key的函数。为了防止派生过程完全依赖key本身,分别给私钥和公钥延伸出256位的熵,称之为链码(chain code)。
可扩展的私钥:(k, c),k为普通私钥,c为链码。
可扩展的公钥:(K, c),K为普通公钥,c为链码。
每个可扩展密钥拥有2的31次个正常子钥和2的31次个强化(hardened)子钥。每个子钥都有一个索引,正常子钥的索引从0到2^31-1,强化子钥从2^31到2^32-1。简化表示:i'即i + 2^31。
2.子钥派生函数(Child key derivation (CKD) functions)
给出一个可扩展密钥和索引i,可以计算出相应的子可扩展密钥。这个算法取决于子钥是否是强化的(即i是否大于等于2^31),以及是在计算私钥还是公钥。
Private parent key → private child key
Public parent key → public child key
Private parent key → public child key
Public parent key → private child key
这个是不行的。
3.密钥树
标识符m/x/y/z描述的是⼦密钥m/x/y的第z个⼦密钥。
4.序列化数据格式:
可扩展公钥/私钥的序列化数据格式如下,共78bytes:
以上内容可以机行base58check编码,生成的字符多大112个字符,主网上会以“xprv”或“xpub”开头,testnet上的“tprv”或“tpub”开始。
5.master key的生成
master key不是直接生成的,而是由种子来生成。
即