解決方案
要證明某筆記錄屬於大型資料集,通常意味著得把整個資料集送出去。這對備份、交易檔案或網頁快取而言並不實際。
Merkle 1979 年的博士論文與 1989 年的論文描述了一種樹狀結構:每個區塊都經過雜湊,雜湊值兩兩配對,直到只剩一個樹根。驗證某個成員時,只需路徑上的 log n 個雜湊值,而不需要整個檔案。
這棵樹把成員資格測試轉化為對樹根的相等性測試,任何位置的變動都會反映為路徑的改變。這正是整個資料結構無須逐位元檢視、也能獲得擔保的方式。
達成了什麼
將葉節點兩兩雜湊、逐層向上,直到單一樹根,以此對葉節點作出承諾
為何有效
證明大小為對數級,因此即使在最大的資料集上,驗證依然便宜。
樹根承諾了整個資料集,因此任何竄改都會被偵測到。
驗證者只需要樹根與一小段路徑,而不必信任伺服器。
它是一連串單向雜湊,因此不會洩露任何關於資料的資訊。
可應用之處
若要證明關於龐大整體的某項事實,不要送出整個整體。先把它壓縮成一個摘要,然後只提供連接該項主張與該摘要的簡短路徑。
後續影響
Merkle 樹是 Git、加密貨幣區塊鏈、憑證透明度(certificate transparency)與分散式儲存的基礎。它們讓客戶端只需信任一個簡短的樹根,就能驗證大型、未經認證的儲存庫中的一小部分。
追溯依據
參考來源
- A certified digital signature Advances in Cryptology — CRYPTO '89 · dblp.org
- Merkle tree Wikipedia · en.wikipedia.org