Protocol-Design
為什麼 SRP-6a 使用 k = H(N, g) 而不是 SRP-6 中的 k = 3?
我一直在閱讀安全遠端密碼協議(SRP)。該協議有幾個不同的版本(最初發布的版本被指定為 SRP-3,隨後有兩個增強 6 和 6a)。
版本 3 的攻擊非常有限,攻擊者可以在每次針對伺服器的偽造嘗試中送出兩次密碼猜測,而不僅僅是一次。這是因為在步驟 2 中客戶端送出 ( $ g^x + g^b $ ) 到伺服器,他們實際上可以設置 $ b $ 成為第二個密碼猜測,由於伺服器沒有密碼,它無法判斷 $ b $ 不是隨機選擇的(就像它應該是的那樣)。SRP-6的論文中詳細介紹了攻擊和補救措施。
SRP-6 中描述的補救措施是客戶端發送 $ k·g^x + g^b $ 相反,在哪裡 $ k = 3 $ . 但是,還有一個版本 SRP-6a(即上頁詳述的版本),它設置 $ k = H(N, g) $ . 由於兩者 $ N $ 和 $ g $ 是公知的值( $ N $ 是一個大的安全素數,並且 $ g $ 是發電機),以及 $ (g,N) $ 組用於給定 SRP 系統中的所有事務(獨立於密碼、使用者或會話), $ k $ 仍然是一個常數值。
所以問題是,選擇這個替代值的理由/好處是什麼 $ H(N,g) $ 為了 $ k $ ? 這個值 $ k $ 在TLS/SRP implementation中使用,但我沒有找到任何解釋。
如果k是常數,例如 3,則可以選擇一對 (N,g),使得k到基數g的離散對數已知,這將再次啟用二合一猜測攻擊。