• 沒有找到結果。

第四章 可稽核的彩票系統

第二節 Transaction Positioned Merkle Tree

投注的動作,遊戲供應商將會在投注結束後,把此次投注的累積的總獎金換算為 等值的加密貨幣轉帳至智能合約中,並會上傳一組中獎號碼至智能合約,接下來 玩家將可以在智能合約上進行兌獎的動作。圖 4-1 為本系統最基礎的建構設施說 明,在下一節中將會詳細介紹每一個腳色之間資料交流的詳細項目,以及所需應 用到的相關技術。

圖 4-1可稽核的彩票系統架構圖

第二節 Transaction Positioned Merkle Tree

由於彩票系統的遊玩人數將會非常龐大,我們需要一個技術將玩家們的投 注資訊進行整理儲存,並且可以透過有效的方式對投注資訊進行稽核,在申訴 時也能取出證據使智能合約能夠做出正確的判斷,在這邊我們採用TP Merkle Tree (Transaction Positioned Merkle Tree) [13],它是由 ITM 國際信任機器在 2019

14

年所提出的樹狀結構,他是一個FBHTree (Full Binary Hash Tree) ,FBHTree 是 一個二元樹的資料結構,樹的結構可以分成三個部分:葉節點、內部節點、根部

節點,這個樹狀結構最早是由Proof Of Violation [14]所使用,其憑藉著 Hash Function 搭配上完滿二元樹,可以用一筆 32Bytes 的 Hash 值來驗證樹底下的 100 萬筆資料是否有被竄改,TP Merkle Tree 基於此種技術做了傳輸 Protocol 修正與 應用。如下面圖(2)是一個 4 層的 TP Merkle Tree 資料結構。

圖 4-2 TP Merkle Tree 結構

Key-Value = Hash(Index) | Receipt

Key-Value Pair List = Key-Value 1st -> Key-Value 2nd-> …-> Key-Value Nth

Leaf node = Hash(Key-Value Pair List)

Internal node, Root node = Hash(Left child node | Right child node)

接著開始說明TP Merkle Tree 的運作原理,TP Merkle Tree 在建立之前,會先 依照需要放置資料的數量來決定樹的高度,如果資料總量為N,如果樹的高度 H 是則是H = 𝐿𝑜𝑔2𝑁,總共會有 2H-1 個節點與 2H-1的葉子節點。

15

葉子節點(Leaf node)是由 Key-Value 的集合產生的 Key-Value Pair List 並進行 Hash 運算所得出來的結果,Key-Value 將是把某一個玩家的個人身分的公開金鑰

資訊PK(Public Key)當作 Key 值,並將其與某一個序列化的 Index 數字進行合併,

合併完再對其進行Hash 的動作,Value 值則是將此玩家投注所產生的 Receipt,即 每個 Key-Value Pair 的形式如下(𝑷𝑲_𝑰𝒏𝒅𝒆𝒙 , 𝑹𝒆𝒄𝒆𝒊𝒑𝒕)。每當要存入一筆投注資 訊的時後,會用一個 Index function Γ 函式來計算對應的 Leaf node 位置,Index function Γ 的函式如下。

𝜞(𝑷𝑲_𝑰𝒏𝒅𝒆𝒙) = 𝑺𝑯𝑨𝟐𝟓𝟔(𝑷𝑲_𝑰𝒏𝒅𝒆𝒙) 𝒎𝒐𝒅 𝟐𝑵−𝟏

如果樹高是H 的話,用Γ算出來的數值會介於 2H-1至1 之間,例如 Public Key 0xabcdef 與 Index 123 進行合併為 0xabcdef123,並透過Γ函式的計算後,得出來的

數值為7 這筆投注資訊就會儲存在 Index = 7 的 Leaf node 中。

內節點(internal node)是由左子樹節點的 hash 值和右子樹節點的 hash 值,兩

數值合併並做一次 hash 的計算得出來的 hash 值,重複以上的動作,從葉子節點 開始往上做兩兩運算,最後會得到根節點的 hash 值,這個根節點的 hash 值,我 們稱此數值為這棵TP Merkle Tree 的 Root hash,Root hash 將會使用在稽核以及申

訴部分

,在下一段中將會說明如何使用TP Merkle Tree 的節點組合 Slice 並將其運算至根 節點取得Root Hash。

16

第一段 Slice

Slice 在是 TP Merkle Tree 內的葉子節點、內部節點與根節點所組成的一個集

合,如下圖4-3 所示,假設新的一筆投注資訊被放在 Index = 3 的葉子節點內,則 圖內所有實心點的集合便被稱作為Slice。

圖 4-3 Slice

Slice 的主要功能一共有兩項,第一項是當一筆新的投注資訊被插入至 TP Merkle Tree 中時,由於葉子節點的更動,使得 Slice 將會隨之更動,此舉的優點

在於當一筆新的資訊插入時,我們不用更動除了Slice 以外的其他節點,便能達到 更新根節點值,降低更新TP Merkle Tree 的運算量。第二項是玩家在投注階段結

束後,將可以從遊戲供應商端取得Slice,以此去計算根節點值是否與遊戲供應商 所公告的根節點值相同,甚至到提起申訴階段,玩家依然可以使用Slice 來向智能 合約進行申訴,便能達到稽核整體遊戲的效果。

Slice of TP Merkle Tree = Root node | Left Internal node | Right internal node |…|

17

Left Leaf node | Right Leaf node

每一個葉子節點的Index = I 可以找出對應的 Slice(I),我們可以從樹底的葉 子節點向上追蹤到根節點,在這之中的父節點和兄弟節點都包含重要的Hash 值,

這些全部Hash 值我們將它們按順序儲存在一維陣列中,再透過兩兩合併與 Hash 計算,我們可以導出Root hash。

因此,如果我們有一個Slice(I),我們可以計算出一個 Root Hash 值,玩家將 可以用此Slice 的計算結果,與遊戲供應商提供的 Root Hash 值進行比對,就能知 道說遊戲供應商提供的 Root Hash 值是否有出現錯誤的現象,或是延伸出其他遊 戲錯誤,玩家將能以Slice 作為其中一個密碼學證據向智能合約提出申訴請求。

第二段 密碼學證據

自前一段Slice 進行了介紹,可以知道我們使用 Slice 可以從 TP Merkle Tree 的葉子節點開始計算,直至根節點的Hash 值,我們便可利用這個 Root Hash 值 來確定在TP Merkle Tree 內的資料是否有更動過,又或者是確定資料有被放入 TP Merkle Tree 之中。

除了透過Slice 對 TP Merkle Tree 的 Root Hash 進行核對以外,存在於葉子

節點中的Key-Value 依然是決定整個 TP Merkle Tree 正確與否的焦點,因此若要 詳細的比對資料的正確性,必須將葉子節點中的內容一同取出,將裡面的 Key-Value Pair List,同樣做 Hash 的運算過後再與 Slice、Root Hash 進行比對,可以

提升整體的正確性。否則可能將會出現資料在Key-Value Pair List 中遺失的可能

18

性。

在本篇論文中,可稽核的彩票系統在多個階段運用了密碼學證據來進行比 對,以確保遊戲供應商在遊戲過程中沒有出現缺失、惡意攻擊。在往後的章節 中所使用的密碼學證據將由以下幾個資料所組合而成: 1. Slice 2. Key-Value Pair List 3. Clearance Order 以及遊戲供應商對此資料組合所做的電子簽章。Slice 主

要能將玩家的投注資訊與本次遊戲使用TP Merkle Tree 做連接,確保玩家索取到 的Slice 與遊戲供應商儲存遊戲資訊的 TP Merkle Tree 是同一棵樹,如同上述我 們能將Root Hash 進行比對便能確保此次的遊戲程序無誤。Key-Value Pair List 內 將存放除了自己以外的投注資訊,由於Key-Value Pair List 是葉子節點的主要內 容,因此取得Key-Value Pair List 後,再透過合併以及 Hash 計算過後,便能取 得葉子節點的Hash 值,此值將會被放在 Slice 中,我們就能進一步比對 Slice 中 的值是否有包含此葉子節點的Hash 值,玩家便能自行比對自己的投注資訊是否 有正確的被放在葉子節點、TP Merkle Tree 之中。Clearance Order 就是將以上的 Slice、Key-Value Pair 與某一個場次的遊戲做直接的關聯,以確保在日後申訴時

不會有惡意攻擊的出現。密碼學證據將會把此三種資訊做合併後,在附上遊戲

供應商的電子簽章,以確保密碼學證據是經由遊戲供應商正確提供,而非自行 竄改的結果。密碼學證據並不會在玩家投注時就取得,而是至遊戲清算 TP-Merkle Tree 時才開放與遊戲供應商進行索取,詳細的流程將會在第三節進行說

明。

19

相關文件