使用區(qū)塊鏈技術(shù)生成隨機(jī)數(shù)的三種方案解析
掃描二維碼
隨時(shí)隨地手機(jī)看文章
眾所周知,區(qū)塊鏈技術(shù)的核心特點(diǎn),就是任何數(shù)據(jù)存儲(chǔ)到區(qū)塊鏈網(wǎng)絡(luò)后,這些數(shù)據(jù),以及對(duì)數(shù)據(jù)的操作過(guò)程,都是不可篡改,不可刪除,不可銷毀的,同時(shí)對(duì)所有人都是透明可查閱的,所以可以信任該數(shù)據(jù)的真實(shí)性,可靠性。通過(guò)這個(gè)技術(shù)特點(diǎn),區(qū)塊鏈技術(shù)可以幫助商業(yè)社會(huì)解決問(wèn)題之一,就是公平性的問(wèn)題。
公平性,就是指所有人都被公平地對(duì)待,即請(qǐng)求都被同等概率地選中、執(zhí)行;在多人競(jìng)爭(zhēng)一個(gè)利益時(shí),在統(tǒng)一的規(guī)則下,人人都有同樣地機(jī)會(huì)參與競(jìng)爭(zhēng),并被同等對(duì)待。
在現(xiàn)實(shí)世界中,存在無(wú)數(shù)的核心是“公平性”的商業(yè)行為,比如車牌的搖號(hào)、買房的搖號(hào)、彩票的搖獎(jiǎng),卡牌游戲中的抽牌,德州撲克等牌類游戲的發(fā)牌等等。在傳統(tǒng)的技術(shù)手段下,往往由于技術(shù)的限制,導(dǎo)致過(guò)程的不透明,從而讓參與的各方產(chǎn)生非常大的爭(zhēng)議和詬病。比如針對(duì)常見的抽卡類游戲(Gacha),游戲的機(jī)制之一就是通過(guò)花費(fèi)法幣抽卡牌,卡牌根據(jù)珍稀程度不同(也就是抽中的概率不同)從而能力不同,越稀有的卡牌能力越強(qiáng),而玩家就會(huì)經(jīng)常抱怨某種珍惜卡牌抽到的概率太低。針對(duì)這個(gè)問(wèn)題,2016年中國(guó)文化部特意發(fā)布了《關(guān)于規(guī)范網(wǎng)絡(luò)游戲運(yùn)營(yíng)加強(qiáng)事中事后監(jiān)管工作的通知》,該通知中首次表示:2017年5月1日起,網(wǎng)絡(luò)游戲運(yùn)營(yíng)企業(yè)應(yīng)當(dāng)及時(shí)在該游戲的官方網(wǎng)站或者隨機(jī)抽取頁(yè)面公示可能抽取或者合成的所有虛擬道具和增值服務(wù)的名稱、性能、內(nèi)容、數(shù)量及抽取或者合成概率。但這個(gè)規(guī)定是否嚴(yán)格執(zhí)行,由于所有的程序都是運(yùn)行在游戲廠商的服務(wù)器上,所以只能靠游戲廠商的自覺來(lái)保證執(zhí)行,玩家只能信任或依賴廠家。
我們采用區(qū)塊鏈技術(shù)通過(guò)實(shí)現(xiàn)兩點(diǎn)改變,就可以完美的解決這個(gè)問(wèn)題:
1.將游戲的抽卡業(yè)務(wù)邏輯完整的基于智能合約實(shí)現(xiàn),落地到公鏈上;
2.將抽卡邏輯中的隨機(jī)數(shù)生成邏輯基于區(qū)塊鏈技術(shù)實(shí)現(xiàn),落地到公鏈上;
通過(guò)這兩點(diǎn),抽卡的邏輯在編寫完成后,將不可篡改,不可銷毀,可以供網(wǎng)絡(luò)上所有人進(jìn)行檢查和校驗(yàn),同時(shí)所有的運(yùn)行結(jié)果也將被記錄,游戲廠商完全無(wú)法對(duì)運(yùn)行結(jié)果進(jìn)行干預(yù)和操縱。
為了實(shí)現(xiàn)公平性,首先,抽卡業(yè)務(wù)的智能合約應(yīng)該運(yùn)行在一個(gè)完全的去中心化的區(qū)塊鏈公鏈之上,避免類似中心化或半中心化技術(shù)中存在的人為因素的干擾,其次,該隨機(jī)數(shù)生成機(jī)制也必須是不存在漏洞和公平的。
其中保證第一點(diǎn)的實(shí)現(xiàn),就是選擇一條真正去中心化架構(gòu)的公鏈即可,而第二點(diǎn)是我們今天想重點(diǎn)討論的,如何在區(qū)塊鏈上實(shí)現(xiàn)一個(gè)公平和無(wú)漏洞的隨機(jī)數(shù)生成服務(wù)。
在區(qū)塊鏈上實(shí)現(xiàn)隨機(jī)數(shù)生成服務(wù),我們可能可以有三種技術(shù)方案:
1.引入外部真隨機(jī)數(shù)源:
CPU里通常會(huì)有真隨機(jī)數(shù)生成器(Ture Random Number Generator,簡(jiǎn)稱TRNG)。真隨機(jī)數(shù)生成器通常是通過(guò)放大電路的熱噪聲來(lái)產(chǎn)生隨機(jī)數(shù)。我們知道溫度高于絕對(duì)零度的原子都存在熱運(yùn)動(dòng),在集成電路里這些原子的熱運(yùn)動(dòng)會(huì)在電路里產(chǎn)生噪聲,噪聲會(huì)使得電路中的電壓存在微小的起伏,TRNG就是通過(guò)放大這些微小的起伏來(lái)產(chǎn)生隨機(jī)數(shù)。但是,這種隨機(jī)數(shù)的生成方式是一種中心化的方式,在區(qū)塊鏈上并不適用,因?yàn)槌穗S機(jī)數(shù)的生產(chǎn)者外,其他人無(wú)法證明該隨機(jī)數(shù)的生成是否是可信的,還是被杜撰的;無(wú)法在眾多節(jié)點(diǎn)中對(duì)該隨機(jī)數(shù)的真?zhèn)芜_(dá)成共識(shí);
2.通過(guò)區(qū)塊鏈系統(tǒng)中的公開種子生成:
區(qū)塊鏈輸入有兩個(gè),交易和礦工引入的nonce。對(duì)于PoW,nonce是為了幫助PoW能產(chǎn)生符合本輪要求的hash值,礦工本身需要的計(jì)算強(qiáng)度很高,假如想對(duì)nonce操縱的話,相當(dāng)于加上額外的約束進(jìn)行挖礦,挖礦難度會(huì)極大的增加。而假如采用塊頭作為隨機(jī)源,因?yàn)榈V工每次生成塊頭的成本很高,所以很難多次嘗試。但是在算力比較少的PoW公鏈上,生成塊頭的成本比較低,隨機(jī)數(shù)的安全性就會(huì)大大下降。而且PoW有分叉的可能,所以最后生成的隨機(jī)數(shù)需要足夠長(zhǎng)的確認(rèn)時(shí)間,導(dǎo)致隨機(jī)數(shù)的實(shí)時(shí)性不夠。
而在pos的鏈上,用塊頭的安全性,已經(jīng)不存在了,因?yàn)樵搉once可以只是簡(jiǎn)單的塊高,生成塊頭的成本幾乎為0.因而節(jié)點(diǎn)可通過(guò)不斷修改交易組合,嘗試生成不同的隨機(jī)數(shù)。因而類似EOS塊頭為基礎(chǔ)生成的隨機(jī)數(shù),都是容易被操縱,非常危險(xiǎn)的。
其中最常見的就是EOS在隨機(jī)數(shù)方面存在的漏洞。如下是常見的鏈上偽隨機(jī)數(shù)算法:
如何在區(qū)塊鏈上實(shí)現(xiàn)隨機(jī)數(shù)生成服務(wù)
以及廣泛被引用的github代碼:
以上案例,都有一個(gè)共同的特點(diǎn),就是采用了 tapos_block_prefix, tapos_block_num 做為隨機(jī)數(shù)種子。
但是這兩個(gè)值,其實(shí)是依賴于過(guò)去的區(qū)塊經(jīng)過(guò)確定性邏輯生成隨機(jī)數(shù),因而區(qū)塊生成者就可以通過(guò)不斷嘗試打包的交易內(nèi)容,甚至偽造虛假的交易,操縱最終生成的隨機(jī)數(shù)。
比如針對(duì)使用了以上這些存在隨機(jī)數(shù)漏洞的勝率類的游戲,攻擊者完全可以提前計(jì)算好結(jié)果,贏的時(shí)候投注,輸?shù)臅r(shí)候不投注,從而保證百分百勝率。
總的來(lái)說(shuō),所有以用戶輸入作為隨機(jī)源的隨機(jī)數(shù),都是有漏洞的。因?yàn)檩斎胧强梢员恍薷牡?,輸入的?shù)量和組合是可以被節(jié)點(diǎn)控制的,所以節(jié)點(diǎn)完全有動(dòng)機(jī)和能力將隨機(jī)數(shù)改為適合自己的組合。
3.整合多用戶的主觀隨機(jī)源生成:
還有一種隨機(jī)數(shù)的生成方案,就是嘗試整合不同用戶的主觀隨機(jī)源作為隨機(jī)數(shù)種子。典型的就是讓多個(gè)用戶各自提交自己的隨機(jī)數(shù),然后節(jié)點(diǎn)將所有提交的隨機(jī)數(shù)組合生成最終的隨機(jī)數(shù)??紤]到多個(gè)隨機(jī)源的相互獨(dú)立性,理想情況下最終結(jié)果依然是隨機(jī)的。
這種方案從設(shè)計(jì)角度來(lái)說(shuō)可靠性很高,但是在實(shí)現(xiàn)過(guò)程中依然存在如下問(wèn)題:
- 多個(gè)用戶可能相互觀察,判斷是否提交隨機(jī)數(shù),導(dǎo)致先提交的人有暴露風(fēng)險(xiǎn)。此問(wèn)題目前通過(guò)懲罰機(jī)制解決。
- 節(jié)點(diǎn)可能故意打包某些對(duì)最終結(jié)果有利的隨機(jī)數(shù)。這涉及到共識(shí)的公平性問(wèn)題,任何基于dpos共識(shí)的區(qū)塊鏈系統(tǒng)都無(wú)法保證,因?yàn)閰⑴c共識(shí)的節(jié)點(diǎn)數(shù)少,所以節(jié)點(diǎn)可能合伙作惡即串謀,而且最壞情況是,所有提交的隨機(jī)數(shù)生成交易都是由壞的共識(shí)節(jié)點(diǎn)自身控制的客戶端,導(dǎo)致隨機(jī)數(shù)結(jié)果完全被控制,而且這種作惡情況完全無(wú)法被觀察到。Tendermint或者聯(lián)盟鏈有同樣的問(wèn)題。
對(duì)此,Ultrain結(jié)合自身RPOS共識(shí)算法的特點(diǎn),設(shè)計(jì)了自己的隨機(jī)數(shù)生成算法,避免了上述問(wèn)題,下面概述Ultrain隨機(jī)數(shù)生成的過(guò)程:
l建立隨機(jī)數(shù)生成委員會(huì),該委員會(huì)是一個(gè)開放的結(jié)構(gòu),其成員可隨時(shí)加入和隨時(shí)退出,所有想?yún)⑴c隨機(jī)數(shù)生成的成員,都通過(guò)注冊(cè)制注冊(cè)為該委員會(huì)成員,同時(shí)將公鑰注冊(cè)到隨機(jī)數(shù)生成智能合約里。
l每輪共識(shí)時(shí)間內(nèi)(Ultrain為10秒),委員會(huì)成員提交本輪自己生成的隨機(jī)數(shù),該隨機(jī)數(shù)要求必須通過(guò)VRF(可驗(yàn)證隨機(jī)函數(shù))結(jié)合該成員的私鑰生成,從而避免隨機(jī)數(shù)被控制。
l智能合約通過(guò)整合各成員提交的隨機(jī)數(shù)形成一個(gè)隨機(jī)種子,基于該種子生成隨機(jī)數(shù)。
l對(duì)于注冊(cè)參加的節(jié)點(diǎn),不提交將受到懲罰。
該隨機(jī)數(shù)生成的過(guò)程具有如下的優(yōu)勢(shì):
1.足夠隨機(jī):因?yàn)閂RF的結(jié)果是足夠隨機(jī)的,用戶的私鑰是相互保密的,所以最終結(jié)果是隨機(jī)的。
2.生成速度快:相比較基于塊頭的生成方式,Ultrain每輪隨機(jī)數(shù)生成時(shí)間為10秒,不需要等待確認(rèn)時(shí)間,只有其他公鏈的生成時(shí)間的十分之一。 類似Dfinity的方法,則需要組內(nèi)成員相互通信和驗(yàn)證,通信復(fù)雜度、等待時(shí)間和防串謀的難度更高。
3.足夠安全:因?yàn)槲瘑T會(huì)成員是開放的,參與人員也是完全不固定的,極大的降低了隨機(jī)數(shù)結(jié)果被串謀的可能性。對(duì)于參與人員,VRF限制了可以提交的隨機(jī)數(shù)的可能,防止被操縱。