Logjam 的 DH 攻擊的實際結果是什麼?
Logjam 攻擊是否會為使用者計算一組可能的Diffie-Hellman 私鑰,然後一次嘗試一個以查看它是否可以解密消息 - 還是直接計算使用者私鑰的一個特定實例?
Logjam的簡單描述
Logjam 是一個兩步過程。首先,您選擇一個組並對其應用預計算。大多數人使用幾個不同的組中的一個,因此破壞一個組實際上會破壞使用該組的任何人所做的每一次密鑰交換。如果一個組被“破壞”,那麼使用該組與 Diffie-Hellman 進行的任何密鑰交換都可以很容易地被破壞,*揭示共享的秘密。這是該過程的第二步,使用從預計算得出的值來快速確定共享秘密。
Logjam 不會攻擊任何使用者的個人密鑰,也不依賴任何特定於任何單個密鑰交換事件的資訊。事實上,攻擊的初始預計算步驟可以針對一個組執行,即使之前沒有人使用過該組。這意味著當任何人使用該組時,派生的共享密鑰可以被竊聽方被動地恢復。
稍微準確的描述
Diffie-Hellman 的簡化視圖是它涉及 Alice 和 Bob 就生成器達成一致 $ g $ , 和一個素數模 $ p $ . 所有操作都是模數完成的 $ p $ ,使其成為有限循環群。Alice 生成一個秘密整數 $ x $ 並發送結果 $ g^x $ 給鮑勃。Bob 生成一個秘密整數 $ y $ 並發送結果 $ g^y $ 給愛麗絲。現在愛麗絲計算 $ (g^y)^x $ 鮑勃計算 $ (g^x)^y $ . 只是碰巧是這樣 $ (g^y)^x = (g^x)^y = g^{xy} $ ,所以現在 $ g^{xy} $ 是共享的秘密。DH 從 Eve 可以訪問的事實中獲得安全性 $ g $ , $ p $ , $ g^x $ , 和 $ g^y $ ,但無法計算 $ g^{xy} $ . 看起來很紅潤,對吧?
回想一下,上述所有操作都是模數完成的 $ p $ . 不幸的是,事實證明,一次性計算密集型計算在 $ p $ 允許攻擊者獲取允許他們計算的資訊 $ g^{xy} $ 僅從 $ g^x $ 和 $ g^y $ ,儘管從來沒有直接訪問過 $ x $ 或者 $ y $ . 他們可以重複使用從分析中得出的資訊,以進行任何以相同素數為模的交換 $ p $ .
詳細描述
https://weakdh.org/imperfect-forward-secrecy-ccs15.pdf
緩解措施
有三種方法可以緩解這種攻擊:
- 使用自定義模數- 您可以生成自己的 DH 模數,而不是現有組。這將迫使攻擊者執行專門為您的系統量身定制的極其複雜的預計算步驟,從而使攻擊變得不切實際。畢竟,10,000,000 美元打破網際網路三分之一的密鑰交換對於強大的對手來說微不足道,但在單一目標上花費可能太多了。如果您不想因較大的模量而降低性能,這是一個選項。
- 使用大模數- 您可以使用現有但大(2048 位或更高)的組。雖然預計算攻擊仍然是可能的,並且破壞該組將允許大規模恢復共享秘密,但模數的大小將使任何現代技術都無法進行攻擊。如果技術在不久的將來顯著改進,這是一個冒險的選擇。
- 使用橢圓曲線加密- 最後,您可以從有限域Diffie-Hellman 切換到使用橢圓曲線 Diffie-Hellman。ECDH 除了即使在較小的密鑰大小下也更快、更安全之外,還不容易受到預計算攻擊。它以曲線上的點的形式執行計算,而不是對大素數(您的潛在可利用組)進行模運算。
- 它仍然需要一些強大的計算能力,不要誤會我的意思,但與最初的預計算步驟相比,這不算什麼。一個強大的 ASIC 集群可以實時使用損壞的組來破壞每個密鑰交換。