比特币钱包(3) BIP32 HD钱包之密钥树
1. 密鑰樹可以多層迭代
由于密鑰派生關系是可以多層迭代的,因此可以使用一個密鑰多層級派生,構建出樹形密鑰層級結構。如果是普通密鑰派生關系,公鑰派生子公鑰的特性也可以逐層傳遞。
- 密鑰衍生函數CKD 詳細過程見上文"比特幣錢包(2) BIP32 HD錢包之生成子密鑰"
1.1 內部和外部鏈
- 外部密鑰鏈: 用于生成新的公共地址
- 內部密鑰鏈: 用于所有其他操作(更改地址,生成地址…,任何不需要通信的操作)
擴展私鑰表示為(k,c),k表示普通私鑰,c表示鏈碼;
擴展公鑰表示為(K,c)K表示point(k)父級公鑰,c表示鏈碼;
2. 強化衍生Hardened Derivation
問題:擴展公鑰衍生一個分支公鑰有風險。 因為擴展公鑰包含有鏈碼,如果子私鑰被知道或者被泄漏的話,鏈碼就可以被用來衍生所有的其他子私鑰。簡單地泄露的私鑰以及一個母鏈碼,可以暴露所有的子密鑰。更糟糕的是,子私鑰與母鏈碼可以用來推斷母私鑰
強化衍生只能從父級私鑰衍生子級私鑰,從而得到子級公鑰
- 強化衍生通過 0x00 這樣 1Byte 拼上私鑰和索引作為 Data
- 強化衍生不會將父級鏈碼暴露到不安全的環境下,所以相較于正常衍生更安全些。
todo:下面這句話沒懂…
當某一層的密鑰派生關系是“加硬”的,則這種傳導關系就中止了。用公式可以表示為:
N(m/a/b/c) = N(m/a/b)/c = N(m/a)/b/c = N(m)/a/b/c = M/a/b/c.
N(m/aH/b/c) = N(m/aH/b)/c = N(m/aH)/b/c.
_H 表示加硬密鑰派生 _
3. 賬號表示方法
3.1. 路徑通過 / 分割表示
m / iH / 0 / k對應于從主m導出的HDW的帳號i的外鏈的第k個密鑰對。
m / iH/ 1 / k對應于從主m導出的HDW的帳號i的內部鏈的第k個密鑰對。
3.2. 前綴有 m 和 M 之分
m: 已知子私鑰
M: 已知子公鑰
3.3. 索引
索引范圍有 2^32 個
- 前 2^31 表示正常衍生,通常表示為索引序號即可;
- 后 2^31 表示強化衍生,強化衍生序號也是從 0 開始,會在序號后添加撇號表示強化衍生,eg. 0x80000000 為第一個強化衍生的序號,通常表示為 0’,錢包中有 i’=2^31+i 這樣的關系。
3.4. eg.
m/0 => 母密鑰生成的第一個正常衍生子私鑰
m/0/1 =>第一個正常衍生子密鑰的子密鑰
M/0 =>母密鑰生成的第一個正常衍生公鑰
m/5/4’ =>子私鑰 m/5 的第 4 個強化衍生的子私鑰
m/5/4’/0 => 子私鑰 m/5/4’ 的第 0 個正常衍生私鑰
總結
以上是生活随笔為你收集整理的比特币钱包(3) BIP32 HD钱包之密钥树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比特币钱包(2) BIP32 HD钱包
- 下一篇: 比特币钱包(4) BIP39 助记词