防篡改日誌文件
問題概述
我想安全地儲存日誌文件,以便內容是秘密的,並且在沒有檢測到的情況下無法修改它們。
這些文件將使用經過身份驗證的加密(GCM 模式下的 AES)進行加密,每個文件都有一個隨機 IV 和對稱密鑰。對稱密鑰將使用 RSA 密鑰對的公共部分進行加密。IV 和加密的對稱密鑰都將包含在附加的經過身份驗證的數據中。
這給了我機密性、完整性和真實性——但僅限於每個單獨的日誌文件。
例如,假設我有日誌文件
2013-01-01.log
,2013-01-05.log
並且2013-02-09.log
- 攻擊者可以2013-01-05.log
在沒有檢測到的情況下刪除。我想出了兩種可能的解決方案。
可能的解決方案 1
該程序可以維護一個加密的(可能是 RSA 簽名的)“計數器文件”,其中包含一個序列號,每次我們編寫一個新的日誌文件時,該序列號都會遞增。序列號將成為日誌文件名的一部分,並且還將包含在附加的經過身份驗證的數據中。因此,我們可以從失去的文件中檢測到任何“空白”。
可能的解決方案 2
該程序可以維護一個加密的(可能是 RSA 簽名的)“數據庫文件”,其中包含所有先前寫入的日誌文件的文件名。因此,我們可以從失去的文件中檢測到任何“空白”。
問題
我想就我的 2 個可能的解決方案提供回饋 - 它們是否有效,是否需要進行一些更改,我是否遺漏了什麼?
或者我的問題有更好的解決方案嗎?
加密方案”(PDF)
提供了一種可公開驗證的方法,允許細粒度驗證,
但它是在隨機 Oracle 模型中。
簡單方法: 驗證器和記錄器從前 向安全偽隨機數生成器
的種子開始 。 要表示日誌的有效結尾,請將
下一個字元串
$ b $ PRNG 的輸出位到日誌中。
要添加日誌條目,請獲取下一個 $ :b+k: $ PRNG 輸出的位,
將日誌條目的加密和
使用最後一個密文的 mac 放入日誌 $ k $ 的 $ :b+k: $ PRNG 輸出位作為
mac 密鑰,然後擦除那些 $ :b+k: $ 位和之前的 PRNG 狀態。