一文拆解隨機(jī)數(shù)生成的算法模型|Neo專欄

上?篇文章《Neo 智能合約如何保證隨機(jī)數(shù)安全性?》,我們討論了隨機(jī)數(shù)生成的執(zhí)行過程。簡單來說就是把打包交易的權(quán)利交給議?,把?成隨機(jī)數(shù)的權(quán)利分別賦予給兩位議員。
- 后?? N1 和 N2 指?成隨機(jī)數(shù)的兩位議員;
- R1 和 R2 指兩位議員最終發(fā)給議?的包含隨機(jī)數(shù)的交易
負(fù)責(zé)?成隨機(jī)數(shù)的議員 N1 和 N2 ?法提前知道最終的隨機(jī)數(shù),負(fù)責(zé)打包的議??法更改隨機(jī)數(shù)的值,如此三?共同協(xié)作是為了在每?個區(qū)塊里?成安全可信的隨機(jī)數(shù)。
隨機(jī)數(shù)?成的算法模型
接下來我們對這個隨機(jī)數(shù)?成的算法模型進(jìn)?分析完善。
?先考慮到 N1 和 N2 發(fā)出的交易都是公開的,因此 如果 N1 是惡意的,那么它可以故意等到接收到 N2 的隨機(jī)數(shù) R1 之后再依據(jù) R1 的值來推斷并?成對??最有利的那個隨機(jī)數(shù) R2。
這?稍微提?下為什么 N2 依然可以對?成的隨機(jī)數(shù)進(jìn)?選擇,因為我們考慮 2/3 多數(shù)的共識原則,因此 N2 是可能收到超過 2/3 來?別的議員的隨機(jī)數(shù)的,因此 N2 就可以在這些收到的隨機(jī)數(shù)??由選擇。?如我們有 7 個議員,那 N2 如果只收到5個議員的隨機(jī)數(shù),那當(dāng)然就只有?種組合?案,但是如果 N2 收到了 6 個議員的隨機(jī)數(shù),那么它就可以在 6 個??選出 5 個,于是就有了總共 6 種可能供 N2 選擇;同理,如果 N2 收到了所有 7 個議員的隨機(jī)數(shù),那 N2 就有了 50 種選擇,在這么多的選擇?,N2 完全可以選出?個對??有利的最終?案。
要避免這種問題,我們需要保證在議??成最終隨機(jī)數(shù)之前,兩位議員?法提前知道隨機(jī)數(shù)。這似乎是在繞圈?,但解決這個問題其實相對簡單,我們可以讓 N1 和 N2 ?議?的公鑰對 R1 和 R2 進(jìn)?加密,如此就可以在議??播新區(qū)快議案之前,只有議?可以同時知道 R1 和 R2 。
與此同時,為了讓議??成的最終隨機(jī)數(shù)可驗證并且簡化流程,N1 和 N2 在加密 R1 和 R2 的時候還應(yīng)該加上對 R1 和 R2 的簽名。如此,在議?公開解密后的 R1 和 R2 時,別的議員就可以在不與 N1 和 N2 做額外通信的情況下來驗證 R1 和 R2 以及最終隨機(jī)數(shù)的真實性。
現(xiàn)在我們再討論假如 N1 是個傻?,它就想把 R1 的明?公布出來,因此 N2 就可以提前獲取 R1 的值并加以利?以實現(xiàn)??利益的最?化,這?我們分為兩種情況來討論:
?N2 是誠實節(jié)點(diǎn)?
它哪怕收到了 R1 也不會做任何的事情,所以即使 N1 是個傻?,對系統(tǒng)也不會造成任何影響,畢竟僅僅知道 R1 是無法推斷出最終隨機(jī)數(shù)的。此外我們還可以設(shè)置?名單,對故意提前泄漏隨機(jī)數(shù)的議員 N1 進(jìn)?懲罰進(jìn)?提?系統(tǒng)的魯棒性。
?N2 是惡意節(jié)點(diǎn)?
這個就?較?煩了,畢竟 Neo 的共識算法是只需要超過 2/3 的節(jié)點(diǎn)是正常的即可,所以議員?出現(xiàn)兩個反動派是正常的,但是對于隨機(jī)數(shù)?成來說就有點(diǎn)要命。索性我們假設(shè)選擇 N1 和 N2 的過程也是隨機(jī)的,那么在?個不超過 1/3 的議員是惡意的情況下,對?個區(qū)塊來說,N1 和 N2 都是惡意的概率在 5% 左右,不過隨著議員數(shù)量的提升,這個概率會隨之增?,但是最?不超過 11%。
以上,雖然?案依然存在一定被攻擊的可能,但是相對于單純的讓單獨(dú)節(jié)點(diǎn)來?成隨機(jī)數(shù)還是更安全的?種解決?案。
通過兩篇關(guān)于安全隨機(jī)數(shù)的文章,希望大家可以更深入地了解為了保證系統(tǒng)環(huán)境的安全運(yùn)行,研究員們對于整個執(zhí)行機(jī)制、算法模型所做的嘗試與驗證。
區(qū)塊鏈要走的路還很長,咱們一道見證。?
