加密和認證的磁碟/文件模式
多年來,人們一直在積極研究安全磁碟/文件加密。除了 XTS 和 CBC-ESSIV,還有其他常用的加密方式嗎?哪個可能是最安全的模式?
由於不存在完整性和身份驗證機制,有什麼好的方法可以防止惡意人員修改數據?
我正在尋找一種滿足安全性且不會顯著影響性能的實用方案。
除了 XTS 和 CBC-ESSIV,還有其他常用的加密方式嗎?
不,只要看看 Veracrypt(僅限 XTS)或 dmcrypt 之類的軟體。
為此目的還有第三個值得注意的方案,LRW,但它被認為不夠安全:
LRW的問題是:
a) 如果明文包含 K2||0n 或 0n||K2,則攻擊者可以從密文中導出 LRW 調整密鑰 K2。這裡 || 是連接運算符,0n 是零塊。
$$ 3 $$這可能是對執行此加密軟體的作業系統分區(同時)進行加密的軟體的問題。作業系統可以將 LRW 調整密鑰寫入加密的交換/休眠文件。 b) 如果tweak key K2已知,LRW不再提供選擇明文攻擊(IND-CPA)下的不可區分性,並且ECB模式的相同輸入塊置換攻擊是可能的。
$$ 4 $$調整密鑰的洩漏不會影響明文的機密性。
(來自https://en.wikipedia.org/wiki/IEEE_P1619#LRW_issue)
哪個可能是最安全的模式?
取決於你的要求。
兩種模式:
如果攻擊者可以監視您所做的數據更改(聽起來像是攻擊者偷走了您的電腦,在硬碟和主機板之間添加了一些東西並將其歸還),或者至少在不同時間點獲得多個副本:
攻擊者可以做一些流量分析,例如。他/她可以檢測某些塊是否變回了過去的某些數據。IE。如果你有一個塊有 A,你把它改成 B,然後再改回 A(同一個塊,不是不同的塊),那麼攻擊者知道目前內容過去也在那裡。
對此沒有真正的保護措施,但如上所述,攻擊者需要監視更改。僅僅偷筆記型電腦或類似的東西是不夠的(如果你找回它,就不要再相信它了,就這麼簡單。有成千上萬的事情可以在你不看的時候做,其中很多比僅僅嗅探加密內容更糟糕)。
XTS:
具有類似監控能力的攻擊者,也可能改變塊,可以回滾更改。
使用與上述相同的 ABA,(當然)攻擊者可以將您的 A 塊更改回之前的 B 塊(不知道未加密的內容,但仍然如此)。
提醒一下,覆蓋密文總是可能的,導致解密後產生垃圾。但在這裡,它不是垃圾,是你自己過時的內容。
樹狀完整性/身份驗證方案(見下文)緩解了這種情況,但要快速接受,它需要集成到文件系統中。
CBC-ESSIV:
如果攻擊者願意為每個更改的塊(=一半的塊)破壞另一個塊,則始終可以更改明文中的特定位(即使沒有監視更改或任何東西)。
同樣,樹狀完整性/身份驗證方案緩解了這一點。
…如果你想要我的意見,XTS+auth。
有什麼好的方法可以防止惡意人員修改數據?
你不應該做的事情:
取每個 4096 字節塊(或類似的大小),使案例如。4076 字節用於數據,20 用於 HMAC。因為
a)它不能解決上述部分問題(例如,對於XTS,用它的舊內容替換一個塊意味著舊的HMAC也在那裡……失敗了);b) 它與
OS+程序通常想要的不匹配。如果作業系統讀取 8192 字節 (2*4096),則需要第三個塊,因為前兩個包含 40 字節 HMAC 和僅 8152 字節數據。40 字節的 4096 塊…然後,當作業系統想要文件的下一部分時,您要麼需要再次讀取同一塊(甚至更慢,因為非順序),要麼實現某種記憶體,這變得非常麻煩。
您也不應該做的事情:
在自己的塊中收集 HMAC。4096/20 大約是 204,所以每 204 個數據塊後面跟著一個充滿 HMAC 的塊。
a)這也不能解決替換問題(攻擊者只需替換 205 個塊的塊),並且
b)它更慢,因為對於您讀/寫的每個塊,您還需要很遠的雜湊塊(最好是不連續的)。
您可以在僅塊級別上做什麼(更安全但仍然很慢):
像上面的解決方案一樣開始(完整雜湊塊),但還要為每個例如插入第二級雜湊塊(錯誤,MAC 塊)。200 個雜湊塊,每 200 個第二級第三級,依此類推,直到你有一個頂級塊。
有了這個,替換單個塊或任何更大的部分總是可以被檢測到,除非攻擊者改變了一切,即。整個磁碟內容,回到它的舊內容等(這部分真的不能用加密解決。這就像用一個包含舊數據的硬碟交換整個硬碟。為了緩解這種情況,你需要安全地儲存頂部塊外部如果硬碟)。
問題再次是由於非順序訪問而變慢。由於級別的原因,計算第 X 個數據塊的位置變得有點麻煩。
它不會變得更安全。但是根據你想要做什麼,緩慢的問題也可以解決:不要只使用塊,不知道它們的目的,而是將雜湊樹集成到文件系統中。
無需為散列獲取額外的塊,因為它們也可以位於儲存文件名等的相同位置。並且知道哪些塊屬於同一個文件,檢測程序訪問模式以進行適當的記憶體等等,所有這些都可以應用於雜湊部分。