admin@pollyedu.com
13063462302
admin@pollyedu.com
13063462302
本文摘要:我们再行来总结一下上一期谈到的交易发送中比特率优化的问题。
我们再行来总结一下上一期谈到的交易发送中比特率优化的问题。总结一个节点将一笔交易转发给另一个节点时,为了节约比特率,可以发送到这笔交易的 FID (Forwarding ID) 而不是必要发送到原始的交易,由接受者根据 FID 辨别否必须向发送者催促原始的交易。
我们的目标是将 FID 的长度减少到 4 个字节。上一期的最后部分还提及如果每笔交易的 FID 相同恒定,则攻击者可以用不高的成本堵塞特定交易的广播。
基本方法是攻击者再行结构一个覆盖面积所有 232 个有可能的 FID 的交易库,当受害者收到一笔交易时,攻击者从交易库里自由选择具备完全相同 FID 的交易并先行发送给其他节点,从而使其他节点都误以为早已接到了受害者交易,而自由选择不接管原始交易。为了解决问题静态 FID 不易被反击堵塞的问题,我们将 FID 的给定由静态转变成动态的。因为 FID 只是在节点与节点之间发送交易时的临时给定,与共识逻辑牵涉到也不必须被记录在区块链上,所以 FID 值没适当是一个恒定的数值。
考虑到如下方案:每个节点在计算出来 FID 时,并某种程度由交易的 ID (交易的 32 字节哈希值)计算出来,而是自由选择一个随机数 r,通过 ID 和 r 联合计算出来出有一个 4 字节的 FID,并将r 与 FID一起发送到。这样,当随机数 r 转变时,交易的 FID 也不会随之再次发生转变,接到 FID 和 r 的节点必须根据 r 新的计算出来有数交易的 FID 来已完成对比,并确认必须催促哪些 FID 对应的原始交易。
因为一次发送的多笔交易可以分享同一个随机数 r, 所以这个随机数 r 完全会在比特率上带给额外的开销。由于 r 的随机性,攻击者并无法预计一笔交易在每次发送时自由选择的 r 和由此求出的 FID 分别是多少,大自然也就无法预先结构冲突的交易了。这个设计的另一个益处是,即便节点 B 给节点 A 发送到交易时再次发生了 FID 值冲突,造成某笔交易没顺利发送给节点 A,另一个节点 C 发送到这笔交易给 A 时,大概率将使用有所不同的随机数 r 计算出来 FID,相等于减少了一次把这笔交易发给 A 的机会。
只要计算出来 FID 的过程充足随机(如用于伪随机函数),则 B 发送到顺利和 C 发送到顺利可看做是两个独立国家的事件。根据我们之前的计算出来,一笔交易因为 FID 值冲突而发送到告终的概率是 0.04%,而节点 B 和 C 两次独立国家发送到都告终的概率是 0.04% × 0.04%,失败率大大降低。
然而,从随机数计算出来 FID 的设计也有一个缺点:每当节点接到一个新的随机数 r 时,就要为所有早已接到的交易(根据上一期的假设,仅有节点不会将过去 5 分钟内接到的 180 万条交易和刚接到的 FID 对比)新的算数一遍 FID,这不会带给了很大的计算出来开销。现在我们有两种不颇失望的方案:静态的 FID 方案在一些反击策略下有安全性问题,网卓新闻网,而几乎随机的动态的 FID 方案又有计算出来开销过大的问题。如何同时解决问题两边的问题呢?我们自由选择了一种静态和动态结合的方案: FID 由 3 个静态字节和 1 个动态字节包含。其中静态字节部分必要所取交易 ID (即交易 32 字节的原始哈希值)的前 3 字节,动态字节由交易 ID 和 r 联合计算出来得出结论。
这样,根据交易 ID 的前 3 字节,我们把所有的交易放到了 224 个“桶”里。每次一个节点接到其他节点发去的 FID 和 r 时,再行根据 FID 的前 3 字节辨别交易所在的桶,再行将自己早已接到的,落在这个桶里交易根据 r 新的计算出来 FID 值并核对。非常简单地计算出来可以找到,对于 180 万条随机分解的交易,平均值每个桶里只有 0.1 笔交易,即使是所含交易最少的桶里也会多达10 条。
新的计算出来一个桶里交易的 FID 所须要花费的成本相比之下高于新的计算出来所有交易的 FID。在上面这个 3+1 动静融合的方案下,攻击者只不过依然可以反复类似于的反击策略。之前的反击策略中,攻击者为每一个静态的 FID 打算一笔交易。
在这一策略中,攻击者为每个桶预先打算一些交易。当受害者的交易经常出现后,攻击者在短时间内大量广播与受害者交易在同一个桶里的交易,就需要减少受害者交易被发送到其他节点的概率。即使同一笔交易每次发送时使用一个几乎随机的动态字节,但是这个动态字节只有 256 种有可能的给定,所以一个桶中的交易就越多,冲突概率也不会越高。
为了应付上述反击,我们引进了一个额外的规则:如果一个节点接到一个 FID 时,找到这个 FID 对应的桶里早已有不少于 10 条交易,就仍然用于 FID 来辨别,而是必要催促原始的 32 字节交易哈希值来对比否拒绝接受过这笔交易。这样,攻击者就无法再行通过生产冲突的 FID 来堵塞交易广播了,因为冲突过多的时候反而无法起着堵塞的起到。这条额外的规则启动时时会让交易发送发育到没用于 FID 优化的情况。
但是因为长时间情况下每个桶里希望只有 0.1 笔交易,完全不有可能再次发生多达 10 笔交易落在同一个桶里的情况,所以这条额外的规则在系统没遭反击时并会被启动时。而当系统知道遭反击的情况下,维护系统的安全性和稳定性才是最重要的,即便为此而减少系统的吞吐量也是可以拒绝接受的让步。
本文来源:云开·体育全站APPkaiyun-www.pollyedu.com
申明:如本站文章或转稿涉及版权等问题,请您及时联系本站,我们会尽快处理!