引言


分布式账本技术,如区块链,在过去十年中在各种环境中变得越来越普遍。前提是区块链在没有任何中心化节点控制的情况下安全地运行,并且它们是不可篡改的或不易篡改的。
鉴于其创造和防止技术意外的使命,DARPA努力理解这些安全假设,并确定区块链实际上在多大程度上是去中心化的。因此,该机构聘请网络安全研究和咨询公司Trail of Bits来检查区块链的基本属性以及与之相关的网络安全风险。
该研究产生了一份报告,该报告提供了全面的分析,任何考虑区块链重要事项的人都可以使用该报告,以便他们能够更好地了解这些系统中的潜在漏洞。
“该报告表明,在评估新技术(如区块链)时,当它们在我们的社会和经济中激增时,仍然需要仔细审查,”监督该研究的DARPA项目经理Joshua Baron说。“我们不应该在表面上采取任何安全承诺,任何使用区块链处理重要事务的人都必须仔细考虑相关的漏洞。
以下是中文版的内容。

内容

关于Trail of Bits

Trail of Bits 成立于 2012 年,总部位于纽约,为世界上一些最具针对性的组织提供技术安全评估和咨询服务。我们将高端安全研究与现实世界的攻击者心态相结合,以降低风险并强化代码。我们在全球拥有 80 多名员工,帮助保护了支持数十亿最终用户的关键软件元素,包括Kubernetes 和 Linux 内核。
我们在以下位置保留一份详尽的出版物清单https://github.com/trailofbits/publications,带有论文、演示文稿、公共审计报告和播客节目的链接。
近年来, Trail of Bits 顾问通过在 CanSecWest、 HCSS、 Devcon、 Empire Hacking、 GrrCon、LangSec、 NorthSec、 O'Reilly 安全会议、 PyCon、 REcon、 Security BSides 和 SummerCon 上的演讲展示了前沿研究。
我们专注于软件测试和代码审查项目,为技术、国防和金融行业的客户组织以及政府实体提供支持。著名客户包括 HashiCorp、谷歌、微软、西部数据和 Zoom。
Trail of Bits 还运营着一个区块链安全卓越中心。值得注意的项目包括对 Algorand、 Bitcoin SV、 Chainlink、 Compound、 Cosmos、 Ethereum 2.0、 MakerDAO、 Matic、 Polkadot、 Solana、Uniswap、 Web3 和 Zcash 的审计。

工作摘要

在过去的一年里, Trail of Bits 与美国国防高级研究计划局 (DARPA) 合作,调查区块链真正去中心化的程度。我们主要关注两个最受欢迎的区块链:比特币和以太坊。我们还总体上研究了权益证明 (PoS) 区块链和拜占庭容错共识协议。本报告对学术文献的结果以及我们对软件中心性和比特币共识网络拓扑的新颖研究进行了高级总结。对于具有更深入技术讨论的优秀学术调查,我们推荐 Sai, et al.的工作。

区块链是去中心化的,对吗?

分布式账本技术(DLT) 特别是区块链,被用于各种环境,例如数字货币、去中心化金融,甚至电子投票。虽然有许多不同类型的 DLT,每种都采用根本不同的设计决策,但 DLT 和区块链的总体价值主张是它们可以在没有任何中心节点控制的情况下安全运行。在这一点上,区块链所采用的密码原语非常强大,并且通常认为这些原语使区块链不可篡改(不易篡改)是理所当然的。本报告举例说明了如何打破这种不可篡改的特性,而不是通过利用加密漏洞,而是通过颠覆区块链的实施、网络和共识协议的属性。我们表明,一部分参与者可以获得对整个系统的过度集中控制。

中心化的来源

本报告涵盖了可以集中控制 DLT 的几种方式:
  • 权威中心性: 破坏系统所需的最小实体数量是多少?这个数字叫做中本系数,这个值越接近1,系统越集中。这通常也被称为治理中心性
  • 共识中心性: 与权威中心性类似,共识来源(例如工作证明 [PoW])的中心化程度如何?单个实体(如矿池)是否控制了过多的网络哈希算力
  • 动机中心性:如何抑制参与者的恶意行为(例如,发布畸形或不正确的数据)?这些激励措施在多大程度上受到中央控制?如果有的话,如何撤销恶意参与者的权利?
  • 拓扑中心性:共识网络对破坏的抵抗程度如何?是否存在一个节点子集,在网络中形成一个至关重要的桥接,没有它,网络就会分叉?
  • 网络中心性:节点在地理上是否足够分散,以至于它们在互联网上均匀分布?如果一个恶意的互联网服务提供商(ISP)或民族国家决定阻止或过滤所有DLT流量,会发生什么?
  • 软件中心性:DLT的安全性在多大程度上依赖于运行它的软件的安全性?软件中的任何bug(无论是无意的还是有意的)都可能使DLT的不变量失效,例如,破坏不变性。如果DLT规范中存在歧义,两个独立开发的软件客户端可能会产生分歧,从而导致区块链中的分叉。两个客户机共享的依赖项中的上游漏洞同样会影响它们的操作。

主要发现和要点

以下是我们研究的主要发现。报告的其余部分对它们进行了更详细的解释。
  • 使用区块链的挑战在于,必须(a)接受其不变性并相信其程序员没有引入错误,或(b)允许可升级的合约或链下代码与集中式共享相同的信任问题方法。
  • 每个广泛使用的区块链都有一组特权实体,可以修改区块链的语义以潜在地改变过去的交易。
  • 足以破坏区块链的实体数量相对较少:比特币四个,以太坊两个,大多数PoS网络不到十几个。
  • 绝大多数比特币节点似乎没有参与挖矿,节点运营商不会因不诚实而面临明确的惩罚。
  • 用于在区块链矿池内进行协调的标准协议 Stratum 是未加密的,并且实际上是未经身份验证的。
  • 当节点对网络的看法过时或不正确时,这将降低执行标准51%攻击所需的哈希率百分比。而且,只有被矿池操作的节点才需要降级,才能进行这种攻击。例如,在2021年上半年,针对比特币的51%攻击的实际成本接近哈希率的49%。
  • 为了使区块链实现最佳分布,必须存在所谓的 Sybil 成本。目前没有已知的方法可以在比特币或以太坊等未经许可的区块链中实现 Sybil 成本,而无需使用集中式可信第三方(TTP)。在没有 TTP 的情况下执行 Sybil 成本的机制被发现之前,无许可区块链几乎不可能实现令人满意的去中心化。
  • 一个密集的、可能是非无标度的比特币节点子网络似乎主要负责达成共识并与矿工进行通信——绝大多数节点对网络的健康没有有意义的贡献。
  • 比特币流量是未加密的——节点之间的网络路由上的任何第三方(例如, ISP、 Wi-Fi接入点运营商或政府)都可以观察并选择丢弃他们想要的任何消息。
  • 在所有比特币流量中, 60% 仅通过三个ISP。
  • Tor现在是比特币最大的网络提供商,为大约一半的比特币节点路由流量。这些节点中有一半通过 Tor 网络路由,另一半可以通过.onion地址访问。下一个最大的自治系统(AS) 或网络提供商是来自德国的 AS24940,仅占节点的 10%。恶意 Tor 出口节点可以像ISP 一样修改或丢弃流量。
  • 在比特币的节点中, 21% 运行的是旧版本的比特币核心客户端,已知该客户端在2021年6月易受攻击。
  • 以太坊生态系统有大量的代码重用: 90% 最近部署的以太坊智能合约至少有 56%彼此相似。

仔细观察区块链不可篡改的特性

每个区块链都有一组特权实体,可以修改区块链的语义以潜在地改变过去的交易: 即软件的作者和维护者。许多区块链都在其共识协议之上构建了虚拟机(VM),有时甚至集成到其中。比特币及其衍生品有一个用于解释交易输出脚本的虚拟机。以太坊使用虚拟机来执行其智能合约。区块链的 VM 语义通常会随着对新功能的需求和安全缓解的需求而发展。通常会添加新的 VM 操作码,并且会定期调整执行某些操作的成本以防止拒绝服务攻击。
在某些情况下,区块链的开发者或维护者故意修改其软件以改变区块链的状态以恢复或减轻攻击——这是以太坊对 2016 DAO 黑客的回应。 但在大多数其他情况下,对区块链的更改是另一个变化的无意或意外结果。例如,以太坊的君士坦丁堡硬分叉降低了某些操作的 gas 成本。然而,在硬分叉之前部署的一些不可变合约依靠旧的成本来防止某种称为“重入”的攻击。君士坦丁堡的语义变化导致这些曾经安全的合约变得易受攻击。幸运的是,这个问题是手动发现的,偶然的,在分叉之前有足够的时间让它被延迟并随后被放弃。 2021年,由于用于构建节点的 Rust编程语言编译器的更新导致节点故障,Polkadot 区块链平台暂时瘫痪。 2021 年 8 月下旬,与最受欢迎的以太坊客户端变化相关的共识问题被利用导致加密货币的硬分叉。 
部署到区块链的数据——更重要的是,代码——在语义上不一定是不可变的。不仅可以通过修改区块链软件来追溯更改区块链的状态,而且由于中间的软件更改,单个交易的语义可以在交易发起和最终挖掘到区块链之间发生变化。Polkadot和Substrate等一些区块链平台还允许通过链上治理流程更新某些参数和代码。
软件本身不一定需要更改以影响 DLT 的安全属性。例如,虽然比特币的历史还不到 15 年,但在设计其协议时做出的许多基本假设已经过时了。最初构思比特币时,中本聪假设共识网络中的每个节点都会参与挖矿。然而,随着挖矿难度的增加——从而降低了获得挖矿奖励的可能性——“矿池(将挖矿能力和奖励组合在一起的集体)作为一种获得持续利润的手段变得越来越流行。今天,四个最受欢迎的矿池占比特币哈希率的 51% 以上。每个矿池都运行自己的专有集中式协议,并且仅通过网关节点与公共比特币网络进行交互。换句话说, 实际上只有少数节点代表网络的大多数哈希率参与共识网络。控制这些节点提供了至少拒绝为其组成哈希率提供服务的方法。 这打破了最初的假设,即所有比特币节点都会有经济激励(通过挖矿)来保持诚实。如果节点运营商的自身利益是不诚实的,那么这样做没有明确的惩罚。此外,对比特币执行 51% 攻击所需的实体数量从整个网络的 51%(我们估计大约 59,000 个节点)减少到仅四个最受欢迎的矿池节点(不到 0.004%网络)。
最后,任何支持图灵完备链上执行的区块链(例如,以太坊、 Hyperledger 和 Tezos)都不能强制执行语义不变性。这是因为此类区块链无法阻止合约升级(图灵机能够模拟任何其他图灵机,允许通过解释输入进行升级,即使链上代码是不可变的)。例如, Alice 可以向合约提交交易,并且在交易被挖掘之前,可以将合约升级为具有完全不同的语义。交易将根据新合同执行。可升级的合约模式在以太坊中变得非常流行,因为它们允许开发人员在部署后绕过不变性来修补错误。但它们也允许开发人员修补后门,使他们能够带着合同资产潜逃。 使用区块链的挑战在于,必须
(a)接受其不变性并相信程序员没有引入错误,或者
(b)允许与集中式方法共享相同信任问题的可升级合约或链下代码

中本系数

已经提出了各种指标来衡量 DLT 的中心性或公平性,包括基尼系数洛伦兹曲线,都是从经济理论中借来的。然而,最小的 Nakamoto系数可能是最直观的。 Nakamoto 系数是足以攻击系统的实体数量。一个完全中心化的系统将有一个 Nakamoto 系数。中本系数越低,系统越集中。
众所周知,比特币是经济中心化的: 2020 年, 4.5% 的比特币持有者控制了 85% 的币种。但是比特币的系统性或权威性中心化呢?正如我们在上一节中看到的,比特币的 Nakamoto 系数为4,因为控制四个最大的矿池将提供足以执行 51% 攻击的哈希值。2021年1月,以太坊的Nakamoto系数仅为2,截至2022年4月为3。
尽管这些 Nakamoto 系数相对较低,但有些人可能会争辩说,利用它们来攻击区块链将非常昂贵。虽然这对个人来说可能是正确的,但被激励实施这些攻击的行为者包括竞争货币的运营商和拥有必要资源的民族国家。与可以操纵法定货币的相对价值相同的方式,区块链可能存在不正当的激励措施。
PoS 协议正成为越来越流行的共识机制,它解决了 PoW 区块链(如比特币、以太坊及其衍生品)的一些缺点(例如,计算成本高)。大多数 PoS 网络并没有像 PoW 矿工那样解决计算难题来挖掘区块,而是要求其区块验证者在他们不诚实的情况下抵押一定数量的加密货币作为抵押品——他们的挖掘能力与他们的股份成正比。一些 PoS 链(如 Algorand)分发加密货币作为良好治理的奖励。 14PoS 区块链采用复杂的协议来确保交易得到验证并监管验证者。大多数 PoS 区块链的共识协议(Avalanche 的雪花, 索拉纳塔式 BFT等)如果与至少三分之一的质押资产相关联的验证者是恶意的,则会崩溃,从而有效地暂停网络。因此,大多数PoS区块链的中本系数等于总共持有至少三分之一所有持有资产的最小验证者数量。
以下是截至 2021 年 8 月 25 日流行 PoS 区块链的 Nakamoto 系数:
区块链 中本系数 验证者总数 质押价值 资源
Avalanche
25 1041 $11B https://explorer.avax.network/validators
Solana
19 876 $37B 
https://solana.com/validators
Eth2
12 219182 $22B 
https://www.nansen.ail
THORChain
11 38 $0.5B 
https://thorchain.net/#/nodes
Terra
8 130 $12B 
https://stake.id/#/
Cosmos
6 125 $4B 
https://www.mintscan.io/cosmos/validators
BSC
5 21 $7B 
https://bscscan.com/validatorset
Fantom
3 46 $1B 
https://ftmscan.com/validators
Polygon
2 100 $3B 
https://wallet.matic.network/staking/

共识中心性:矿池漏洞

越来越多的共识协议操作被委托给少数实体,这些实体通常运行自己的集中式软件和协议,几乎没有链上治理——在 PoW 区块链的情况下,这些实体是矿池,在 PoS 区块链的情况下,这些实体是质押的验证者。在上一节中,我们讨论了这些实体如何成为破坏区块链稳定性的重要目标。在本节中,我们将讨论此类实体的链下治理结构如何进一步增加区块链的攻击面。
虽然有证据表明矿池和质押验证者等风险分担实体降低了区块链的经济集中化,但众所周知,它们作为技术单点故障存在,因此是拒绝服务攻击的丰富目标。区块链的安全性取决于其链下治理或共识机制的软件和协议的安全性。
今天,矿池运营商使用 Stratum 与其参与者进行通信:一种特殊的 JSON 远程过程调用 (RPC)协议,在过去十年中有机地发展,没有官方标准化。该协议允许矿池运营商为每个挖矿参与者创建工作,每个工作都需要参与者通过可能有效块的搜索空间的唯一子集进行暴力搜索。
Stratum 协议未加密。分配给矿工的所有工作、矿工的所有工作结果,甚至初始身份验证都以明文形式传输。 Stratum 开发人员可能做出了这个设计决定,因为 Stratum 协议是在大多数硬件矿工的固件中实现的,而这些硬件可能没有实现 SSL 或 TLS 的资源。此外, Stratum 开发人员可能没有预料到攻击者可以利用这种设计来验证另一个用户的身份。后来发现,诸如民族国家、ISP 或本地网络参与者之类的窃听者可以使用此传输的信息来估计矿池中矿工的哈希率和支出。中间的恶意攻击者实际上可以操纵 Stratum 消息从矿池参与者那里窃取 CPU 周期和支出。这些漏洞已为人所知多年,最初是通过向 Stratum 协议添加身份验证形式来解决的。然而, 向更安全的协议过渡的提议都没有被广泛采用。
直到 2018 年, Stratum 协议中的身份验证甚至不需要密码。
攻击者意识到,他们可以通过验证挖掘参与者的用户名(这些用户名可以从挖掘池网站上列举出来)并提交无效的工作来拒绝向他们提供服务在矿工提交了足够数量的无效块后,矿池将阻塞参与者的帐户,忽略所有进一步的工作并阻止未来的支付。这是通过需要密码验证和使用ip而不是基于帐户的禁令列表来修补的。
我们发现,今天,我们测试的所有矿池要么为所有帐户分配硬编码密码,要么根本不验证身份验证期间提供的密码。例如,所有 ViaBTC 账户似乎都被分配了密码123。 Poolin似乎根本不验证身份验证凭据。
Slushpool 明确指示其用户忽略密码字段,因为这是一个遗留的 Stratum 协议参数,现在已经没有用了。 20我们通过在矿池中注册多个帐户并检查他们的服务器代码(如果可用)发现了这一点。仅这三个矿池就占比特币哈希率的大约 25%。
每个矿工的工作是找到一个 nonce 值,当附加到矿池选择的块头时,散列到低于区块链当前难度设置的某个阈值的值。标题的某个部分特定于作业/矿工,以防止跨作业重复工作。矿池为每个作业选择基本标头以及作业之间(以及因此,单个矿工之间)搜索空间划分的策略不是 Stratum 协议的一部分;它是矿池专有的。 ViaBTC 是开源的,所以我们可以检查它是如何工作的。ViaBTC 为每个矿工创建了一个自定义的coinbase:成功时将奖励存入的地址。这就是防止矿工带着成功开采的区块潜逃的原因——由 ViaBTC 控制的奖励地址已经被嵌入到区块头中。 ViaBTC 还维护着一个全球性的、它添加到标题中的 32 位作业计数器,最大限度地减少作业之间的搜索空间重叠。
每个作业的搜索空间大小为2256比特中的296比特,攻击者通过重复的Stratum作业请求溢出作业计数器的可能性不大,因此作业重叠的可能性也不大。但是,矿池服务器将继续接受并执行计算,以验证未经不当身份验证的矿工提交的虚假工作,这可能会导致拒绝服务。

Sybil和Eclipse攻击:“其他”51%

针对 PoW 区块链的攻击通常围绕 51% 攻击展开:如果单个实体控制至少51%的网络哈希率,那么该实体可以以其他禁止的方式修改区块链,这是非常现实的威胁。
事实证明,还有其他形式的 51% 攻击通常会影响所有类型的区块链和分布式系统。如果区块链的共识网络充斥着由单方控制的新的恶意节点怎么办?毕竟,部署一个新节点只需要一个廉价的云服务器实例
——不需要专门的挖矿硬件。这称为女巫攻击。这种攻击可以用来影响网络的拓扑结构以获得影响力。
Sybil 攻击也可用于执行 eclipse 攻击:拒绝对特定节点的服务以获取影响力。
如果可以导致节点对网络有足够过时或不正确的视图,则此增加区块链分叉的概率:当两个矿工产生并广播具有相同父块的有效但不同的块时。分叉的分支变得越长,攻击者执行标准 51 所需的哈希率百分比就越低% 攻击。 23这是因为,最终,两个分支中的一个将成为区块链的规范头部,而另一个分支将成为所谓的“ommer”(以前称为“叔叔”)块。在 ommer 块中开采的任何交易都将失效,就好像它们从未被开采过一样。分叉降低标准 51% 攻击成本的原因是,任何用于扩展最终将成为 ommers 的分叉分支的哈希值都被有效地浪费了, 降低了区块链的有效全局计算效率。而且,只有直接连接到矿工的节点需要降级才能进行这种攻击。
分叉的概率由 (3) 的公式计算得出(德克尔和瓦滕霍夫, 2013)

其中 λ 是总挖掘率(即逆平均出块时间), Δ 是平均网络延迟。执行标准 51% 攻击所需的哈希率百分比(也称为攻击阈值)是公式(2)的结果(登博等人,2020):
变为,假设
根据我们基于 2021 年 1 月至 2021 年 6 月收集的数据进行的计算,由于网络的自然延迟,比特币网络的有效计算能力仅为其理论最大计算能力的 98.68%。换句话说,矿工有 1.32% 的时间在使用过时的信息进行操作,从而浪费了他们的时间。这意味着对比特币进行 51% 攻击的实际成本接近哈希率的 49%。
因此,与已有的理论相反,它实际上并不需要网络51%的哈希能力来发起成功的51%攻击,即使所有参与者都被认为是诚实的。由于意外地或恶意地引入了进一步的延迟,所需的哈希率可能会急剧下降。只需几分钟的延迟,接管阈值就会下降到40%,而不到一小时,它可能会低至20%。所有这些都应该放在这样一个背景下,即仅4个矿池就已经控制了超过51%的哈希能力。
2021 年 7 月, Grundmann 和 Baumstark 能够观察到对公共比特币节点的 Sybil 攻击。作者既没有得出结论也没有推测攻击的目的;但是,该攻击确实具有显着降低公共比特币网络连接性的效果。我们的分析表明,这种 Sybil 攻击可能启用了 eclipse 攻击。
Kwon 等人发现了比特币和以太坊等无许可区块链去中心化的近期不可能结果。这表明,要使区块链实现最佳分布,就必须存在所谓的 Sybil 成本。也就是说,单个参与者操作多个节点的成本必须大于操作一个节点的成本。不幸的是, Kwon 等人。得出的结论是,目前没有已知的方法可以在比特币或以太坊等未经许可的区块链中实现 Sybil 成本,而无需使用集中式可信第三方(TTP)。在没有 TTP 的情况下执行 Sybil 成本的机制被发现之前,无许可区块链几乎不可能实现令人满意的去中心化。

去中心化组织与幂律

偶然的观察者通常认为DLT的点对点网络是“无尺度的”。粗略地说,如果度为𝑘的节点的比例为𝑘−𝑐,且为某个常数𝑐,则网络是无标度的。这是一个合理的假设,因为许多其他自然现象,如社交网络,都以这种方式自组织。点对点网络中的无标度特性是可取的,因为它们在最大限度地减少传播延迟和网络连接之间提供了良好的平衡,允许网络以更少的互连更快地达成共识毕竟,该网络的目的是就区块链的当前状态达成共识,并向其他节点传播新的、未挖掘的交易。该信息在网络中传播得越快,就越难以通过执行上一节所述的eclipse攻击来利用信息延迟。
流行的区块链网络实际上是无标度的吗?事实证明,这方面的经验证据很少。虽然像以太坊这样的一些区块链使用对一致性有理论保证的对等发现协议,但比特币及其衍生品使用自定义协议,关于该协议的编写相对较少。比特币协议没有提供直接观察节点对等点的方法,尽管在某些罕见的条件下可以间接估计节点的对等点。
比特币的网络拓扑由其对等发现和连接算法决定,这是客户端实现的一部分,而不是协议本身。比特币核心——迄今为止最流行的比特币客户端实现——为影响对等互连以及网络拓扑的各种参数提供了硬编码常量。这些常数在其他任何地方都没有正式记录,但却极大地影响了共识网络的拓扑结构。检查这些常量(或者甚至知道它们存在,就此而言)的唯一方法是询问源代码。因此,比特币节点行为的唯一综合参考是其最受欢迎的客户端的源代码。
与其他对等方共享的已知对等地址数量的上限硬编码为 23% 或 1,000,以较小者为准。比特币核心默认不启用网络地址转换 (NAT) 遍历或通用即插即用 (UPnP),因此如果比特币节点在没有公共 IP 地址的情况下运行(例如,在家庭网络上或***后面),它将
无法接收来自其他对等方的传入连接。这些
非公开比特币节点只能进行传出连接,上限为 8 个。接受传入连接的公共比特币节点将其对等点数限制为 125。比特币客户端实现还试图通过限制其对等点 IP 地址的相似性来最大化其对等点的多样性。因此,虽然公共节点确实使用改进的优先连接形式相互互连——因此应该具有无标度特性——非公共节点充当公共节点中心周围的近似规则度辐条。
我们知道几乎每一个随机无标度图的直径都是非常小的:log n ÷ log log n,对于比特币来说,它的直径是5。比特币核心客户端在将新的验证过的区块传递给对等端之前有两分钟的硬编码延迟。因此,如果比特币是无标度的,我们预计平均的区块传播延迟为10分钟。然而,我们经常观察到块传播延迟小于10分钟,这表明该图实际上不是无标度的。我们对比特币网络的搜索显示直径接近4。这一证据支持了我们的假设,即一个密集的(可能是无标度的)公共节点子网在很大程度上负责达成共识和与矿工沟通。这一假设得到了对程度分布的经验估计的支持。

125 个对等点的学位分布有一个峰值,因为这是比特币核心客户端的默认上限。具有更多对等节点的节点要么运行不同的比特币客户端,要么运行经过修改的比特币客户端。
通过爬取比特币网络并查询已知节点的节点,我们可以估计公共比特币节点的数量(即主动接受传入连接的节点)。从整个 2021 年对比特币网络的爬取来看,我们估计公共比特币节点仅占节点总数的 6-11%。因此,绝大多数比特币节点对比特币网络的健康没有有意义的贡献。我们扩展了 Barabási-Albert 随机图模型来捕捉比特币对等的行为。该模型表明,在比特币网络的当前规模下,至少 10% 的节点必须是公共的,以确保新节点能够最大化其对等节点的数量(从而最大化网络的健康和连通性)。随着节点总数的增加,这个界限接近40%。

网络中心性

在上一节中,我们研究了 DLT 的节点网络如何影响中心化。但是实际的底层网络基础设施呢?至少在过去五年中, 60% 的比特币流量仅通过了三个 ISP。截至 2021 年 7 月,大约一半的公共比特币节点使用德国、法国和美国 AS 的 IP 地址运行,其中前四名是托管服务提供商(Hetzner、OVH、 Digital Ocean 和 Amazon AWS)。拥有最多节点的国家是美国(大约三分之一),其次是德国(四分之一)、法国(10%)、荷兰(5%)和中国(3%)。
此外,与此同时,大约一半的比特币流量是通过 Tor 路由的。这是执行 eclipse 攻击的另一个潜在表面,因为 ISP 和托管服务提供商有能力任意降级或拒绝服务到任何节点。传统的边界网关协议 (BGP) 路由攻击也被确定为威胁。
底层网络基础设施对于比特币及其衍生品尤为重要,因为所有比特币协议流量都是未加密的。未加密的流量适用于交易数据和块数据,因为它们是经过加密签名的,因此不会被篡改。但是,节点之间网络路由上的任何第三方(例如, ISP、 Wi-Fi 接入点运营商或政府)都可以观察并选择丢弃他们希望的任何消息。假设爱丽丝想将 1 转给鲍勃。她为转移创建一个交易,对其进行数字签名,并将其提交给一个节点以在整个网络中传播。交易尚未确认;它处于称为内存池的边缘。 Alice 的节点将把交易传给它的对等节点,直到消息最终到达与矿工(或者更可能是矿池)关联的节点。然后矿工可以选择将交易包含在一个区块中。一旦有 Alice 的交易的区块被挖出,它被传回一个节点,以便通过网络的其余部分传回。在这个过程中的任何时候,网络上的恶意节点、矿工或中间人都可以选择在交易被挖掘之前放弃对交易进行闲聊。如果矿池的节点没有充分连接到上一节中描述的公共节点的密集子网络,那么这种攻击就更容易了。
比特币协议还允许节点作为Tor隐藏服务运行。事实上,在比特币领域,Tor现在比任何其他as或网络提供商都更受欢迎,为大约20%的比特币节点路由流量。第二大的AS是德国的AS24940,仅占10%的节点。这是值得关注的,因为恶意Tor退出节点可以修改或删除与ISP类似的流量,如上所述。在过去的一年里,一个恶意的行动者(普遍认为来自俄罗斯)利用Sybil攻击获得了洋葱网络40%的出口节点的控制权。攻击者利用这些节点重写比特币流量。
我们提出了一个新的度量标准,它根据节点的拓扑位置捕获节点对整个网络共识的影响量:共识影响,等于节点的特征中心性。 节点的共识影响是共识影响的函数其同行;具有更大影响力的节点的节点本身也更有影响力。该值越高,节点对共识的影响越大。该定义的另一个属性是节点的共识影响力越高,通过它的八卦协议消息就越多。这个度量可以使用网络邻接矩阵的主特征向量来计算。正如预期的那样,非 Tor 节点比例最高的两个国家,美国和德国,在比特币中的总体共识影响力最高。

必须使用爬网数据和拓扑概率模型的组合来估计比特币的共识影响,因为比特币客户端没有明确地揭示他们的对等方。
我们想量化一个国家单方面封锁所有比特币流量对系统的影响程度。我们可以计算这种对节点一致性的影响以及对“哈希率可用性”的影响,我们将其定义为共识网络中的节点与网络中所有矿工之间的估计网络延迟,并按其哈希率进行归一化。节点的哈希率越低,它的消息在矿工之间的传输就越快。我们首先估计全球分布汇总共识的影响,如前一张图所示。接下来,对于每个国家,我们剔除该国家,并计算剩余国家***识影响力的新分布。我们通过比较分布的相对熵(Kullback-Leibler散度)来量化变化。这在下面的图表中被描述为蓝色条。我们重复这个过程,计算哈希率可用性的变化,如图中的红色条形图所示。较大的蓝条表示那些被移除的国家会对最终的共识网络拓扑结构产生最显著的影响。较大的红色条形图表示那些被删除对其他国家的通***问哈希率影响最大的国家。

软件中心性

如前所述,所有 DLT 节点都在相同的最新版本软件上运行至关重要,否则可能会发生共识错误并导致区块链分叉。软件差异和漏洞经常导致共识错误。例如,2021年8月24日,流行的以太坊客户端 Geth 的旧版本中的一个错误被匆忙修补。然而,Flexpool、 BTC.com 和 Binance矿池的参与者继续使用旧的、未修补的版本的软件。 2021年8月27日,不一致的补丁导致了以太坊区块链分叉的共识错误。2021年10月25日,在所有先前版本的 Geth 中发现了一个漏洞, 该漏洞允许精心制作的点对点消息对接收节点实施拒绝服务攻击。从我们对比特币网络的爬取中,我们观察到 21% 的比特币节点正在运行已知易受攻击的旧版比特币核心客户端。
虽然软件错误可能导致共识错误,但我们证明了公开的软件更改也可以修改区块链的状态。因此,区块链软件的核心开发者和维护者是系统中一个集中的信任点,容易受到针对性的攻击。目前有四个活跃的贡献者有权修改比特币核心代码库,任何人的妥协都将允许对代码库进行任意修改。最近,价值 80 亿美元的 Polygon 网络的主要开发人员 Jordi Baylina 最近受到了 Pegasus 恶意软件的攻击,该恶意软件可能被用来窃取他的钱包或部署凭据。
区块链客户端的重要性并不孤单——整个区块链软件生态系统都存在共识错误和差异的风险。例如,加密货币交易者必须决定是使用非托管钱包(即在本地数字钱包中管理和存储他们自己的凭证)还是在集中式托管交易所托管他们的凭证。大多数用户似乎都选择后者。这种选择不仅仅是为了将管理委托给第三方的便利性;这是关于一个人是否信任一个集中的第三方,而不是一个人自己的安全卫生和一个人的非托管钱包的开发人员。
我们为比特币、比特币现金、比特币黄金、以太坊、 Zcash、 Iota、 Dash、狗狗币、门罗币和莱特币的主要客户生成了软件材料清单 (SBOM) 和依赖图。然后,我们根据客户的归一化编辑距离比较了两个依赖图。
我们的编辑距离度量是通过比较所有共享依赖关系在它们的依赖关系图中的相对深度来计算的。如果两个依赖树之间共享依赖的深度不同,那么我们说它们的编辑距离是最小深度的倒数减去最大深度的倒数。对于在一个依赖图中但不在另一个依赖图中的所有节点,编辑距离是节点深度的倒数。然后,我们通过每个图中所有依赖项的逆深度之和对总编辑距离进行归一化。值 0.0 表示图完全不同,值 1.0 表示图相同。
正如预期的那样,比特币分叉和衍生品几乎与比特币相同。令人惊讶的是,独立开发的 Monero、Zcash 和 Geth 也与比特币非常相似。
随着 PoW 挖矿盈利越来越需要矿池,其相关基础设施的集中化和安全性变得越来越重要。最受欢迎的比特币矿池 AntPool 以黑盒、闭源 Windows 二进制文件的形式向其矿工分发客户端软件。据我们所知,从未对这些工具进行过第三方安全评估。 ViaBTC 是四大比特币矿池之一,已开源其客户端代码。该系统很复杂,是用 C 语言编写的,并且包括许多历史上难以用 C 语言实现的组件。例如,它包括处理外部web请求的手写解析器。矿池客户端中的任何远程代码执行漏洞都允许攻击者拒绝对矿池的服务(即降低整体哈希率)或将哈希率重定向到51%攻击。
链上软件也容易受到代码重用和漏洞的影响。例如,以太坊智能合约生态系统大量使用代码重用和共享来实现通用语言框架中本地不可用的通用功能。大多数合约使用OpenZeppelin 库对于诸如具有溢出/下溢检测和标准令牌 API 实现的数***算之类的东西。
我们在 2021 年 10 月对部署到以太坊区块链的 1,586 个智能合约进行了抽样,并使用Levenshtein 距离作为指标比较了它们的字节码相似性。人们会认为这样的指标会低估合约之间的相似性,因为它比较的是已经被编译器转换、组织和优化的低级字节码,而不是原始的高级源代码。选择该指标既可以作为相似性的下限,也可以在我们没有原始源代码的合约之间进行比较。我们发现 90% 的以太坊智能合约至少有 56% 的相似度。大约 7% 完全相同。
以太坊契约字节码包含嵌入的元数据,如原始源代码的散列以及编译配置细节。例如,如果用不同的缩进对一个源代码文件编译两次,这个散列就会不同。在执行上述比较之前,这些散列没有从二进制文件中删除,也没有任何常量操作数(例如,硬编码的契约地址)。这意味着契约之间的真正语义相似度可能比图中要高得多。这是因为如果忽略哈希值,供应商或复制/粘贴类似库代码的两个代码库(例如,OpenZeppelin或SafeMath,它们非常流行)将会更加相似。

结论

在本报告中,我们确定了区块链不变性受到质疑的几种场景,这些场景不是通过利用密码漏洞,而是通过颠覆区块链的实施、网络或共识协议的属性。区块链参与者的一个子集可以获得对整个系统的过度集中控制。大多数比特币节点都有不诚实行为的显着动机,事实上,没有已知的方法可以创建任何不具有 TTP 的恶意节点不受许可的区块链。我们为众多区块链提供了 Nakamoto系数的更新数据,并基于节点对共识的拓扑影响提出了区块链中心性的新指标。包括 Tor 在内的少数网络服务提供商负责路由大部分区块链流量。这对于比特币来说尤其重要,因为所有协议流量都是未加密的,因此, 容易受到中间攻击者的攻击。最后,区块链中的软件多样性在上游依赖和补丁方面都是一个难题。

————————————————分割线————————————————

一些不成熟的观点

  • 公有链:效率低,商用层面效率低。
  • 联盟链:现在一些企业/机构采用联盟链,虽然拥有多个节点,但是这些节点都被该企业/机构所控制,实质上退化成为多节点的私有链。
  • 私有链:与区块链去中心化/多中心化的思想相违背。