ECDH 或 RSA 對對稱密鑰包裝更安全?
假設一條消息是用帶有隨機密鑰的對稱分組密碼加密的。RSA 通常用於使用接收者的公鑰來包裝對稱密鑰。
在這種情況下,消息的大小會增加,因為 RSA 加密的塊大小(取決於模數大小)遠大於對稱密鑰的實際大小。這也導致使用一些特殊的填充方案(如 OAEP)。
例如:假設我們想要 128 位安全性 - 128 位對稱密鑰,用 2048 位 RSA 加密產生 256 字節輸出,是對稱密鑰大小的 16 倍。
另一方面,當尺寸增加成為問題時,可以使用 ECDH(具有一些安全曲線)。獲取收件人的公鑰 $ rP $ , 生成一個隨機值 $ s $ , 計算 $ rsP $ 並使用 KDF 從其獲取對稱密鑰 $ x $ -協調。加密消息與發件人的公鑰一起發送 $ sP $ .
在這種情況下(對於 128 位安全性),使用 256 位素數欄位上的一些安全曲線,大小為 $ sP $ $ x $ -coordinate 是 32 字節,是對稱密鑰大小的兩倍。
我的問題來了 - 除了計算要求更高(兩個標量點乘法與一個指數)之外,在這種情況下用 ECDH 替換 RSA 時是否應該考慮任何額外的安全考慮?
是的,有幾個理由更喜歡 ECDH 而不是 RSA:
- ECDH 會表現得更好;
- 當與臨時密鑰對一起使用時,ECDH 可以提供前向安全性,而不會為創建這些密鑰對帶來大量性能成本;
- ECDH 應該不受大多數預言機攻擊的影響,即對 OAEP 的基於時間的填充預言機攻擊。
對於前向保密,您需要兩個臨時密鑰對(執行臨時-臨時 Diffie-Hellman)。臨時密鑰對不能用於身份驗證,因此如果您想為此使用靜態 ECDH 密鑰對,則需要額外的步驟。
也有一些缺點:
- RSA 通常更好理解。
- 有一些關於 EC 安全性和域參數的討論:您可能需要驗證公鑰點或使用安全曲線之一。
儘管您可能必須為 ECDH 執行更多的模計算(包括模冪運算),但模計算的數字要小得多,從而產生更好的算法,尤其是在使用私鑰的計算方面。
教科書或原始 RSA 完全能夠處理大密鑰;任何正常大小的密鑰都可以直接用正常大小的 RSA 公鑰加密。只需將填充的密鑰解釋為數字即可。需要諸如 OAEP 之類的 RSA 填充方案來獲得安全性。