引入

如今,网络支付已经成为人们日常生活中最常用的支付方式之一。无论是微信,还是支付宝,我们的财产都存放在其公司的银行账户中集中保管。那么,如何在没有银行或任何中央权威机构的情况下,实现点对点的电子支付呢?

2008年,一个名为中本聪的个人或团队发布了一篇9页的论文《比特币:一种点对点的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System)来解决这个问题。

区块链简介

区块链(blockchain)是借由密码学与共识机制等技术建立与存储庞大交易资料链的点对点网络系统。

目前区块链技术最大的应用是加密货币,例如比特币的发明。因为支付的本质是“将账户A中减少的金额增加到账户B中”。如果人们有一本公共账簿,记录了所有的账户至今为止的所有交易,那么对于任何一个账户,人们都可以计算出它当前拥有的金额数量。而公共区块链(公有链)恰恰是用于实现这个目的的公共账簿。在比特币体系中,比特币地址相当于账户,比特币数量相当于金额。

比特币的核心技术

交易的本质

在比特币系统中,“币”的本质是一系列数字签名(交易链)的所有权转移。

当A要把币转给B时,A需要:

  1. 指定一个“输入”(即证明这笔钱确实是A之前收到的那笔钱)。
  2. 用自己的 私钥 对这笔交易进行 数字签名 ,证明这笔钱的合法拥有者是A。
  3. 指定一个“输出”(即B的 公钥 地址),这样将来只有B能用自己的私钥来花费这笔钱。

这笔交易会被 广播 到整个比特币网络中的所有节点(计算机)。

时间戳服务器

所有的计算机文件都可以被复制,那么,如何让数字货币不被复制从而防止双重支付?

为了防止双重支付,系统需要一个机制来证明一笔交易的发生时间。

  • 网络中的节点会收集新发生的交易,并将它们打包成一个“区块”(Block)。
  • 这个区块上会盖上一个 时间戳(Timestamp) ,证明这个区块及其包含的交易在某个时间点之前就已经存在了。
  • 每个新的区块都会包含前一个区块的哈希值(Hash),把它们像链条一样链接起来,形成一个“区块链”(Block Chain)。
  • 这个“链”就是所有人都共享和验证的 公共账本

工作量证明

仅仅是链接区块还不够,还需要一个机制来保证这个链 不容易被伪造和修改 。这就是“工作量证明”,也叫“挖矿”。

  • 矿工(网络节点)想要创建一个新的区块并将其添加到区块链上,就必须解决一个 极难的计算问题 (即找到一个特殊的数字,使得新的区块加上这个数字后,计算出来的哈希值满足特定的要求,比如前面有许多个零)。
  • 难度设计:这个计算问题被设计得 计算量巨大 ,需要消耗大量的电力和时间来“猜”答案。一旦找到答案,就相当于完成了“工作量证明”。
  • 容易验证: 一旦有人找到了答案,其他所有节点都可以在几秒内轻松验证这个答案是否正确。
  • 奖励: 第一个成功找到答案的矿工,有权将这个新区块广播到全网,并获得一笔比特币奖励(新发行的币)和区块内交易的手续费。这就是比特币的发行机制。
  • 难度调整:系统会定期根据全网算力(矿工的计算能力)自动调整这个计算问题的难度,目标是每10分钟左右出一个新块。

工作量证明最常用的技术原理是散列函数。由于输入散列函数hh的任意值nn,会对应到一个h(nh(n)结果,而nn只要变动一个比特,就会引起雪崩效应,所以几乎无法从h(n)h(n)反推回nn,因此借由指定查找h(n)h(n)的特征,让用户进行大量的穷举运算,就可以达成工作量证明。

我们若指定h(n)h(n)的16进制值的前四值,求nn,这样统计上平均约要运行216次h(n)h(n)散列运算,才会得到答案,但验算只要进行一次就可以了。如果想要增加难度,那就增加指定的位数即可。以SHA256函数举例,假设我们要处理资料 Hello World,并找出h(n)h(n)前四值为 0000nn,如果从 Hello World0开始加上一个十进制数ASCII进行穷举猜测,到 Hello World107105时才会得到符合条件的h(n)h(n)

0000BFE6AF4232F78B0C8EBA37A6BA6C17B9B8671473B0B82305880BE077EDD9

验算时只要将 Hello World107105代入SHA256函数一次即可。

最长链原则

由于是去中心化的,网络中可能同时出现不同的新区块,导致短暂的“分叉”(Fork)。中本聪规定了一个 共识机制

  • 所有节点都只认同和延伸“最长”的那条链。“最长”不是指区块数量最多,而是指 积累了最多工作量证明 的那条链。
  • 如果有人想要作弊(例如进行双重支付),他们就必须 从头开始 重新计算并伪造比诚实矿工所产生的所有区块还要多的工作量证明,这在理论上和经济上都是 极其困难 的。然而,当作弊者拥有全网超过50%的算力时,就可以使用算力优势生成一条更长的链“回滚”已经发生的“交易行为”(51%攻击)。

其他细节

激励机制

矿工之所以愿意消耗大量电力去挖矿,是因为有经济激励:

  • 区块奖励: 成功挖出新区块的矿工会获得新发行的比特币,但是随着时间推移,新发行的比特币数量将逐渐减少。
  • 交易手续费:矿工还会得到区块内所有交易所支付的手续费。
  • 这种激励机制确保了 诚实的节点会比作弊的节点更有利可图 ,从而保障了网络的安全性。

隐私性

比特币不是完全匿名的,而是 假名(Pseudonymous) 的。

  • 交易记录是完全公开的,但它们不直接关联到现实世界中的个人身份。
  • 用户是通过 公钥(比特币地址) 来标识的,公钥是一串很长的数字和字母组合。
  • 只要用户不把自己的地址和真实身份关联起来,就能保持一定程度的隐私。

磁盘空间管理

白皮书提到了随着时间的推移,区块链数据会越来越大,这可能会对存储造成压力。

解决方案:引入 默克尔树(Merkle Tree,也称哈希树) 技术,将区块中的所有交易记录哈希后,只将交易记录的根哈希存储在区块头(Block Header)中。这样,旧交易的细节可以被修剪(Pruning)掉,节点只需要保存区块头和未花费的交易输出(UTXO)即可。

简化支付验证

对于那些不运行完整节点(不下载整个区块链)的用户(例如手机钱包),白皮书提出了SPV机制:

用户只需下载 区块头 ,并通过 默克尔树路径 来验证自己的交易是否被包含在某个有效区块中。虽然这种方式不如完整节点安全,但极大地降低了移动设备使用比特币的门槛。

攻击成功的概率分析

中本聪利用泊松分布(Poisson Distribution)等概率模型来证明,一个想要恶意篡改交易记录的攻击者,其成功的概率会随着诚实链的增长而呈指数级下降。

假设:

  • pp:攻击者找到下一个区块的概率。
  • qq:诚实节点找到下一个区块的概率 (q=1pq=1−p)。
  • zz:攻击者需要赶超的诚实节点已经挖出的区块数(即深度)。

白皮书提供了一个公式来计算攻击者成功赶上诚实链的概率QzQ_z。白皮书中给出的公式是一个无限累加求和,为方便理解,下面给出一个简化版公式。

对于p<qp<q

Qz(pq)zQ_z \approx (\frac{p}{q})^z

我们可以看出,赶超成功的概率(QzQ_z):

  • 指数级下降:攻击成功率QzQ_z与比率pq\frac{p}{q}zz次幂成正比。由于我们假设p<qp<q(即pq<1\frac{p}{q}<1),所以当深度zz增加时,这个概率QzQ_z会呈指数级迅速下降。
  • 算力限制:只要攻击者的算力pp小于诚实算力qq(即p<0.5p<0.5),他们就几乎不可能在任何有意义的深度上成功赶超诚实链。

除此之外,这一计算解释了为什么比特币交易通常需要等待6个区块(约1小时)的确认才被视为安全。

攻击者算力pp z=1z=1时攻击成功的概率 z=6z=6时攻击成功的概率
10% 约2.0% 0.00000002%
30% 约10.9% 0.0003%
40% 约41.7% 0.006%
49% 约96.1% 约1.4%
  • 极低概率: 从表格中可以看出,即使攻击者拥有高达40%的算力,他们想要逆转一个已被6个区块确认的交易的概率也微乎其微(0.006%)。
  • zz的价值:增加确认次数zz是防御双重支付的最有效手段。每次增加一个确认,攻击者成功的概率就乘上一次pq\frac{p}{q},使其概率成指数级下降。

这一节的计算最终导向了经济学上的安全结论:

  1. 51%攻击不可行: 如果攻击者的算力p>0.5p>0.5,那么他们成功赶超并控制链条是数学上必然的。然而,获得超过一半的全球算力需要天文数字的硬件和电力投资。
  2. 攻击的代价与收益不成正比: 即使攻击者投入巨额成本进行51%攻击,他们能获得的最大收益也只是成功进行一次双重支付(比如,撤销一笔巨额支付并将其归还给自己)。
  3. 理性的选择: 如果攻击者拥有接近50%的算力,他们更理性的选择是诚实地挖矿,因为这样可以持续不断地获得区块奖励和交易手续费,而不是冒着巨大成本去破坏网络(一旦攻击成功,比特币的价值就会暴跌,攻击者自身的投资也会化为乌有)。

总结

比特币白皮书的全部核心就在于:它将交易记录(数据)、时间戳(排序)、工作量证明(安全与共识)和经济激励巧妙地结合起来,首次构建了一个无需信任第三方就能防止“双重支付”的电子现金系统。它不是一个新的理论,而是将密码学、分布式系统等技术进行了一个革命性的组合。

参考资料

比特币:一种点对点电子货币系统

Bitcoin: A Peer-to-Peer Electronic Cash System

维基百科:区块链

维基百科:工作量证明

知乎:什么是51%算力攻击