Elliptic-Curves

如何保護橢圓曲線 ElGamal 加密免受已知明文攻擊?

  • February 11, 2020

如果我有編碼功能 $ f(x) $ 映射一條消息 $ m $ 到一個點 $ P $ 在合適的橢圓曲線上 $ E $ . 如果我有公鑰 $ Q $ 我的收件人然後我可以加密消息如下:

選擇一個隨機數 $ k < n -1 $ 在哪裡 $ n $ 是曲線 E 的階數。

計算 $ C = [k] G $ 在哪裡 $ G $ 是曲線 E 的生成點

計算 $ R = [k]Q $ 在哪裡 $ Q $ 是收件人的公鑰

現在消息通過添加加密 $ P $ 至 $ R $ 要得到 $ C_e $ $ ( = R + P) $ 隨 $ C $ 給收件人。

解密:

現在讓接收者解密他們計算的我的消息 $ R = [privatekey] C $ (在哪裡 $ C = [k]G $ ) 並簡單地減去 $ R $ 從 $ C_e $ 獲取編碼點 $ P $ 返回然後由反函式解碼 $ f^{-1}(x) $ 恢復 $ m $ . 現在,出現了兩個問題:如果攻擊者知道明文(假設我在發送消息時遵循特定的數據格式),他可以對他猜測的明文進行編碼並將其減去 $ C_e $ 恢復 $ R $ 背部 !. 如果我用同樣的 $ R $ 加密我的消息的進一步“塊”,那麼我的消息後面部分的安全性就被破壞了!

我意識到,對每個數據塊一遍又一遍地執行諸如標量乘法之類的操作,在效率和速度方面將是一個巨大的缺陷。

有沒有辦法計算不同的 $ R $ 對於每個數據塊,不使用太多資源而且速度太快?

是否重複使用相同的 $ R $ 另一個消息破壞安全?

注意:此問題僅用於教育目的。這是為了擴大我對加密貨幣的了解。

有沒有辦法計算不同的 $ R $ 對於每個數據塊,不使用太多資源而且速度太快?

沒有通用的方法。標準做法是每個ECIES的混合加密

簡而言之,ECIES 在以下方面與 EC-ElGamal 相同 $ E $ , $ G $ , $ \text{privatekey} $ , $ Q $ , $ k $ , $ C $ , $ R $ ,但共享秘密 $ R $ 使用(在密鑰派生步驟之後)作為傳遞消息的對稱認證密碼的密鑰 $ m $ . 這消除了映射的負擔 $ m $ 到曲線上的一個點,這嚴重限制了 $ m $ ,並且通常是迭代的,因此有可能洩露關於 $ m $ 通過旁道。

是否重複使用相同的 $ R $ 另一個消息中斷安全性(在 EC-ElGamal 中)?

是的。認為 $ m_0 $ 和 $ m_1 $ 映射到 $ P_0 $ 和 $ P_1 $ 被相同的加密 $ R $ , 進入 $ C_0 $ 和 $ C_1 $ . 它擁有 $ C_0=R+P_0 $ 和 $ C_1=R+P_1 $ , 所以 $ P_1=P_0-C_0+C_1 $ . 因此 $ m_1 $ 可以從 $ m_0 $ 和密文。和 $ R $ 已修復,密碼在已知明文攻擊下不安全。

每條評論的補充:

  • 即使攻擊者不知道明文 $ m_0 $ , 她/他確實學到了一些關於明文的東西。特別是她可以告訴 $ m_0=m_1 $ ,因為這相當於 $ C_0=C_1 $ . 這符合中斷的條件,因為加密的目的是防止對手了解任何關於明文的資訊(除了它的長度)。例如,這允許區分常式Have a quiet nightshift Joe( $ m_0=m_1 $ ) 從一個例外Launch missile to target A( $ m_0\ne m_1 $ ).
  • 加倍 $ R $ 在每條消息將是非常不安全的。它會舉行 $ P_j+P_j-P_{j+1}=C_j+C_j-C_{j+1} $ ,並且允許破譯任何兩次加密發送的消息,如 $ P_j=P_{j+1}=C_j+C_j-C_{j+1} $ .

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