注意:本文旨在让非技术读者也能理解,若想获得非常专业的技术理解,请在阅读本文后参考我们的 blockchain bootcamp 。
与普遍的看法相反,区块链具有不可篡改性并不是因为密码学,而是因为经济激励。密码学只是一个好用的工具,它使得经济激励更容易实施。
文件怎么可能不可篡改?
归根结底,区块链就是一个文件——一个包含了网络交易历史记录的文件。我们都知道文件是可以被编辑的。那么,是什么让区块链不可篡改呢?
如果你将同一个文件存储在成千上万台独立的计算机上,并且这些计算机彼此之间不发生串谋,那么在所有计算机上做出完全相同的更改是不可行的。
如果你在其中一台计算机上进行了更改(比如删除了一笔交易),该计算机上的文件将与其他计算机上的文件不匹配。
实现不可篡改性的下一步是让更改变得易于检测。区块链的数据量高达数 GB,因此,如果每次需要核对记录以查看历史是否被篡改时都要在网络中发送整个文件,那成本就太高了。
所有的文件都可以用*哈希函数(hash function)*来简洁地表示。哈希函数接收一个任意文件,并输出一个介于 0 和
115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935 之间的数字。
你可以把哈希函数看作是为大型文件生成数字指纹的过程。如果文件中哪怕只改变了一个比特,生成的指纹也会是一个完全不同的数字。因此,只需查看这个数字,就能轻松判断文件是否发生了改变。
它的生成方式是在文件上移动一个滑动窗口,并利用文件内容触发这个巨大数字的“置换(scramble)”。仅仅改变一个字母,置换的结果就会截然不同。这里提供了一个动画演示:

计算文件的哈希值
例如,你可以很容易地对比以下两个数字并发现:
25699748482000334349659950178510113434625287339471322686429384401650686920510
与以下数字并不相同:
111615780842736058021275746192495359629127277574153577922775094394736461370563.
当你看到两个截然不同的极其庞大的数字时,你就知道它们所代表的两个文件的数字指纹是不同的,即这两个文件是不同的。
这些极其庞大的数字被称为 “blockhashes”。
文件 → 哈希函数 → 极大的数字
如果你使用像 etherscan.io 这样的区块浏览器,你会看到这个极大的数字被称为 blockhash。这也是我们在本文剩余部分对其的称呼。

Ethereum 上的 Blockhash
网络中的计算机不共享整个文件,而是共享 blockhash。
交易顺序
当一台计算机共享一笔交易时,它需要共享三条信息:
- 交易前的 blockhash
- 新的交易
- 新交易后的 blockhash
如果步骤 1 中的 blockhash 与本地计算机的 blockhash 不匹配,该计算机就会拒绝它。如果步骤 2 中的交易执行后没有生成步骤 3 中的 blockhash,该交易也会被拒绝。
要想让成千上万台计算机确信你的数字是有效的,唯一的方法就是使用与大多数计算机相同的 blockhash(这代表了你的历史记录)。顺应多数人比试图说服多数人他们错了要容易得多,而这种违背多数人意愿的巨大难度,正是让区块链变得不可篡改和安全的原因。
确保不发生串谋
即使你在世界各地拥有成千上万台计算机,如果这些计算机实际上全由一个单一实体控制,那么对于该控制实体来说,篡改区块链历史记录依然易如反掌。
关键在于让单个人很难在网络中占据多数控制权。这就是我们所说的“去中心化”。
Bitcoin 在设计上会消耗大量的电力,因为它的假设是没有任何一个单一实体能够消耗全球大部分的能源。
Ethereum 使用权益证明(proof of stake,你需要锁定 Ethereum 才能参与到 Ethereum 网络中),因为它的假设是没有人能够购买绝大多数的 Ethereum 并将其锁定,从而控制网络中的大多数计算机。
网络中的参与者越少,发生串谋的可能性就越大,这正是为什么拥有大量计算机的区块链网络总会宣传其节点数量的原因。
与分布式账本的关系
区块链有时被称为“分布式账本(distributed ledgers)”,换句话说,就是分布式的、被广泛接受的交易历史记录。这一点很关键,因为“分布式”是实现不可篡改的重要组成部分。
正如我们在第一节中所看到的,除非该区块链文件的多个副本被全球各地互不串谋的参与者存储,否则该文件就是可以被篡改的。
如果一个文件仅由少数几台计算机管理,那么它并不是真正的分布式,因此也就不是真正的区块链。
经济激励
如果网络中的计算机认为某一笔交易会损害自身利益,它就不会将其包含在网络中。例如,你在网络中运行一台计算机,你看到收到一笔交易显示:“Bob 凭空突然拥有了一百万美元”。有人白拿钱(而自己错失了利润),这是大多数计算机无法接受的,因此它们会拒绝这笔交易,也不会接受包含该交易历史的 blockhash。既然知道人们不会接受你凭空伪造且对你单方面有利的违规交易,这就打消了人们尝试打包此类交易的念头。
但如果所有的计算机串通起来说“让我们每个人都给自己印一百万个币”呢?这里会发生一个非常有趣的经济现象:货币的价值并没有改变。
想象一下,如果有一天政府说:“每个人都可以用 1 美元钞票兑换 10 个新美元,5 美元钞票兑换 50 个新美元,以此类推。” 货币的价值会发生什么变化?什么也不会发生!经济系统中所有物品的价格只会直接多加一个零,一切还是会照常进行。
要发生这种串谋,每个人都需要就他们将共同获得的额外货币数量达成完全一致。如果存在分歧,那么每个人的 blockhash 都将代表不同的历史记录。如果出现这样的分歧,网络就会陷入停顿,因为前面提到的交易顺序就不起作用了。如果网络崩溃了,所有人都会失去系统中属于他们的钱,因此这就形成了一种不破坏网络的激励。
当经济激励不足时
为了说明不可篡改性主要是经济层面的,而不是密码学层面的,想象有一群大学生启动了一个新的区块链,我们叫它 college-coin。他们的集体净资产不到两万美元。这时,作为一个邪恶的亿万富翁,我出现了,给出一个他们无法拒绝的条件:给他们每个人两万美元,条件是完全按照我的意愿去修改区块链。这是一个他们无法拒绝的提议。
由于他们都进行了完全相同的修改,他们都会得到相同的 blockhash,并且网络也将继续正常运行。之后人们在进行交易时,会互相出示这个新的 blockhash,每个人也都能正常花钱——只不过历史记录中包含了被我添加的新条目。
缺乏足够经济激励的小型区块链很容易受到这类攻击。
共同利益
如果你篡改了你的文件,你的 blockhash 就与其他计算机拥有的不匹配。如果你的 blockhash 与其他计算机的不匹配,你就无法消费货币。
因为每个参与者都被激励不去篡改他们本地的区块链副本(否则将被切断消费资金的权限),所以区块链不会被篡改。这就是使得区块链变得不可篡改的原因。
所有的计算机文件都是可篡改的。但是如果你实施了恰当的经济激励措施,人们就不会去改变它们。
最初发布于 2023 年 2 月 10 日