基於RSA加密算法的隨機區塊鏈

2020-12-17 金色財經區塊鏈

這是分布式網絡中隨機數生成的解決方案。

在開發我們的遊戲過程中,我們需要解決一個問題,在分布式網絡中生成隨機數很複雜,現幾乎所有區塊鏈都面臨這個問題。 因此,在任何人都無法相互信任的網際網路之間,創建隨機數可以解決許多問題。

在本文中,我們將講解我們是如何在我們的遊戲中解決這個問題的。 首當其衝的便是Waves Xmas Tree.

起初,我們計劃使用區塊鏈信息來生成一個數字,但在進一步的研究中我們發現創建這個數字的過程可以被操縱幹預,因此我們不得不放棄這個方案。

此後我們提出了一個新的方案, 使用「Commit-Reveal」方案。首先伺服器生成一個1到5之間的數字,然後往其中添加「鹽」並且使用Keccak function進行哈希值處理。伺服器使用已儲存的數字對智能合約進行預調試, 結論是遊戲被有效的簡化,為用戶猜測哈希值下所隱藏的數字。

玩家下注後伺服器將發送一個隱藏的數字並且將其「鹽」帶到一個智能合約中。換句話說,信息已被揭露,之後伺服器也會驗證這個數字並判斷用戶的輸贏。

如果伺服器未發送該數字和「鹽」進行驗證,則該用戶贏了。 在這種情況下,必須提前部署智能合約,並為每場比賽安排潛在的獲勝機會。 這是非常不方便,成本高且消耗大量時間。 但那時還沒有提出其它安全的解決方案。

此後不久,Tradisys團隊提議向Waves協議添加rsaVerify()函數。 這將根據公鑰和私鑰檢查RSA籤名的有效性。 根據我們的建議,該功能已被添加。

我們開發了三款新遊戲:《搖骰子》,《擲硬幣》和《乘浪行》。 在每個遊戲中,每款遊戲都部署了新的隨機數方法,讓我們仔細觀察它是如何工作的

讓我們先看看生成的隨機數,你可以在此處查看智能合約。

切換到腳本選項卡並選擇反編譯,您即可看到智能合約的代碼(或腳本)。

智能合約的代碼由一系列的函數組成。其中的@Callable 可以通過調用事務選項運行。 我們對其中兩個很感興趣:下注和撤回:

1.用戶選擇範圍和下注大小

2.客戶安排下注功能。 對於上面的圖像,即為bet(50)

3. 客戶端將調用事務發送到智能合約地址(播報 InvocationTx)。 作為Call參數的交易依據並包含bet函數。 這意味著調用事務開始在智能合約上執行下注函數(選擇:字符串)。

4.讓我們看一看bet函數

@Callable(i)

func bet (playerChoice) = {

let newGameNum = IncrementGameNum()

let gameId = toBase58String(i.transactionId)

let pmt = extract(i.payment)

let betNotInWaves = isDefined(pmt.assetId)

let feeNotInWaves = isDefined(pmt.assetId)

let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)

let txIdUsed = isDefined(getString(this, gameId))

if (betNotInWaves)

then throw ("Bet amount must be in Waves")

else if (feeNotInWaves)

then throw ("Transaction's fee must be in Waves")

else if (txIdUsed)

then throw ("Passed txId had been used before. Game aborted.")

else {

let playerPubKey58 = toBase58String(i.callerPublicKey)

let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")

ScriptResult(WriteSet(cons(DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)),cons(DataEntry(GAMESCOUNTERKEY, newGameNum), cons(DataEntry(gameId, gameDataStr), nil)))), TransferSet(cons(ScriptTransfer(SERVER, COMMISSION, unit), nil)))

}

該函數在智能合約中記錄了一場新的遊戲。

l 遊戲的ID = game id

l 遊戲狀態 = 已提交

l 玩家選擇(選擇範圍為50)

l 公鑰

l 潛在獎勵(取決於玩家的下注)

這是鍵值資料庫在區塊鏈上的呈現方式

{

"type": "string",

"value": "03WON_0283_448t8Jn9P3717UnXFEVD5VWjfeGE5gBNeWg58H2aJeQEgJ_06574069_09116020000_0229",

"key": "2GKTX6NLTgUrE4iy9HtpSSHpZ3G8W4cMfdjyvvnc21dx" }

「Key」是新遊戲的game id,其他數據都包括在了value屬性部分。

這是數據都儲存在智能合約的數據一欄中。

5. 伺服器通過區塊鏈API接口發送新的事務(新的遊戲),遊戲ID已被區塊鏈記錄,因此不可能去刪除或者篡改該數據。

6. 伺服器生成撤回函數(gameId,rsaSign)例如:

7.伺服器發送一個調用事務到智能合約中(broadcast InvocationTX)。該事務包含了一個調用以生成撤回函數。(gameId, rasSign):

該函數是含有 game id 以及RSA籤名的唯一id,因此籤名保證了其不可篡改性。

這意味著什麼?

我們使用相同的值並且將RSA籤名應用在其中,這就是RSA算法的工作原理。 由於game id和RSA算法的結果是未知的,因此不可能操控其最終數值,並且猜測最終數值也變得毫無意義。

8.區塊連結收到一個運行撤回函數的事務(gameId,rsaSign)

9.撤回函數內包含一個調用GenerateRandIn函數。

# @return 1 ... 100

func GenerateRandInt (gameId,rsaSign) = {

# verify RSA signature to proof random

let rsaSigValid = rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)

if (rsaSigValid)

then {

let rand = (toInt(sha256(rsaSign)) % 100)

if ((0 > rand))

then ((-1 * rand) + 1)

else (rand + 1)

}

else throw ("Invalid RSA signature")

rand 即為一個隨機數

首先,RSA籤名結果的字符串已被使用。其次,其已通過SHA-256哈希處理。

我們無法預測籤名結果以及後續的哈希處理,因此生成結果不可能被幹預。為了獲取指定範圍內的一個數字(例如從1到100),轉換函數toInt 以及%100(mod模擬)也被應用在其中。

在本文開頭,我們提到了rsaVerify()函數,該函數允許通過私鑰針對公鑰來檢查RSA籤名的有效性。這裡是部分GenerateRandInt(gameId,rsaSign):

rsaVerify (SHA256, toBytes(gameId), rsaSign, RSAPUBLIC

以此開始, RSAPUBLIC公鑰以及rsaSign字符串已被使用,該籤名用以驗證其有效性。 如果驗證通過,那麼數字將會生成。 否則系統將會判定該籤名無效(Invalid RSA signature)

伺服器需要使用私鑰註冊遊戲ID並且在2880個區塊內發送有效的RSA籤名。在部署智能合約的同時該選項已被管理。如果規定時間內沒有其他情況則玩家獲勝。在此基礎上,獎勵會被用戶單獨發送。 就此而言,作弊對伺服器將毫無益處,因為作弊會導致輸局。 如下示例:

玩家參與搖色子遊戲。玩家從6個面中選擇2個,並下注14個WAVES。 如果伺服器未在設定的時間(2,880區塊)內向智能合約發送有效的RSA籤名,則用戶將收到34.44 WAVES。

就數字生成而言,我們使用了預言機,一個非區塊鏈的外部系統。伺服器應用一個RSA籤名到遊戲ID中,智能合約將會檢查籤名的有效性並且判斷贏家。如果伺服器未發送結果,那麼玩家則會自動勝出。

這種方法保證了人為操縱是不可能的,所有Tradisys遊戲都基於以上闡述的算法以保證我們遊戲的公平性和透明性。 所有內容都可以公開審核以確保其公正。

本文來源: 金色財經 /

相關焦點

  • 由MDUKEY 加密方式引申開:關於區塊鏈中常見的非對稱加密算法
    其中,非對稱加密作為區塊鏈領域中的基石,雖然被很多人聽說過,但並不被具體了解。   因此,本文將從加密方式引申開,深入淺出介紹關於非對稱加密算法中的「籤名與加密」。   二、什麼是非對稱加密?   三、常見的非對稱加密算法:   目前常見的非對稱加密有RSA算法、 Elgamal算法和橢圓曲線數字籤名算法(ECDSA),其中橢圓曲線數字籤名算法(ECDSA)是區塊鏈中應用最多的方法。
  • 區塊鏈核心知識丨Hash算法原理
    關注「區鏈數科」,讓你從入門到精通區塊鏈!上一篇文章我們講解了「要了解區塊鏈一定要清楚區塊鏈技術的幾點技術原理!」今天我們來講解區塊鏈中「Hash算法」的基本原理。一般用於快速查找和加密算法。簡單解釋:哈希(Hash)算法,即散列函數。它是一種單向密碼體制,即它是一個從明文到密文的不可逆的映射,只有加密過程,沒有解密過程。同時,哈希函數可以將任意長度的輸入經過變化以後得到固定長度的輸出。哈希函數的這種單向特徵和輸出數據長度固定的特徵使得它可以生成消息或者數據。
  • 談談區塊鏈的加密技術(公鑰、私鑰)
    區塊鏈簡單理解就是一個分布式帳本亦或一個資料庫,當區塊鏈憑藉其獨特的技術特點,在各行各業被研究被採用時,面對大量的數據,區塊鏈是如何保護數據的隱私安全的呢?這主要依賴於密碼學。密碼學使用先進的數學原理和方法來傳輸和存儲數據,這種存儲方式要求只有數據接收者才能對數據進行讀取和處理。
  • 鏈客Talk|軟硬體公鏈方案突破區塊鏈性能困局
    HPB芯鏈,通俗的講,就是通過結合軟硬晶片加速的極致性能和軟體層面的算法優化,打造了一個高TPS平臺,在區塊鏈公鏈領域打造了創新的硬體區塊鏈高速公路。 5.BOE硬體內置隨機數生成器,在生成每個區塊的同時生成一個隨機數。HPB硬體隨機數是真正的鏈上真隨機數,能夠為各種區塊鏈應用提供隨機數據來源服務。 6.HPB智能合約平臺支持多種程式語言, 降低了開發者使用門檻,開發者能夠基於HPB輕鬆編寫和調用智能合約。
  • 區塊鏈+教育,OTN基於區塊鏈技術所搭建的新一代教育生態
    區塊鏈技術有望在網際網路+教育生態的構建上發揮重要作用,其教育應用價值與思路主要體現在六大方面:建立個體學信大數據、打造智能化教育淘寶平臺、開發學位證書系統、構建開放教育資源新生態、實現網絡學習社區的「自組織」運行以及開發去中心化的教育系統。顯示了基於區塊鏈技術構建的網際網路+教育新生態體系。區塊鏈技術有助於推動教育體系變革,加速教育系統進化發展。
  • 哈希算法是理解區塊鏈重要一環
    民間常言:「說唱有嘻哈,算法有哈希。」在了解比特幣投資和區塊鏈技術中,哈希算法作為「常客」時常出現。但大多數朋友對它知之甚少,為它晦澀難懂的內涵所頭疼。那麼今天我們就來簡單說說,什麼是「哈希算法」? 哈希音譯自「Hash」,又名為「散列」。本質上是一種電腦程式,可接收任意長度的信心輸入,然後通過哈希算法,創建小的數字「指紋」的方式。
  • 區塊鏈錢包開發介紹
    區塊鏈錢包並不是直接儲存數字貨幣的,區塊鏈錢包儲存的是私鑰和公鑰。什麼是區塊鏈錢包地址可以把區塊鏈錢包地址想像成一個銀行卡號,別人可以給你的錢包地址打錢。一般地址和私鑰是成對出現的,他們的關係就像銀行卡號和密碼。
  • 常見加密算法DES、AES和RSA的原理和特點
    1DES加密算法1.DES含義DES全稱為Data Encryption Standard,即數據加密標準,是一種使用密鑰加密的塊算法,1977年被美國聯邦政府的國家標準局確定為聯邦資料處理標準(FIPS),並授權在非密級政府通信中使用,隨後該算法在國際上廣泛流傳開來。DES是對稱性加密裡常見的一種,是一種使用秘鑰加密的塊算法。
  • AITD小課堂第十二課:哈希算法是什麼?非對稱加密是什麼?
    哈希算法是什麼? 區塊鏈的四大核心技術分別是密碼學、分布式帳本、共識機制以及智能合約。而密碼學作為其中最重要的一部分,可以說是區塊鏈的基石,而其他技術是以密碼學為地基,才能搭建出區塊鏈這座高樓大廈。
  • 區塊鏈技術前沿報告2020
    一、 研究概述區塊鏈(Blockchain)是分布式數據存儲、 點對點傳輸、共識機制、加密算法等計算機技術的新型應用模式。自 2008 年區塊鏈技術誕生以來,已走過 12 個年頭。影響一個區塊鏈的性能內在因素包括共識機制、數據結構、加密算法等,以及開發時區塊大小和出塊時間等參數設置、系統運維中的系統優化和升級等。我們關注到,目前開源區塊鏈的 TPS 如下:隨著區塊鏈技術與物聯網,5G,大數據等技術結合,高頻海量數據對於區塊鏈自身的 TPS 要求越來越高。
  • 夸克區塊鏈的社會意義是什麼?
    區塊鏈技術為我們提供了一種思維實驗的可能。2. 避免失控:搭建可追溯的算法監管架構人工智慧的失控一直是科幻小說反覆討論的經典話題。首先,深度學習算法本身不完全可控。我們難以解釋深度學習模型為何犯錯。基於深度學習的算法可在訓練後識別不同事物,而命令行的集合體組成了技術黑箱。
  • 【區塊鏈+文化】加密藝術意義與價值何在?
    9月29日,「鏈客Talk」邀請南京航天大學區塊鏈產業研究中心教育主管宋婷來到鏈客直播間,給大家分享了「【區塊鏈+文化】加密藝術意義與價值何在?」這一話題。
  • 秀爾算法:破解RSA加密的「不滅神話」
  • 徐忠又發論文了:區塊鏈能做什麼 不能做什麼?
    提高區塊鏈物理性能的另一個重要方向是改進共識算法(consensus algorithm),特別是從工作量證明(proof of work,簡稱是POW)轉向權益證明(proof of stake,簡稱是POS)。袁勇等(2018)綜述了常見的區塊鏈共識算法。在一些應用場景中使用聯盟鏈或私有鏈而非公有鏈,也是繞開區塊鏈物理性能瓶頸的重要方面。
  • 加密國度:區塊鏈重構社會的大推演 |鏈捕手
    Buterin則放棄比特幣的思路,並構建具有程式語言的以太坊區塊鏈,使所有人都能編寫智能合約和去中心化應用程式,從而可以為所有權、交易格式和狀態轉換功能創建自己的規則。值得注意的是,金錢不再僅僅是一種產出,而是一種投入。以太坊中所有可編程計算均需付費,收費以gas為指定單位,可以使用系統貨幣ETH購買。智能合約根據預定算法自動處理社會和經濟交流活動。
  • 火龍果財經:我國地方融媒體區塊鏈綜合業務系統
    為解決我國地方融媒體中心在生產、運營、監管、服務等環節面臨的問題,陝西融媒體區塊鏈綜合業務系統建設了可管可控、可擴展、高性能、高安全性的區塊 鏈系統,對接陝西省融媒體業務平臺,充分利用區塊鏈公開、透明、難以篡改、 可追溯等技術特性,推動實現了媒體內容可追溯與傳播效能監控、版權的存證保 護,同時讓政務服務實現「數據多跑路、群眾少跑腿」,助力公共業務的資源共 享與效率最大化
  • PONY SWAP 顛覆區塊鏈遊戲市場格局 締造無限增值空間
    隨著區塊鏈技術的發展,其數據不可篡改性、透明化、去中心化等優勢或將對遊戲產業帶來革命性的創新。基於此,PONY SWAP團隊開發了一款完全基於以太坊智能合約原生的DAPP遊戲——PONY SWAP。 PONY SWAP是一款馬匹養成和馬匹競賽的去中心化遊戲,匯集了DeFi、NFT以及DAO等目前區塊鏈市場中較為熱門的多個風口。
  • 崛起於草根的「顛覆性」技術——區塊鏈技術 - 專注...
    區塊鏈技術是指通過去中心化的方式集體維護一個可靠資料庫的技術方案。發展至今,區塊鏈已經吸收了分布式架構、塊鏈式數據驗證與存儲、點對點網絡協議、加密算法、共識算法、身份認證、智能合約、雲計算等多項技術,並在某些領域與大數據、物聯網、人工智慧等形成交集與合力,成為一種整體技術解決方案的總稱。
  • 德國雞尾酒吧Sausalitos推出區塊鏈客戶忠誠度計劃 利用加密貨幣...
    金色財經 區塊鏈6月17日訊 德國雞尾酒吧Sausalitos旗下擁有41家餐廳和900多名員工,每年接待超過400萬名遊客。據悉,這家酒吧正在推出一項基於區塊鏈技術的加密貨幣客戶忠誠度激勵計劃。基於合作夥伴qiibee提供的區塊鏈基礎設施,Sausalitos將推出ERC20協議的數字代幣——Sausalitos Coin。
  • 區塊鏈遊戲到底是個什麼東西?
    狹義的區塊鏈遊戲,目前來說包括CryptoKitties、acdog加密狗、玩客猴等,這些遊戲按類型來看基本上是「養成+交易」的玩法,可以看成是寵物養成遊戲的區塊鏈化實現,也是現階段受關注程度最高的模式。