Paul C's Blog

To be funny,to grow up!

0%

CFX5-1

本文参考文件为: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
3
4
5
6
7
8
/*
1、共识机制只基于树图结构中每个区块的父边和引用边,不再使用区块接收时间这种对不同节点可能不一致的“本地信息”。

2、通过调整挖矿的难度,来实现对 Conflux 出块速度的调整。在没有攻击时,Conflux 使用较快的出块速度来追求效率;有存活性攻击时,Conflux 放慢出块速度来确保安全。出块速度放慢时,要相应提高区块奖励,以保证矿工的利益。

3、挖矿难度不能让矿工自己说了算,但也无法做到让所有诚实节点同时切换。在具体的难度调整机制上,我们依然需要使用求同存异的思路。

*/

1.2 历史树图结构

判断一个区块是普通区块还是特殊区块的依据,必须也只能是这个区块的“历史树图结构”——这个结构包含了矿工在产生该区块时的主观视角下能看到的所有可被其他人验证的信息。

1.运行良好的链

image-20201128144456935

2.两个大小相近的分支,且每个分支上都有比较多的区块。

image-20201128144552979

比特币上很少见到超过三个区块的分叉,以太坊上超过十个区块的分支也很少。

正常情况下,几乎不可能有两个大小相近、且都有很多区块的分支出现。如果观察到这样的情况,就说明很可能整个区块链网络遇到了严重的问题,比如说正在遭受平衡攻击。

因此,这时候区块链网络的运行状态是异常的,我们需要放慢出块速度让算力重新集中,尽快解决分叉问题。

3.分割攻击情形

image-20201128144752963

上下两侧在“分叉”上的区块都在互相引用对方,而主链区块却没有引用任何两侧的区块。

攻击者要么是两边的块,要么是枢轴链。根据算力,最可能是枢轴链上的块由攻击者产生,故意不引用两边。每个

每个区块的真实生成时间很难确定


4.GHAST 的判断规则

Conflux 最早设计出的规则:给定树图结构,我们对每一个主链区块 b 计算如下比值:

(b 的子树权重)/ (所有区块 - b 的父亲区块的祖先区块)

即b的子树权重/b+b的兄弟子树总权重

  • 比值大于某个常数(比如 0.6),说明在所有生成时间可能晚于 b 的父亲区块中,多数区块都在 b 的子树中。

  • 本身分母也比较大:足以保证 b 的子树权重优势足够大,很难被它的兄弟区块超过了。

2.根据比值判断链的运行状况和是否遭到攻击

如果从创始块到区块 b 的所有主链区块都有这个性质,那么这些区块都可以得到确认,也说明此时区块链网络运行良好,没有遭到存活性攻击。这样的树图结构就是一个“正常的树图结构”。

反之,如果晚于某个主链区块生成的区块没有聚集在之后的主链分支内,则可以推测区块链网络可能受到了攻击,此时的树图结构是异常的。

三.损人不利己|避免特殊区块被过度利用

一个候机区块对当前区块是一个vote,而非一个confirmation。

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

有攻击时,快出块快确认;有攻击,出块速度变慢,权重区块。

特殊区块被利用时的危害

1
2
3
4
5
6
7
8
9
10
11
/*
假设每个普通区块的权重为 1;每个特殊区块的权重有 1/1000 的概率为 1000, 其余情况为 0。

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

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

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

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

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

攻击者为什么不能主动触发特殊区块规则?