Stream-Cipher

重用 AES-CTR 密鑰和 IV 進行文件加密

  • November 6, 2020

我正在實現一些具有隨機訪問能力的文件加密模組,而 AES-CTR 似乎是正確的方法。

我知道,當文件的某些部分被修改時(假設文件的以前版本仍然可用),重用密鑰和 IV 可以將文件暴露給“流密碼攻擊”。

我想避免在修改文件時重新加密文件的全部內容,所以我想將 CTR 與 ECB 結合起來。首先使用 CTR 加密該塊,然後再次使用相同的密鑰重新加密生成的密文:

CTR-Cipher = Plain xor AES(IV + counter, Key)
Final-Cipher = AES(CTR-Cipher, Key)

這會讓我重複使用密鑰和 IV 嗎?或者是否有其他安全的替代方案來支持基於隨機訪問的加密而無需大量重新加密?

是的,有一些安全的替代方案可以支持基於隨機訪問的加密。

我沒有想出辦法來打破提議的組合。儘管如此,我還是建議不要發明一種新模式,而是考慮這種操作的現有模式,例如 XTS 模式。現有的模式得到了更多的研究,並且(在某些方面)更有效。XTS 模式(以及其他一些模式)僅對每個輸入塊呼叫一次密碼。Rogaway 創建了一篇描述最常見操作模式的論文,其中包含對 XTS 模式的良好研究,包括一些批評。

替代方案:IEEE P1619

IEEE P1619制定了磁碟加密標準。這些標準包含用於保持磁碟儲存加密的加密機制。由於磁碟儲存(通常)需要頻繁重寫磁碟扇區,因此這些標準具有重寫扇區的能力。

IEEE P1619 指定了長度無擴展加密機制和具有長度擴展的機制 (P1619.1)。如果要避免長度擴展,XTS 模式是最常用的密碼操作模式之一。它可能證明了您期望 CTR 與 ECB 組合的安全功能,即它適用於窄塊(16 字節)並允許您傳入扇區索引。有些窄塊有問題。在這種情況下,您可以看看寬塊加密,例如 P1619.2 中的 EME2、XCB。

替代方案:每塊 IV(傳統)

僅供參考,我還提到了傳統的(經過充分研究的方法)。如果您缺少 P1619 中具有適當模式的加密庫或硬體,這種方法可能會很有用。

進行基於隨機訪問的加密的一種眾所周知的方法是將數據視為塊,並在每次更新塊時為每個塊生成隨機 IV。這當然是加密數據會擴展的混亂,但百分比不是很大:考慮例如 1 KB 塊和 16 字節 IV: $ \frac{16}{1024}\approx1.6% $ . 這只是一筆不小的費用。注意:當擴展長度時,添加身份驗證標籤通常是個好主意。

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