10.2.1 TrinityCore
SRP-6 协议
Secure Remote Password (安全远程密码)。使用 SRP 协议的双端可以在不传送明文密码的情况下 安全验证。通过这种做法可以避免密码在传输过程中被劫持。
协议描述:http://srp.stanford.edu/design.html
名词解释
N - A large safe prime (N = 2q+1, where q is prime) All arithmetic is done modulo N.g - A generator modulo(模数) Nk - Multiplier parameter(乘数参数) (k = H(N, g) in SRP-6a, k = 3 for legacy SRP-6)s - User's salt(盐,用于混淆)I - Usernamep - Cleartext PasswordH() - One-way hash function(单向散列函数)^ - (Modular) Exponentiation(指数)u - Random scrambling parameter(随机加扰参数)a,b - Secret ephemeral values(临时随机值)A,B - Public ephemeral values(临时公钥)x - Private key (derived from p and s)(私钥)v - Password verifier
TrinityCore 中实现:
N: 一个大的质数(N=2q+1)HexStrToByteArray<32>
("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7", true);
s: 32个字节的随机数 salt
g: 7
v: g^sha1(salt, sha1(username, ":", password)) mod N
b: 19个字节的随机数(服务端随机生成)
a: 19个字节的随机数(客户端随机生成)
B: 公钥 B = ((v*3) + g^b) mod N
K: sessionKey1) 客户端公钥 A = g^a mod N2) x = sha1(salt, sha1(username, ":", password))3) u = sha1(A,B)4) S = (B-g^x*3)^(a+u*x) 32 字节5) K 基于 S 的奇数部分和偶数部分分别进行hash,然后奇偶交错组合两个 hash 后的值
M: 20个字节的数 M = sha1(t3, t4, s, A, B, K)1) t3 = sha1(N)[i] ^ sha1(g)[i]2) t4 = sha1(username)
k: 3
SRP-6 交互流程
TrinityCore 中 SRP-6 交互流程
参考链接:0voice · GitHub