在使用 Curve25519 的 ECDH 之後,使用比 AES-128 更強大的東西是否毫無意義?
以下推理是否正確:
在使用 Curve25519 的 ECDH 之後,生成的共享密鑰將是一個位強度為 128 位的 EC 公鑰。
然後將對該公鑰進行散列(假設使用 SHA-2-256)以生成長度為 256 位的密鑰,用於對稱加密。此對稱密鑰的位強度略小於 128 位(因為散列操作會非常輕微地降低位強度)。
因此,將 AES-256 與此 256 位散列用作對稱密鑰將是浪費時間,並且應將 256 位散列截斷為 128 位,並將 AES-128 用於對稱加密的目的。AES-128 將比 AES-256 快 40%,並且使用 AES-256 比 AES-128 沒有任何優勢。
推理是錯誤的,因為對 AES 的攻擊規模與對 X25519 的攻擊規模在本質上是不同的。
使用 AES-128 對系統進行成功的多目標攻擊(即恢復多個密鑰之一的攻擊)的成本可能遠低於 $ 2^{128} $ AES-128 的評估。具體來說,使用Oechslin 的彩虹表,並在機器上並行化 $ p \geq n^2 $ 方式,收回第一個的預期成本 $ n $ 鍵是 $ 2^{128}/n $ , 預期時間是 $ 2^{128}/np $ AES-128 的順序評估。打破所有的預期成本 $ n $ 鑰匙還在附近 $ 2^{128} $ ,但在真實的使用者網路中,損害其中一個使用者可能足以損害其中許多使用者。
相比之下,對 X25519 的成功攻擊預計至少會花費大約 $ 2^{128} $ 使用最知名的策略進行位操作,即使是多目標攻擊。收回所有資產的預期成本 $ n $ 鑰匙是關於 $ 2^{128}\sqrt{n} $ 位操作,因此批量多目標攻擊有優勢,但恢復第一個的成本仍然難以克服 $ 2^{128} $ 位操作。
如果您說 AES-128 具有“128 位安全級別”,那麼您應該考慮 X25519 具有更高的安全級別。但我不認為這是合理的。相反,我認為說X25519 具有“128 位安全級別”而 AES-128 具有低得多的安全級別是合理的。
如果您必須使用 AES,請使用 AES-256,除非您有壓倒性的預算限制阻止您這樣做。如果你不需要做經濟學,也不要讓對手做經濟學。
如果您真正需要的是 IND-CPA 密碼並且您打算使用 AES-CTR 或 AES-CBC 或其他東西,請考慮使用更簡單、更快、更安全的 Salsa20 或 ChaCha。考慮使用經過身份驗證的加密,除非你有理由不這樣做——真的,考慮使用 NaCl crypto_secretbox,就像 NaCl crypto_box 在內部使用 X25519 密鑰協議的結果一樣。