共识是分布式计算的一个基本问题。虽然大家都知道这个问题是无法解决的,但现有的协议是为了在各种假设下解决共识意见。今天,随着区块链的出现,各种共识实现被提出,以使副本就更新分布式账本的交易顺序达成协议。然而,很少有工作致力于评估他们的安全水平。因此,现有协议有时会被误解,而且通常不清楚在执行过程中出现的问题是由于实现错误还是更基本的设计问题。
比特币(Bitcoin)和以太坊(以太坊)等工作验证区块链在理论上和实践上都已被证明容易受到双重支出攻击。在我的一篇研究论文《从区块链共识到拜占庭共识》中,我已经讨论了主流的区块链共识算法,并警告了在没有准确理解其共识算法所提供保证的情况下使用这些区块链的危险。
以太坊是最受欢迎的开放区块链系统之一,这要归功于它所执行的分布式应用程序的巨大生态系统。但不幸的是,以太坊协议工作证明(PoW)是可分叉的,因为它允许在链的同一索引中添加不同的块。分叉可能会导致安全漏洞,比如在不被注意的情况下增加一倍的开销。
因此,这种趋势似乎在一种名为“权威证明”(PoA)的新协议中重用了拜占庭容错能力,这种协议旨在避免双重支出,最近已集成到部署最广泛的以太坊客户机 parity 和geth中,并被业界使用。
这些被称为Aura和Clique的以太坊共识算法实现了PoA,因为它们将块的创建限制为一组固定的权威节点(称为封闭器)。它们的目标是解决众所周知的拜占庭共识问题,即尽管存在拜占庭节点,但一组固定的节点可以在一个独特的块上达成一致。PoA授予封闭器封块的权限,该权限包括对块进行加密签名。如果一组参与者允许,这组封闭器可能会随着时间而改变,类似于所谓的社区区块链。对于那些不愿意花费大量CPU资源来换取用加密货币的回报,但更愿意避免分叉以提高安全性的行业来说,PoA是PoW的一个有吸引力的替代方案。
由于这些原因,PoA最近在业界获得了关注。Amazon Web Services通过内置在geth中的Clique协议向客户提供PoA。像Lavaa这样的工业公司提出了一种跟踪服务来防止欺诈伪造,这是在以太坊/Aura上进行的实验。他们实现了一个旨在维护多租户场景中的数据隐私和完整性的服务。微软描述了如何在生产中部署以太坊/Aura。他们建议Azure客户跨不同区域部署Aura协议,以提高服务的可用性。
然而,PoA协议提供的安全级别尚未评估,而且攻击者是否会破坏数据完整性还不清楚。由于业界正在建立在这些协议的基础上,以便在一个机构联盟中使用以太坊,因此评估它们的脆弱性变得至关重要。
在与悉尼大学(University of Sydney)和CSIRO的同事合作撰写的一篇新论文《克隆对权威证明的攻击》(The Attack of The Against Proof-of-Authority)中,我们探讨了PoA共识协议的漏洞和对策。
本文表明,在特定条件下,PoA是不安全的。我们设计、实现和实验了一种攻击,称为克隆攻击,针对以太坊/Aura和允许窃取数字资产的以太坊协议,并提出了减轻该漏洞的方法。
我们在私有测试网上部署了以太坊PoA的两个版本,并对这两个协议执行了克隆攻击。一方面,我们发现对于一个恶意的封闭器来说,Aura需要较少的拓扑知识,与Clique相比,它能够以100%的成功率实现双倍的开销。另一方面,对Clique的攻击速度大约快一倍,但根据恶意封隔器的拓扑知识,其成功率从60%到100%不等。因此,尽管以太坊最近引入了拜占庭容错,但当它在一个联合体中使用时,仍然非常容易受到网络攻击。
为了弥补这一缺陷,我们提出修改这两种共识算法,并保持其安全。然而,为了应对这一缺点,我们引入了一些潜在的限制,活跃的派系算法。
作为一种应对措施,我们提出了一个特别有前景的方案——Red Belly区块链。它依赖于民主的BFT来解决bb0拜占庭共识问题。因为它不依赖现成的算法,典型的拜占庭共识Red Belly区块链已经扩展到超过100共识参与者和处理工作负载超过每秒60万个交易,因此容忍一个潜在的更大数量的区块链参与者发行交易和要求比其他区块链好得多。与其他大型区块链相比,Red Belly区块链不需要任何工作量证明,因此可以实现快速沉降(通常在3秒内)。