Secure Remote Password protocolhtml
介紹數據庫
優勢瀏覽器
缺點安全
原理服務器
N 一個安全的大質數, 好比N=2q+1,q 是一個素數 g 一個以N爲模的生成元,對任何X,有0 < X < N,存在一個值x,使得g^x % N == X。 k k = H(N,G) 在 SRP6 中 k = 3 s User’s Salt I 用戶名 p 明文密碼 H() 單向 hash 函數 ^ 求冪運算 u 隨機數 a,b 保密的臨時數字 A,B 公開的臨時數字 x 私有密匙(從 p 和 s 計算得來) v 密碼驗證數字 N和g的值必須由雙方討論來達成一致。它們能夠被提早設置好,或者主機把它們發送給客戶端。 服務器存儲以下信息 x = H(s, p) (s is chosen randomly) v = g^x (computes password verifier) 服務器的數據庫保存 {I, s, v} 整個驗證流程以下: User -> Host: I, A = g^a (標識本身是誰, a是隨機數) Host -> User: s, B = kv + g^b (把salt發送給user, b是隨機數) Both: u = H(A, B) User: x = H(s, p) (用戶輸入密碼) User: S = (B - kg^x) ^ (a + ux) (計算會話密鑰) User: K = H(S) Host: S = (Av^u) ^ b (計算會話密鑰) Host: K = H(S) 這樣雙方都有一個會話密鑰S, 後續的消息傳輸能夠用S作加解密,從而保證安全。 爲了完成認證過程,雙方還得向對方證實本身擁有正確的S, S不能讓第三方知道,因此不能直接傳輸給對方作比較,一個可能的辦法是: User -> Host: M = H(H(N) xor H(g), H(I), s, A, B, K) Host -> User: H(A, M, K) 雙方須要作以下保障 1. 若是客戶端收到B == 0 (mod N) 或u == 0, 客戶端中止認證。 2. 若是服務器發現 A == 0 (mod N)則中止認證。 3. 用戶必須得證實本身擁有正確的K,不然服務器就會終止認證。
用密鑰加密用戶密碼網絡