本文参考文件为:Conflux白皮书,CFX黄皮书导读
安全性系数出自 Rafael Pass, Lior Seeman, and Abhi Shelat. “Analysis of the Blockchain Protocol in Asynchronous Networks.” EUROCRYPT 2017.
论文下载链接
0.GHAST机制的核心
1.三种权重的最重链规则
同样采取最重链规则,但是区块有三种不同的权重:0, 1, X。其中 X 是一个比较大的数,例如 X=1000(先不讨论涉及挖矿难度调整的情形)。
额外限制:一个权重为 0 的区块不能成为主链(pivot chain)的一部分,也不能成为另一个区块的父亲区块。这个条件保证了每一个权重为 0 区块的子树权重一定是 0。
2.两种区块,最终权重的期望值还是1。
网络中有:普通区块和特殊区块。普通区块的权重永远为1;特殊区块的权重根据区块的难度值(Difficulty)确定——有 1/X 的特殊区块权重为 X, 其余为 0。挖出一个普通区块和挖出一个特殊区块的难度是一样的。
让矿工生成特殊区块,在共识机制中类似于将区块难度调高 X 倍,将出块速度放慢 X 倍。出块速度放慢后,是有利于解决“存活性攻击”的问题的。
3.区块的类型由区块的“历史树图结构”决定, 区块的生成者不能随意指定区块类型。
从这个区块开始,沿父边和引用边往前回溯,直到创世块,这些区块(不包括区块 b 自己)所构成的树图结构就是区块 b 的历史树图结构。
对于一个诚实节点来说,生成的区块 b 的历史树图结构就是节点生成这个区块 b 时所看到的树图结构。因为树图结构要求矿工引用所有看到的、未被引用的区块
4.两种区块和攻击的关系
在没有攻击的情况下,所有新生成的诚实区块都应当是普通区块;在攻击者进行任何一种“存活性攻击”,并且持续足够长的时间后,所有新生成的诚实区块都应当是特殊区块。
对于两者的中间状态,即观测到持续时间不长的攻击行为时,按照上一期文章中提到的“让诚实节点求同存异”的思想,我们允许一部分诚实节点生成普通区块,另一部分诚实节点生成特殊区块的状态存在。
实际上,活跃的攻击行为是可以从一个区块的历史树图结构中反映出来的。
如果一个区块的历史树图结构中有两棵大小相近且权重都很大的子树,则可以推测有一个攻击者正在进行平衡攻击。此时诚实的节点都应该产生特殊区块。
另一方面,如果历史树图结构中每个区块都可以根据确认规则很快地被确认,就说明没有什么问题(至少暂时没有可以被诚实节点观测到的问题)。此时诚实的节点都应该产生普通区块。
1.GHAST|保障CFX的存活性
设计流程:“设计方案——寻找并发现漏洞——否决并修改设计”
参考如何应对“存活性攻击”
一种思路是无效化攻击者的块;
一种是遭到存活性攻击时,通过放慢 Conflux 的出块速度来应对。
1.1 Conflux 保障存活性的基本思路
- 不使用区块接受时间建立共识
- 有攻击时调整挖矿难度
- 挖矿难度调整求同存异?
1.2 历史树图结构
判断一个区块是普通区块还是特殊区块的依据,必须也只能是这个区块的“历史树图结构”——这个结构包含了矿工在产生该区块时的主观视角下能看到的所有可被其他人验证的信息。
1.运行良好的链
2.两个大小相近的分支,且每个分支上都有比较多的区块。
比特币上很少见到超过三个区块的分叉,以太坊上超过十个区块的分支也很少。
正常情况下,几乎不可能有两个大小相近、且都有很多区块的分支出现。如果观察到这样的情况,就说明很可能整个区块链网络遇到了严重的问题,比如说正在遭受平衡攻击。
因此,这时候区块链网络的运行状态是异常的,我们需要放慢出块速度让算力重新集中,尽快解决分叉问题。
3.分割攻击情形
上下两侧在“分叉”上的区块都在互相引用对方,而主链区块却没有引用任何两侧的区块。
攻击者要么是两边的块,要么是枢轴链。根据算力,最可能是枢轴链上的块由攻击者产生,故意不引用两边。每个
每个区块的真实生成时间很难确定
4.GHAST 的判断规则
Conflux 最早设计出的规则:给定树图结构,我们对每一个主链区块 b 计算如下比值:
(b 的子树权重)/ (所有区块 - b 的父亲区块的祖先区块)
即b的子树权重/b+b的兄弟子树总权重
2.根据比值判断链的运行状况和是否遭到攻击
如果从创始块到区块 b 的所有主链区块都有这个性质,那么这些区块都可以得到确认,也说明此时区块链网络运行良好,没有遭到存活性攻击。这样的树图结构就是一个“正常的树图结构”。
反之,如果晚于某个主链区块生成的区块没有聚集在之后的主链分支内,则可以推测区块链网络可能受到了攻击,此时的树图结构是异常的。
三.损人不利己|避免特殊区块被过度利用
一个候机区块对当前区块是一个vote,而非一个confirmation。
这里提到的“交易确认”都是指交易的安全性达到相当于比特币中等待了 6 个区块的安全性。
没有攻击时,快出块快确认;有攻击,出块速度变慢,权重区块。
特殊区块被利用时的危害
CFX保证了在没有活跃攻击者的情况下,大概率可以在半分钟内确认交易(不低于比特币 6 个区块确认的安全性)。我们在内部测试网按照平均每 0.25 秒产生一个 300KB 区块的参数设置,实测得到了 23 秒的平均确认时间。
攻击者为什么不能主动触发特殊区块规则?