RSKBLOCK标签中的分叉检测数据

  • rsksmart
  • 发布于 2022-04-26 15:53
  • 阅读 11

该RSKIP提议修改RSK的共识机制,通过在RSK merge-mining标签中添加额外信息,使用户或自动化系统能够更准确地判断网络健康状况,并对异常情况做出自主响应,以保护经济节点免受双重支付攻击。新标签格式旨在提供足够的信息来识别矿工是否在同一链上挖矿,并检测是否正在创建平行自私区块链,同时考虑空间限制,防止矿工滥用新标签格式。

RSKBLOCK 标签中的分叉检测数据

RSKIP 110
标题 RSKBLOCK 标签中的分叉检测数据
创建时间 2019
作者 SDL
层级 Sec
复杂度
状态 草案

摘要

RSK 是联合挖矿的。由于挖掘 RSK 的矿工想要获得比特币奖励,因此未发送到 RSK 网络但在联合挖掘 RSK 时产生的区块,会通过比特币区块的 coinbase 交易中的 RSKBLOCK 标签暴露出来。矿工可能不会将 RSK 区块发送到 RSK 网络的原因有很多,即使他已经解决了它:节点可能被攻击者或错误地与网络隔离,节点可能由于共识分裂错误而失去共识,或者节点可能恶意地构建一个平行链,以准备进行双花攻击。对于所有这些情况,能够正确诊断系统状态至关重要。此 RSKIP 提出对 RSK 共识进行修改,向 RSK 联合挖矿标签添加额外信息,以便用户或自动化系统可以就网络健康状况做出明智的决策。网络节点还可以自主响应异常情况,从而保护经济节点免受双花影响,并向网络的其他节点广播此类状态的简洁证明。

讨论

此 RSKIP 提议使用一种新的 RSK RSKBLOK 标签格式。新的 RSKBLOCK 标签必须能够提供足够的信息来识别矿工是否在同一条链上挖矿,并以高概率检测是否正在创建平行自私区块链。诊断方法不必精确,因为以高概率检测双花尝试的能力可能足以阻止此类尝试。

例如,我们可以将最后 60 个 RSK 父区块 ID 的列表附加到标签中。就比特币 coinbase 交易中消耗的空间而言,此解决方案成本很高。因此,我们希望使用尽可能短的标签。此外,更改标签的大小(目前为 32 字节)是有问题的,因为它需要修改 Mining Pool 服务器中 RSK 联合挖矿插件的每个实现。

我们希望构建一个尊重空间限制并且在理性矿工的假设下仍然安全的标签。经济激励措施必须阻止矿工滥用新的标签格式。

我们设计的标签包括区块号、过去 32 个区块中创建的叔块数量,以及与高度为 h(i) 的 7 个最接近的 RSK 祖父母区块对应的比特币区块 ID 的 LSB,这些高度由 (h(i) % 64) == 0 选择的检查点确定。

防止恶意矿工试图通过模仿 LSB 值来隐藏他正在挖掘备用链的事实。

比特币区块 ID 的 LSB 被认为是实际随机的,因为它是 PoW 的一部分。没有暴力破解,矿工无法选择 LSB 来匹配特定值。暴力破解 LSB 平均会丢弃该过程中的 255 个有效比特币区块,因此哈希成本非常高。想要伪造 n 个父项承诺的 LSB 的恶意矿工必须投入至少比诚实矿工多 256 倍的能量。换句话说,只有当 RSK 的哈希率低于比特币的 1/256 时,恶意的比特币矿池才能伪造 RSK 链。这也意味着,如果恶意矿工试图每 64 个区块连续进行双花,那么平均每 2^56 次尝试(约 22000 亿年)他才会成功一次。

标签中信息的准确性

64 区块间距是在分叉检测精度和攻击者所需能量建立的安全阈值之间的一种权衡。比特币区块仅提供“模糊”的 RSK 分叉信息。例如,如果 RSK 拥有比特币 50% 的哈希能力,那么平均每 40 个 RSK 区块中只有一个比特币区块会在比特币中发布,因此父引用 64 区块的间隔与不可避免的“测量误差”处于同一数量级。如果 RSK 哈希能力降至比特币的 25%,那么平均每 80 个 RSK 区块中会有一个在比特币中引用。

防止恶意矿工试图隐藏父项承诺之间的重叠

七个以 64 区块间距的引用表示最多 448 个 RSK 区块引用,或者平均约为 11.2 个比特币区块(在单独挖矿时)。这意味着,如果恶意的 RSK 联合矿工拥有的比特币哈希率低于 1/11.2,那么他生成的区块将不会显示承诺引用中的重叠,这限制了其检测长平行链的有用性,但它对于检测多达 448 个 RSK 区块的分叉仍然有用。无论如何,比特币哈希能力的 1/11.2 是 9%,因此只有当 RSK 的哈希率低于比特币的 9% 时才会出现此限制,但截至 2019 年 3 月,该比率已超过 35%。

防止恶意矿工单独挖矿以在分叉检测方法中产生误报

RSK 平均区块间隔约为 30 秒,但由于同胞区块和 RSK 中的难度调整算法,RSK PoW 和比特币 PoW 之间的实际比率不是 1:20。因此,创建一个自私链并且哈希能力与诚实链相同的恶意矿工可以增长一条比诚实链更长的链(但总难度相同)。链的实际总难度未在标签中公开,这是一个缺点。这不容易解决,因为累积难度目前是一个 90 位数字(12 字节)。可以从不小于 2^16 个区块的检查点存储一个增量累积难度,仅消耗 11 个字节,但这仍然过多。例如,如果 RSK 拥有比特币 25% 的哈希能力,并且诚实的 RSK 矿工平均每个区块创建一个叔块,并且攻击者也具有相同的能力但不会创建叔块,那么攻击者将设法在他的比特币区块之间挤压 160 个 RSK 区块。社区可能会对矿工创建比诚实链更长的私有链发出警报,但这可能是误报。这就是为什么我们添加 1 个字节来包含最后 32 个区块间隔中的叔块数量,以便更好地检测单独挖矿(请注意,此处的间隔为 32,而不是 64)。

防止恶意矿工挖掘叔块以在分叉检测方法中产生漏报

如果仅观察到链的长度,攻击者可以挖掘叔块(每个区块最多 7 个),以便降低表面上的哈希率。然而,攻击者的真实哈希能力可以从他发布的比特币区块的数量推断出来,但统计方差可能会使这种比较不是很准确。包含叔块数量的额外字节提供了关于矿工如何创建链的额外线索。

防止恶意矿工试图重用工作量证明

使用 20 个字节来识别 RSK 区块已经绰绰有余,因为查找前像的难度为 2^160(远高于当前 RSK PoW 的 2^70)。使用 2^80 次生日攻击在联合挖矿区块标识符上创建 160 位冲突需要 2^80 内存(1,208,925,819,614 TB),这目前是不切实际的。此外,160 位前缀冲突不能用于拆分 RSK 区块链,因为 RSK 区块 ID 仍然是 256 位长。前缀冲突只能用于将相同的工作量证明分配给两个不同的 RSK 区块,在这种情况下,这些区块将共享相同的高度,这意味着它们也将分割相同的奖励。只有当在相同高度存在其他同胞区块时,攻击者才会增加其奖励的比例。然而,在这种情况下,挖掘同胞区块需要更少的努力,即使难度提高了 100 万倍。换句话说,即使前缀只有 140 位长,攻击者的预期利润仍然为负。

防止恶意矿工试图阻止交易确认(活性)

该系统没有针对比特币矿工试图阻止 RSK 上受此方法保护的高价值交易确认的具体保护措施。矿工可以创建一个完全虚假的标签。然而,攻击的后果不会比攻击者构建一条真实的自私链来执行双花(对区块链健全性的攻击)更糟糕。检测系统可以通过产生的比特币区块数量来推断攻击者的哈希能力,以检测模拟具有高 RSK 哈希能力的少数矿工。

防止恶意矿工试图从过去的区块创建新的区块链

此方法无法阻止矿工从过去的时间点(例如,2000 个区块前)创建区块链,因为双花涉及的两个交易中的第一个可能已被接受。然而,从过去的时间点创建新的区块链分支比从当前区块创建分支要困难得多,因为攻击者必须胜过诚实分支。

任何试图阻止新的正确分支替换旧分支,因为它更新得多的尝试都会修改共识协议,并会带来网络分区风险。即使可以通过检查比特币时间戳来准确地确定这一点,也是如此。

变体

可以使用对非等间距检查点的引用,而是在 2 的幂(32、64、128、256、512、1024、2048)处。使用检查点的条件是已超过较低幂的所有检查点。例如,只有在已引用 A 之后的 64 和 32 个值的检查点后,才会引用值为 128 的检查点 A。非等间距系统的好处是检查点不会“滚动”,并且仅使用单个区块,监控系统可以在 2 倍范围内精确定位分叉长度。该方法不需要加入多个区块标签,以便检测长度大于 448 个 RSK 区块的链。缺点是它仅限于高达 2048 的分叉,而通过加入等间距标签,可以检测任意大小的分叉(当且仅当攻击者拥有足够的哈希能力时)。

规范

32 字节的用于联合挖矿的区块头哈希值被替换为具有以下格式的 32 字节字节数组:

  • 用于联合挖矿的哈希值的前 20 个字节 (PREFIX)
  • 7 字节的提交到父项向量 (CPV)
  • 1 字节的过去 32 个区块中的叔块数量 (NU)
  • 4 字节的区块号 (BN)

CPV 字段是一个向量 V,其元素为 v(i)(i = 0..6),其中每个 v(i) 包含与高度为 ( [(BN-1)/64]*64 - i*64 ) 的 RSK 区块关联的比特币区块 ID 的最低有效字节 (LSB)。([x] 表示 x 向下取整)

如果过去 32 个区块未引用任何叔块,则叔块数量 (NU) 可以为零。引用的叔块可以是先于过去 32 个区块的区块的同胞区块。正在挖掘的区块不计算在内。每个区块最多可以引用 10 个叔块,因此 32 个区块可以引用 320 个叔块,但 NU 字段使用的空间只有 1 个字节。因此,如果叔块的数量超过 255,则存储值 255。叔块数量的存在将表明网络出现异常情况或遭受攻击。

BN 字段必须对应于正在挖掘的 RSK 区块高度。

所有值必须以大端字节序存储。

必须在共识中检查所有四个字段。此系统要求执行状态同步的节点在其想要开始验证的区块之前下载 448 个区块头。

版权

版权和相关权利通过 CC0 放弃。



>- 原文链接: [github.com/rsksmart/RSKI...](https://github.com/rsksmart/RSKIPs/blob/master/IPs/RSKIP110.md)
>- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
rsksmart
rsksmart
江湖只有他的大名,没有他的介绍。