持币手册推荐 Binance · 用我的邀请码 BN16188 注册可享手续费减免 · 为什么

私钥与助记词 · 加密世界的身份证

一行写在纸上的英文单词,为什么能等同于一辈子的资产——我们试着把它背后那段冷冰冰的数学,说成人话。

一张折叠的米色纸张半露出在深色木桌边缘,温暖的窗光从左上斜入,象征写在纸上的助记词承载着完整的资产控制权
插图|持币手册

导言:一句话能丢一辈子的币

2022 年冬天,一个老朋友在凌晨两点给我发微信,问我"冷藏君,纸条上 13 个英文单词,到底是哪一个多出来的"。他把助记词抄在便签上,搬家时折了一下,墨水蹭出一小段污渍,他凭着记忆又补了一个回去——补错位置了。第二天早上我陪他在电脑前试到中午,那张便签上的字最终没能拼回原本的 12 个单词。地址里有六位数美金。

那一刻我才真正意识到,私钥和助记词这两个词,对绝大多数刚进圈的人,是"听说很重要、但不知道为什么重要"的存在。它们既不像银行卡密码——错了可以打客服——也不像家门钥匙——丢了可以换锁。它们更接近一种身份本身:你证明你是你的全部凭证,只有这一份,复印件就是正本,丢了等于换了一个人。

所以这篇文章想做一件事:把"私钥"、"公钥"、"地址"、"助记词"、"派生路径"这五个常常被混着说的概念,按照它们真实的层级关系排开。中间穿插一些我踩过的坑、读过的源码、和那种"读完才发现自己一直理解错了"的小段落。读完之后,你不需要会写代码,但应当能在任何一款新钱包的设置页面,看着那串英文菜单,知道自己在勾选什么。

私钥到底是什么

它本质上就是一个非常大的随机数

抛开所有术语,私钥就是一个数字。再具体一点:一个介于 1 和 2256 之间的整数。2256 大概是 1.16 × 1077——这个数比目前可观测宇宙里全部原子的数量还多几个量级。你也许在某些教程里见过类似 e9873d79c6d87dc0fb6a577… 这样一长串十六进制字符,那只是把这个 256 位整数换成 16 进制写出来,64 个字符。

所以"生成一个私钥",本质上就是"掷一次足够公平的 256 面骰子"。靠谱的钱包用的是操作系统提供的密码学安全随机源(在 Linux 上是 /dev/urandom,在 macOS 和 iOS 上是 Apple 的 SecureEnclave 接口),保证这个数字没有任何人——包括钱包开发者本人——能预测或者倒推。

为什么"不可逆推"

很多人困惑的一点是:既然公钥是私钥算出来的,为什么不能反过来从公钥倒推私钥?答案在椭圆曲线密码学。比特币、以太坊和绝大多数主流链用的是 secp256k1 曲线——一条形状像横躺的葫芦的数学曲线。私钥乘以曲线上一个固定的"生成点",得到曲线上另一个点,这个点就是公钥。

"乘"这件事在椭圆曲线上做正向运算非常快——一台普通手机几毫秒就能完成。反过来,已知曲线上两个点,求出"中间乘了多少次"——这个问题叫离散对数问题,目前没有任何已知的多项式时间算法能解。换句话说,按现有数学和计算能力,强行倒推一个 256 位私钥,需要的时间是宇宙年龄的若干个数量级倍。这就是私钥安全性的根基——它不是被锁起来了,它是数学上"按时间算不过来"。

顺便说一句,所谓"量子计算机会破解私钥",破解的也是这一步。Shor 算法理论上可以在多项式时间内解离散对数。但这是另一个长得多的话题,我们会在专题文章里单独写。

私钥 → 公钥 → 地址:三步推导

三者并不是同一个东西

在很多新手的脑子里,"地址"、"账户"、"私钥"是模糊地搅在一起的。其实它们是一条单向链条:

层级 是什么 长度 / 形态 能公开吗 从上一级怎么来
私钥(Private Key) 一个 256 位随机整数 64 位十六进制 / 52 位 WIF 绝对不能 随机生成
公钥(Public Key) 椭圆曲线上一个点(x, y) 压缩后 33 字节 / 66 位十六进制 技术上可以,但实践中也不主动公开 私钥 × 生成点
地址(Address) 公钥经哈希后的短串 比特币 26-62 位 / 以太坊 42 位 当然可以——它就是用来收款的 公钥 → SHA-256 / Keccak-256 → 截断 / 编码

看这张表,最容易让人愣一下的是中间那行:公钥也建议不主动公开。原因有两个。一是早期的 P2PK(pay-to-public-key)地址直接把公钥暴露在链上,量子计算如果哪天真的到来,先倒霉的就是这类地址;二是即便在 secp256k1 安全的前提下,公钥暴露多多少少减少了"匿名性预算"。所以你会发现现代的钱包默认用 P2PKH / P2WPKH 之类的格式,链上看到的是"公钥哈希"而不是公钥本身——只有你花掉一笔钱时,公钥才会随交易广播出去。

以太坊和比特币的小差异

比特币地址做了双层哈希(SHA-256 再 RIPEMD-160),还加了校验位和 Base58 / Bech32 编码,所以你看到的地址形态是 1A1zP1...bc1q... 这种。以太坊偷懒一点:把公钥(去掉前缀字节)丢进 Keccak-256,取最后 20 个字节,前面加个 0x,就完事了——这也是为什么以太坊地址不带校验、不小心抄错一位也能"看起来像那么回事"。EIP-55 后来给以太坊地址补了大小写校验,但本质上还是事后打的补丁。

助记词的来历:BIP39 是怎么变成行业默认的

2013 年之前,人们抄什么

早期比特币用户备份的,是钱包文件本身——一个加密的 wallet.dat,里面塞着一堆随机生成的私钥。这种方式有两个明显的痛点:一是每生成一个新地址,备份就过期一次;二是抄写下来基本不可能,一长串十六进制错一个字母就完蛋。

2013 年 9 月,开发者 Marek Palatinus(Trezor 的创始人之一)和几位合作者提出了 BIP39 提案——"如果我们用一组英文单词代替那串十六进制,让人能用钢笔抄、用嘴念、用脑子记,会怎么样?" 这就是助记词的起点。

2048 个单词 + 校验位

BIP39 准备了一份固定的英文词表,里面恰好 2048 个单词。2048 等于 211,意味着每个单词正好编码 11 个比特。一组 12 个单词就是 132 个比特——前 128 比特是随机熵,后 4 比特是 SHA-256 校验位。24 个单词就是 264 比特——256 比特熵 + 8 比特校验。校验位的存在意味着,你随便瞎写 12 个英文词,绝大多数情况下钱包会拒绝导入——只有 1/16 的概率"恰好"通过校验。

词表的选择也讲究。所有单词长度在 3 到 8 个字母之间,前四个字母互不重复——这意味着你只要抄对前四位,软件就能补全。词与词之间不会有听起来太像的,比如不会同时出现 womanwomen。这些细节都是为了让"用钢笔抄在纸上"这件事尽量不出错。

从助记词到种子,再到主私钥

这一步是很多教程跳过去的,但理解它对后面理清 BIP32/44 的关系帮助很大。助记词本身不是私钥。它要经过一个叫 PBKDF2 的密钥派生函数——具体是把助记词当密码、字符串 "mnemonic" + 你的可选 passphrase 当盐,迭代 2048 次 HMAC-SHA512——最后得到一个 512 位的种子(seed)。这个种子,才是 HD 钱包后续所有派生的起点。

这里有一个常被忽略的细节:同一组助记词,配上不同的 passphrase,会派生出完全不同的钱包。这是 BIP39 协议设计里留的一个秘密入口——也是后面"隐藏钱包"功能的技术基础。我们在另一篇专门讲 passphrase 的文章里详细展开过,这里只是先埋个伏笔。

BIP39 / BIP32 / BIP44:三个标准的关系

它们各自管哪一段

这是新手最常混的一组术语。我们用一张表把它们的职责分开:

标准 年份 解决什么问题 输入 输出
BIP39 2013 把高熵随机数变成人能抄的英文单词 128–256 比特熵 12 / 15 / 18 / 21 / 24 个英文单词 + 512 位种子
BIP32 2012 从一个种子派生出无限多个子私钥(HD 钱包结构) 512 位种子 一棵可以无限延伸的"私钥树"
BIP44 2014 给这棵树规定一套路径命名规则,让不同钱包能互相导入 BIP32 树 形如 m/44'/60'/0'/0/0 的路径约定

三者的关系可以这么记:BIP39 负责"让人能抄",BIP32 负责"让一句话变出一棵树",BIP44 负责"让所有钱包都按同一种方式编号"。三个标准合起来,构成了今天我们说的"HD 钱包"(Hierarchical Deterministic Wallet)。

那个反斜杠路径到底是什么

如果你在某个钱包的"高级"菜单里见过 m/44'/60'/0'/0/0 这样的字符串,那就是 BIP44 路径。逐段拆开看:

  • m:根节点,对应那个 512 位种子
  • 44':表示"我遵守 BIP44 这套规则"(带撇号表示 hardened 派生,更安全)
  • 60':币种编号——60 是以太坊,0 是比特币,195 是 TRON,501 是 Solana
  • 0':账户编号——一个钱包里的第几个独立账户
  • 0:链——0 表示外部地址(收款用),1 表示找零地址
  • 0:地址索引——账户里的第几个地址

所以 m/44'/60'/0'/0/0 翻译成人话就是:"按 BIP44 规则,以太坊,第 0 号账户,外部地址,第 0 个"。下一个以太坊地址就是 m/44'/60'/0'/0/1,再下一个是 /0/2,理论上可以一直数到 231

一个助记词控制多少个地址

答案是:远远超出你需要的

从上面的派生路径就能算出来——单 BIP44 一种规则下,每个币种就能派生出大约 21 亿个账户,每个账户下又能派生出大约 21 亿个地址。把"币种"那一层也算上,整棵树的可派生地址数大致是 262,差不多 46 亿亿——人一辈子用不完。所以"一组 12 词助记词,能不能管我所有链的资产",答案是"能,而且管得过分宽裕"。

但实际上,钱包们并不都听话

这里有一个新手常踩的坑:虽然 BIP44 规定了"以太坊用 60'、比特币用 0'",但不是所有钱包都老老实实按这个走。早期的 Electrum 用过自己的派生方案;某些以太坊钱包习惯把所有地址都放在同一个账户下递增(/0/0/0/1/0/2);某些钱包则每个地址新开一个账户(/0'/0/0/1'/0/0/2'/0/0)。结果就是——同一组助记词,在 A 钱包里能看到 10 万美金,导入 B 钱包却只有第一笔,要继续找钱包的"高级设置"勾选另一种派生路径。

这种事我 2024 年实测过一轮,下面那段 callout 里有完整结果。

我的实测

我 · 2024 年 11 月|我用一组 12 词助记词(事先在一个空地址上各种链放了少量测试币),分别导入了六款钱包:MetaMask、Trust Wallet、imToken、OKX Web3 钱包、Phantom、以及一台 Ledger Nano S Plus。

结果分三档。完全自动识别全部余额的:MetaMask 看到了以太坊 + EVM 链全部地址;Trust Wallet 跨链识别最广,BTC、ETH、BNB Chain、Polygon、Solana 一次性扫出来。需要手动切换派生路径的:Ledger 默认走 BIP44 标准路径,但当我以前在 Phantom 里用过的 Solana 地址(Phantom 用的是 m/44'/501'/0'/0',多了一层 hardened),需要在 Ledger Live 里手动指定。需要切链才看得到的:imToken 默认只显示 ETH,BTC 资产要在"管理钱包"里手动添加。

最终六个钱包都能完整恢复所有测试币,但花的时间从 30 秒到 25 分钟不等。结论很简单:助记词是通用的——派生路径不一定。如果你哪天换钱包发现"地址对不上",第一反应不应该是"我的币没了",而是"我可能在不同的派生路径上"。

常见误解 + 我的实测

误解一:助记词的单词顺序无所谓

这个误解我们见过不下二十次,包括开头那个折便签的朋友。错误的源头大概是"我反正记得是这 12 个词"——但事实是,BIP39 把"前 128 比特熵 + 4 比特校验"按顺序拼成 132 比特再切成 12 段,顺序错一位,整段熵就变了,校验也对不上。打个不算严谨的比方:12 个词不是一组钥匙环,而是一个 132 位的二进制密码,每一位都钉死在该在的位置。

所以如果你只记得"是哪 12 个词",但忘了顺序,理论上还能暴力试——12 个词的全排列是 12!,约 4.79 亿。普通家用电脑跑一两天能跑完。但前提是你确实记得"是这 12 个、一个不多一个不少"。开头那位朋友的问题就出在这——他不确定是哪 12 个。

误解二:助记词可以中英文混写

BIP39 的英文词表是行业事实标准,几乎所有主流钱包默认用它。BIP39 后来确实又出了简体中文、繁体中文、日文、法文、意大利文、韩文、捷克文、葡萄牙文、西班牙文等几种词表——但它们是独立的词表,互不兼容。也就是说,你不能把中文助记词里的几个词换成英文同义词;也不能用中文助记词去导入一个只支持英文词表的钱包。

更现实的建议是:除非你有特别的理由,否则一律用英文助记词。中文词表虽然存在,但绝大多数硬件钱包、绝大多数 dApp 的"导入助记词"输入框,都只接受英文。哪天你急着换设备,发现对面那款主流钱包不认你的中文 12 词,那种心情不太好受。

误解三:钱包名字不一样就互相不通

这条误解一半对一半错。错的一半:只要两款钱包都遵守 BIP39 + BIP44,理论上一组助记词可以在两边导入。事实上你能拿 MetaMask 的助记词去导 Trust Wallet,反过来也行——它们都是 EVM 系,派生路径一致。对的一半:派生路径不同的钱包之间,确实存在"导入了但看不到余额"的情况,前面那段实测已经说过。某些链(比如 Solana、Aptos、Sui)的钱包甚至用了完全不同的椭圆曲线(Ed25519 而不是 secp256k1),这种情况下助记词虽然能"导入",但生成的地址和原钱包不一样,余额自然也对不上。

所以记住一句话:助记词是"原料",钱包是"加工厂"。原料相同,但每家加工厂的配方可能略有差别——加工出来的成品(地址)不一定完全一样。

警示

请不要把任何真实的助记词输入任何"在线助记词检查工具"、"找回工具"、"派生路径计算器" —— 即便它看起来非常专业、即便它声称完全离线运行。所有真正的助记词验证都应该在断网的设备上、用开源工具完成。

真实案例:2023 年某个高 PR 排名的"BIP39 工具"网站,事后被发现会把用户输入的助记词通过看似无害的 telemetry 请求外发。受害人数不详——因为大多数人输入测试助记词时根本不会想到要抓包。如果你需要做派生路径排查,请把官方的 iancoleman/bip39 项目从 GitHub release 下载下来,断网之后在本地浏览器打开 HTML 文件使用。

如果丢了 / 泄露了

丢失:分清"完全丢失"和"部分残缺"

完全丢失——比如纸条烧了、设备摔了、记忆消失——结论是残酷的:链上没有"找回密码"按钮。任何声称能"恢复你忘记的助记词"的服务都是骗局,无一例外。这一点不用我多解释,逻辑上很清楚:如果存在一种方法能从空气里恢复你的助记词,那同样的方法也可以恢复任何人的——整个系统就完了。

部分残缺——比如你记得 10 个词、缺 2 个;或者记得全部词但忘了顺序——这种情况理论上可以暴力补全。前提是你得在断网环境下,用开源工具去试。如果你的资产价值远超你的耐心,可以考虑找信誉良好的私钥恢复服务(如 Wallet Recovery Services 一类老牌团队),但他们也会先问你能提供多少线索——线索越少,成功率越低。

泄露:动作要快、要彻底

这一节我们在另一篇专题里详细写过五步抢救流程,这里只点关键:助记词一旦泄露(哪怕你只是怀疑泄露),立刻假设它已经被全网知道。不要犹豫"也许只是我多疑",不要"等一会儿再说"——攻击者的扫链脚本和你的犹豫,比的就是分钟级的时间差。

具体流程见 《私钥泄露应急 · 五步抢救流程》,我们把"哪些链先转、转去哪种地址、留多少 gas、Approve 怎么清"都列成 checklist。这里只给一句最浓缩的建议:把所有还能动的资产,尽快转到一组全新的、从未在任何地方出现过的助记词控制的地址。不要省手续费,不要"先睡一觉明早处理"。

写在最后

关于私钥和助记词,我们写了五千多字,但所有这些字其实只想说三件事——

第一,它不是密码,它是身份。密码可以重置,身份不能。任何把它当成"再设一个就好"的钱包教程,都没理解这件事的本质。

第二,它的安全性来自数学,不来自隐藏。一个 256 位的随机数,写在纸上放进保险柜里,比存在任何"加密云盘"上都安全——因为前者的攻击面只有那个保险柜,后者的攻击面是整个互联网。

第三,行业标准(BIP39 / BIP32 / BIP44)是你最好的朋友。它们让你不必绑定任何一家钱包厂商——只要你拿着那 12 个或 24 个英文单词,任何主流钱包都能帮你把资产请回来。这种"用脚投票"的自由,是中心化金融体系里没有的东西。

开头那位朋友最后没找回他的币。便签上的污渍盖住了那一行,他凭记忆补错了。两年过去了,那笔资产至今还停在链上某个地址里——没人能动,也包括他自己。我每次想到这件事,都会去检查一下我自己的助记词备份在哪儿、几份、谁知道。这种检查很烦,每次只花两分钟,但它是这个行业唯一不能省的两分钟。

说明:本文所述技术细节均基于公开标准(BIP39 / BIP32 / BIP44)。如有疏漏或更新,欢迎邮件指出,我们会修订并在 勘误页 留下记录。文章内容仅供学习参考,不构成投资建议。涉及第三方钱包的实测结论仅代表测试当时(2024 年 11 月)软件版本下的行为,后续版本可能调整。