我看不出 ECDH 有什麼用
我很難理解使用 ECDH 而不是傳統的非對稱加密的有用性。雙方都必須交換公鑰來計算 ECDH,那麼他們為什麼不直接用剛剛交換的公鑰加密他們的消息呢?
我能想到的 ECDH 的唯一案例是,如果 Alice 在將原始消息發送給 Bob 後失去了原始消息,她仍然可以使用 ECDH 解密它。但她為什麼會失去它?這個例子對我來說似乎太做作了。
有誰知道 ECDH 發光/需要的任何好的範例/場景/案例?
ECDH 被稱為Key Encapsulation Mechanism,正如您提到的,它類似於公鑰加密,但不一樣。選擇 KEM 的原因有很多,我將很快提到一個。首先,請注意,KEM(形式上)是三個算法的元組 $ (\mathsf{KGen}, \mathsf{Encaps}, \mathsf{DCaps}) $ , 在哪裡
- $ \mathsf{KGen} $ 將一些安全參數作為輸入 $ 1^\lambda $ ,並輸出一個密鑰對 $ (sk, pk) $
- $ \mathsf{Encaps} $ 將公鑰作為輸入 $ pk $ (也許是一些隨機性,這通常只是隱含的),並返回一對 $ (k, c) $ 派生密鑰的 $ k $ , 和“密文” $ c $
- $ \mathsf{Decaps} $ 將密鑰作為輸入 $ sk $ 和“密文” $ c $ ,並輸出另一個派生密鑰 $ k’ $ .
KEM 是正確的,如果 $ k = k’ $ 最後,例如,兩個派生密鑰一致。KEM 的安全概念與 PKE 相似,這意味著有一種自然的方式可以擴展傳統的 IND-CPA/IND-CCA 安全概念。
請注意,可以使用任何 PKE 建構 KEM,方法是 $ \mathsf{Encaps}{pk}(r) = \mathsf{Enc}{pk}(r) $ , 在哪裡 $ r $ 是 KEM 使用的隨機性(這是您提到的“加密均勻隨機密鑰”的想法)。也許我們應該明確地寫 $ \mathsf{Enc}_{pk}(f(r)) $ 是隨機性的一些函式 — 我不會費心這麼明確。
那麼為什麼要關心 KEM 呢?雖然您可以提及其他一些事情,但重點是“自然”KEM(例如 ECDH)具有某些由“加密隨機密鑰”方法建構的 KEM 所不具備的屬性。這就是說,ECDH 不“只是”一個 KEM,並且可以在加密隨機密鑰不起作用的應用程序中使用。
也許最明顯的屬性是“非互動性”。特別是,ECDH 可以寫成
- 雙方交換 diffie hellman 密鑰對 $ (g, g^{s_i}) $ , 接著
- 計算這些密鑰對的一些簡單功能。
如果我們嘗試使用 KEM 的語法來編寫它,我們可能會說 $ \mathsf{KGen}(1^\lambda) $ 產生一對密鑰 $ (g, s_0, g^{s_0}) $ , 然後 $ \mathsf{Encaps}_{g^{s_0}}(r) = (g, s_1, g^{s_1}) $ 產生另一個密鑰對,我們將“密文”建模為 $ g^{s_1} $ . 不過,這有一個非常奇怪的特性—— $ g^{s_1} $ ,該方案的“密文”,根本不依賴於公鑰(除了通過組生成器 $ g $ ,可以標準化為公共參數)。
這是一個非常令人驚訝的屬性,並且“加密隨機密鑰”方案沒有。它被稱為非互動式密鑰交換 (NIKE) 方案。該物業是
- 在實踐中很有用 — Signal 的“雙棘輪”以一種關鍵的方式使用此屬性,這使得很難“插入”另一個 KEM 用於信號,並且
- 理論上很重要——一般地建構 NIKE 需要一些花哨的原語,例如 FHE/功能加密。有已知的結果表明,使用帶有“小參數”的格(和合理的程式碼)可能無法建構 NIKE。
事實上(不包括大參數的基於格的方案),我只知道一種後量子NIKE,即CSIDH。這就是說將信號直接修改為後量子
- 使用 CSIDH,
- 使用 NIST PQC 方案的效率較低的變體(例如,具有小參數的基於格的方案),或
- 以某種方式修改 Signal 協議本身,通常會影響效率。
雖然您可以說比較 PKE 和 KEM 的更多細微差別,但理論上 ECDH 有一個非常大的好處 — 它是一種高效的 NIKE,根本不常見。