我正在实施安全远程密码协议:
U = <username> -->
<-- s = <salt from passwd file>
a = random()
A = g^a % N -->
v = <stored password verifier>
b = random()
<-- B = (v + g^b) % N
p = <raw password>
x = SHA(s | SHA(U | ":" | p))
S = (B - g^x) ^ (a + u * x) % N S = (A * v^u) ^ b % N
K = SHA_Interleave(S) K = SHA_Interleave(S)
我应该为所有变量设置多大的数字? RFC 2945建议u
为 32 位,但不能更低。N 为 4096 位,g = 2。
我的目标是在没有任何不必要费用的情况下最大限度地提高安全性。s、a、b 和 u 应该有多大?最后但并非最不重要的一点是,AES 密码将使用的会话密钥 K 的最佳长度是多少?
编辑: SHA_Interleave(S) 返回每个其他字节的 SHA 哈希与剩余字节的 SHA 哈希连接,从而使结果的长度加倍。SHA256 就足够了吗?对于 AES,我需要什么大小的密钥?