Brute-Force-Attack

冒充 SRP 伺服器是否為您提供了足夠的資訊來進行離線字典攻擊?

  • August 11, 2013

在對我寫給另一個問題的答案的評論中,CodesInChaos 寫道:

“SRP 的問題是冒充伺服器的攻擊者會學習密碼雜湊,從而啟用離線搜尋。”

並且進一步說:

“如果伺服器成功冒充合法伺服器

$$ … $$他們學習客戶端的公鑰。知道公鑰可以進行密碼猜測攻擊,使用良好的密碼雜湊只能部分緩解這種攻擊。”

這最初讓我感到驚訝,因為我以某種方式假設 SRP 旨在避免這種攻擊場景。然而,在仔細審查SRP 設計規範後,在我看來,這種攻擊確實有效,而且事實上,考慮到 SRP 設計,這似乎是不可避免的。

關鍵是,要完成身份驗證過程,客戶端和伺服器必須相互證明它們的密鑰匹配。在 SRP 中,客戶端是第一個發送其證明的(SRP 設計規範堅持這一點;我不確定如果不這樣做會啟用什麼攻擊,但我認為必須有一個,否則規範不會’不要那麼明確)。但是這個證明值必須是客戶端和(合法的)伺服器都可以計算的東西,因此它必須完全由以下因素決定:

  • 由客戶端選擇並在身份驗證過程中發送到伺服器的值,
  • 由伺服器選擇並在身份驗證過程中發送給客戶端的值,以及
  • 密碼和/或驗證者(其本身由密碼決定)。

因此,在收到客戶端的證明後,欺騙伺服器的攻擊者現在可以嘗試猜測不同的密碼,保持其他值相同,並查看哪個密碼產生相同的證明。

這裡需要注意的一個技術細節是,在 SRP 身份驗證過程的早期階段,伺服器應該為客戶端提供鹽 $ s $ 和公共短暫價值 $ B = kv + g^b $ ,這取決於驗證者 $ v $ .

對於冒名頂替者來說,第一個問題實際上不是問題,因為 SRP 不僅假設客戶端不會驗證伺服器提供的鹽,而且即使它確實如此,從真實伺服器獲取正確的鹽也不需要身份驗證。第二個看起來可能是一個問題,但據我所知,它實際上不是:因為伺服器永遠不需要(而且確實不能)洩露 $ b $ 或者 $ g^b $ 對客戶來說,冒名頂替者可以選擇任何 $ B $ 他們想要的價值,而客戶沒有任何方法來驗證它。


現在,到目前為止,一切看起來都很清楚。但令我困惑的是“計算的 $ B $ “來自原始SRP-3 論文 (Wu, 1998),其中解釋了原因 $ B $ 不是簡單地計算為 $ B = g^b $ ,首先描述了上面概述的攻擊的樣子,然後繼續說:

“由於這次攻擊來自一個不知道的冒名頂替者 $ v $ (任何知道的人 $ v $ 已經可以執行字典攻擊),阻止它的一種方法是強制主機承諾其值 $ v $ 在第 4 步。

$$ … $$ “模組化加法似乎是最簡單的操作,不會洩露任何關於 $ v $ 同時使 SRP 能夠抵抗假主機的字典攻擊。”

我沒有看到的是如何包括 $ v $ 在計算中 $ B $ 實際上會“迫使主人承諾其價值 $ v $ “,因為客戶端無法實際驗證 $ B $ 以指定方式計算。或者也許有,我只是錯過了什麼?

那麼吳在該部分給出的論點是否完全是胡說八道,還是真的有什麼東西呢?如果沒有,驗證者是否有任何理由 $ v $ 應計入計算 $ B $ 在 SRP 中?而且,最重要的是,SRP 是否真的能抵抗假主機的字典攻擊,正如 1998 年的論文似乎聲稱的那樣,或者不是嗎?

假設伺服器包括 $ v $ 在計算中 $ B $ . 在這種情況下,發生了以下事件:

  1. 伺服器發送了一個鹽值 $ s $ 給客戶。我們可能會假設它是真實的(因為假伺服器很容易從真實伺服器獲取它)。客戶端重新計算其長期私鑰 $ x $ 這樣 $ v = g^x $ .
  2. 客戶端生成了一個新的隨機臨時密鑰對 $ A = g^a $ 並發送 $ A $ 到伺服器。
  3. 伺服器隨機生成 $ u $ 和一個隨機 $ B $ 並將它們發送給客戶。伺服器可能知道也可能不知道該值 $ b’ = log_g(B) $ .
  4. 客戶計算 $ S = (B-g^x)^{a+xu} $ 並發送證明 $ S $ 到伺服器。

讓我們假設假伺服器此時中止協議並嘗試對客戶端密碼進行離線字典攻擊,以便找到 $ x $ 價值。

現在,問題是伺服器應該計算 $ S = (Av^u)^b $ ,但這需要,對於每個猜測 $ x $ , 找到一個值 $ b $ 這樣 $ g^b = B - g^x $ . “SRP 假設”(如果有的話)是這與離散對數問題一樣難。

相反,假伺服器是否應該嘗試模擬客戶端計算 $ S $ ,它還需要猜測臨時客戶端私鑰 $ a $ .

有沒有辦法解決?是的,有,但它要求伺服器發送 $ B = 0 $ 並且客戶不檢查這一點。如果 $ B = 0 $ ,那麼我們可以推斷出 $ b = x + (p - 1)/2 $ (在哪裡 $ p $ 是素數場模數)。在這種情況下 $ B = g^x + g^xg^{(p-1)/2} = g^x + g^x(-1) $ , 前提是 $ g $ 是一個生成器 $ \mathbb Z^*_p $ . 假伺服器的離線計算,在這種情況下,崩潰到 $ S = (Ag^{ux})^{x + (p - 1)/2} $ . 這只有一個未知數。


編輯: 可能會注意到,關於“SRP 假設”,例如 $ g = 2 $ 當假設為假時,有幾種特殊情況。例如,對於任意值 $ z $ , $ {2}^{z+1} = {2}^z + {2}^z $ 和 $ {2}^z = {2}^{z+1} + 2^{z+(p-1)/2} \pmod p $ .

據我所知,這一切意味著,如果伺服器發送 $ B = 2v $ 或者 $ B = p-v $ ,這意味著伺服器已經知道兩者 $ v $ 和 $ x $ 並選擇了 $ b = x $ 或者 $ b = x + (p-1)/2 + 1 $ 分別。因此,伺服器承諾 $ v $ ,但未能隱藏它,或者,伺服器實際上承諾 $ x $ .

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