Authentication
SRP 是否也向客戶端驗證伺服器?
安全遠端密碼 (SRP) 協議允許客戶端向伺服器證明它知道特定密碼,而無需向伺服器透露該密碼。伺服器儲存使用者帳戶的密碼驗證器。如果攻擊者冒充伺服器,它就無法獲知使用者的密碼。
現在,它是否也可以反過來工作。如果 SRP 密碼認證成功,這是否也向客戶端證明伺服器知道正確的驗證者,從而假設驗證者被保密,客戶端正在與真實伺服器交談?(或者至少是它最初給驗證者的伺服器?)
閱讀協議描述我認為確實如此,但據我所見,描述中沒有任何地方提到這個屬性是 SRP 應該做的事情。所以也許我缺少一些東西。
根據斯坦福頁面,如果雙方保密,則可以提供相互身份驗證。謝謝米凱佐。
SRP 確認伺服器知道驗證者。為了詳細說明@otus設計文件的評論,伺服器步驟是:
Host: S = (Av^u) ^ b (computes session key) Host: K = H(S)
K
共享會話密鑰在哪裡。然後客戶端和伺服器證明他們有相同的驗證者:One possible way: User -> Host: M = H(H(N) xor H(g), H(I), s, A, B, K) Host -> User: H(A, M, K) ... The user must show his proof of K first. If the server detects that the user's proof is incorrect, it must abort without showing its own proof of K.
如果伺服器是假的,那麼客戶端發送它
A, M
,它必須響應客戶端H(A, M, K)
。這意味著它必須計算正確的K
,這需要使用者驗證器v
與使用者使用的密碼匹配。如果伺服器不知道客戶端驗證者,那麼它將無法向客戶端發送良好的K
.雖然這不是對伺服器的身份驗證,但它確實可以保護使用者免於使用無法從真實伺服器竊取驗證者的假伺服器。