HD 钱包与派生路径详解(BIP44)
目录
当您设置加密货币钱包并收到 12 个单词的助记词时,这单一的备份让您可以访问钱包将来创建的每个账户——在 Bitcoin、Ethereum、Solana 以及任何其他支持的链上。使这一切成为可能的机制称为 HD 钱包,它使用的地址系统由派生路径管理。
本指南解释了 HD 钱包如何将一个种子变成无限数量的密钥,像 m/44'/60'/0'/0/0 这样的派生路径实际意味着什么,以及为什么在切换钱包或区块链时选对路径很重要。
什么是 HD 钱包?¶
HD 代表分层确定性(Hierarchical Deterministic)。这个术语来自 BIP32,一个 2012 年发布的规范,定义了如何从单一根派生出密钥对的树状结构。
分层意味着密钥以树状结构组织——父密钥可以产生子密钥,子密钥可以产生孙密钥。树可以按需深入分支。
确定性意味着过程是可重复的。给定相同的根(主种子),每次在每个遵循标准的钱包中都会产生相同的密钥树。
在 HD 钱包之前,每个新地址都需要生成和备份一个单独的随机私钥。如果您生成了 100 个地址,就需要 100 个备份。遗漏一个,那些资金就丢失了。HD 钱包消除了这个问题。您只需备份一次种子,钱包将来派生的每个密钥都已被该备份覆盖。
树的根来自 BIP39 助记词。助记词通过 PBKDF2 转换为 512 位二进制种子(如 BIP39 详解中所述)。该 512 位种子被分为主私钥(256 位)和主链码(256 位)。它们共同构成整棵树生长的根。
m/44'/60'/0'/0/0 解析¶
派生路径是树中标识特定密钥的地址。它看起来像计算机上的文件路径,每个段落告诉您要沿哪个分支走。
让我们解码 m/44'/60'/0'/0/0,这是第一个 Ethereum 地址的标准路径:
m / 44' / 60' / 0' / 0 / 0
│ │ │ │ │ │
│ │ │ │ │ └── 地址索引(0 = 第一个地址)
│ │ │ │ └────── 找零(0 = 外部/接收,1 = 内部/找零)
│ │ │ └─────────── 账户(0 = 第一个账户)
│ │ └───────────────── 币种类型(60 = Ethereum)
│ └──────────────────────── 用途(44 = BIP44 标准)
└──────────────────────────── 主密钥(树的根)
每个层级的分解:¶
m — 主密钥。每个派生路径都从这里开始。这是直接从种子派生的根。
44' — 用途。数字 44 表示此路径遵循 BIP44 标准,用于多账户、多币种钱包。撇号(或 ')标记这是"硬化"派生,意味着子密钥不能仅从父公钥计算——它需要私钥。这是一项安全措施。
60' — 币种类型。每种加密货币由 SLIP-44 分配一个编号(详见下文)。Ethereum 是 60。Bitcoin 是 0。Solana 是 501。这个层级允许一个种子服务多个区块链而不会发生密钥冲突。
0' — 账户索引。可以把它看作钱包中的独立钱包。账户 0 是默认的。您可以使用账户 1 作不同用途——例如储蓄与日常消费。大多数用户不会超过账户 0。
0 — 找零层级。在 Bitcoin 的 UTXO 模型中,0 表示外部(接收)地址,1 表示内部(找零)地址。Ethereum 不以相同方式使用找零地址,但为兼容性保留了这个层级。
0 — 地址索引。这是递增以产生新地址的最终数字。索引 0 是您的第一个地址,索引 1 是第二个,依此类推。每次您请求新的接收地址时,钱包会递增此值。
BIP44 和 SLIP-44 币种类型¶
BIP44 标准化了上述派生路径结构。它于 2014 年发布,在 BIP32 密钥派生基础上构建了固定的五级层次结构:用途/币种类型/账户/找零/地址索引。
SLIP-44(Satoshi Labs 改进提案 44)维护币种类型编号的注册表。每个区块链被分配一个唯一整数,使得同一种子为不同链产生完全不同的密钥。以下是一些常见分配:
| 币种类型 | 区块链 | 默认路径 |
|---|---|---|
| 0 | Bitcoin | m/44'/0'/0'/0/0 |
| 2 | Litecoin | m/44'/2'/0'/0/0 |
| 60 | Ethereum(及 EVM 链) | m/44'/60'/0'/0/0 |
| 144 | XRP | m/44'/144'/0'/0/0 |
| 195 | Tron | m/44'/195'/0'/0/0 |
| 501 | Solana | m/44'/501'/0'/0' |
| 9006 | Avalanche(C-Chain) | m/44'/60'/0'/0/0 |
注意 Avalanche C-Chain 使用币种类型 60(Ethereum 的类型),因为其 C-Chain 兼容 EVM 并共享相同的地址格式。Polygon、Arbitrum、Optimism 和 Base 也是如此——它们都使用 m/44'/60'/0'/0/0,这意味着同一个 Ethereum 地址在所有这些网络上都有效。
这就是为什么当您在 MetaMask 中添加 Polygon 或 Arbitrum 时,您的地址与 Ethereum 地址相同。它们都从相同的路径派生。区别发生在网络(链 ID)层面,而不是密钥派生层面。
不同的链,不同的路径¶
虽然 EVM 链共享 Ethereum 的路径,但非 EVM 链使用自己的约定,差异很重要。
Bitcoin 路径¶
Bitcoin 已经演进了几种地址格式,每种都有自己的派生标准:
| 标准 | 路径 | 地址类型 | 前缀 |
|---|---|---|---|
| BIP44 | m/44'/0'/0'/0/0 |
传统(P2PKH) | 1... |
| BIP49 | m/49'/0'/0'/0/0 |
嵌套 SegWit(P2SH-P2WPKH) | 3... |
| BIP84 | m/84'/0'/0'/0/0 |
原生 SegWit(bech32) | bc1q... |
| BIP86 | m/86'/0'/0'/0/0 |
Taproot | bc1p... |
大多数现代 Bitcoin 钱包默认使用 BIP84(原生 SegWit),因为它提供更低的交易费用。如果您在钱包中恢复种子但看不到资金,钱包可能在扫描错误的派生路径。在钱包设置中从 BIP84 切换到 BIP44(或反之)通常就能解决。
Solana 路径¶
Solana 使用 ed25519 而非 secp256k1,因此其派生在结构上不同。标准路径是 m/44'/501'/0'/0'——注意所有四个层级都是硬化的(带 ' 标记)。一些 Solana 钱包使用 m/44'/501'/0' 或 m/44'/501',具体路径因钱包应用而异。Phantom 和 Solflare 使用不同的约定,这在迁移时可能导致混淆。有关详细说明,请参阅 Solana 钱包生成指南。
XRP 和 Tron¶
XRP 使用币种类型 144,路径为 m/44'/144'/0'/0/0。Tron 使用币种类型 195,路径为 m/44'/195'/0'/0/0。两者都像 Bitcoin 和 Ethereum 一样使用 secp256k1,但地址编码不同。
BIP84 vs BIP44:为什么 Bitcoin 有多个标准¶
如果您使用过 Bitcoin,可能注意到一些地址以 1 开头,一些以 3 开头,现代地址以 bc1q 开头。这不是外观差异——每种格式对应不同的派生标准和脚本类型。
BIP44(m/44'/0'/...)生成传统 P2PKH 地址(1... 格式)。这是原始的 BIP32 派生 Bitcoin 路径。它仍然有效,但每笔交易使用更多区块空间。
BIP49(m/49'/0'/...)生成嵌套 SegWit P2SH 地址(3... 格式)。这是一种过渡格式,在保持与旧钱包向后兼容的同时提供 SegWit 的费用节省。
BIP84(m/84'/0'/...)使用 bech32 编码生成原生 SegWit 地址(bc1q... 格式)。这是标准交易最高效的格式,也是大多数现代钱包的默认设置。
关键认识是,所有三种格式都可以从同一个助记词派生。您的 12 个单词不会改变。改变的是派生路径中的用途层级:44、49 或 84。支持所有三种的钱包会扫描每条路径以找到您的资金。
在生成或恢复 Bitcoin 钱包时,始终检查钱包默认使用的派生标准。如果您看到的地址格式与预期不同,钱包可能使用了不同的 BIP 标准。要详细了解 Bitcoin 地址格式,请参阅加密地址格式详解。
分步密钥派生¶
以下是从助记词到可用 Ethereum 地址的完整派生过程:
步骤 1:助记词到种子¶
您的 12 词助记词通过 PBKDF2-HMAC-SHA512 处理,迭代 2,048 次,盐为 "mnemonic"(加上可选的密码短语)。输出是 512 位二进制种子。
步骤 2:种子到主密钥¶
512 位种子通过 HMAC-SHA512 处理,密钥为 "Bitcoin seed"(无论目标区块链如何,都使用此密钥字符串)。左边 256 位成为主私钥。右边 256 位成为主链码。
步骤 3:主密钥到子密钥¶
从主密钥开始,派生路径的每个层级执行子密钥派生(CKD)函数。对于硬化子密钥(带 ' 标记),父私钥和链码连同子索引输入 HMAC-SHA512。结果是新的(子)私钥和链码。
对于普通(非硬化)子密钥,使用父公钥而非私钥。这就是启用只读钱包的原理——您可以在没有私钥的情况下派生公钥和地址。
步骤 4:私钥到公钥¶
在派生的最后一个层级,子私钥通过椭圆曲线乘法转换为公钥。对于 Ethereum,使用 secp256k1 曲线。运算为:公钥 = 私钥 * G,其中 G 是曲线的生成点。
步骤 5:公钥到地址¶
公钥被哈希以产生区块链地址。对于 Ethereum,公钥用 Keccak-256 哈希,最后 20 字节(40 个十六进制字符)成为地址,前缀为 0x。对于 Bitcoin,过程涉及 SHA-256 后接 RIPEMD-160,然后根据地址类型进行 Base58Check 或 bech32 编码。
您可以使用 SafeSeed 的 Ethereum 地址生成器或 Bitcoin 地址生成器看到整个过程,展示从种子到地址的每个步骤。
为什么这在实践中很重要¶
理解派生路径不仅仅是学术知识。以下是具体的实际场景:
- 在不同软件中恢复钱包。 如果您从 Ledger 迁移到 Trezor,或从 MetaMask 迁移到其他钱包,确保派生路径匹配。相同种子加不同路径等于不同地址和看似丢失的资金。
- 访问多条链。 您的助记词已经覆盖了 Polygon、Arbitrum 和其他 EVM 链——它们都使用 Ethereum 的币种类型 60。无需单独备份。
- 调试丢失的资金。 如果您恢复 Bitcoin 种子但看不到余额,请尝试在钱包设置中切换 BIP44、BIP49 和 BIP84 路径。
- 为特定目的生成地址。 通过递增账户索引(第三个层级),您可以创建逻辑上独立的钱包——一个用于日常消费,一个用于长期存储——全部来自同一个助记词。
派生路径系统将单一助记词转变为多链、多账户钱包。它是使现代加密货币自托管既强大又便携的基础设施层。一旦您理解了它,就可以自信地在钱包、链和地址格式之间切换。