比特幣系統數據結構 hash pointers(哈希指針)

哈希指針,對於上一篇文章Merkle tree 做補充啦

哈希指針由兩部分組成:

  • 指向一些信息存儲的指針
  • 該信息的加密哈希值指針可用於獲取信息,哈希值可用於驗證信息未更改

在這裏插入圖片描述

使用散列指針構建的數據結構

哈希指針可用於構建鏈表,也稱爲區塊鏈。
在這裏插入圖片描述

我們應該注意,存儲在哈希指針中的哈希是前一個塊的整個數據的哈希,其中還包括指向該塊之前的塊的哈希指針。這使得在不通知他人的情況下篡改區塊鏈中的區塊是不可能的。
篡改區塊鏈的明顯屬性
我們只需要保留指向區塊鏈最後一塊的哈希指針即可。然後,當有人稍後顯示整個區塊鏈並聲稱其中的數據未修改時,我們可以通過向後遍歷區塊並逐個驗證哈希來判斷鏈中的任何區塊是否被篡改。

說明:

  • 攻擊者想要篡改鏈中的一個區塊,比如說區塊1。
  • 攻擊者由於哈希函數的“無衝突”屬性而更改了塊1的內容,因此他無法找到與舊哈希具有相同哈希的另一數據。因此,此修改後的塊的哈希也已更改。
  • 爲了避免其他人注意到不一致,他還需要在下一個塊(即塊2)中更改該塊的哈希指針。
  • 現在,更改了塊2的內容,因此要使該故事保持一致,必須更改塊3中的哈希指針。
  • 最後,攻擊者轉到指向區塊鏈最後一塊的哈希指針,這對他來說是一個障礙,因爲我們保留並記住該哈希指針。

在這裏插入圖片描述

Merkle tree

Merkle tree是帶有哈希指針的二進制樹結構。葉子是數據塊,樹中更遠的節點是它們各自子級的哈希。
在這裏插入圖片描述

特徵

  • 篡改顯而易見,
    就像區塊鏈一樣,我們只需要記住根(頂級節點)中的哈希指針,然後可以遍歷任何葉數據塊以檢查某個節點是否在樹中或已被篡改。
  • 遍歷效率
    要驗證數據塊,我們只需要遍歷從頂部到數據所在的葉子的路徑。因此複雜度爲O(log n),與鏈表鏈的O(n)相比效率更高。
  • 非成員身份證明
    如果對默克爾樹進行排序,我們可以證明給定數據不在樹中:如果給定數據之前和之後的數據都在樹中並且它們是連續的,則它們之間沒有空格,這證明給定的數據不在三分之內。

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章