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