Secure-Storage

如何將數據保存在不可信的數據庫中,所以下次我從數據庫中讀取時,我知道我讀取的是實際數據而不是舊版本的數據?

  • June 14, 2017

假設我加密了一條消息 A1,並保存它。稍後我將消息 A1 替換為新消息 A2。我不信任消息儲存。現在我想閱讀最後一條消息。如何驗證我是否已閱讀最後一條消息?攻擊者可以用 A1 替換消息 A2,我不會注意到這一點。

第一個想法是記住最後一條消息。這將適用於最後一條消息,但我如何驗證我的所有消息都在數據庫中?我想我可以將消息簽名的簽名列表與數據庫的最後修改日期一起保存。這樣我只需要記住最後一次數據庫編輯日期。將其稱為控制消息。我還需要確保在編寫控制消息時沒有替換。

這通常是怎麼做的?

我需要的是一個安全的櫃檯。具有屬性的計數器:

  1. 它儲存在不安全的數據庫中
  2. 在不知道密鑰的情況下無法被舊版本替換
  3. 它只支持遞增/遞減操作
  4. 如果可能,兩個使用者應該能夠同時增加計數器(並發)而不會產生副作用
  5. 計數器可能會失敗。有時可以將其設置為 N-1,而不是 N。我不希望攻擊者設置計數器。

我不是專業的密碼學家,但您似乎並沒有問密碼學問題。暫時擱置加密部分,我認為您要求的是不可能的事情。

  • 您範例中的兩方僅通過儲存系統進行通信。
  • 他們收到新版本警報的唯一方法是檢查儲存系統。
  • 然而,您還說儲存系統不可靠,或者可能被黑客入侵。

在那種情況下,任何事情都可能發生。

即使雙方都“記住”了他們看到的最後一個版本,他們中的任何一個都可以改變系統的狀態,做一些壞事,然後在另一個人注意到之前將其翻轉回更早的狀態。或者,第三方可以做同樣的事情並愚弄他們兩個。

如果你有一個安全通道,你可以用它來證明一些關於不安全通道的事情。但在你的例子中不存在。

引用自:https://crypto.stackexchange.com/questions/48301