作者: Jameson Lopp
翻译校对: 闵敏 阿剑
人们在讨论不同密码学货币的共识机制时经常会产生争议,主要是因为他们对这些密码学货币用来保护账本历史数据的安全模型缺乏了解(定义)。虽然所有共识模型都是在防范各种理论上的攻击,但是了解这些模型的目的非常重要。
安全模型可以分为两个部分:假设(assumption)和保证(guarantee)。如果用作输入的假设成立,则安全模型输出的保证也应成立。
让我们来深入探索比特币为其全节点运营者提供的安全模型。
求真
“用户间信任需求最小化是比特币的优势之一。我个人甚至认为这是比特币最大的优势。” —— Pieter Wuille
分布式账本旨在提供有序的事件记录,因为在分布式系统中你不能单纯地信任时间戳。
新的参与者刚加入一个区块链网络时,会从软件硬编码的创世块开始下载所有可获得的区块,然后鉴别整条区块链的有效性。
比特币安全模型最重要的假设之一是绝大多数矿工都是诚实的 —— 他们在努力保护区块链的安全性,而不是试图破坏它。实际上,纵观比特币的发展史,得益于有效的矿工激励机制,这个假设至今未被打破,虽然已经有人怀疑它能否长期保持。
有了这个假设作为前提,全节点运营者完全可以确信:
除矿工之外没人能增发比特币,而且比特币的供应量会严格按照发行计划表增加。
没有私钥就无法花费对应的比特币。
没有人可以重复花费同一笔比特币。
任何比特币区块都是在其时间戳的大约两小时内创建的。
他们正在同步的是 “真实的” 区块链历史。
所有区块都遵守共识规则:
每个区块都与其父块相连
每个区块都达到目标难度值,并且有充足的工作量证明
区块时间戳位于与上一最新区块之间的时间窗口内
默克尔根与区块所记载的交易相匹配
区块大小不超过上限
每个区块的第一笔(也只有第一笔)交易是 coinbase 交易
Coinbase 输出不超过区块奖励
区块内包含的签名操作不超过许可范围
所有交易都遵守共识规则:
输入值和输出值都是合理的
交易只花费还未被花费过的输出
所有即将花费的输入都有有效签名
coinbase 交易创建后的 100 个区块内,该 coinbase 交易的输出无法花费
当某笔交易仍处在区块确认的窗口期,其输出就不能花费
篇幅有限,其余规则不作赘述
在比特币区块链强有力的保证下,全节点运营者还可以确信以下两点:
从技术层面来讲,比特币区块需要经过大量检查:
热力学安全性
区块内的交易一经确认无法回滚,除非有人花费大量能源重写这条链。
只要没有攻击者拥有全网 50% 以上的算力,且诚实的节点可以快速通信,发生交易回滚的概率就会随着交易确认次数呈指数级下降。其它类型的攻击(例如,自私挖矿)虽然没有这么高的能耗需求,但是实施起来很难。
- 来源:Yonatan Sompolinsky1 和 Aviv Zohar 撰写的 Bitcoin’s Security Model Revisited -
从比特币矿工当前的累积工作量来看,攻击者需要计算出将近 10^26 个哈希值,才能从创世块开始构建出一条累积工作量证明更多的链。全节点会将这条链视为 “合法” 的链。
- 来源:http://bitcoin.sipa.be -
我们来计算一下 51% 攻击的成本:
一台蚂蚁矿机 S9 的功耗是 0.1 J/GH(10^9 hash)。
10^26 hash * 0.1 J / 10^9 hash = 10^15 J
10^15 J = 2,777,777,778 kw/h * $0.10 kw/h = $277,777,778(重写整条区块链所需的电力成本)
撰写本文时,一个区块必须达到 253,618,246,641 的目标难度值,这大约需要:
253,618,246,641 * 2^48 / 65535 = 1.09 * 10^21 hash
1.09 * 10^21 hash * 0.1 J / 10^9 hash = 1.09 * 10^11 J
1.09 * 10^11 J = 30,278 kw/h * $0.10 kw/h = $3,028(创建每个区块所需的电力成本)
因此,我们可以说比特币具有热力学安全性。
你可以调整上述计算中的一些变量来降低成本,但我们可以肯定的是,仅重写整条区块链就需要价值数百万美元的电力。然而,在最坏的情况下,拥有如此强大算力的攻击者能够将交易回滚至 2014 年 —— 我们很快就会深入探究其原因。
另外请注意,购买和运行矿机所需的成本并未考虑在内。
抗女巫攻击
由于比特币协议认为累积工作量证明最多的链才是合法的链(最长链原则是常见的误解),新加入网络的对等节点只需与另一个诚实的对等节点建立连接,就可以找到合法的链。
这也被称为抗女巫攻击,这意味着攻击者无法通过运行多个不诚实的对等节点来向某个对等节点提供虚假信息。
上图显示了一个近乎最糟糕的情况:你的节点遭受了大规模女巫攻击,但是依然与一个诚实的节点保持连接,就可以通过这个节点连接至真正的区块链。只要有一个诚实的对等节点将真实的区块链数据传输给你的全节点,你的节点就会识破那些试图欺骗你的女巫攻击者,然后将它们忽略。
实时共识
当你的节点同步至区块链顶端时,你就会发现比特币协议通过其它一些有趣的属性来维护全网共识。
《比特币和其它密码学货币的研究视角及挑战》的作者指出,以下特性对密码学货币的稳定性来说至关重要:
最终共识。在任何时候,所有遵守规则的节点都要就最终的 “合法” 区块链的最新一个区块达成共识。
指数级收敛。深度为 n 的分叉的概率是 O(2−n)。这使得用户坚信他们的交易可以在 “k 次确认” 后得到永久结算。
活性。新区块会不断生成,支付适当交易费的有效交易会在合理时间内被打包上链。
正确性。在累积工作量证明最多的链上,所有区块内包含的交易都是有效的。
公平性。拥有全网总算力 X % 的矿工可以挖出大约 X% 的区块。
论文作者指出,比特币看起来具备上述特性,至少是在假设大部分矿工都保持诚实的前提下。这就是区块奖励和工作量证明机制想要达到的目的。
还有许多其它算法可以用来维护分布式系统中的共识,例如:
权益证明(PoS)
币龄证明(Proof of Coin Age)
质押证明(Proof of Deposit)
燃烧证明(Proof of Burn)
活动量证明(Proof of Activity)
耗时证明(Proof of Elapsed Time)
联合共识(Federated Consensus)
实用型拜占庭容错(Practical Byzantine Fault Tolerance)
上述算法创建了不同的安全模型 —— 与工作量证明最明显的区别在于,基于这些算法的系统都是以消耗内部资源(币或声誉)而非外部资源(电力)来达成共识的。受其影响,这些系统对网络中验证者的激励措施和信任需求各不相同,极大地改变了安全模型。
安全模型误区
一个常见的误区是,比特币有一个明确定义的安全模型。
事实上,无论是过去还是现在,比特币协议都没有一个正式定义的规范或安全模型。我们能做的最好的事情就是研究系统参与者的动机和行为,以便更好地理解和描述比特币的安全模型。
尽管如此,经常有人误解了比特币协议的一些特性。
一些区块链存在很严重的隐患,因为开发者在节点软件中增加了专断设定的已签名检查点,表示 “开发人员已经确认区块 X 位于正确的那条链上”。这是一个极端中心化的单点问题。
值得一提的是,比特币有 13 个被硬编码的检查点,但是这些检查点并没有像被专断设定的检查点那样改变安全模型。最后一个检查点被添加到了 Bitcoin Core 0.9.3 内,区块高度是 295000 (创建于 2014 年 4 月 9 日)。这个区块的难度值是 6,119,726,089,所需电力成本约为:
6,119,726,089 * 2^48 / 65535 = 2.62 * 10^19 hash
2.62 * 10^19 hash * 0.1 J / 10^9 hash = 2.62 * 10^9 J
2.62 * 10^9 J = 728 kw/h * $0.10 kw/h = $73(创建该区块所需的电力成本)
因此,如果女巫攻击者将一个新加入的节点(需要从头开始进行同步)围住,几乎不需要任何成本就可以在较低的区块高度创建较短的区块链,但是不能超过检查点。
如果女巫攻击者将一个节点从同步超过区块高度 295,000 的网络分离出来,就能以每个区块 73 美元的成本开始提供虚假区块,至少是在发生难度调整之前。但是,受害节点同步的区块链越长,攻击者创建一条累积工作量证明更多的链所需的成本越高。
Greg Maxwell 和 Pieter Wuille 都表示,他们希望某天能完全移除检查点。Bitcoin Core 的维护负责人 Wladimir van der Laan 指出,对于那些想要了解比特币安全模型的人来说,检查点经常使人感到困惑。
可以说,位于区块高度 295,000 的检查点意味着,全节点 “相信” Bitcoin Core 开发者所说的 2014 年 4 月 9 日之前的区块都是有效的。但是,全节点依然会检查每个区块头里的默克尔哈希值,也就是说,交易历史的有效性依然受到工作量证明的保护。首次同步历史区块链时,这些旧的检查点可以改善性能(跳过签名验证),尽管 libsecp256k1 的引入让性能差异变得不那么明显。
检查点存在的目的主要有三个:
防止节点的内存被有效但低工作量证明的区块头占满。
跳过早期区块内的签名(提升性能)。
估量同步进度。
在撰写这篇文章时,Greg Maxwell 提出使用累积工作量证明检查来代替检查点。一旦节点成功同步了某条包含超过 5.4 * 10^24 次哈希计算工作量的链,累积工作量证明较少的那条链就会被拒绝。这恰好与 2014 年 9 月创建的区块 320,000 的工作量大致相符,这时单个区块的难度值约为 27,000,000,000。
- 来源:Blockchain.info -
当难度值为 27,000,000,000 时,挖矿需要计算大约 27,000,000,000 * 2^48 / 65535 = 1.16 * 10^20 次哈希函数。
1.16 * 10^20 hash * 0.1 J / 10^9 hash = 1.16 * 10^10 J
1.16 * 10^10 J = 3,222 kw/h * $0.10 kw/h = $322(平均创建每个区块所需的电力成本)
因此,根据提议进行修改后,如果女巫攻击者将一个需要从头开始同步的全新节点完全包围起来,就可以从任一区块开始向这个节点发送虚假的区块数据,而且几乎不需要成本。如果女巫攻击者将一个已经同步超过区块 320,000 的节点完全包围起来,那么从区块 320,000 开始向该节点发送每个虚假区块的成本是 322 美元。
简而言之,如果一个实体可以完全控制你的节点的网络连接,无论是采用哪种方式对节点的初始同步进行检查,攻击成本都相对较低;如果你的节点的网络连接不受任何实体的控制,就可以轻而易举地忽略来自攻击者的区块。
(未完)
原文链接:
https://blog.lopp.net/bitcoins-security-model-a-deep-dive/