您好,登錄后才能下訂單哦!
本篇文章為大家展示了一個(gè)NEO鏈上安全隨機(jī)數(shù)的解決方案是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
0x00 困境
鏈上安全隨機(jī)數(shù)生成應(yīng)該算是一個(gè)比較蛋疼的問題,哪怕你的系統(tǒng)再牛逼,合約程序困在小小的虛擬機(jī)里,哪怕天大的本事也施展不開。 更悲催的是,交易執(zhí)行的時(shí)候,是在每一個(gè)節(jié)點(diǎn)都執(zhí)行一遍,那就意味著,要想保證同一個(gè)交易在所有節(jié)點(diǎn)執(zhí)行結(jié)果都一致, 那么交易獲取的隨機(jī)數(shù)也就必須一致。目前來看,當(dāng)交易執(zhí)行的時(shí)候,合約所能獲取到的數(shù)據(jù)無非是
(1)已有的鏈上數(shù)據(jù)。
(2)通過調(diào)用別的合約獲取返回值。
(3)交易傳遞的參數(shù)。
對于第一種數(shù)據(jù)來源,已有的鏈上數(shù)據(jù)都是公開的,隨機(jī)數(shù)獲取算法也是公開的,無論怎么搞,通過鏈上數(shù)據(jù)獲取的隨機(jī)數(shù)結(jié)果怎么看都不怎么靠譜, 用戶在交易發(fā)布之前,稍微分析甚至不需要分析就能猜到自己可能獲取到的隨機(jī)數(shù)值范圍。
如果通過調(diào)用別的合約來獲取返回值,這就進(jìn)入了死循環(huán)————?jiǎng)e的合約的隨機(jī)數(shù)哪里來的?
最后一種,交易傳參,這就更不能用于隨機(jī)數(shù)生成了,本來隨機(jī)數(shù)是要讓用戶交易執(zhí)行之前完全不可預(yù)測的,現(xiàn)在直接跟用戶輸入相關(guān)的話倒不如直接讓用戶自己設(shè)置自己的隨機(jī)數(shù)來的直接。
0x01 共識(shí)前的共識(shí)
研究過NEO共識(shí)的同學(xué)應(yīng)該都知道,NEO共識(shí)協(xié)議采用的是dBFT,這種共識(shí)協(xié)議不需要靠計(jì)算量證明,也不需要大家提供股權(quán)證明,簡直是綠色環(huán)保節(jié)能減排居家旅行必備的良心共識(shí)協(xié)議。 仔細(xì)看看,這個(gè)共識(shí)協(xié)議有一個(gè)很奇怪的特性,就是在真正的對區(qū)塊進(jìn)行打包共識(shí)之前,有一個(gè)產(chǎn)生議長的共識(shí)過程, 只有在議長確定之后,才會(huì)由議長發(fā)起一輪共識(shí)。這就意味著,在所有的節(jié)點(diǎn)中, 議長節(jié)點(diǎn)是第一個(gè)對新一個(gè)區(qū)塊中所有的交易進(jìn)行驗(yàn)證執(zhí)行的節(jié)點(diǎn)。議長之前沒有節(jié)點(diǎn)執(zhí)行交易,議長之后大家數(shù)據(jù)必須跟議長一致,否則就會(huì)重新選舉議長。放在我們隨機(jī)數(shù)場景里。議長節(jié)點(diǎn)執(zhí)行之前沒有隨機(jī)數(shù),議長節(jié)點(diǎn)執(zhí)行后,所有的節(jié)點(diǎn)的隨機(jī)數(shù)必須和議長使用的 隨機(jī)數(shù)一致。那這就很明確了,在新的區(qū)塊生成之前,隨機(jī)數(shù)不能存在,而新區(qū)塊生成的開天辟地第一步就是議長節(jié)點(diǎn)發(fā)起共識(shí)。同時(shí),我們也知道,其實(shí)議長也確實(shí)在新區(qū)快生成的時(shí)候,本地生成了一個(gè)新的隨機(jī)數(shù)---nonce。
0x02 無法使用的最可靠的隨機(jī)數(shù)
然而,現(xiàn)實(shí)是,由于交易在虛擬機(jī)里執(zhí)行,像是被困在了一個(gè)盒子里,能調(diào)用的只有system和runtime幾個(gè)庫提供的少的可憐的接口,而這個(gè)nonce隨機(jī)數(shù)更是不在可用資源列表里,所以以上分析基本又成了廢話。
0x03 議長的可信問題
在現(xiàn)有的dBFT協(xié)議中,議長其實(shí)是不需要可信的,因?yàn)橐粋€(gè)不可信的議長并不會(huì)對系統(tǒng)造成任何的干擾,整個(gè)系統(tǒng)除了依賴系統(tǒng)發(fā)起共識(shí)之外,議長并沒有什么剩余價(jià)值,即便是那個(gè)隨機(jī)數(shù)nonce雖然依賴議長生成,但是也并不會(huì)對系統(tǒng)安全造成影響。但是如果依賴那個(gè)nonce來 最為種子生成隨機(jī)數(shù),那么就相當(dāng)于給了議長一定的權(quán)力,至少議長就可以干擾隨機(jī)數(shù)的生成了。所以這個(gè)系統(tǒng)還是有問題的,那就是議長的可信度。
0x04 共識(shí)前的共識(shí)前的共識(shí)
擺脫議長可信問題的解決方案是,在選舉議長的時(shí)候增加議員節(jié)點(diǎn)間通信,每個(gè)議員都廣播自己本地生成的隨機(jī)數(shù),然后把所有議員的隨機(jī)數(shù)進(jìn)行哈希來產(chǎn)生分布式的隨機(jī)數(shù),這樣就可以不依賴某個(gè)幾點(diǎn)來產(chǎn)生隨機(jī)數(shù)了。
上述內(nèi)容就是一個(gè)NEO鏈上安全隨機(jī)數(shù)的解決方案是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。