• 沒有找到結果。

第三章 基於區塊鏈的 PKI 容錯架構

第三節 TP-Merkle Tree

憑證的撤銷、檢驗方式,與以往PKI 架構不同,其實這與憑證的儲存方式有

關,以往的PKI 架構,憑證驗證資訊都是獨立分開的,不論是儲存空間還是驗證 資訊,都屬於一對一的概念,但為了解決區塊鏈頻寬問題,我們使用了TP-Merkle Tree 這個資料結構來進行儲存,這個資料結構可以將數百萬張的憑證壓縮成一個 32 bytes 的資料,變成了一對多的概念,因此以往的驗證方式是絕對無法使用的,

因此在介紹撤銷、驗證是如何進行之前,我們必須先了解TP-Merkle Tree 是怎麼

13

對運作的。

圖5 憑證儲存的差異

第一段 Merkle Tree

Merkle Tree 又被稱為哈希樹、雜湊樹,因為它是使用雜湊函數建立而成,是

一種樹狀資料結構,通常以完滿二元樹的方式進行實作,樹的有三種節點leaf node、

internal node、root node,每個節點都是一個唯一雜湊值,建立樹時會先計算每個 leaf node 的個別雜湊值,接著將 internal node 的左右節點雜湊值相加在計算一次

雜湊,就這樣從下往上逐一計算所有節點,直到算出root hash。

圖6 Merkle Tree 結構

14

雜湊值有ㄧ個特性,就是輸入的資料只要不變,不管計算幾次都是相同的結 果,所以常常被拿來當作驗證資料的完整性與正確性,這代表使用Merkle Tree 來儲存資料,可以透過驗證Root hash 來證明資料是否有誤。

第二段 Index Function

TP-Merkle Tree 就是以上述為基礎,加入了定位功能,並且會事先決定好樹 高才開始放資料,leaf node 可以放複數資料進去,但每筆資料必須以 Key-Value pair 的方式儲存,例如:(Key1, Value1),key 值又稱作 indexValue 是定位用的參

數,而value 則是實際要存放的 data,至於 leaf node 底下所有的 Key-Value pair 我們稱之為list of Key-Value pairs,要定位時只需將 indexValue 放入 Index Function

Γ函式進行的計算,即可得到指定的 leaf node 位置,Index Function Γ函式如下:

𝜞(𝑰𝒏𝒅𝒆𝒙𝑽𝒂𝒍𝒖𝒆) = 𝑺𝑯𝑨𝟐𝟓𝟔(𝑰𝒏𝒅𝒆𝒙𝑽𝒂𝒍𝒖𝒆) 𝒎𝒐𝒅 𝟐𝑵−𝟏

假設樹高為 N,而𝟐𝑵−𝟏則是計算樹的總節點數,透過mod 的動作就可以限制

定位不會超過樹的節點總數。

透過這種方式放入資料後,任何人都可以透過indexValue 來找尋相應的資 料。

15

第三段 Slice

Slice 是整個 TP-Merkle Tree 驗證方法中的重要證據,每一個 leaf node 都會對

應一條Slice,其形式如下:

圖7 leaf node 74 為例的 Slice 結構

Slice of leaf node 74 = Root node | Left Internal node | Right internal node

|…| Left Leaf node | Right Leaf node,Slice 上包含自己,以及所有的兄弟節點、父

節點的雜湊值,驗證資料時只要由下往上計算一次Slice,在與以前記錄 Root hash

做比較就可以知道資料是否正確,對驗證者來說,不需要儲存所有的hash 值,只 要取得自己資料所在的Slice 即可驗證。

透過上述兩個方式,雖然我們將一百萬張憑證都放到Tree 裡面,但憑證擁有 者可以透過 Index Function 來確認自己的憑證所在位置,知道位置後再取得相應 的Slice 即可進行稽核。

16

相關文件