写在前面:原文作者是Libra Calibra数字货币钱包项目的首席研究员Dahlia Malkhi,在这篇文章中,她介绍了Calibra团队最新研发的Twins拜占庭容错(BFT)系统检测方法,以用于检测LibraBFT算法的相关安全及活性漏洞。 (?Calibra首席研究员Dahlia Malkhi) 以下是译文:使用拜占庭容错(BFT)算法设计分布式协议并非是一件易事。 BFT模型是一个分布式系统,其中故障节点可以任意的、完全无约束的方式运行。然而,当拜占庭节点的偏离行为不可检测时,它们很可能成功地破坏了BFT协议。也就是说,最强大的拜占庭攻击实际是来自内部:攻击者发送具有正确格式的消息,并且它们与其他节点的交互似乎也遵循了协议。 实际上,在对BFT协议的几种已知攻击中(例如论文1和论文2)中,拜占庭节点以简单的方式偏离了正确的行为:它们表现为模棱两可(通过向不同的接收者发送不同的消息)、(向某些接收者)省略消息,以及删除内部状态变量等。 Calibra的Twins解决方案 利用这种洞察力,Calibra开发了Twins,一种用于BFT测试的“重要”方法。 Twins系统地生成有趣的拜占庭行为,这些行为可以被有效地枚举和测试,它放弃了对协议的无趣偏离,例如发送格式错误的消息或发送不合理的消息,而诚实的接收者很容易拒绝这些消息。 最重要的是,没必要去开发攻击逻辑来使用Twins 测试。节点执行未经修改的正确代码来攻击系统。Twins测试人员只是通过部署攻击节点的两个实例,而不是一个实例来“错误配置”系统。两个实例使用相同的标识(网络地址、签名密钥),因此,对于系统的其余部分节点而言,“孪生”节点显示为单个“行为不正常”的节点。 关于有趣的拜占庭行为 为了演示如何覆盖有趣的拜占庭行为,让我们设计一个简单的服务:一个只有一个条目的键-值存储(K-V store)。我们希望键-值存储能够容忍n=3f+1台服务器中的f 台拜占庭式服务器,这与解决共识所需的数量相同。 为了简化任务,我们将让客户端在请求更新存储值时签署更新。因此,拜占庭服务器将无法编造非法值,因为它无法伪造客户端的签名,但它可能会用过时的值响应查询,或者它根本不会响应。 存储协议:客户端更新存储值的协议有两个阶段:第一阶段,客户端为获取最新version(v)在3f+1台服务器中查询2f+1台服务器。在第二阶段,客户端请求3f+1服务器中的2f+1台服务器,将存储值更新至version v+1 。 让我们看一个例子。假设有四台服务器{A,B,C,D},其中C是拜占庭式的。第一个客户端连接到网络,向{A,B,C}查询当前version(为0)。客户端存储version=1的第一个值,并从{A,B,C}接收确认。第二个客户端查询{B,C,D}以获得当前version。我们说C是拜占庭式的,它可能说谎并返回version 0,隐藏version 1。这样就是没问题的,因为B服务器会返回version 1。 查询协议:现在我们需要处理服务器的查询问题。问题是,当客户端查询服务器时,它可能会捕获未完成的更新。例如,假设到目前为止,version 2只写到{A,C}。查询{A,C,D}的客户端将从C获得包含version 2的响应。但是,如果客户端查询{B,C,D},由于C是拜占庭式的,并且它可能会隐藏version 2,则仅返回version 1。更糟糕的是,C可能会来回切换,使用version 2来响应某些客户端,而对其他客户端则保持隐藏状态。 为了解决这个问题,我们将在查询协议中使用两个阶段:第一阶段,客户端为当前version查询2f+1台服务器,第二阶段将最高的version写回给2f+1台服务器。这样,假设客户端查询 {A, C, D},并返回version 2。那它就将version 2 写回给2f+1台服务器,比如 {A, C, D},从而保证version 2的更新已经完成。 注:由于解决键-值存储一直不是我们的重点,我们掩盖了上面的某些细节。另外,作为补充说明,在n=3f+1的情况下,解决键-值存储问题不需要客户端签名,请参阅此处的示例解决方案。 有趣场景的系统生成 注意我们在设计键-值存储时所做的一些事情: 我们创建了一些简单的场景,每个场景都有少量的服务器和少量的交换步骤;在每个交换步骤中,我们选择f台服务器来进行排除:第一个客户端从阶段1和阶段2中排除{D},第二个客户端从阶段1中排除{A},依此类推;我们允许拜占庭服务器C返回到旧状态并用旧值响应; 将上述内容放入一个结构化的场景中,我们通过拜占庭式服务器创建了以下一系列的交换,分区和“内部状态遗忘”: Exchange 1: client-1 phase-1 with {A,B,C};Exchange 2: client-1 phase-2 with {A,B,C};Exchange 3: client-2 phase-1 with {B,C,D};Exchange 4 (partial): client-2 phase-2 with {A,C} (and crash);Exchange 5: client-3 with {B,C,D}, C has its internal state erased. Twins系统地生成类似上面的场景,并通过拜占庭节点的孪生实例模拟遗忘等行为。重要的是,对于相当小的场景,Twins可以有效地枚举上述场景,以暴露协议漏洞。 总结 使用拜占庭容错(BFT)算法设计分布式协议并不容易。数十年来,研究人员一直在努力应对令人担忧的安全与活性(liveness)漏洞,在某些情况下,这些漏洞需要花上数十年的时间才能够被人发现。 Twins是一种新的BFT测试方法,它覆盖了很多(但并非全部)拜占庭式攻击,关于该方案的具体设计,读者可以看原论文。 Twins: White-Glove Approach for BFT Testing : https://arxiv.org/pdf/2004.10617.pdf 本文链接:https://www.8btc.com/article/592567转载请注明文章出处 —- 编译者/作者:玩币族 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
Calibra首席研究员:LibraBFT算法尚存在安全与活性漏洞,Twins系统可尝试解决
2020-05-07 玩币族 来源:区块链网络
- 上一篇:荷兰加密货币公司于5月18日发出最后通atum以进行注册
- 下一篇:你敢不敢搏一把?
LOADING...
相关阅读:
- 比特币和Tether大量流入证券交易所:Libra平衡2020-07-29
- Fomo3D团队将在波场推出投机游戏Just.game,Libra项目遭四大监管机构联合施2020-07-28
- 听证会丨求生欲满满的 Libra 和不信任的议员们2020-07-28
- 技术干货 | 详解Libra区块链及其共识协议2020-07-21
- 2020年第四季度将疯狂购买加密货币,DeFi,以太坊2.0和Libra2020-07-17