← 资讯与洞察

不需要加密的账本:比特币的密码学用在哪、不用在哪

比特币链上几乎没有东西被加密过:金额、地址、时间全部公开。它真正依赖密码学的地方只有两处——证明「这笔钱由谁授权花」,以及让「改写历史」变得昂贵。这篇论证四件事:为什么是椭圆曲线而不是 RSA、为什么地址是公钥的哈希而不是公钥本身、签名为什么必须不可延展、以及 12 个助记词是怎么从 128 bit 熵算出来的。最后给出五条会让这套密码学失效的条件。

「比特币用的什么加密」这个问题,答案会让很多人意外:链上几乎没有任何东西被加密过。每一笔交易的金额、地址、时间都公开可查,任何人都能下载全量账本。比特币真正依赖密码学的地方只有两件事——证明「这笔钱是谁授权花的」,以及让「改写历史」变成一件要花真金白银的事。这篇按论证顺序讲清楚这两件事各自用了什么、为什么只能这么选,以及它在哪些条件下会失效。

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-3072secp256k1(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 计算。

ECDSA(2009–2021 主流) Schnorr / BIP340(2021-11-14 起) 签名结构:DER 编码,长度可变 r s DER 头 + 长度字节 整段 70–72 B 长度随数值变 把 s 换成 n − s:仍是合法签名 r n − s 验证通过,但字节变了 后果 交易 ID 跟着变 第三方无需私钥即可换 ID 重播 → low-S 规则 + SegWit 分离 txid 与签名 签名结构:固定 64 字节 R(32 B) s(32 B) 无长度前缀,s 按曲线阶唯一规约 公钥约定 恒取偶 y 坐标 → 公钥固定 32 字节 后果 一个签名只有一种写法 延展性从结构上消失;同区块内可批量验证 Schnorr 还支持多签密钥聚合成一个公钥 延展性不是"能不能偷钱"的问题,而是"账本能不能被第三方改动而不影响有效性"的问题。
图 1 ECDSA 的 s 可被换成 n − s 而仍然有效,导致交易 ID 可变;BIP340 用固定 64 字节与偶 y 约定消掉了这个自由度。Taproot 于 2021-11-14 在区块 709,632 激活。

2021 年 11 月的 Taproot 升级把签名换成了 Schnorr(BIP340)。它带来三件具体的事:签名固定 64 字节、公钥固定 32 字节(坐标 y 恒取偶值,消掉歧义)、支持把多个公钥与签名聚合成一个(多签在链上看起来像单签,隐私更好、体积更小)。至此,"签名写法唯一"从一条标准性规则变成了结构上的事实。

06论证四:哈希在账本里干的不是「加密」,是「压缩成承诺」

如果哈希只是"把数据搅乱",它在这个系统里毫无意义——因为没人需要隐藏交易。哈希在这里的作用是承诺:把任意大的内容压成一个固定长度的指纹,让"内容有没有被改过"变成"指纹是否一致"。

结构上是这样的:一个区块里可能有几千笔交易,两两配对做哈希、再配对、再哈希,最后一层合并成一个 32 字节的 Merkle 根;这个根被写进区块头。区块头本身只有 80 字节(版本、前一个区块的哈希、Merkle 根、时间戳、难度目标、nonce)。于是"整个账本的历史"被串成一条 80 字节 × 区块数的链,任何一笔历史交易的改动都会让对应区块的 Merkle 根变、头哈希变、后续所有区块的"前块哈希"对不上。

这也解释了轻钱包为什么能工作:它不下载全部交易,只拿区块头,再向全节点要一条 Merkle 路径(长度是 log₂(交易数),几千笔也就十几个 32 字节哈希),就能验证"这笔交易确实在这个区块里"。信任被压缩成了对数级的传输量。

① 交易 → 哈希 → 两两合并 tx1 tx2 tx3 tx4 H(tx1‖tx2) H(tx3‖tx4) Merkle 根(32 B) ② 区块头(80 字节) 版本 4|前块哈希 32|根 32 时间 4|目标 4|nonce 4 = 80 B ③ 工作量证明:找 nonce,使双 SHA-256 结果小于目标 这是成本函数,不是加密 哈希无密钥、结果公开,只要求"算得贵" ④ 结果:改一笔旧交易的成本 根变 → 本块头哈希变 → 后续每块的"前块哈希"全部对不上 → 要追平现有链,必须重算并超过全网算力。 三层承诺叠在一起 内容 → 交易 ID(哈希);交易集合 → Merkle 根; 区块历史 → 前块哈希链。任何一层被改,上层全部失效。
图 2 Merkle 树把成千上万笔交易压成 32 字节的根,工作量证明再把这个根与真实算力成本绑在一起。哈希负责"改动必然被发现",PoW 负责"发现之后也没法悄悄替换"。

这里要说清一个常见混淆: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 对哈希仅有平方级加速,属公开结论;具体"需要多少量子比特、需要多久"的量级估算在学术界与第三方报告中差异很大,且均以容错量子计算机为前提,本文不作为定论引用。

讨论

加载中…

匿名即可发言,昵称留空会显示为“匿名访客”。评论按楼层顺序排列,每条都可以回复;站长会把有结论的回复标为「已采纳」。不支持链接与推广内容。在微信里打开本文可选用微信身份,显示你的头像与昵称。

0 / 400 字 · 每 IP 每小时 4 条

正在读取评论…