在區塊鏈錢包的生成中,根私鑰(Root Private Key) 和 派生私鑰(Derived Private Key) 是基於分層確定性錢包(Hierarchical Deterministic Wallet, HD Wallet)標準(如 BIP-32)的兩個重要概念。
根私鑰(Root Private Key)
子私鑰(派生私鑰,Derived Private Key)
根私鑰和派生私鑰的關係
- 根私鑰 → 派生私鑰
- 根私鑰是生成派生私鑰的起點。
- 通過不同的路徑(如
m/44'/195'/0'/0/0
),可以派生出多個子私鑰。
- 不可逆性
- 根私鑰可以派生子私鑰,但子私鑰無法反推出根私鑰。
- 路徑的影響
- 不同的派生路徑對應不同的子私鑰,即使使用相同的根私鑰,改變路徑也會生成不同的子私鑰。
BIP-32 分層結構
BIP-32 定義了分層確定性錢包的結構,使用路徑來派生私鑰。
路徑結構
典型的路徑格式為:
m / purpose' / coin_type' / account' / change / address_index
路徑部分 | 含義 | 示例 |
m | 根密鑰(根私鑰) | m |
purpose' | 用途(如 BIP-44 標準) | 44' |
coin_type' | 幣種代碼 | 195' (TRON) |
account' | 賬戶號 | 0' |
change | 是否為找零地址 | 0 (非找零地址) |
address_index | 地址索引 | 0 (第一個地址) |
實際示例
import * as bip39 from 'bip39'; import { BIP32Factory } from 'bip32'; import * as tinysecp from 'tiny-secp256k1'; import { Buffer } from 'buffer'; // 初始化 BIP32 工廠 const bip32 = BIP32Factory(tinysecp); // 定義 BIP-44 路徑 const BIP44_PATH = "m/44'/195'/0'/0"; // 助記詞生成私鑰和地址 (async () => { // 1. 生成助記詞 const mnemonic = bip39.generateMnemonic(); console.log('助記詞:', mnemonic); // 2. 助記詞轉種子 const seed = await bip39.mnemonicToSeed(mnemonic); console.log('種子 (Hex):', seed.toString('hex')); // 3. 種子生成根私鑰 const root = bip32.fromSeed(seed); console.log('根私鑰 (Hex):', root.privateKey!.toString('hex')); // 4. 派生第一個子私鑰(地址索引 0) const child0 = root.derivePath(`${BIP44_PATH}/0`); console.log('子私鑰 (索引 0):', child0.privateKey!.toString('hex')); // 5. 派生第二個子私鑰(地址索引 1) const child1 = root.derivePath(`${BIP44_PATH}/1`); console.log('子私鑰 (索引 1):', child1.privateKey!.toString('hex')); })();
執行後的輸出可能是:
助記詞: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about 種子 (Hex): 5eb00bbddcf069084889a8ab9155568165f5c89f59db4c9a2d9aaae24f087f94a1e897b8c82e9dfed715a2e13f8f8f071d6b4fd07c46c11a6b227d1ddfac8f21 根私鑰 (Hex): 0c28fca386c7a2279b89cdb245631b75ecb241ce39169778d3efcdc3c9f05db3 子私鑰 (索引 0): 6d8b7dff9e75c5d10a756846b2fa5aa3e85a38c9c20b8e6c7e0c96b19c4ba1d6 子私鑰 (索引 1): 3e3c547c87b6c5098cc8cc89a3f09b847bcc7f120d3adfd1b7055b1c4d2ddf80
根私鑰與派生私鑰的關鍵
- 根私鑰唯一性
- 根私鑰是基於種子生成的,同一種子永遠對應同一根私鑰。
- 路徑決定子私鑰
- 不同的派生路徑會生成不同的子私鑰。
- 安全性
- 根私鑰是整個錢包的核心,應妥善保管。
- 子私鑰控制單個地址的資產,如果某個子私鑰丟失,只會影響對應的地址。
- 不可逆性
- 無法通過子私鑰推導出根私鑰,這是基於單向加密的安全設計
根私鑰與子私鑰的應用場景
- 根私鑰:恢復整個錢包(包括所有地址和私鑰)。
- 子私鑰:控制單個地址的資產,適合分帳或多地址管理。