安全性 – 关于SRP算法的问题

我尝试使用SRP算法,但我有一些问题:

>对于使用SSL / TLS的注册和授权SRP算法,这是一个不错的选择吗?对于仅使用SSL / TLS的所有其他传输?
我将使用C#套接字来实现.
>如何生成g,k,N?使用这些应用程序常量是否安全?
>那SRP算法是对的吗?

//M-modulus, g-generator, k-multiplier, I-username, p-password, s-salt, v-pass verifier

Registration:

Client: s = randomString(); x = Hash(s, p); v = g^x %N;

sendToServer(I, s, v);

Server: save(I, s, v);

Authorization:

Client: a = random(); A = g^a %N;

sendToServer(I, A);

Server: if(A != 0) { b=random(); B = k*v + g^b %N;}

sendToClient(B, s);

u = Hash(A, B);

if(u == 0) abortConnection();

Client: if(B == 0) abortConnection();

u = Hash(A, B);

if(u == 0) abortConnection();

x = Hash(s, p);

S = ((B – k*(g^x %N)) ^ (a + u*x)) %N;

K = Hash(S);

Mc = Hash( Hash(N) XOR Hash(g), Hash(I), s, A, B, K);

sendToServer(M);

Server: S = ((A*(v^u %N)) ^ B) %N; K = Hash(S);

Ms = Hash( Hash(N) XOR Hash(g), Hash(I), s, A, B, K);

if(Mc == Ms) {Rs = Hash(A, M, K); sendToClient(Rs);}

Client: Rc = Hash(A, M, K);

if(Rc == Rs) ALL_OK();

最佳答案 在您自己实施任何安全协议时我会非常小心.很难做到正确并且最常见的是通过实施复杂的安全协议,如果你做得不对,你实际上会损害系统的安全性(例如错误的内存管理,定时攻击的漏洞等).

一般建议是使用经过审核,可信(开源)和维护的库来执行加密操作.这些库通常也提供更好的性能,因为它们使用专门的HW加密指令(例如,AES在现代硬件中得到很好的支持,使其快速且不易受到定时攻击).

因此,根据我的回答,看一下应该提供SRP协议实现的库http://bouncycastle.org/.

而且,你应该考虑用例.您是否为数百万用户开发超级安全的邮件服务器,或者您只想用假日照片保护您的家庭服务器?在第一种情况下,可能值得拥有具有最先进安全算法的非常强大和安全的系统.在后一种情况下,它不是 – 良好的密码和SSL将做:-).

点赞