引言
现在工作是越来越繁忙了,听译视频的频率降得越来越低。为了尽可能跟上最新的研究进展,还是有必要坚持听译的。今天为大家带来的是来自密码学顶级会议CCS 2016的演讲视频《工作量证明区块链系统的安全性与可用性讨论》(On the Security and Performance of Proof ow Work Blockchains)。
如果对比特币和区块链技术有深入了解,就会发现比特币和区块链技术更多地涉及到了经济学和博弈论的相关知识。我们来看几个简单的例子:
- 比特币可以遭受51%算力攻击(51% Attack)。然而,如果攻击者真的发起51%攻击,虽然它可以篡改交易信息、获得大量的比特币,但这也要付出大量的算力成本。更重要的是,比特币账本的篡改很可能会导致人们对比特币系统丧失信心,使得比特币价格大跌,反而让攻击者遭受更大的损失。因此,虽然51%攻击理论上是可行的,但由于比特币已经牵涉到巨大的算力投入,实施51%攻击从经济角度讲是一件吃力不讨好的事情。
- 公链系统还可以遭受自私挖矿攻击(Selfish Mining Attack)。这是Eyal和Sirer在密码学著名会议Financial Cryptography 2014上提出的一种攻击方法。其基本思想是:攻击者在成功挖到一个区块后可以暂时不公开此区块,而是默默地在这个区块上挖下一个区块。当其它诚实节点挖到了这个区块后,攻击者再把自己挖到的这个区块公开出去。这样做的好处在于,攻击者由于先挖到了区块,他可以优先在这个区块之后继续挖矿,而诚实节点会把算力浪费在已经有下一个区块的区块上。这么做看似可行,但攻击者也有很大的风险:如果攻击者区块发布的速度不够快,全网可能会很快接受诚实节点挖到的区块,攻击者就会蒙受巨大的损失,还不如早早公开挖到的区块为妙。
为此,衡量区块链是否安全,不应该只从密码学或者协议的角度去分析,更应该把博弈论的思想引入其中,通过衡量攻击者的行为是否对自己最有利来判断区块链系统的安全性。而这正是本次视频的核心思想。在上我只给出此视频关键性的结论和重要的链接。由于上无法上传过大的视频文件,因此本视频的听译版本发布在我的知乎专栏中(https://zhuanlan.zhihu.com/p/49494558),感兴趣的读者朋友们可以去专栏上观看。连接打不开的原因是视频正在知乎审核,相信在11月13日上午就应该可以审核通过。
内容简介
要说区块链系统最大的问题就是交易吞吐量不足了。一般用系统所能支持的每秒交易量(Transactions per Second,TPS)衡量交易吞吐量。而影响交易吞吐量的核心参数有两个:(1)区块生成时间(Block Generation Time),即平均每隔多长时间可以生成一个区块;(2)区块大小(Block Size),侧面表示每隔区块所能容纳的交易数量。例如,比特币的区块生成时间为10分钟,区块大小为1MB,而比特币的每个交易所需要消耗的存储量大约为0.25KB,因此比特币的TPS为1000KB/0.25KB/60s=6.67。以太坊的区块生成时间大约为15秒,虽然以太坊没有规定每个区块的大小限制,但是由于区块越大,区块在网络中的传播速度越慢,因此以太坊实际的TPS约为20。从定性角度讲,我们可以很直观地得到下面的结论:
- 区块生成时间越短,出块速度越快,交易速度也就越快
- 区块大小越大,每个区块所能容纳的交易量越大,交易速度也会变快
如果区块链系统的点对点(Peer-to-Peer,P2P)网络没有网络延迟,所有区块都可以瞬间同步给全网所有节点,我们就可以把区块生成时间设置得足够小,区块大小设置得足够大,使得区块链系统支持任意高的交易吞吐量。但是,由于网络延迟的存在,全网所有节点并不总能很快地获得最新的区块信息,这就会导致竞争区块的出现。当全网挖出了两个区块时,两个区块就需要根据规则进行竞争,最终只有一个区块会胜出,而另一个区块将被废弃,成为废区块(Stale Block)此区块关联的算力也就被浪费了。
不仅是算力浪费的问题,竞争区块是区块链出现各种共识协议攻击的核心原因。正是由于竞争区块的存在,只要攻击者可以在篡改交易时确保被篡改交易所关联的区块可以竞争成为合法区块,攻击就可以成功。这就引入了区块链中针对共识协议的经典攻击:自私挖矿攻击,双花攻击(Double Spending Attack)。
直观来看,区块成为废区块的比率,即废块率(Stale Block Rate)越高,区块链遭受攻击的概率也就越高。实际测试表明,比特币的废块率约为0.4%(感谢比特币极慢的出块时间和严格的区块大小限制);以太坊的废块率约为6.8%(但由于以太坊中有叔区块的概念,因此虽然区块率被废弃,但关联的算力仍然起作用);狗币的废块率是0.6%,莱特币的废块率是0.3%。
有了这样的结论,区块链系统设计者们就要做出权衡了:
- 提高区块生成时间、增加区块大小,则交易吞吐量会显著提高,但区块链的安全性就会降低。
- 反之,降低区块生成时间、减小区块大小,交易吞吐量就会降低,但区块链安全性会提高。
我们要解决的问题是:不同的区块链系统会设置不同的参数,参与节点数量、算力分布、出块时间、区块大小、乃至攻击者所拥有的算力都不一样,如何横向对比各个区块链系统的安全性,从而选择最优的参数呢?
本视频对应的论文的主要贡献为:
- 提出了一种量化衡量指标,可以客观分析工作量证明区块链系统在抵御双花攻击、自私挖矿攻击方面的能力。
- 设计并实现了一个区块链仿真器,可以仿真区块链系统的各个参数,得到对应的废块率,从而帮助衡量区块链系统的安全性。
这一工作可以得到很多有意思的结果,例如:
- 可以把比特币的出块时间从10分钟提高到1分钟,使得比特币的TPS从6.67提高到66.7,同时不会牺牲比特币的安全性。
- 37个以太坊的区块确认量等价于6个比特币的区块确认量。考虑到以太坊的出块时间为15秒,而比特币的出块时间为10分钟,因此当交易被以太坊区块确认后,只需等待大约10分钟,其交易的安全性就等价于比特币等待60分钟的安全性。
- 自私挖矿攻击不一定是一个理智行为。在特定的场景下,与其实施自私挖矿,不如诚实挖矿的收益大。
- 区块挖矿回报率越高(用代币所具有的实际价格衡量),则区块链系统本身的安全性也会越高。
系统主要有2部分组成:
- 区块链仿真器,可以配置相应的参数实现区块链系统的仿真,得到废块率。支持设置的参数有:区块生成时间、各节点算力分布情况、区块大小、各节点的地理位置(即节点之间的网络延时)、节点维护的TCP连接数量(即各节点的网络吞吐量)、区块传播协议等。
- 安全模型,可以得到相应的安全量化指标。支持设置的参数有:攻击者所拥有的算力、攻击者的网络连接情况、攻击者分隔全网算力的能力(即日蚀攻击,参见我之间分享的视频:比特币点对点网络中的日蚀攻击)、全网默认交易的确认次数。
通过对比量化指标,我们就能横向对比各个区块链系统的安全性了。
论文作者们将区块链仿真器开源,感兴趣的朋友们可以下载下来试一试。