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,不然服务器就会终止认证。
用密钥加密用户密码网络