Diffie-Hellman

為什麼在 Diffie-Hellman 密鑰交換中使用安全素數?

  • August 28, 2020

為了讓 Diffie-Hellman 更加安全,我們必須使用一個安全的素數,它(p – 1) / 2也是一個素數。

  • 所以我的問題是使用這樣的素數有什麼額外的好處,它帶來了什麼新的東西。
  • 並且使用正常素數確實使問題更容易解決(使攻擊變得實用)。

g^ab mod safe-prime比 ? 更安全g^ab mod prime

為了讓 Diffie-Hellman 更加安全,我們必須使用一個安全的素數,它(p – 1) / 2也是一個素數。

我們不必;還有其他選項可以達到相同的效果。但是,它有效。

所以我的問題是使用這樣的素數有什麼額外的好處,它帶來了什麼新的東西。

嗯,DH的很多安全性取決於子群結構 $ \mathbb{Z}_p^* $ ,這取決於因式分解 $ p-1 $ .

對於任何發電機 $ g $ 我們使用,子組的順序 $ q $ (最小的正值 $ q $ 這樣 $ g^q = 1 \bmod p $ ) 滿足 $ p-1 = h \cdot q $ , 對於某個整數 $ h $ .

此外,我們通常更喜歡使用素子群,即 $ q $ 是一個質數。那是因為如果 $ q $ 是複合的,也就是說, $ q = r \cdot s $ ,然後給定 $ g^x \bmod n $ ,我們可以恢復價值 $ x \bmod r $ 在 $ O( \sqrt{r} ) $ 時間; 如果 $ r $ 不大,這會洩露更多我們關心的資訊。

第三,如果您重複使用 DH 公鑰(有時我們會這樣做),則可能會發生無效的密鑰共享攻擊。也就是說,如果 $ h $ 有一個適度的因素 $ t $ ,然後通過發布無效的密鑰共享,攻擊者可以重新導出 $ x \bmod t $ (在哪裡 $ x $ 是你的私人價值)。可以檢測到這種攻擊,但檢測成本很高,因此通常不會進行(即使您確實重用了密鑰共享)。

所以,有了這一切:

並且使用正常素數確實使問題更容易解決(使攻擊變得實用)。

“正常素數”是什麼意思?你是說隨便選一個素數 $ p $ 和隨機發生器 $ g $ ? 好吧,雖然順序 $ g $ 可能很大,很可能是複合的,並且通常會有中等因素;這些因素(如果存在)將允許有人監聽以恢復有關您的私人價值的一些資訊(如果您使用的資訊不是完整的,則可能足以恢復整個價值)。但是,可能情況並非如此;但是你在這裡賭博。

相反,如果我們有一個安全的素數,那麼我們就是安全的。我們通常使用“二次餘數”子組中的素數,即每個成員(除 1 之外)都有順序的素數 $ (p-1)/2 $ ,這是素數。而且,如果我們碰巧選擇了另一個生成器(除了 1 或 $ p-1 $ ),唯一的另一個子組是 size $ p-1 $ ,這意味著攻擊者可以找到 $ x \bmod 2 $ ,但沒有其他關於 $ x $ .

另外,無效密鑰共享攻擊只能恢復 $ x \bmod 2 $ (因為 $ h=2 $ ),因此即使我們重用密鑰共享,這也不是問題。

現在,還有其他方法可以確保我們在一個素數大小的子組中工作。另一方面,安全素數具有我們可以擁有的性質 $ g=2 $ ; 這些其他方法通常需要更大的 $ g $ 值(這使得部分計算更加昂貴)。

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