Filecoin网络安全度再度提升,恶意攻击判别规则出台

探讨Filecoin区块链中共识机制的重要性及恶意攻击的判定规则,解析连弩攻击原理及应对措施,强调共识机制对生态健康的影响。

 

本文由IPFS原力区Steven Li(胡飞瞳)原作 

对于任何一个区块链系统而言,共识机制都是基础。一个完备的共识机制才能保证安全,高效。共识机制的设计必须要能够高效地、公平地、快速地达成共识;同时共识机制的设计需要保护诚实矿工,惩罚恶意矿工,达到维护生态的目的。Filecoin团队最近对共识机制的恶意攻击判别规则出台。本文就此做一个简单解析。

 

缺乏保护,攻击连发

在 go-filecoin 的0.5.7 和0.5.8 的 devnet 运行过程中,系统遭受到多次攻击。具体的一些情况我的两篇文章:【Filecoin相关】近期的重力攻击手法分析 · 第三卷 【Filecoin相关】Filecoin 可以被称重 中有比较详细的描述。但就其中的连弩攻击,虽有提及,但没有详述。在前文中,我提到,这种攻击不完全是利用重量计算设计的不足,同时也用到了共识机制的不完善的地方。这个不完善,就是还没有实现惩罚机制。

什么是连弩攻击?简单地说,就是在自己有爆块权的时候,不顾共识设计,在同一个区块高度连出多个区块。在没有惩罚机制的情况下,当前系统仅仅认定当轮此矿工有出块权即为合法,而没有对连续出块进行保护。因此,所有的出块都会被认定为合法。此攻击矿工因此可以获得多个爆块机会,也可以增加许多重量。达到攻击整个链的目的。 更多内容可以参见 go-filecoin 的 issue #3523: 

 

  共识攻击,判处死刑

由于共识机制是一条链生存的基石,那么对共识的保护就尤为重要。尤其是像 Filecoin 这样的率先采用 POS 的链,这些设计同时也是为整个区块链世界打好一个坚实的基础。 

在去中心化的世界中,保护就是惩恶扬善。对于诚实矿工给予奖励,对于恶意矿工,给予必要的惩罚。其中,对于共识机制的攻击,因其牵涉到根本,惩罚是相当严重的。具体的惩罚措施如下:

 

All of the miner’s pledge collateral and all of their power is irrevocably slashed. This miner can never again produce blocks, even if they attempt to repost their collateral.                                                                                                       

翻译过来就是:

此攻击矿工的所有抵押全部没收,所有算力全部清零,永不恢复。同时,此矿工将不能再参与挖矿,即使重新发送抵押至网络,仍然不可。

什么意思?简单地说,就是判处死刑,没收全部财产,再也不能参与挖矿。

 

不坑不贪,老实做人

那么,具体哪些行为算是对共识的攻击呢?最近的讨论基本结束,共识错误的判定规则最近刚刚出台。主要有三条,直接列举如下:

1.双挖错误:同一矿工在同一高度产生两个区块

如下图:B4, B5 两个区块都是由矿工 C 产生的,但居于同一高度,因此违规。

 

2.跳块错误:在同一个tipset的基础上产生两个区块

如下图,B3, B4 都是在B2的基础上产生的,虽然他们不处于同一高度,仍然违规。

 

3. 藏块错误:产生区块时故意丢弃上一轮自己的区块

如下图:矿工B 在上一轮产生了区块B3,同时在下一轮由产生了区块B4,但区块B4本应该在B2+B3的基础上产生,但B4抛开了B3,因此违规。

 

 

基于这三条规则,我们来看一下连弩攻击,违反了哪些部分呢?这里,其同时违反了第1条和第2条规则。当这些规则实施后,连弩攻击者将会收到最严厉惩罚。因此也就不可能对网络造成威胁了。

 

社区贡献,完善机制

在这个规则的完善过程中,还有些小插曲。相信不少人都读过Spec,对共识错误的理解一开始就是十分费劲的。最初非常晦涩难懂。但基本意思是大致反映了前面提到的第一条和第三条。

但是前一段时间团队急于完善设计,听取了社区的意见,把这些规则明确化。但是,可能是疏忽,机制设计中剩下上面提到的第二条和第三条。这里注意,连弩攻击尽管是在同一高度产生的,但也违反了第二条,因此,这样的规定是可以阻止连弩攻击的。但是,这里有一个大问题,允许矿工在同一个高度挖矿。

社区成员Steven对此提出质疑,最初的回答是:如果限定不能在同一高度挖矿的话,可能有些轮次有可能陷入死锁。很吓人。但是这是真的吗?

其实不然,因为矿工总是可以往前挖的,当轮不行就走下一轮,所以一定不会出现锁住的情况。此其一;其二,如果允许在同一轮挖矿,必然会给分叉的收敛带来大麻烦。我更相信这次调整遗漏这一点是一个疏忽,而不是设计如此。

很快,最新版出炉,三个方面都做了很好的规定。由于这些定义非常重要,因此,在进一步确认的过程中,Juan建议采用 dotGraph花几张图来进行阐述,使其更容易理解。这就是上面几张图的来源了。

至此,本人以为,对共识错误判定(也是共识攻击的认定)的规则基本成熟。以后会不会进一步改动。有可能,但既要做到鉴别恶意矿工,又要保护诚实矿工,在一个去中心化的网络中并不容易。比如第三个错误定义,最好的就是不能丢弃所有你看到的合法的区块,但是这个很难判定。所幸的是,基于最重链原则,大家在产生区块的时候会自发地基于最终的tipset来做,从而提升自己被网络认可的概率。这个机制本身也起到了很好的保护作用。基于这些考虑,我认为,进一步改进的空间不太大。

同时,对共识的保护,在测试网上线前就会基本实现。因此,在测试网中,这些明显的根据未实现的功能产生的攻击应该会少很多。更多的应该是发现代码的一些bug吧。 

原文链接:https://ipfser.org/2019/11/19/filecoinwangluogongjifanji/

【IPFS原力区】

价值观:价值 共建 共享 荣耀

总部位于上海,聚集基于分布式网络&存储的众多技术大咖和爱好者,深耕基于 IPFS 的商业生态建设和社区发展。

每周二举办“分布式存储网络”主题沙龙,聚集了众多技术大咖和 IPFS 爱好者,通过持续输出全面、精细、优质的IPFS咨询和技术支持,将生态中的爱好者转化为IPFS支持者和参与者,共建IPFS生态的健康发展。

考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调案例与代码资源,涵盖微电网调、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值