区块链如何运作
区块链是一份共享的记录,由成千上万台电脑各自复制并取得共识,其建构方式让旧的条目无法被悄悄篡改。
每个哈希都由该区块的数据,加上前一个区块的哈希计算而成。更改任何区块,或篡改区块 2,其后的每个区块都会不再吻合。
区块链完整。每个区块都指回正确的指纹,因此没有任何区块被标记。
在继续阅读之前,先看看上方那条链。每一个区块都储存了一段关于它自身内容的简短指纹(也就是它的哈希),而且它还储存了它前一个区块的哈希,这正是把各个区块串连成一条链的关键。篡改区块 2,它的指纹就会改变,于是区块 3 和区块 4 就不再与它们所承接的前一个区块相符,并亮起显示为损坏。现在,想象一本巨大的笔记本,记录了有史以来的每一笔付款,再想象有成千上万台电脑,各自保有一份完全相同的副本。没有任何银行拥有那份主文件,没有任何一个人能伸手进去更改任何一行,而且每个人都能核对自己的副本是否与其他所有人的相符。这就是区块链。这个名字是字面上的意思:它是一条由区块组成的链,其中每个区块是一批交易,而这些区块按顺序串连起来。你不需要任何编程知识就能理解它。你只需要对一本很难伪造的共享笔记本有清楚的图像,而本单元接下来的内容,会一步一步把这幅图像建立起来。
一份共享、仅可新增的记录
先从那本笔记本说起。它不是由一家银行保管,而是由成千上万台电脑(称为节点)各自保有自己那份最新的副本。这就是“分布式”的意思,而它为你换来两样好处。
第一,没有单独一份副本可供入侵、扣押或遗失。如果某个节点离线,这份记录仍然存活在其他每一台机器上,因此没有一个中心点可供攻击。
第二,这份记录是仅可追加的。你可以在末端新增条目,但你无法悄悄删除或改写旧的条目,因为其他每一份副本都会立刻与你意见相左。这就是为什么人们称区块链为一份共享的真相来源:不是因为某个权威机构保证了它,而是因为成千上万份独立的副本必须取得一致。
区块如何串连成一条链
新的交易会被收集起来,捆绑成一个区块。在网络接受那个区块之前,它会依据规则对区块进行检查:这些币是真的吗?发送方是否真的拥有它们?签名是否有效?唯有通过这些检查,区块才会被加到链的末端。
巧妙之处在于一个区块如何连上下一个。每一个区块都会把它的内容送进一个哈希,也就是一个把任何数据转换成一段简短、固定长度指纹的数学函数。接着,每一个新区块都会储存它紧邻前一个区块的指纹。因此,区块 100 带着区块 99 的指纹,区块 99 带着区块 98 的指纹,而这样的引用一路回溯到最开头的第一个区块。这些区块靠这些指纹彼此串连,而这样的串连,正是让整段历史一经篡改即可察觉的关键(你稍后就会明白原因)。
由谁决定下一个区块是哪一个
如果没有人在主导,那成千上万个节点要如何就下一个区块取得一致?它们遵循一套共识机制,也就是一本用来决定由谁来添加下一个区块的共享规则手册。你最常听到的两种是工作量证明与权益证明。
在工作量证明(由比特币采用)中,一种称为矿工的特殊节点会竞相解开一道困难的数学谜题。解开它需要真实的电力与运算能力,而第一个解开的矿工,便赢得添加下一个区块并领取奖励的权利。
在权益证明(由以太坊自 2022 年起采用)中,并没有解谜的竞赛。取而代之的是,验证者锁定自己的一部分资本作为押金,称为质押,而系统挑选由谁来添加下一个区块时,一部分靠随机,一部分则看其质押的规模有多大。任何被抓到作弊的人,都可能被没收那笔质押。
两种做法都以同一个手法达成同一个目标,也就是在没有中央老大的情况下取得诚实的共识:它们让作弊变得昂贵。
为何这份记录如此难以伪造
有三样东西层层叠加,使得区块链非常难以造假。
- 哈希串连。 哪怕只更改一笔旧交易,那个区块的指纹就会改变,进而破坏它之后每一个区块里的引用。篡改藏不住,它会亮起来。
- 分布式副本。 你伪造的版本必须同时驳倒成千上万份诚实的副本,而多数方获胜。
- 攻击的成本。 要真正改写近期的历史,攻击者需要控制网络中一半以上的运算算力或质押,重做所有受影响的工作,并且跑赢其他所有人的总和。这就是著名的 51% 攻击,而在一个大型网络上,它昂贵到通常不值得一试。
留意这里真正起作用的是什么。安全并非来自一名受信任的守卫盯着这本账本。它来自让不诚实所付出的代价,超过它所能赚到的任何好处。
逐步走一遍被篡改的区块
想象一条由 5 个区块组成的短链。区块 2 记录了一笔从 Alice 支付给 Bob 的 50 枚币的付款。这些区块彼此串连,使得区块 3 储存区块 2 的指纹、区块 4 储存区块 3 的指纹、区块 5 储存区块 4 的指纹。
- 你试图作弊,把区块 2 改成 Alice 付给你 5,000 枚币。
- 你一改变区块 2 的内容,区块 2 的指纹就立刻改变。
- 现在,区块 3 所储存的“前一个指纹”不再与真正的区块 2 相符,于是区块 3 损坏了,区块 4 和区块 5 也一样。
- 要让这场伪造站得住脚,你必须为区块 2、3、4、5 重新计算出有效的工作量,并且做得比整个诚实网络延伸真正那条链的速度还快。在一个大型网络上,这需要一半以上的全部算力(也就是一场 51% 攻击),其代价高到令人却步。
这单独一次的更改并没有藏住。它连锁扩散到之后的每一个区块,把自己暴露出来。这种连锁扩散,正是为何区块链在实践中被称为不可篡改的核心所在。
工作量证明对比权益证明,并排来看
两种机制回答的是同一个问题(由谁来添加下一个区块,以及我们为什么该信任他们?),但它们为此付出不同的资源。
| 工作量证明 | 权益证明 | |
|---|---|---|
| 由谁添加区块 | 竞相解谜的矿工 | 一部分随机、一部分依质押挑选出的验证者 |
| 参与的成本 | 电力与运算能力 | 锁定作为押金的资本 |
| 何者遏止作弊 | 你会浪费掉的能源与硬件 | 失去你所投入的质押 |
| 由谁采用 | 比特币 | 以太坊(自 2022 年起) |
以太坊在 2022 年 9 月 15 日一次名为 the Merge 的升级中,从工作量证明切换到权益证明。这项改变让网络的能源使用量减少了约 99.95%,因为验证者不再需要为了竞相解谜而燃烧电力。两种设计仍然达成同一个结果,也就是在没有中央权威的情况下取得诚实的共识,因此在两者之间的选择,主要是能源成本与安全性由何种方式支撑之间的取舍。
哈希究竟是什么
哈希不过是一个函数,它接收任何输入(一个句子、一整个区块、一整本书),并返回一段简短、固定长度的指纹。有两个实用的特性,让它非常适合用于区块链。
- 相同的输入永远产生相同的指纹,因此任何人都能重新计算并加以核验。
- 哪怕只是稍微改变输入,也会产生一段完全不同的指纹,与原本那段毫无相似之处。
第二个特性,正是篡改藏不住的原因。如果一个不诚实的行为者更改了某个旧区块里的一个字符,重新计算出的指纹,会与储存在下一个区块里的那段毫无相似之处,而这种不相符,对每一份诚实的副本而言都一目了然。这段指纹不会告诉你区块里面装了什么,你也无法把它倒着跑来还原出原始数据。它只让每个人得以确认:这些数据自从被记录下来之后,并未发生改变。
快速知识检核
对区块链而言,“仅可追加”是什么意思? 你可以在记录的末端新增条目,但你无法悄悄删除或改写既有的条目,因为这本账本的其他每一份副本,都会与你更改过的版本意见相左。
个别的区块如何被串连成一条链? 每一个区块都储存了它前一个区块的哈希(也就是指纹)。这样的引用一路回溯到第一个区块,因此更改任何一个旧区块,都会破坏它之后每一个区块里的链接。
为何在一个大型网络上,51% 攻击如此难以得手? 要改写近期的历史,攻击者需要控制网络中一半以上的算力或质押,重做所有受影响的工作,并且仍然跑赢整个诚实网络。在一条大型链上,这昂贵到鲜少值得一试。
资料来源
- NIST, "IR 8202: Blockchain Technology Overview",将区块链定义为一份分布式、仅可追加的账本,由跨越众多节点复制的哈希串连区块所构成。
- ISO, "ISO 22739: Blockchain and distributed ledger technologies - Vocabulary",说明一个共享的数据库如何在没有中央管理员的情况下,跨越众多节点进行复制与同步。
- bitcoin.org, "Bitcoin: A Peer-to-Peer Electronic Cash System" (Satoshi Nakamoto),说明矿工为何耗费运算能力与能源来添加区块并赚取奖励。
- ethereum.org, "Proof-of-stake (PoS)",说明验证者如何按其质押资本的比例被选出,而该资本可能因作弊而被没收。
- ethereum.org, "The Merge",关于以太坊在 2022 年 9 月 15 日切换到权益证明,以及约 99.95% 的能源使用量削减。
- bitcoin.org, "Bitcoin: A Peer-to-Peer Electronic Cash System" (Satoshi Nakamoto),关于 51% 攻击,以及为何在一个大型网络上改写历史的代价高到令人却步。