教程区块链区块链技术ch044.1 比特币白皮书精读:一个点对点的电子现金系统

本页目录

在掌握哈希函数、数字签名与椭圆曲线密码学等"工具"之后,我们终于迎来了它们的第一次大规模工程实践——比特币。中本聪用仅 9 页的白皮书,构建了一个不依赖任何中心化中介即可运转的电子现金网络。本节精读白皮书的核心思想。


4.1.1 设计愿景与核心挑战

传统的电子支付建立在"基于信任的模型(trust-based model)"之上:当你用信用卡向朋友转账 100 元,银行作为可信中介验证你账户有足够余额,并防止你将同一笔钱同时转给两个人。

这种双重支付(Double-Spending)问题的本质是数字信息的可复制性——一串电子比特可以被无限制复制,而现金的物理唯一性天然避免了这一点。

中本聪在白皮书中提出的命题极其简洁:如何在无需银行的情况下,让电子支付像现金一样不可双花? 他的答案不是更先进的加密算法,而是一种全新的系统架构——用公开广播、时间戳、经济激励和密码学共同编织出一条不可篡改的链式账本。

flowchart LR
    A[传统银行] -->|信任中介| B[防止双花验证]
    C[比特币网络] -->|公开广播+PoW| D[全网共识确认]
    style A fill:#fca5a5
    style C fill:#86efac

核心矛盾拆解:

  • 信息互联网(复制成本低)→ 无法直接承载价值
  • 价值互联网(不可双花、确权转移)→ 需要新的信任机制
  • 关键命题:如何在互不信任的各方之间,不通过中心化中介,实现价值的安全转移与一致记账

4.1.2 核心解决思路:时间戳服务器 + 工作量证明 + 最长链

比特币白皮书提出的三大支柱:

  1. 时间戳服务器(Timestamp Server):将所有已发生的交易数字指纹(Hash)打包进一个区块,并对区块头盖上时间戳。每个区块的时间戳都包含前一个区块的哈希,形成一条链条。
  1. 工作量证明(Proof of Work):让制造新区块变得昂贵——只有付出真实计算成本的人才能获得记账权。这使攻击者"重写历史"的成本随时间线性增长。
  1. 最长链原则(Longest Chain Rule):当网络出现分叉时,节点始终选择工作量证明累计最多的那条链。这确保全网最终收敛到同一个账本。
flowchart TD
    B0[区块 0<br/>创世区块] -->|PrevHash: 0| B1[区块 1]
    B1 -->|PrevHash: H1| B2[区块 2]
    B2 -->|PrevHash: H2| B3[区块 3]
    B3 -->|PrevHash: H3| B4[区块 4]
    B1 -.->|分叉| C2[区块 2'] 
    C2 -.->|算力较少被抛弃| C3[区块 3']

时间戳链的核心价值:

设第 nn 个区块的哈希为 HnH_n,则链式约束为:

Hn=SHA256d(Headern)其中Headern包含 Hn1H_n = \text{SHA256d}(\text{Header}_n) \quad \text{其中} \quad \text{Header}_n \text{包含 } H_{n-1}

要篡改区块 kk,攻击者必须依次重算 k,k+1,,nk, k+1, \ldots, n 的所有工作量证明——这就是"篡改成本随时间线性增长"的数学本质。

4.1.3 最长链的安全分析:追赶概率

中本聪在论文第 11 节给出了一个著名结论:如果诚实节点控制多数算力,攻击者追上最长链的概率随确认数指数衰减

qq 为攻击者算力占比,p=1qp = 1-q。某诚实区块已领先 zz 个区块时,攻击者追上(aggression)的概率为:

P(z)=1k=0zλkeλk!(1(qp)zk)P(z) = 1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \cdot \left(1 - \left(\frac{q}{p}\right)^{z-k}\right)

q>pq > p(攻击者算力过半)时,上述概率趋于 1——这正是"51% 攻击"的原理。

xychart-beta
    title "攻击者追赶概率 vs 确认数 (q=0.3)"
    x-axis [0, 1, 2, 3, 4, 5, 6]
    y-axis "追赶概率" 0 --> 1
    line [1, 0.422, 0.175, 0.054, 0.031, 0.011, 0.004]

4.1.4 隐私模型:伪匿名而非绝对匿名

比特币并不提供绝对匿名。每个地址(由公钥哈希生成)是一个伪匿名标识(Pseudonym)

  • 观察者可把同一地址产生的所有交易关联起来
  • 通过交易图分析、IP 关联、中心化交易所 KYC 数据,可实现去匿名化(De-anonymization)
  • 真正的隐私需要额外工具(混币、隐私币种、zk 技术,见第 10 章)
sequenceDiagram
    participant Alice
    participant Network
    participant Bob
    participant Analyst
    Alice->>Network: 交易: addr_A → addr_B (金额 X)
    Network->>Bob: 广播并确认
    Analyst->>Network: 分析交易图
    Analyst->>Analyst: 聚类 addr_A 的所有交易
    Note over Analyst: 通过地址聚合 + 链外信息 → 身份推测

4.1.5 激励设计与货币政策

矿工挖出区块后获得的奖励由两部分构成:协议发行的区块奖励(Block Reward)和交易者自愿支付的交易手续费(Transaction Fee)。白皮书设计了一个总量收敛的发行曲线:初始奖励为 50 BTC,每产出 21 万个区块(约 4 年)减半一次。

R(n)=50×2n210000 (BTC per block)R(n) = 50 \times 2^{-\left\lfloor \frac{n}{210000} \right\rfloor} \text{ (BTC per block)}

总供应量收敛于:

i=050×2i×210000=2100×104 BTC\sum_{i=0}^{\infty} 50 \times 2^{-i} \times 210000 = 2100 \times 10^4 \text{ BTC}

随着区块奖励趋于零,手续费将成为矿工收入的主要来源,白皮书以此收尾:"一旦预定数量的硬币进入流通,激励机制就可以完全由交易费来支撑,从而完全免受通货膨胀的影响。"

flowchart LR
    subgraph 区块奖励
        R1[50 BTC<br/>2009-2012]
        R2[25 BTC<br/>2012-2016]
        R3[12.5 BTC<br/>2016-2020]
        R4[6.25 BTC<br/>2020-2024]
        R5[3.125 BTC<br/>2024-2028]
    end
    R1 --> R2 --> R3 --> R4 --> R5 --> R6[...趋近于0]

4.1.6 TypeScript 从零实现:PoW 难度追赶概率模拟

下面用 TypeScript 从零实现中本聪追赶概率的原型,纯语言内置(BigInt 处理 256 位整数),无任何外部依赖:

typescript
/**
 * 中本聪追赶概率模拟(白皮书第11节)
 * 仅使用语言内置,纯从零实现
 */

/** 计算 x 的 n 次幂 */
function powInt(x: number, n: number): number {
  let r = 1;
  for (let i = 0; i < n; i++) r *= x;
  return r;
}

/** 阶乘 */
function factorial(n: number): number {
  let r = 1;
  for (let i = 2; i <= n; i++) r *= i;
  return r;
}

/** 泊松分布概率质量函数 P(X=k) = λ^k e^{-λ} / k! */
function poisson(k: number, lambda: number): number {
  return (Math.pow(lambda, k) * Math.exp(-lambda)) / factorial(k);
}

/**
 * 攻击者追上 z 个区块的概率(Nakamoto 白皮书第 11 节)
 * P = 1 - Σ_{k=0}^{z} [ e^{-λ} λ^k / k! · (1 - (q/p)^{z-k}) ]
 */
function attackerProbability(q: number, z: number): number {
  const p = 1 - q;
  if (q >= 0.5) return 1.0; // 攻击者算力过半,追及概率趋近 1
  const lambda = z * (q / p);

  let sum = 1.0;
  for (let k = 0; k <= z; k++) {
    const prob = poisson(k, lambda);
    const geo = Math.pow(q / p, z - k);
    sum -= prob * (1 - geo);
  }
  return sum;
}

// 演示:q=0.3 时不同确认数的追及概率
const q = 0.3;
console.log("攻击者算力 q =", q);
for (let z = 0; z <= 6; z++) {
  const prob = attackerProbability(q, z);
  console.log(`  领先 z区块:追及概率={z} 区块: 追及概率 ={(prob * 100).toFixed(3)}%`);
}

运行结果:

text
攻击者算力 q = 0.3
  领先 0 区块: 追及概率 = 100.000%
  领先 1 区块: 追及概率 = 62.775%
  领先 2 区块: 追及概率 = 44.572%
  领先 3 区块: 追及概率 = 32.458%
  领先 4 区块: 追及概率 = 23.913%
  领先 5 区块: 追及概率 = 17.735%
  领先 6 区块: 追及概率 = 13.211%

可以看到,随着确认数 z 增加,攻击者追及概率指数级下降。这就是为什么交易所通常要求 6 个确认(约 1 小时)才视为交易最终有效。

本节要点

  • 双重支付问题是数字货币必须解决的首要问题;比特币用去中心化的全网共识替代了银行这一单一信任中介。
  • 三大支柱——时间戳服务器、工作量证明、最长链原则——共同构成"去信任化的一致记账"。
  • 追及概率随确认数指数衰减,是比特币安全性的数学基石。
  • 2100 万总量上限是代码中写死的"社会契约",不可通过软分叉修改。
  • 伪匿名不是绝对匿名,链上分析可部分去匿名化。

评论

0

评论加载中…

发表评论

0/2000