對 Authenticated Data Structures 邏輯的懷疑
我正在研究經過身份驗證的資料結構的理論,例如 Merkle 樹,但我有一個疑問:為什麼要使用它們?
例如,為了確保云提供商沒有修改我的文件,為什麼我必須請求特定的數據塊並讓雲回復以從葉子到根的雜湊路徑來驗證所有樹(以及那麼所有的數據庫)?
詢問數據庫的特定部分(假設數據庫分為塊)並從雲提供商那裡接收帶有數字簽名的塊不是更簡單嗎?通過這種方式,我可以在完全不使用 Merkle 樹的情況下不斷地請求很多塊。
我正在閱讀有關 RSA 累加器、雙線性映射、布隆過濾器等的材料,並且每次我閱讀有關基於特定資料結構建構的不同協議時。由於使用這些技術具有計算成本(例如,RSA 累加器可能很昂貴),所以我的問題是如前所述:與其使用單個摘要來驗證整個集合或 DB,為什麼不要求具有數字簽名的不同數據片段?
希望你能回答我奇怪的問題!
謝謝!
我看到的一個原因是簡單的簽名只能證明數據塊是由您生成的,但不能證明該塊是您查詢的。
一個簡單的例子:假設你有 4 個數據塊 $ d_1,d_2,d_3,d_4 $ 您可以按索引查詢,即在查詢 = 1 時,伺服器應返回 $ d_1 $ .
現在,當使用簽名方案時,您儲存 $ (d_1,d_2,d_3,d_4) $ 以及他們的簽名 $ (s_1,s_2,s_3,s_4) $ . 後來你查詢3,伺服器返回 $ (d_{x},s_{x}) $ . 此時,您可以驗證 $ s_x $ 確實是一個簽名 $ d_x $ . 但你怎麼能確定 $ d_x $ 是 $ d_3 $ 你問的?你所擁有的可以是 $ (d_1,s_1) $ 例如,它將通過檢查。請記住,使用雲的主要精神是您將數據儲存在雲中,而無需保留本地副本。現在你將無法判斷你是否得到了正確的答案。
如果你使用 Merkle 樹,那麼你會得到這樣的樹:
現在當你查詢 3 時,你會得到 $ (d_3’,h0’,h11’) $ . 你可以散列 $ H(h0’||H(H(d_3’)||h11’)) $ . 如果結果和你保存的root一樣,你一定得到了 $ d_3 $ 根據您的要求,因為該項目的路徑是唯一的。
使用簽名時的一個類似問題是,如果伺服器返回舊版本的數據項怎麼辦?無法判斷,因為簽名不能證明新鮮度。使用 Merkle 樹時,每次更新數據時都會更新根,因此它為您提供了新鮮度保證。
Merkle 樹提供沒有秘密的身份驗證,並且可以
更有效地驗證足夠大的連續區域。
對於“一個特定的 Db 塊(假設一個數據庫被分成塊)
並從雲提供商那裡接收到帶有數字簽名的塊”“更簡單地詢問”。
(我相信“沒有秘密”是其句子中更重要的考慮因素。)