在 SRP 密碼證明期間對“a”使用不安全的隨機數
使用安全遠端密碼協議 SRP6a 隨機數用於
s
和。使用者註冊的鹽在哪裡,分別是使用者和主機的隨機一次臨時密鑰。讓一些客戶端(沒有 WebCryptoAPI 安全隨機數的舊網路瀏覽器)執行密碼證明的風險是什麼?假設他們使用不安全的 Math.random 網路瀏覽器,並且使用時間戳播種。a``b``s``a``b``a
從表面上看,如果
a
只是一個隨機數,甚至不是一個弱隨機數,那麼攻擊者將獲得的收益很少。每次登錄嘗試B
時,伺服器都會發送一個唯一的,該伺服器始終可以使用安全的隨機數。這個隨機B
數與 nonce 一起使用a
來創建一個新的S
,然後從中創建一個新的M1
和M2
新的共享密鑰的證明。或者是
a
不是高質量的安全隨機數會危及客戶端或伺服器的安全性。(編輯:請注意,
a
從伺服器發送打開您到發送精心製作的伺服器a
,s
並B
使用字典查找來攻擊密碼M1
以提供密碼,因此這不是任何人都應該考慮做的事情。問題是關於是否a
需要真正隨機不是關於建議的安全隨機數來源的問題a
)
看看哪裡 $ a $ 在協議中使用:
- 使用者計算公 $ A = g^a $ 使用它。
- 使用者計算會話密鑰為 $ K = H(S) $ , 和 $ S = (B - kg^x) ^ {a + ux} $ .
攻擊者永遠不應該發現 $ S $ ,因為即使會話密鑰 $ K $ 由於例如有缺陷的加密算法而導致的洩漏,她只會知道散列值。所以知道甚至控制 $ a $ 不會幫助攻擊者找到密碼雜湊 $ x $ 並以任意方式登錄伺服器 $ B $ .
現在假設攻擊者偽裝成伺服器。如果她可以選擇或觀察相同的 $ a $ 值,她可以發送一個 $ B $ 從早期與真實伺服器的交換中擷取。這樣她就可以強制使用者重複使用相同的會話密鑰。根據會話密鑰的用途,這可能允許她破解它或它用於加密。所以 $ a $ 應該始終是唯一的。
所以,據我所知,唯一性是唯一的要求 $ a $ . 我仍然會猶豫使用類似的東西
Math.random
,因為攻擊者可以控制種子(例如 NTP 上的 MITM),這會導致重複。如果您確定時間戳是安全的,那麼您可以只使用它的雜湊而不是通過Math.random
.