「比特币用的什么加密」这个问题,答案会让很多人意外:链上几乎没有任何东西被加密过。每一笔交易的金额、地址、时间都公开可查,任何人都能下载全量账本。比特币真正依赖密码学的地方只有两件事——证明「这笔钱是谁授权花的」,以及让「改写历史」变成一件要花真金白银的事。这篇按论证顺序讲清楚这两件事各自用了什么、为什么只能这么选,以及它在哪些条件下会失效。
01先把问题问对:这里没有「加密」,只有签名与哈希
"加密"这个词在比特币的讨论里被用得很松。严格说,加密(encryption)是把可读内容变成不可读内容,需要一把密钥才能还原;而比特币链上存放的是签名与哈希——前者证明授权,后者承诺内容。两者都不隐藏原始数据:交易的输入输出、金额、脚本全部明文写在区块里。
所以本文要论证的命题是:
比特币的安全性不来自"把数据藏起来",而来自"伪造一次授权在计算上不可行"和"重写一段历史在经济上不划算"。
前一句由椭圆曲线签名负责,后一句由哈希与工作量证明负责;两者都不保护隐私,也都不保护你的私钥把这条命题立住,后面几个常见误解会自然消解:为什么"量子计算能破解比特币"这句话只对了一半、为什么地址重复使用是隐私问题而不是安全问题、为什么丢了助记词没有任何"找回"的技术路径。
02三个原语,各干一件事
比特币的密码学组件少得惊人,一共只有三类,而且分工互不重叠。
| 原语 | 在系统里做什么 | 它不做什么 |
|---|---|---|
| SHA-256(双哈希) | 交易 ID、区块头哈希、Merkle 树、工作量证明的目标比较 | 不隐藏交易内容,也不参与授权判断 |
| RIPEMD-160 | 把公钥压成 20 字节,缩短地址长度 | 不提供额外的抗碰撞强度(160 bit 已够用,但小于 256 bit) |
| secp256k1 曲线签名(ECDSA / Schnorr) | 证明"这笔输出由私钥持有人授权花费" | 不加密金额,不做身份认证,也不防地址重用 |
三个原语里,只有一个是有"密钥"概念的(签名),另外两个是无密钥的公开函数。这一点决定了比特币的威胁模型:能被量子计算威胁的只有签名那一条,哈希部分受影响的程度要小得多——Shor 算法解的是离散对数与整数分解,而 Grover 对哈希只是把暴力搜索的代价开平方(256 bit 的搜索空间降到等效 128 bit,仍然是天文数字)。
03论证一:为什么必须是椭圆曲线,不是 RSA
比特币 2009 年上线时,RSA 是公钥密码的主流。它没选 RSA,理由是工程量与账本体积,而且这些理由在十六年后依然成立。
| 维度 | RSA-3072 | secp256k1(256 bit) | 对链上数据的影响 |
|---|---|---|---|
| 公钥长度 | 约 384 字节 | 压缩后 33 字节 | 每个输入都要带公钥,差一个数量级 |
| 签名长度 | 约 384 字节 | DER 编码 70–72 字节;Schnorr 固定 64 字节 | 直接决定每笔交易的手续费基数 |
| 验证开销 | 大整数模幂,较重 | 曲线点乘/点加,轻得多 | 影响全节点同步与区块验证时间 |
| 安全等级 | 约 128 bit | 约 128 bit | 同级安全,体积小 5–10 倍 |
关键在于"安全等级相同、体积差一个数量级"。256 bit 的椭圆曲线与 3072 bit 的 RSA 大致对应同一个 128 bit 安全强度,但公钥与签名都小得多。账本要被全世界成千上万个节点各存一份、每笔交易永久留在链上,任何"每笔多几百字节"的选择都会被乘以交易总量——这不是偏好问题,是存储与带宽的硬约束。
还有第二个理由:签名要能被脚本反复验证。比特币的交易验证是在共识规则里跑的,全节点要为每个输入验一次签名。椭圆曲线签名的验证成本远低于同等强度的 RSA 模幂运算,这让"每个节点独立验证全部历史"这件事在普通硬件上仍然可行——这是比特币不需要信任任何第三方的前提。
04论证二:为什么地址是「公钥的哈希」,而不是公钥本身
直觉上,收款地址直接给公钥最简单:对方拿公钥验签就行。比特币没有这么做,而是对公钥做 SHA-256 再 RIPEMD-160,取前 20 字节,加上版本字节与 4 字节校验,做 Base58Check 编码(新地址格式用 bech32/bech32m,校验算法更强、大小写不敏感)。三条理由逐条成立:
理由一:长度。压缩公钥 33 字节,编码成地址后是 26–35 个字符的 Base58 串;如果不做哈希,地址会长得多,二维码容量、抄写错误率、界面显示都会变差。20 字节哈希让地址稳定在可抄写的长度,同时 4 字节校验能挡掉绝大多数手抄错误——写错一个字符,解码时校验基本必然失败。
理由二:把公钥推迟到花费时才公开。这是最容易被忽略的一层设计。以 P2PKH 为例,地址里只有公钥的哈希;在你第一次从这个地址花钱之前,公钥本身从未出现在链上。这意味着攻击者手上只有一个 20 字节的哈希摘要,反推公钥需要额外一次原像攻击。对量子攻击者而言,这一点尤其重要:Shor 算法需要"公钥"作为输入,只有哈希是没法直接下手的。
理由三:脚本层的可组合性。地址承载的是"锁定脚本",而不是"某个公钥"。P2SH 让地址代表一段脚本的哈希(多签、时间锁都靠它),Taproot 又把它推进到"一个公钥或一棵脚本树"的承诺。哈希在这里的身份是承诺——先把规则固定下来,等到花费时再揭示具体分支。
代价也要写清楚:哈希不会让地址变得"更安全",只是把风险从"公钥暴露"挪到了"首次花费后的公钥暴露"。一旦你从一个地址花过钱,公钥就永久留在链上,之后这个地址的抗量子缓冲就消失了。这就是"地址重用"在技术上真正的问题所在——它先把隐私削弱(所有收支被聚成一个人的画像),再把公钥提前暴露。
05论证三:签名为什么必须"不可延展"
比特币最早的签名方案是 ECDSA。它有一个在别的场景里无所谓、在账本里必须修掉的毛病:同一个签名可以被"改一下"仍然有效。
ECDSA 的签名是一对整数 (r, s)。在 secp256k1 上,对同一个 (r, s),把 s 换成曲线阶减去 s(记作 n − s),得到的仍是能通过验证的合法签名。两个签名都真、都有效,但字节不同——而交易 ID 是对交易内容做哈希得到的,签名字节一变,交易 ID 就变。这意味着第三方可以在不掌握私钥的情况下,把一个已广播的交易"换一个 ID"再广播一次。
修复方式是两条:其一,在标准性规则里要求 s 取较小的一半(通常称 low-S,来源于 BIP-62 提出的思路,后被 Bitcoin Core 作为标准性规则实施);其二,在共识层把交易 ID 与签名数据分离,这就是 2017 年的隔离见证(SegWit)——签名移到 witness 里,不再参与 txid 计算。
2021 年 11 月的 Taproot 升级把签名换成了 Schnorr(BIP340)。它带来三件具体的事:签名固定 64 字节、公钥固定 32 字节(坐标 y 恒取偶值,消掉歧义)、支持把多个公钥与签名聚合成一个(多签在链上看起来像单签,隐私更好、体积更小)。至此,"签名写法唯一"从一条标准性规则变成了结构上的事实。
06论证四:哈希在账本里干的不是「加密」,是「压缩成承诺」
如果哈希只是"把数据搅乱",它在这个系统里毫无意义——因为没人需要隐藏交易。哈希在这里的作用是承诺:把任意大的内容压成一个固定长度的指纹,让"内容有没有被改过"变成"指纹是否一致"。
结构上是这样的:一个区块里可能有几千笔交易,两两配对做哈希、再配对、再哈希,最后一层合并成一个 32 字节的 Merkle 根;这个根被写进区块头。区块头本身只有 80 字节(版本、前一个区块的哈希、Merkle 根、时间戳、难度目标、nonce)。于是"整个账本的历史"被串成一条 80 字节 × 区块数的链,任何一笔历史交易的改动都会让对应区块的 Merkle 根变、头哈希变、后续所有区块的"前块哈希"对不上。
这也解释了轻钱包为什么能工作:它不下载全部交易,只拿区块头,再向全节点要一条 Merkle 路径(长度是 log₂(交易数),几千笔也就十几个 32 字节哈希),就能验证"这笔交易确实在这个区块里"。信任被压缩成了对数级的传输量。
这里要说清一个常见混淆:PoW 的安全性不是"256 bit 的强度",而是"攻击成本与全网算力的比值"。哈希函数本身没有密钥、结果完全公开,任何人都能算;它唯一的"魔法"是让找到一个合格 nonce 的工作量与目标难度成正比。所以 PoW 的抗攻击性是一个经济量,不是密码学量——这决定了它无法被"换个更强的算法"来解决,只能靠算力分布来维持。
07论证五:256 bit 的熵,怎么变成 12 个能抄在纸上的词
椭圆曲线的私钥是一个 256 bit 的整数,直接写出来是 64 个十六进制字符——手抄必错。BIP39 把它变成人能读、能校对、能抄写的形式,过程很朴素:
取 128 bit 随机熵 → 对熵做一次 SHA-256,取哈希前 4 bit 作为校验和(校验位长度 = 熵长度 / 32)→ 拼成 132 bit → 按 每 11 bit 一组切成 12 组 → 每组取值 0–2047,去一张 2048 词的表里查词。于是得到 12 个单词。
为什么是 128 bit 而不是 256 bit?因为暴力枚举 2¹²⁸ 个候选在任何可预见的技术条件下都不可行,而这 4 bit 校验已经足以让"抄错一个词"在恢复时被立刻发现(12 词里错 1 个,校验通过的概率只有 1/16)。若要更高强度,BIP39 也支持 256 bit 熵对应 24 词——代价是抄写长度翻倍、出错概率上升。这是一个明确的工程取舍:把"密钥不可猜"换成"密钥可被正确保存"。
种子之上还有 BIP32 的分层派生:一个种子按路径派生出无限多个子密钥对,每个地址用一条。派生分"硬化"与"非硬化"两种,硬化派生的子私钥即使泄露,也无法反推出父私钥——这是钱包能在"只带子密钥的机器上签名、母种子留在冷端"的技术基础。
而所有这一切的代价集中在一个点上:种子就是全部资产。它没有"重置密码"这条路,也没有"客服核身"。技术给出的方案只有一个——多份离线备份、分散存放、任何情况下不输入到联网设备。
08反过来论证:这套密码学在什么条件下失效
把上面的论证反向读一遍,失效条件是清楚的,而且分属不同层面。
五种失效条件
- 私钥或助记词丢失。没有中心化机构、没有找回流程。密码学在这里只做验证,不做恢复——丢的那一刻,资产在数学上仍属于那个地址,但再没有人能授权花它。
- 私钥或助记词泄露。签名是"谁有私钥谁能花",没有第二因子。泄露途径通常与密码学无关:截图、云笔记、假钱包、输入法云同步、被人拍下纸片。
- 地址重用。这不是"钱会被偷",而是两层损失:链上行为被聚合成一个人的完整画像;公钥在你第一次花费后永久暴露,原本"公钥未公开"的那层缓冲随之消失。
- 足够强的量子计算机。Shor 算法能由公钥反推私钥,威胁的正是签名这一环。学术论文给出的门槛估算(例如约千级逻辑量子比特即可解椭圆曲线离散对数)与工程现实之间仍有巨大距离,且需要容错量子计算;同时,公钥已暴露的旧地址风险最高,从未花费过的地址风险低得多。相关抗量子地址方案仍在提案与讨论阶段,不是既成事实。
- 把币放在别人那里。交易所账户里的"余额"是对方数据库里的一行记账,真正的私钥在对方手上。此时保护你资产的是对方的运维与合规,不是这套密码学。
可以看到,五条里只有一条(量子)属于"算法可能被攻破",其余四条都是密钥生命周期与使用方式的问题——这与我们上一篇讨论视频加密时的结论是同一个结构:算法决定下限,密钥怎么产生、怎么保存、谁能拿到,决定上限。
09可复核:五个问题辨别「比特币加密」类说法
| 问题 | 准确回答 | 可疑信号 |
|---|---|---|
| 1. 比特币"加密"了交易吗 | 没有。链上数据公开,只有签名与哈希 | 「区块链把数据加密后分布式存储」 |
| 2. 用的是哪种签名 | secp256k1 上的 ECDSA;2021 年 11 月起支持 Schnorr(BIP340) | 「SHA-256 加密」把哈希当加密 |
| 3. 地址是公钥吗 | 不是,是公钥的哈希;花费时才可能暴露公钥 | 「地址就是公钥,所以量子能直接破解所有地址」 |
| 4. 量子威胁影响哪一环 | 只影响签名(Shor),哈希受影响小得多(Grover 仅平方级削弱) | 「量子一出来比特币就归零」 |
| 5. 找回私钥有技术方案吗 | 没有。只能靠事前备份 | 「专业团队可恢复丢失的助记词」 |
10结论:两条路线,差在"要不要藏内容"
把比特币这套和我们自己的产权保护放在一起看,会发现两者的算法选择之所以完全不同,根源不在技术偏好,而在资产形态:
比特币要保护的是"一笔公开账目上的支配权",账目必须让所有人可验证,所以它不能加密内容,只能用签名证明授权、用哈希保证不可篡改、用 PoW 抬高改写成本。它的密钥来自随机熵,只属于持有人,与任何设备无关——因此换台电脑照样能花,只要你还记得那 12 个词。
课程视频要保护的是"一份内容本体",这份内容一旦被读出就等于失去价值,所以它必须加密,并且要让"读出来"这件事只在一台被授权的机器上发生。它的密钥由机器码派生,因此与设备绑定、换机即失效——代价是我们上一篇写清楚的那条:机器码外流等于密钥外流。
一边是"公开账本 + 签名",一边是"密文内容 + 派生密钥"。两者都不承诺"绝对安全",都只在明确的威胁模型里成立。看清这一点,比记住任何一个算法的名字都有用。
本文依据
签名与地址参数取自比特币改进提案原文:BIP340(64 字节 Schnorr 签名、32 字节公钥、偶 y 约定)、BIP341(Taproot 花费规则)、BIP39(熵长度 128/160/192/224/256 bit、校验位 = 熵/32、11 bit 一词对应 2048 词表)、BIP32(分层确定性派生与硬化派生)。Taproot 主网激活高度 709,632、日期 2021-11-14,见 Bitcoin Core 0.21.1 发布说明与区块浏览器记录。
ECDSA 签名在 DER 编码下长度为可变(最多 72 字节),(r, s) 与 (r, n − s) 同时有效,属算法性质;low-S 作为标准性规则与 SegWit 将签名移出 txid 计算,是后续的两层修复。
量子威胁部分:Shor 算法可解椭圆曲线离散对数、Grover 对哈希仅有平方级加速,属公开结论;具体"需要多少量子比特、需要多久"的量级估算在学术界与第三方报告中差异很大,且均以容错量子计算机为前提,本文不作为定论引用。