Aes
發送文件設計的安全性
假設我有一個發送文件的協議 $ F $ . 我打算在 CBC 模式下使用 AES 進行加密 $ F $ 在哪裡 $ IV $ 是隨機選擇的。為了真實性,我正在僱用 $ HMAC $ 計算消息驗證碼( $ MAC $ )。無論是加密版本 $ F $ 和 $ MAC $ 被發送到接收方。
這個設計有什麼缺陷嗎?
所以這就是你正在做的事情:
$$ E_{K_1,IV}(F)||H_{K_2}(F) $$ 其中 E 表示使用 AES-CBC 加密,H 表示 HMAC。這也稱為“加密和 MAC”。
該方案可能存在一些問題。
- 它(正式)不是 IND-CPA 安全的,因為攻擊者可以查詢加密預言機以獲取挑戰密文並比較生成的 MAC。
- 該方案對 MAC 施加了高於正常的約束,因為通常不假定 MAC 保證不會洩露有關其輸入的任何內容。使用 HMAC,這不是問題。
- 如果您沒有正確驗證 CBC 填充,該方案可能容易受到POODLE 式攻擊。
作為一種安全的替代方案,我強烈建議您使用 AES- GCM ,如果您加密的每個密鑰少於幾 GB,或者如果您這樣做,則使用AES- EAX 。最好使用一些眾所周知的和經過審查的它們的實現,因為正確獲得 AES-GCM 並不容易。由於 EAX 和 GCM 是經過身份驗證的加密模式,它們只期望您提供唯一的 IV 和密鑰,並將正確加密和驗證消息。
其他人錯過的一些事情:
我認為您正在通過 Internet 發送文件。我假設您沒有使用密鑰交換,因為您沒有明確說明它,您的系統注定要失敗。使用正確的密鑰交換並且不要以明文形式發送密鑰,我建議使用 RSA,因為它很容易在軟體中實現。
另一個答案解決了Encrypt & Mac可能存在的不安全問題。如果你是偏執狂,那麼你Encrypt Then Mac
請記住,MAC 僅驗證您發送的數據的完整性,而不會驗證真實性。也就是說,它將確保您正確接收文件而沒有錯誤,並且不會確保您正在與中間人交談。如果您正在尋找真實性,一種方法是通過數字證書身份驗證。