多個 XML 文件和已知明文攻擊
我創建了一個應用程序,它以集合的形式收集數據,其中可能包含多達 20000 個平均大小約為 5 KB 的 XML 文件,並且都具有相同的標頭和 XML 結構,因此只有它們包含的數據不同。
出於某些原因,我決定對這些 XML 文件進行加密,以便在未經我同意的情況下無法導出其中包含的數據。問題是應用程序的目前使用者已經有很多未加密的 XML 文件,並且在這些文件被加密之後(他們必須這樣做才能使用應用程序的未來版本),他們可能仍然有未加密 XML 文件的備份,對此我無能為力。
但這也意味著他們有辦法進行已知的純文字攻擊,以便提取密鑰,從而還可以導出將來添加的加密 XML 文件的內容。因此,我想確保以某種方式對它們進行加密,即使不是不可能,至少也非常困難。
正如我從閱讀此處的文章中了解到的那樣,如果正確實施,在這種情況下,AES 應該可以安全地抵禦已知明文攻擊。所以我正在嘗試使用 AES 加密文件。我只是想確定我做的是否正確,希望有人能告訴我。
我正在使用此處列出的程式碼:
和一個 64 字節的密鑰和一個 32 字節的鹽/IV。每個文件的密鑰和鹽都相同。我已將迭代次數設置為 4096,因為更高的數字會使事情變得太慢。
我可以為每個文件創建一個唯一的密鑰或 salt/IV,因為每個 XML 文件都有一個唯一的 ID,但這會使事情變得複雜,在極少數情況下,文件的 ID 可能會更改(超出我的控制),所以我如果可能的話,想避免它。
您可以只使用 128/192/256 位的完全隨機 AES 密鑰。如範例中所示,不需要 PBKDF2。對於 CBC,IV 應該是完全隨機的,因此您需要將其與每個密文一起保存。IV 當然總是需要 128 位(16 字節)。您指出的程式碼僅在您使用密碼或密碼而不是密鑰時才有用。
AES-CBC 在任何安全模式下確實可以抵禦明文攻擊。沒有必要特別擔心這一點。請注意,CBC 模式,塊密碼的 .NET 預設值不保護加密文件的完整性/真實性(即有人可以在未檢測到的情況下更改它們或在取消填充期間創建故障)。