流行壓縮文件格式的加密 - 7zip、RAR、Zip
使用 Winrar 加密文件時,您必須輸入密碼。我的印像是這個密碼沒有儲存在任何地方,而是密碼與其他一些屬性和 IV 創建了某種散列。該散列是否儲存或附加到加密文件?
那麼當嘗試通過使用者輸入的密碼解密文件時,是否重複雜湊過程以驗證儲存的雜湊是否與生成的雜湊匹配以開始解密過程?
我的意思是,加密文件中必須儲存一些東西;也許不是密碼,而是雜湊*……*
從密碼生成的雜湊實際上是派生密鑰,並且絕對不儲存在文件中(有例外)。它不與任何數據進行比較,它用於加密和解密。
除了密文之外,軟體不需要其他東西來確定密碼是否正確。在許多情況下,解密是在身份驗證之後進行的,但沒有必要確定任何內容。該文件將被解密,並且在密碼錯誤的情況下解壓很可能會失敗,如果它確實解壓數據將是垃圾。
從可用性的角度來看,這當然不是最佳的。如果使用者知道密碼不正確,這對使用者來說是最好的。這必須以不會給攻擊者帶來巨大優勢的方式來完成。有幾種簡單的方法可以做到這一點,這裡有一些。
1:在加密之前添加壓縮數據的校驗和或雜湊。解密後,數據會被散列,並與解密的散列進行比較。如果匹配,則正確解密。這也可以在塊級別完成,例如每 16KB,因此可以更早地確定解密的正確性。
2:“魔術字元串”是較舊的加密存檔格式中更常見的方法。
0x52 0x61 0x72 0x21 0x1A 0x07 0x00
壓縮數據包括一些已知的前綴或後綴,例如0xC4 0x3D 0x7B 0x00 0x40 0x07 0x00
在 WinRAR 的情況下,並且由於這些字元串的位置應該在預期的位置,如果密碼正確且數據未修改,則這些位置的解密將顯示字元串. 這不一定是 WINRAR 處理它的方式,而只是一個範例。3:二次數據加密密鑰用從密碼導出的密鑰加密。這允許在不重新加密數據的情況下更改密碼,並且還允許驗證數據密鑰組件以知道密碼是正確的,而無需查看存檔的加密數據。