Rsa

AES-CBC 可以安全地與 RSA 結合使用,還是必須是 CBC-MAC?

  • April 10, 2018

該計劃是在 CBC 模式密鑰中使用 AES-256 加密文件。密鑰本身將使用 RSA 2048 位公鑰加密。

如果與 RSA 結合使用,AES-CBC 是否足夠安全?

或者除了使用 RSA 加密對稱密鑰和使用 CBC 加密數據之外,還必須使用 AES 以及使用 CBC-MAC 對文件進行身份驗證?

可以假設對稱密鑰和數據都需要完整性。

RSA + CBC 模式是否安全取決於系統。可能是,但有更好的選擇。

CBC 模式如果應用得當,當然可以提供消息的機密性。但是,在這種情況下,您必須確保填充預言和 - 更一般地 - 純文字預言不適用於 CBC 模式。如果使用帶有 PKCS#1 v1.5 填充的 RSA(通常是預設值),那麼填充預言也可能適用於 RSA(Bleichenbacher 攻擊)。

CBC 模式不提供明文消息的完整性/真實性。儘管攻擊者無法翻轉每個單獨的位(如使用 CTR 模式),但攻擊者仍可能通過更改、移動或插入/刪除明文塊來混淆明文塊。再說一次,任何擁有公鑰的人都可以執行 RSA 加密。因此,攻擊者也可以生成完整的消息並對其進行加密。添加 CBC-MAC 或經過身份驗證的加密模式(如 GCM 加密)不會幫助您實現消息的真實性/完整性。

如果您想實現完整性/真實性,則建議首先使用私鑰對消息進行簽名,然後使用混合加密對兩者進行加密。如果您不加密簽名,那麼您將失去匿名屬性,並且您可能會在消息中洩漏散列。您當然需要發送者為此生成的密鑰對,並且接收者應該信任發送者的公鑰。

CBC 模式仍然容易受到這種方式的填充預言的攻擊,因此儘管您可以使用它,但最好在計數器模式下使案例如 AES(確保 IV 是正確隨機的或至少是唯一的)。

最後,我會推薦使用 CTR 模式的 RSA-OAEP(或 RSA-KEM,如果你能找到一個好的實現)。如果您需要完整性和真實性,請使用 SHA-2 512 或 SHA-3 512 位散列執行 RSA-PSS,並加密消息和簽名。


筆記:

  • 執行 encrypt-then-sign - 對密文進行簽名 - 更加危險,因為任何人都可以替換簽名。如果系統信任攻擊者的密鑰,這將是一個問題。
  • 您的安全參數並不是那麼平衡。RSA-2048 的強度約為 112 位(根據 NIST,2017)。將其與強度為 256 位的 AES-256 一起使用是在自欺欺人。我會使用 AES-128 和 3072 位密鑰的組合,或者使用 AES256 和更高的密鑰大小,例如 8192 位或更高。如果您想要最佳安全性,您可以考慮切換到橢圓曲線或提供後量子密碼學的非對稱加密算法。

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