Dfinity隨機數發生器

作者:扎克-赫斯, Zack Hess

amoveo-docs/dfinity_rng.md at master - zack-bitcoin/amoveo-docs https://github.com/zack-bitcoin/amoveo-docs/blob/master/other%5Fblockchains/dfinity%5Frng.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,那麼攻擊就涉及兩種策略的混合。