本文提出了一种名为 SubnetDAS 的中间数据可用性抽样(DAS)方案,旨在弥合 EIP-4844 和 Danksharding 之间的差距。该方案基于子网,每个样本对应一个子网,节点通过连接到这些子网来获取样本。SubnetDAS 牺牲了查询的不可链接性,但旨在提供更高的可扩展性,同时不影响整个网络的活跃性或增加节点需求。该方案还讨论了安全性分析以及吞吐量与带宽之间的权衡。
作者: Francesco 和 Ansgar。感谢 Mark Simkin 的讨论和安全分析方面的帮助,以及 EF 研究团队的各位成员的反馈。
这是一个基于子网的 DAS 提案,旨在弥合 EIP-4844 和完整 Danksharding 之间的差距,很像 peerDAS。我们提出了一种 DAS 构造,其中每个样本都有一个子网,节点通过连接到这些子网来获取它们的样本。我们认为,与 EIP-4844 相比,这可以为我们提供更多的扩展性,而不会危及整个网络的活跃性或增加节点需求。
为此,我们确实牺牲了一些东西,即 查询的不可链接性,或者更确切地说,是在此 DAS 框架内稍后解决此问题的可能性。要检索样本,节点必须加入相应的子网,并且在尝试这样做时,它会暴露其查询。这使得攻击者只能发布那些样本,从而使其确信数据是可用的而实际上并非如此。查询的可链接性是所有 DAS 构造都面临的问题,但特别难看出如何在基于子网的构造中解决它。它不会影响整个链的可用性保证,因此也不会影响 Rollup 的安全性,但它确实削弱了完整节点针对双重支付的安全性。我们将在后面详细讨论此问题,并认为这种削弱并不像看起来那么重要,并且对于中间 DAS 解决方案来说,这可能是一个明智的权衡。
我们认为子网是中间解决方案的主要网络结构的一个合理的候选者,原因如下:
未来兼容性:我们认为即使在 DAS 的未来迭代中也会使用子网基础设施,因此这项工作是可重用的:
无论 DAS 的最终网络构造如何,完整 Danksharding 的网络结构都可能涉及子网,其中 Danksharding 方阵的行和列被分配到这些子网中,并且至少验证者会加入这些子网以下载分配给他们保管的行和列(这在 peerDAS 中也有假设)。
即使在以后的迭代中,使用某种形式的 subnetDAS 用于验证者的分叉选择仍然可能是有意义的,这不需要使用完整节点在其分叉选择中使用的相同 DAS 构造来遵循链并确认交易(有关详细信息,请参见此处)。当用于此目的时,subnetDAS 的弱点是可以接受的或无关紧要的:
查询的可链接性无关紧要,因为对于验证者的分叉选择,我们只关心全局可用性保证,而不是单个保证(不必担心双重支付保护,因为这不用于确认交易)。
可以预期验证者比完整节点具有更高的带宽要求,因此即使从长远来看,对验证者保持与 4844 相似的带宽要求也可能是可以的。
即使在以后的迭代中,也可以选择使用 subnetDAS 作为分叉选择过滤器,同时仅当作为确认规则的一部分时才使用一些额外的采样(同样,请参见此处了解详细信息)。例如,完整节点可以通过仅使用 subnetDAS 进行分叉选择来跟踪链(验证者参与共识),同时仅进行一些对等采样以确认交易。对等采样的活跃性失败只会影响完整节点确认交易的能力,而不会影响 p2p 网络、共识和超级完整节点的交易确认。这种额外的采样甚至可以是可选的,从而使完整节点可以选择其自身在确认安全性和活跃性之间的权衡。与前面的要点一样,由于作为确认规则的一部分进行的额外采样,查询的可链接性将无关紧要。
参数 | 值 | 描述 |
---|---|---|
b | 128 | Blob 数量 |
m | 2048 | 列子网数量 = 样本数量 |
k | 16 | 每个插槽的样本数量 = 每个节点的列子网数量 |
r | 1 | 每个验证者的行子网数量 |
Blob 为 128 KiB,与 EIP-4844 相同,非扩展数据的总吞吐量为每个插槽 16 MiB。
使用示例参数,每个列子网拥有 k/m = 1/128 的所有完整节点,每个行子网拥有 r/n = 1/128 的所有验证者
blob 在行子网中分发,样本在列子网中分发,同时进行。
完整节点通过连接到相应的子网来查询每个插槽的 k 个样本。这只是在一维扩展上进行采样,但样本是“长的”(列而不是点)。
使用示例参数,总共为 16^2 = 256 KiB,甚至低于 EIP-4844(对于验证者来说,还有从行子网下载 r=1 个扩展 blob 的额外负载,额外增加 256 KiB)。
保留期内的数据可检索性提出了与此处类似的问题。为了解决这些问题,可以错开子网的轮换,并在数据保留期的时间范围内进行轮换。这样做的效果在 subnetDAS 中与在 peerDAS 中截然不同,因为子网的选择就是样本的选择,因此不每插槽轮换子网的选择意味着始终对相同的索引进行采样。
为了解决这个问题,我们可以让节点连接到 2k 个子网,其中 k 个是稳定的,k 个是每插槽轮换的。连接到前者纯粹是为了帮助子网密度和数据可检索性,而后者实际上是用于采样的。尽管如此,subnetDAS 仍然特别容易受到查询的可链接性的影响,因此即使在这种情况下,稳定的子网选择也可能是有意义的。
本地重建可以在行子网中进行。如果在行子网中缺少某些数据,但在列子网中存在,则同时位于两个子网中的验证者会在行子网中传播丢失的数据。扩展 blob 中 > 50% 的数据可用后,行子网中的所有验证者都会在本地重建它,然后将来自此行的任何他们丢失的数据带到他们的列子网。
我们分析了此构造的两个安全方面(同样,请参见此处了解有关安全概念的更多详细信息):
这些与完整节点的两个角色并行:有助于强制执行网络规则,并允许与链进行最小信任的交互。第一个安全属性使完整节点能够有助于强制执行构建在以太坊上的 Rollup 的规则,最终保证其安全性,前提是只有少数完整节点将其视为规范的链永远不会最终成为以太坊链,即使所有验证者都是恶意的。重要的是,即使攻击者事先知道所有查询,这仍然成立。
第二个概念要强大得多:我们要求任何采样节点都不能被欺骗完全(除非以可忽略不计的概率)。为了实现它,我们不能假设攻击者事先知道所有查询。实际上,它需要查询不可链接性,即隐藏一组查询来自同一节点/参与者的能力,因为如果没有这种能力,攻击者始终只能提供单个节点所请求的确切数据。
如果 Rollup 在较弱的概念(全局安全性)下是安全的,并且数据可用性的全部意义在于供 Rollup 使用,那么我们为什么需要这种更强的安全概念?这是因为 DA 层与以太坊链的其余部分紧密耦合:完整节点只是忽略某些 blob 数据不可用的链。欺骗完整节点认为不可用数据是可用的,可能会使它们遭受安全违规,即双重支付:它们确认有效链中的交易看起来安全且可用,但实际上不可用,因此最终不会成为规范的以太坊链。这适用于以太坊交易以及 Rollup 交易的确认,因为 Rollup 状态是从规范的以太坊链派生的。
我认为引入没有查询不可链接性的 DAS 不会过多地改变以太坊完整节点针对双重支付的安全性。有两种情况,基于完整节点一开始使用的确认规则:
此外,请记住,运行一个下载所有数据的超级完整节点将是一个选择,当然对于那些交易大量价值并希望获得与今天完整节点相同的针对双重支付的完全安全保证的人来说,这并不是一个过高的成本。至少值得讨论的是,这种(我们认为微小的)完整节点交易确认安全方面的降低是否真的是一个不可逾越的问题。
确认 Rollup 交易的安全性情况非常相似,但还有一些围绕有效性的考虑因素,再次取决于 Rollup 节点使用的确认规则。让我们假设基线确认规则是以太坊最终性,然后通过一些特定于 Rollup 的条件来增强它。
对于有效性 Rollup,明智的选择显然是在确认之前等待有效性证明,但不一定是为了在以太坊本身上发布和验证它。这样的节点确实获得了与以太坊完整节点在确认最终确定交易时相同的完全安全保证(模数证明系统的问题或验证器的实现),因为保证了有效性。换句话说,唯一的攻击向量是我们在上一节中讨论的相同类型的双重支付。
对于乐观 Rollup,有多种选择。可以运行 Rollup 完整节点并简单地验证所有状态转换,在这种情况下,显然没有其他问题。当然,这并不理想,因为 Rollup 节点原则上可能比以太坊节点重得多。它也可以只是等待 Rollup 桥来确认交易,这同样安全,但由于欺诈证明期而需要更长的确认期。另一种选择是侦听 p2p 网络上的(发起)欺诈证明的消息,这可能以比桥更短的欺诈证明期来完成。如果最终确定了不可用数据并且被欺骗认为它是可用的,则可以诱导运行这种快速确认规则的节点确认无效交易。
总结:即使一个事先知道所有查询的攻击者也无法说服超过一小部分采样节点,不可用数据是可用的
对于自适应攻击者,在决定提供哪些数据之前,它会同时考虑所有查询,当从总共 m 个样本中下载 k 个样本时,成功定位一小部分 \epsilon 的 n 个节点的概率可以通过 \binom{n}{n\epsilon}\binom{m}{m/2} 2^{-kn\epsilon} 进行联合限制:攻击者选择一个 n\epsilon 节点的子集,从 \binom{n}{n\epsilon} 个可能的子集中选择一个,一个由至少 \frac{m}{2} 个样本组成的子集,使其不可用,从 \binom{m}{m/2} 个这样的子集中选择一个,并且在给定这些选择的情况下,成功的概率为 2^{-kn\epsilon}。近似二项式系数,我们得到 \left(\frac{2^{n}}{\sqrt{\frac{n\pi}{2}}}e^{-\frac{\left(n\ -\ 2n\epsilon\right)^{2}}{2n}}\right)\frac{2^{m}}{\sqrt{\frac{m\pi}{2}}}2^{-kn\epsilon} = \left(\frac{2^{n}}{\sqrt{\frac{n\pi}{2}}}e^{-\frac{\left(n\ -\ 2n\epsilon\right)^{2}}{2n}}\right)\frac{2^{\left(m-kn\epsilon\right)}}{\sqrt{\frac{m\pi}{2}}},我们希望这个值小于 2^{-30} 或类似的值。这给了我们 (n + m - kn\epsilon) - \log_{2}\left(e\right)\frac{n\left(1\ -\ 2\epsilon\right)^{2}}{2} < \log_2(\sqrt{nm}\frac{\pi}{2})-30
在下面的图中,我们设置 k = 16 和 m = 2048。在 y 轴上,我们有 n,即节点数,在 x 轴上,\epsilon 是可以被欺骗的最大节点比例(这里特别是在概率 \ge 2^{-30} 的情况下,但结果对所选的失败概率几乎不敏感)。只要我们至少有 2000 个节点,那么不到 10% 的节点会被欺骗,认为不可用的数据是可用的。此外,在 6000 到 10000 个节点之间,可攻击节点的比例下降了 5% 到 4% 之间。
(你可以在此处使用这些参数)
也许值得注意的是,使用 m = 512^2(在正方形上进行采样)和 k = 75 进行的完整 Danksharding 采样在这种分析中并没有做得更好,这种分析考虑了事先知道所有查询的攻击者。事实上,由于 m 有多大,它的表现要差得多。这不应该完全令人惊讶,因为此构造中的节点需要下载更大一部分数据(0.256 KiB/32 MiB,或 1/128,与 37.5 KiB/128 MiB,或 ~1/3000 相比)。也就是说,这只是一个可能不太严格的绑定,因此糟糕的绑定并不一定意味着糟糕的安全性。另一方面,如果绑定被证明是严格的,那将意味着在这种高 m 下,全局安全性对于完全自适应的攻击者来说是无效的,而是需要对查询的不可链接性做出一些假设。
当然,我们可以通过恶化其他两个中的一个或两个来提高带宽要求、安全性和吞吐量中的任何一个。例如,将 blob 的数量减半到 b = 64,并将样本的数量加倍到 k=32,将保持带宽要求相同,同时将吞吐量减半,但会给我们一个更好的安全曲线。另一方面,我们可以通过设置 b = 256 和 k = 8 来在保持带宽要求相同的同时将吞吐量加倍,从而牺牲安全性。在这里,我们比较了 k=8,16,32 的安全性,即对应于最大吞吐量 32MiB、16MiB 和 8MiB。
(你可以在此处使用这些参数)
- 原文链接: ethresear.ch/t/subnetdas...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!