Dfinity随机数发生器

作者:扎克-赫斯, Zack Hess

amoveo-docs/dfinity_rng.md at master - zack-bitcoin/amoveo-docs https://github.com/zack-bitcoin/amoveo-docs/blob/master/other_blockchains/dfinity_rng.md

Dfinity随机数发生器


本文的目的是要表明,Dfinity的RNG不起作用。

RNG的设计 #

这个RNG的工作原理是使用一个确定性的签名方案,即随机选择n个用户来做签名,我们只需要其中的一个子集t来做签名。哪一个t的用户参与签名并不重要,无论哪种方式都会产生相同的签名。

这样一来,任何想要预测一个签名区块所产生的熵的人都需要控制> t/n的空间,这个空间被随机地选在里面以选择谁能够签名,而任何想要阻止一个区块的产生的人都需要> (n-t)/n的空间。

为什么它不起作用 #

假设一个攻击者拥有H部分被选择的空间内,并且有n个用户被选择来做每个签名。攻击者所控制的签名数量通常为Hn,其标准偏差为Hsqrt(n)。

如果对于任何单一区块,攻击者控制了超过t/n的账户,那么攻击者就可以提前预测熵。能够预测熵的攻击者可以知道他们需要拥有货币空间的哪些部分来赢得下一轮的随机选择。所以一旦攻击者破解了这个随机数生成器一次,他们就能永远保持对这个区块链的集中控制。从现在开始,他们将被选为每个区块的区块生产者。

如果攻击者控制了超过(n-t)/n的账户,那么攻击者就可以阻止签名的产生,这使攻击者对结果有一点影响。

如果攻击者没有控制足够的算力来单独进行这种攻击,那么贿赂其他验证者提前透露他们的签名,或者拒绝签名,这样攻击者就可以预测到将会产生的熵,这是非常便宜的。

如果t/n小于1/2,则更容易通过填塞投票箱进行攻击。控制大量参与者。如果t/n>1/2,则更容易通过扣留签名和阻止新的随机值产生来进行攻击。如果不阻止新的随机性,那么我们可以预测哪些账户会被选出来产生未来的随机性,所以攻击者知道他们需要控制货币空间的哪些部分来成功地打垮dfinity。如果t/n=1/2,那么攻击就涉及两种策略的混合。