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