摘要
本 BIP 描述了确定性钱包的助记词生成和使用的规范。
动机
助记词是一种将随机数据转换为易于记忆的单词序列的方法。这种方法在比特币钱包中特别有用,因为它可以帮助用户备份和恢复他们的钱包。
比特币钱包使用的私钥通常是随机生成的。为了避免在钱包丢失或损坏时丢失资金,用户需要备份这些私钥。然而,直接备份随机生成的私钥是不实用的,因为它们很难记忆和手动输入。
助记词通过将随机数据转换为一系列单词来解决这个问题,这些单词更容易记忆和手动输入。这使得用户可以更容易地备份和恢复他们的钱包。
规范
生成助记词
- 创建一个 128 到 256 位的随机序列(熵)。
- 取这个随机序列的 SHA256 哈希的前 n/32 位,其中 n 是初始熵的长度。这些位将作为校验和。
- 将校验和添加到随机序列的末尾。
- 将组合后的位序列分割成 11 位的段。
- 将每个 11 位的值映射到预定义的 2048 个单词列表中的一个单词。
- 助记词是按顺序排列的单词列表。
熵长度与助记词长度的关系
| 熵 (位) | 校验和 (位) | 熵+校验和 (位) | 助记词长度 (单词) |
|---|---|---|---|
| 128 | 4 | 132 | 12 |
| 160 | 5 | 165 | 15 |
| 192 | 6 | 198 | 18 |
| 224 | 7 | 231 | 21 |
| 256 | 8 | 264 | 24 |
从助记词生成种子
助记词表示熵,可用于生成确定性钱包。但是,它不能直接用作种子,因为它不提供足够的熵。
相反,助记词与可选的用户提供的密码一起使用,通过 PBKDF2 函数生成种子。
- 将助记词作为 PBKDF2 的密码。
- 将字符串 "mnemonic" 与可选的用户提供的密码连接起来,作为 PBKDF2 的盐。
- 使用 HMAC-SHA512 作为伪随机函数,2048 次迭代,输出长度为 512 位(64 字节)。
- 生成的 512 位种子可用于创建确定性钱包。
单词列表
单词列表是预先定义的,包含 2048 个单词。为了便于使用,单词列表被设计为使每个单词的前四个字母是唯一的。这使得用户可以只输入每个单词的前四个字母,而不是整个单词。
BIP-0039 规范包括多种语言的单词列表,包括英语、日语、韩语、西班牙语、中文(简体和繁体)、法语和意大利语。
中文单词列表可以在 GitHub 上找到。
示例
英语
熵: 0x0c1e24e5917779d297e14d45f14e1a1a
助记词: army van defense carry jealous true garbage claim echo media make crunch
种子 (无密码): 5b56c417303faa3fcba7e57400e120a0ca83ec5a4fc9ffba757fbe63fbd77a89a1a3be4c67196f57c39a88b76373733891bfaba16ed27a813ceed498804c0570
种子 (密码 "TREZOR"): 3b5df16df2157104cfdd22830162a5e170c0161653e3afe6c88defeefb0818c793dbb28ab3ab091897d0715861dc8a18358f80b79d49acf64142ae57037d1d54
日语
熵: 0x0c1e24e5917779d297e14d45f14e1a1a
助记词: あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あいこくしん あおぞら
种子 (无密码): a262d6fb6122ecf45be09c50492b31f92e9beb7d9a845987a02cefda57a15f9c467a17872029a9e92299b5cbdf306e3a0ee620245cbd508959b6cb7ca637bd55
种子 (密码 "㍍ガバヴァぱばぐゞちぢ十人十色"): 346b7321d8c04f6f37b49fdf062a2fddc8e1bf8f1d33171b65074531ec546d1d3469974beccb1a09263440fc92e1042580a557fdce314e27ee4eabb25fa5e5fe
测试向量
完整的测试向量可以在 BIP-0039 规范 中找到。
参考实现
参考实现可以在以下位置找到: