📑 本页目录(点开跳转)
20 · 区块链:密码学的一次大型组装
⏱ 22 分钟 | 🎁 不讲币价,只讲它用了哪些密码学
🎯 一句话
区块链没有发明任何新的密码学原语 —— 它是把哈希、Merkle 树、数字签名、工作量证明组装起来, 解决一个此前没解的问题:一群互不信任的人,怎么就"发生了什么"达成一致。
🧩 一、它到底解决了什么问题
传统做法:找一个大家都信的中心(银行)来记账
区块链: 没有中心,怎么办?
⭐ 核心难题 ——【双花】:
我把同一枚币同时发给 A 和 B,两笔交易都有我的合法签名。
密码学能证明【两笔都是我签的】,
但它【无法判断哪一笔在先】 💀
🔑 这就是关键洞察: 双花不是密码学问题,是"顺序共识"问题。 签名解决"谁说的",但解决不了"谁先说的" —— 后者需要一个全网都认可的全局顺序。
⛓️ 二、四块密码学积木
① 哈希链:让历史无法修改
交易…
它的哈希 H₋₁ = Hash(区块 N-1)
交易…
它的哈希 H₀ = Hash(区块 N)
交易…
它的哈希 H₁ = Hash(区块 N+1)
⭐ 改动任何一个历史区块 ⟹ 它的哈希变了 ⟹ 后面每一块的 prev 都对不上 ⟹ 必须重算【之后所有区块】。
🔗 这就是第 9 章抗第二原像性质的直接应用。
② Merkle 树:让轻节点也能验证
区块头里只放一个【Merkle 根】,而不是全部交易
⭐ 好处:证明"某笔交易在这个区块里"
只需要 log₂(n) 个哈希,而不是下载全部交易
1000 笔交易 → 只要 10 个哈希 ≈ 320 字节
🔗 第 12 章讲的包含性证明,这里是它最有名的应用(SPV 轻钱包)。
③ 数字签名:证明"这笔钱是我花的"
比特币:ECDSA(secp256k1)→ 2021 Taproot 后支持 Schnorr
以太坊:ECDSA(secp256k1)
地址 = 公钥的哈希(多一层哈希 → 抗量子缓冲 + 更短)
💀 回顾第 17 章的 k 值教训 —— Android 钱包因
SecureRandom缺陷导致 k 重复,私钥被算出、币被盗。 这是 ECDSA 在区块链上最真实的杀伤。
④ 工作量证明:给"顺序"标价
要求:找一个 nonce,使 Hash(区块头 ‖ nonce) < 目标值
⭐ 关键性质:
· 找到很难(要枚举天量次)
· 验证极快(算一次哈希) ← 不对称性是全部价值所在
· 难度可调(调目标值)
💡 PoW 真正的作用不是"防篡改",而是给"改写历史"标一个价:
想改写 k 个区块前的历史
⟹ 必须重做那 k 个区块的全部工作量
⟹ 而且要比诚实网络更快地追上
⟹ 需要控制 >50% 算力(51% 攻击)
🔑 所以区块链的安全性不是"数学上不可能",而是"经济上不划算" —— 这和前面所有章节都不同。它是一个经济安全模型,不是密码学安全模型。
🧱 三、一个区块长什么样
区块头(80 字节,比特币)
- prev_hash ← 前一块的哈希(链)
- merkle_root ← 本块所有交易的根
- 时间戳
- 难度目标 bits
- nonce ← 挖矿要找的那个数
⚠️ 为什么比特币用 SHA-256 两次(SHA-256d): 中本聪的保守设计,用来防长度扩展攻击(第 10 章)。 严格说这里并不需要,但多一层哈希几乎零成本,就留下了。
💥 四、密码学之外的攻击面
| 攻击 | 原理 | 属于什么问题 |
|---|---|---|
| 51% 攻击 | 控制多数算力 → 重组链、双花 | 经济 |
| 自私挖矿 | 藏块延迟发布获取超额收益 | 博弈 |
| 日蚀攻击 | 隔离一个节点的所有网络连接,喂它假链 | 网络 |
| 重入攻击(DAO 事件) | 智能合约在状态更新前回调外部合约 | ⭐ 程序 bug |
| 交易延展性 | 改签名不改语义 → 交易 ID 变 | ⭐ 密码学(第 17 章 SUF-CMA) |
| 私钥丢失/被盗 | 没有找回机制 | 密钥管理(第 19 章) |
🔑 一个诚实的观察: 区块链上最大的损失,几乎都不是密码学被破解造成的。 是智能合约 bug、私钥管理失误、交易所被黑、社工诈骗。 —— 这和整本教程反复出现的规律一致:密码学很少是最弱的一环。
🌱 五、PoS 与其他共识(简述)
| 共识 | 安全来源 | 特点 |
|---|---|---|
| PoW | 算力(外部成本) | 能耗高,最久经考验 |
| PoS | 质押的币(内部成本) | ⭐ 以太坊 2022 年切换,能耗降 99.9% |
| BFT 类 | 已知验证者集合 + 投票 | 快、终局性强,但要求成员已知 |
💡 PoS 的一个独有难题 —— "无利害关系"(Nothing at Stake): PoW 里在两条分叉上同时挖要分摊算力(有代价); PoS 里同时在两条链上投票几乎不花钱 —— 所以必须引入罚没(slashing):双签会被没收质押金。 用经济惩罚补上物理成本的缺失。
🔗 和站内其他章的关系
| 相关的地方 | 和这一章的关系 |
|---|---|
| 第 9 章抗第二原像 | 哈希链不可篡改的根据 |
| 第 10 章长度扩展 | SHA-256d 的由来 |
| 第 12 章 Merkle 树 | 轻节点验证 / SPV |
| 第 16 章 secp256k1 | 比特币和以太坊的曲线 |
| 第 17 章 SUF-CMA、Schnorr | 交易延展性、Taproot 多签聚合 |
| 第 19 章 | 助记词、冷钱包、门限签名 |
| AI 基础设施 · 可观测性与成本 | PoW 的"安全预算"说到底是一张电费账单——用那边的成本模型算一遍,「51% 攻击有多贵」才有量级感 ⭐ |
| 模型上线之后 · 合规审计与模型卡 | ⚠️ 先去那边看清你真正的需求:多数人想要的只是「不可篡改的审计记录」,签名 + append-only + 定期公证就够了,不需要共识层 |
✅ 检查点
- 区块链发明了新的密码学原语吗?它组装了哪四块?
- 双花为什么不是密码学问题?
- 哈希链靠哈希的什么性质防篡改?
- Merkle 树在区块链里解决了什么实际问题?省了多少?
- PoW 的关键不对称性是什么?它真正的作用是什么?
- 为什么说区块链是"经济安全模型"而不是密码学安全模型?
- 比特币为什么用 SHA-256 两次?
- 区块链上的实际损失主要来自哪里?
- PoS 的"无利害关系"问题是什么?怎么解决?
👀 答案
- 没有发明任何新原语。组装了:哈希链、Merkle 树、数字签名、工作量证明。
- 因为两笔交易都有合法签名,密码学能证明"都是我签的",但无法判断哪一笔在先。这是顺序共识问题,不是密码学问题。
- 抗第二原像。改动历史块会让它的哈希变化,导致后面每一块的 prev 对不上,必须重算之后所有区块。
- 轻节点验证(SPV):证明某笔交易在区块里只需 log₂(n) 个哈希。1000 笔交易只要 10 个哈希 ≈ 320 字节,不用下载全部交易。
- 找到很难、验证极快。真正作用不是"防篡改",而是给改写历史标价——重写 k 个区块要重做全部工作量并追上诚实网络,即需要 >50% 算力。
- 因为它的安全性是"经济上不划算"而非"数学上不可能"。前面所有章节的安全性都来自计算困难问题,这一章来自成本核算。
- 中本聪的保守设计,防长度扩展攻击。严格说这里不需要,但多一层哈希几乎零成本。
- 几乎都不是密码学被破解:智能合约 bug(如 DAO 重入)、私钥管理失误、交易所被黑、社工诈骗。印证"密码学很少是最弱的一环"。
- PoW 里在两条分叉同时挖要分摊算力(有代价),PoS 里同时在两条链投票几乎不花钱。解决办法是罚没(slashing):双签没收质押金,用经济惩罚补上物理成本的缺失。
🛑 可以停在这里
⚡ 走神救援
⭐区块链没发明任何新密码学原语,只是组装了四块:哈希链 + Merkle 树 + 数字签名 + PoW。⭐核心难题是双花,而它不是密码学问题——两笔交易都有合法签名,密码学能证明"都是我签的"却无法判断谁在先,这是顺序共识问题。①哈希链靠第 9 章抗第二原像:改一个历史块 → 后面每块 prev 都对不上 → 必须重算之后所有块。②Merkle 树(第 12 章)让轻节点只用 log₂(n) 个哈希验证包含性(1000 笔交易只要 10 个哈希 ≈320 字节)。③签名:secp256k1 上的 ECDSA,💀 Android 钱包 k 重复导致私钥被算出。④PoW 的关键是找到难、验证快的不对称性;⭐它真正的作用不是防篡改,而是给"改写历史"标价(重写 k 块要重做全部工作量并追上诚实网络 → 需 >50% 算力)。🔑 所以区块链是经济安全模型,不是密码学安全模型——"经济上不划算"而非"数学上不可能",这和前面所有章节都不同。比特币用 SHA-256 两次是防长度扩展的保守设计(第 10 章)。⚠️攻击面大多在密码学之外:51%/自私挖矿(经济博弈)、日蚀(网络)、DAO 重入(合约 bug)、交易延展性(第 17 章 SUF-CMA)。🔑 区块链上的实际损失几乎都不是密码学被破解——是合约 bug、私钥管理、交易所被黑、诈骗,再次印证密码学很少是最弱的一环。PoS 能耗降 99.9%,但有 ⭐"无利害关系"问题(同时在两条链投票几乎不花钱),靠罚没 slashing 用经济惩罚补上物理成本。
下一节 👉 21-零知识证明.md ⭐