我們正式宣布上線Chainlink可驗證隨機函數(下文稱Chainlink VRF),開發者可以用這個工具生成隨機數,並在鏈上進行驗證。Chainlink VRF將為眾多優秀的智能合約項目帶來巨大價值,尤其能證明智能合約使用的隨機數不可被篡改和操控。
Chainlink VRF有助於加速區塊鏈遊戲、安全和layer2協議等眾多領域的智能合約開發進程。開發者可以輕鬆集成Chainlink VRF,參考我們近期發布的開發者文檔,在智能合約中使用可驗證的隨機數。
可驗證隨機數具有哪些價值
要開發安全的智能合約,並規避合約資金被盜風險,開發者必須在安全方面下大功夫。如果隨機數是智能合約依賴的關鍵數據,那麼開發者就自然會期望合約所有相關方都擁有同等的不確定性,並降低因某一方成功預測結果而鑽空子的風險。
Chainlink VRF可以為智能合約提供隨機數以及加密證明,在鏈上驗證隨機數具有不可預測性,因而可以滿足上述兩個要求。由於Chainlink VRF的隨機數可以在鏈上進行驗證,所以問題節點只能選擇不對請求做響應,在Chainlink即將上線的staking機制下,這樣的行為會遭到罰款,之後還可能會被移除出隨機數生成者名單,因此會遭受經濟損失。
開發者可以使用Chainlink VRF開發出基於隨機數的可靠智能合約應用:
● 為遊戲提供隨機數,數據可在鏈上驗證,提升遊戲的可信度,並向對安全比較敏感的用戶提供額外的保障。
● 為遊戲帶來更多挑戰性和不確定性,比如隨機向玩家提供獎勵(如:loot drops)。
● 隨機分配任務和資源,並保障可驗證性,如:向案子隨機分配法官,或向公司隨機分配審計人員。
● 選擇觀察員代表投票決議智能合約提案,並達成共識(調查是實現額外抗女巫攻擊能力的有效方法)
現有方法存在的安全隱患
Chainlink VRF的可驗證隨機數可以將現有隨機數生成法存在的諸多限制一一攻克。使用區塊哈希值等鏈上數據或將鏈下生成的隨機數傳輸至鏈上,這兩種方法都存在一定自身缺陷。
開發者應該儘量避免過度依賴基於區塊哈希值產生隨機數。假設一個智能合約基於某一高度的區塊哈希值最後一位數的奇偶性判定結果。這樣看似好像概率是50/50,但假設有一名礦工(或礦工聯盟)產量佔區塊總量的三分之一,現在這名礦工決定把區塊哈希值最後一位數是1的優勝區塊全部扔掉,並放棄大約2-3個以太幣的區塊獎勵。這樣一來,這名礦工就能夠將結果是0的概率從50%提升至2/3,導致所有依賴這個方法生成隨機數的智能合約用戶都會遭受損失。如果這樣做可以為這名礦工帶來12-18個以太幣的額外收益,那麼他的選擇在經濟上是合理的。因此,這個機制下的合約價值會有一定上限。
為了避免這樣的問題,開發者已經轉向鏈下解決方案,在鏈下生成隨機數並傳回至鏈上。然而,如果無法通過加密手段驗證鏈下隨機數,數據將有可能在鏈下生成和傳輸過程中被篡改。同樣地,用戶只能閉著眼睛相信鏈下生成的隨機數是公正可靠的,並相信這些數據在傳輸的過程中沒有被篡改過。
區塊鏈開發者在為智能合約提供隨機數的過程中還需規避以下關鍵痛點和安全風險:
●智能合約無法訪問或無法兼容
●中心化的隨機數生成者操縱數據
●區塊鏈上的礦工作為用戶進行操縱以謀取私利
●終端用戶需要盲目相信應用的安全可靠性
為了解決上述問題以及其他安全風險,Chainlink VRF使隨機數生成過程變得安全透明,並通過加密技術證明了每個結果的公正和公平性。
Chainlink VRF的工作原理
Chainlink VRF工作原理
簡而言之,智能合約會向Chainlink或Chainlink預言機網絡提供一個seed來請求隨機數。這個seed是預言機無法預測的,會被用來生成一個隨機數。每個預言機都會使用自己專屬的密鑰生成隨機數。當結果和證明在鏈上發布後,可以使用預言機的公鑰和智能合約的seed進行驗證。這個方法利用了區塊鏈著名的籤名驗證功能,合約只能使用在同一區塊鏈環境中被驗證通過的隨機數。
使用Chainlink VRF工具最大的好處就是隨機數是可以驗證的。即使某一節點被攻陷,該節點也無法操控或影響最終結果,因為它無法通過鏈上的加密驗證。最糟糕的情況無非是淪陷的節點不對請求做出任何響應,而這將立刻被區塊鏈記錄下來,並且會被永遠保存在鏈上。用戶可以參考有效的證明,不再使用有過無法響應或無法提供有效籤名記錄的節點。即使節點被操控,最終生成的隨機數也不會受影響。淪陷的節點只能選擇不響應請求,而在Chainlink即將上線的staking機制下,這種行為將被罰款,而且問題節點之後會從隨機數生成者名單中被移除。因此,低質量或違規的節點將遭受巨大的短期和長期經濟損失。簡而言之,Chainlink VRF只要正確接入,就絕對無法被操控,唯一可能發生的就是問題節點下線或不響應,之後被徹底移除出去。這個機制為智能合約開發者和用戶提供了極大的安全保障。
Chainlink VRF還有一個優勢,那就是隨著使用人數不斷增加,用戶支付給節點操作者的費用也會相應上漲,因此節點會更有動力提供儘可能多的安全保障。之後,用戶可能會要求通過staking的方式進行加密安全保障,付更多費用獲得額外的安全性。這樣一來,用戶付費就會形成一個全球共享資源池,本來需要花錢自主開發RNG(註:隨機數生成器)解決方案的用戶會將這筆錢用於提升整個區塊鏈生態圈共享資源的安全水平。Chainlink現已接入Polkadot、Tezos等多條區塊鏈,這意味著Chainlink生態圈用戶將形成網絡效應,持續擴大,用戶數量和加密安全水平也將形成一個相輔相成的良性循環。
集成案例詳解:PoolTogether
PoolTogether是以太坊上的一個保本型儲蓄彩票遊戲,我們認為這是一個非常新穎有趣的概念。PoolTogether團隊在開展了廣泛技術調研後,決定使用Chainlink VRF為其應用提供可驗證的隨機數。
PoolTogether是如何使用Chainlink可驗證隨機數的
PoolTogether是一個保本型儲蓄遊戲,將用戶存款集中在一起,每天或每周進行一次抽獎,將存款利息當作獎金發放給中獎者。這個遊戲通過彩票機制激勵用戶的儲蓄行為。
PoolTogether使用Chainlink VRF生成可驗證的隨機數,可向其用戶證明每期中獎者是由完全隨機的數字選出來的。這樣做除了為了保障自身安全以外,還可以向用戶證明其關鍵環節的安全性是有跡可循的,且隨機數生成過程是可以驗證的。這樣一來,用戶就更有信心參與到智能合約中,相信他們享受著同樣的中獎概率。
技術詳解
Chainlink VRF是Goldberg可驗證隨機函數(VRF)的實現,具體細節請參考這篇論文(https://eprint.iacr.org/2017/099.pdf)。「可驗證隨機函數」中的「隨機」指「任何沒有seed或密鑰的人都完全無法預測(即概率均勻分布)」。
VRF密鑰是預言機以加密的方式在均勻分布的{0, …, #secp256k1-1} 中挑選出的一個數字(註:secp256k1是以太坊加密算法中的橢圓曲線)。與該密鑰相對的有一個公鑰,這個公鑰對應著一個預言機。預言機將公鑰與鏈上VRF和Chainlink任務ID綁定。
當智能合約請求隨機數時,它會提供一個seed。為了確保VRF結果無法被預測,需要在seed中植入無法被預測且難以被篡改的值,比如最近一次的區塊哈希值,或者是經過加密驗證的鏈下數據,比如某項資產最近更新的價格。你可以將這些數據轉換成bytes32,使用keccak256算法生成seed。鏈上VRF將智能合約seed與其他數據混合在一起,以避免重放攻擊,為合約提供一些基本的保護,但除此之外,提供一些專門的保護也是至關重要的。
一旦鏈上VRF確定了seed,就會在以太坊log中進行廣播,向智能合約要求的預言機請求相應VRF結果。預言機看到這條log後會做出如下操作:
首先,它將seed和預言機公鑰作為數據輸入,「對輸入取哈希值作為曲線方程輸入」,從secp256k1獲得安全加密的隨機樣本。方法是使用keccak256算法,用遞歸法對數據取哈希值,直到輸出小於secp256k1算法的basefield(即secp2561算法中描述的p值),並且是secp256k1曲線上某一點(x,y)的x坐標(basefield中y=x+7)。因此(x,y)是對輸入取哈希得出的結果。
接著,將secp256k1曲線的(x,y)坐標乘以(https://github.com/smartcontractkit/chainlink/blob/vrf-docs-branch/core/services/vrf/vrf.go#L292)密鑰,得出點。用keccak256算法取哈希值,以uint256格式作為VRF的輸出結果。它會生成一個證明,證明除以(x,y)的倍數等於預言機公鑰除以secp256k1生成器的倍數。這個證明方式與Schnorr籤名(https://en.wikipedia.org/wiki/Schnorr_signature)很接近:首先,他從{0, …, #secp256k1-1}中隨機安全地取出一個nonce,這與私鑰生成的方式很像。然後,計算公式u=n×g,其中g為secp256k1生成器,u為以太坊地址。然後計算公式v=n×(x,y)。接著,將(x,y)、VRF公鑰、、u的地址以及v合併取哈希,並將哈希取模運算#secp256k1的餘數稱為c。最後,計算s=n-c×k取模運算#secp256k1(https://github.com/smartcontractkit/chainlink/blob/vrf-docs-branch/core/services/vrf/vrf.go#L292),k為VRF密鑰。因此證明包含公鑰、、c、s以及seed。然後將結果發回至鏈上VRF,驗證證明,如果驗證通過,則將數據返回至智能合約。
為了驗證證明,合約應做到以下幾點:
檢查公鑰和是否是secp256k1曲線上有效的點驗證c×pk+s×g點的地址是否與u的地址一致(https://github.com/smartcontractkit/chainlink/blob/vrf-docs-branch/evm-contracts/src/v0.6/VRF.sol#L464)(註:其中pk指代預言機公鑰)用公鑰和seed取哈希作為曲線方程的輸入,檢查 c×+s×(x,y)的keccak256哈希值是否等於c。若有興趣直觀了解此方案的加密安全邏輯,請參考Jimmy Song的《Programming Bitcoin》(https://programmingbitcoin.com)一書中第三章「籤名和驗證」中關於「箭頭」的類比。我們在此希望實現的特殊「目標」是c。若想完整了解此方案的安全證明機制,請參考Making NSEC5 Practical for DNSSEC(https://eprint.iacr.org/2017/099.pdf)的附件B。
然而,用secp256k1做純量乘法(比如c×),在以太坊虛擬機上直接運算的成本極其高昂。因此為了提高效率,我們借鑑了Vitalik的方法(https://ethresear.ch/t/you-can-kinda-abuse-ecrecover-to-do-ecmul-in-secp256k1-today/2384),將一個證人傳入證明,驗證證人的c×運算結果是否與實際相等(https://github.com/smartcontractkit/chainlink/blob/vrf-docs-branch/evm-contracts/src/v0.6/VRF.sol#L245)。這樣一來,我們就能把c×的運算工作轉移到鏈下,只需驗證鏈下運算結果是否與實際相等即可,這樣就可以大幅降低運算成本。
因此,除了上述數據輸入和步驟之外,鏈上驗證還包括c×以及s×(x,y)的證人(https://github.com/smartcontractkit/chainlink/blob/vrf-docs-branch/core/services/vrf/solidity_proof.go#L22)。需要檢查這些證人是否是secp256k1曲線上有效的點,並且用Vitalik的方法驗證這些證人的運算結果是否與實際匹配。另外,以太坊上的地址用u表示,同樣也用Vitalik的方法驗證u是否與c×pk+s×g點匹配。
Chainlink VRF發展計劃
Chainlink預言機網絡中包含一千多個優質節點,使用門限籤名技術,網絡具有高度擴展性,並以高成本效益的方式實現去中心化。這將為Chainlink VRF帶來極高的去中心化水平和可用性。我們將兩者合二為一,既利用Chainlink VRF的獨特優勢為鏈上提供可驗證隨機數,又利用Chainlink網絡中幾千個節點實現高成本效益和高可用性。
Chainlink以去中心化的方式實現可驗證隨機函數
Chainlink豐富的生態系統一旦加入Chainlink VRF,我們就能建立遍布全球的分布式節點網絡,在經濟激勵的驅動下在鏈上生成並廣播可驗證的隨機數。Chainlink門限籤名技術與高度去中心化的節點網絡相結合,將有效規避用戶資金被盜風險。不僅Chainlink VRF端反饋的數據能在鏈上得到驗證,還能保證極高的可用性。目前Chainlink已接入多條可能需要可驗證隨機數的區塊鏈,再加上虛擬貨幣經濟的激勵機制,ChainlinkChainlink VRF很有可能成為智能合約使用隨機數的新標準。
除了上述優勢之外,我們目前正在完善Chainlink VRF的功能,研發去中心化的隨機數生成技術,並積極與其他RNG(註:隨機數生成器)系統開展合作。根據我們的初步研究,我們相信Chainlink VRF能與VDF以及其他隨機數生成法在鏈上和鏈下結合使用。我們很高興能夠跟區塊鏈圈和學術圈通力合作,共同推動智能合約可驗證隨機數生成技術向前發展。
歡迎試用Chainlink VRF並給出你的寶貴意見
如果你是一名智能合約開發者,並希望了解如何使用Chainlink VRF的初始版本,請訪問開發者文檔,在測試網上開始使用,並加入我們的Discord技術討論。
我們目前處於Chainlink VRF安全評估的最後階段,並希望與開發者社區和學術界的用戶交流反饋。如果你對VRF及其完善方案有任何意見或建議,歡迎發郵件至vrf@chain.link告訴我們。
如果你熱衷於開發安全可靠的智能合約並解決現實世界的問題,歡迎現在就加入我們的核心團隊!詳情請關注我們官網的招聘頁面。
如果想要了解更多關於Chainlink的資訊,請訪問Chainlink官網,或在Twitter或Reddit上關注我們。
本文來源: 金色財經 / 作者:Chainlink