GHAST 机制:“和平时期”,如何避免因为虚假警报而触发特殊区块规则

GHAST 机制:“和平时期”,如何避免因为虚假警报而触发特殊区块规则

Conflux中文社区 发布在 海盗号 10458

上一期文章简单介绍了 GHAST 规则,并通过一些例子向大家展示了如何利用树图结构判断网络是否正在遭到攻击,以及是否需要激活“特殊区块”规则这种对攻击的主动防御手段。

这次我们要讲的是 GHAST 规则的另一个方面:在“和平时期”,也就是没有攻击发生的情况下,如何避免因为虚假警报而触发特殊区块规则。

为什么要避免虚假警报呢?让我们回顾一下之前讲过的公链共识机制设计中效率与安全性的“两难问题”:

• 出块速度相对于区块的广播速度很慢的时候,共识系统安全性比较好,但是交易确认速度慢,性能较差;

• 出块速度越快,交易确认速度越快,同时也越容易受到攻击。例如比特币的最长链规则在快速出块时容易受到双花攻击;最重链规则虽然降低了快速出块时受到双花攻击的风险,但是仍可能遭到“存活性攻击”,即攻击者可以让共识系统无法确认新的交易。

注意:我们这里提到的“交易确认”都是指交易的安全性达到相当于比特币中等待了 6 个区块的安全性。

我们认为有些地方把一个后继区块称为“一个确认(one confirmation)”的说法纯属是混淆概念,准确的说法应该是“一个投票(one vote)”。基于工作量证明的区块链共识系统里每个区块本身就代表了矿工所投的票。

为了兼顾效率和安全性,Conflux 在支持高并发区块的树图结构的基础上设计了一个可以根据共识系统运行状况自动切换的 GHAST 机制。

GHAST 机制的原理是在没有明显的攻击时,采用较快的出块速度,以“小步快走”的方式保证较高的确认速度和更好的用户体验;在检测到攻击时,则切换至较慢的(共识权重区块)出块速度,以“一步一个脚印”的方式实现更稳健的共识,优先保证系统的存活性和安全性。

用大家比较熟悉的汽车打个比方,采用了 GHAST 机制的 Conflux 共识就像是一辆装了自动变速箱的越野车,在路况良好的时候可以切换到高速档纵情奔驰,遇到坎坷的荒野也可以用低速越野档平稳通过。比起没有越野能力的跑车或者速度缓慢的拖拉机,这样一台越野车无疑是长途旅行的必备神器。

但是,如果越野车遇到一个小水坑都要秒变拖拉机的话,最终体验跟拖拉机也就差不多了。避免因为虚假警报触发特殊区块规则,就像是越野车不应该稍有颠簸就降档降速一样,对于良好的用户体验是非常重要的。

接下来,我们通过一个例子来说明如果攻击者可以自作主张地主动触发特殊区块规则,会对整个共识系统带来怎样的影响。

假设每个普通区块的权重为 1;每个特殊区块的权重有 1/1000 的概率为 1000, 其余情况为 0。

现在,诚实节点控制 80% 的算力,在一棵子树下生成普通区块,攻击者控制 20% 的算力,在另一棵子树下生成区块。

如果攻击者只能生成普通区块,那么在诚实节点的子树领先 10 个普通区块后,攻击者反超的概率小于10^(-6)。

如果攻击者可以生成随意选择生成普通区块还是特殊区块,那么在诚实子树领先 10 个普通区块时,攻击者反超的概率不低于 24.83%;即使诚实子树已经领先了 100 个普通区块,攻击者反超的概率仍有 23.12%;在诚实子树领先大约 5500 个普通区块后,攻击者反超的概率才能降到 10^(-6)以下。(具体计算过程略。)

因此,如果我们要以不超过10^(-6)的风险确认区块,则在攻击者可以随意生成特殊区块的情况下必须等待几千个普通区块才行——即便此时根本没有这样的攻击者(比特币在没有攻击者的时只需要等待 6 个区块就能确认)!

这样就算是把出块速度提高了一百倍,最终确认时间依然和出块速度极慢的比特币相当。

在简单的可变权重规则设计下,攻击者只需对着创世块挖一棵足够大的子树并藏起来,之后就可以通过引用这棵子树来触发生成“特殊区块”的条件了。

而为了预防这种攻击,即使在风平浪静的时候,大家也不得不小心翼翼地放慢自己对于交易的确认速度。

为了解决这一问题,我们在上期提出的可变权重规则的基础上做了进一步的修改,最终消除了攻击者滥用特殊区块发起攻击的可能性。同时我们还证明,只要诚实节点没有观测到攻击行为,他们就可以安全地以一个比较快的速度确认交易。

最终,我们的设计保证了在没有活跃攻击者的情况下,大概率可以在半分钟内确认交易(不低于比特币 6 个区块确认的安全性)。我们在内部测试网按照平均每 0.25 秒产生一个 300KB 区块的参数设置,实测得到了 23 秒的平均确认时间。

这也是迄今为止,基于工作量证明设计的公链中所达到的最快的确认速度,甚至超过了一些不那么去中心化的联盟链和 DPoS 链。

按照中本聪共识的最长链规则,如果想保证安全性,平均出块时间就必须足够长,这样必然会严重拖慢交易的确认速度。

我们放弃了“优化中本聪共识最长链规则”的道路,另辟蹊径在树图结构的基础上设计了 GHAST 规则,将出块速度提升到每秒 4 个区块,并最终在最为重要的确认时间上取得了根本性的突破。

实际上,上面所说的 23 秒的确认时间还有继续提高的可能性,而且无需修改现有的共识协议设计和参数选择。

这是因为 23 秒的确认时间实际上是包含交易的区块在所有区块的全排序中的位置(即交易在整个账本上的位置)被固定下来所需的时间。而在逻辑上确认一笔交易,未必需要等到区块的位置完全固定,只需保证可能出现的变动不影响交易有效性即可。

所以,至少对于没有冲突的简单转账交易,我们可以在区块得到确认之前就确定交易必然会被执行,从而进一步缩短快速转账的确认时间。

 

文章标签: 区块链
评论
登录 账号发表你的看法,还没有账号?立即免费 注册