关于SRP算法的问题

时间:2015-02-15 17:08:24

标签: security authentication ssl cryptography srp-protocol

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

  1. 使用SSL / TLS注册和授权SRP算法是一个不错的选择吗?对于仅使用SSL / TLS的所有其他传输? 我将使用C#套接字来实现。

  2. 如何生成g,k,N?使用这些应用程序常量是否安全?

  3. SRP算法是对的吗?

      

    // M模数,g生成器,k乘数,I用户名,p密码,s-salt,v-pass验证器

         

    注册

         

    客户端: s = randomString(); x =哈希(s,p); v = g ^ x%N;

         

    sendToServer(I,s,v);

         

    服务器:保存(I,s,v);

         

    授权:

         

    客户端: a = random(); A = g ^ a%N;

         

    sendToServer(I,A);

         

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

         

    sendToClient(B,s);

         

    u =哈希(A,B);

         

    if(u == 0)abortConnection();

         

    客户:if(B == 0)abortConnection();

         

    u =哈希(A,B);

         

    if(u == 0)abortConnection();

         

    x =哈希(s,p);

         

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

         

    K =哈希(S);

         

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

         

    sendToServer(M);

         

    服务器: S =((A *(v ^ u%N))^ B)%N; K =哈希(S);

         

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

         

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

         

    客户: Rc =哈希(A,M,K);

         

    if(Rc == Rs)ALL_OK();

2 个答案:

答案 0 :(得分:2)

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

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

因此,根据我的回答,请查看应提供SRP协议实施的库http://bouncycastle.org/

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

答案 1 :(得分:0)

OpenSSL有TLS-SRP。

对于您要查找的值,请阅读RFC 5054

  • N,g和k不需要保密。
  • 选择不当N和g可能会损害安全性 加密计算,所以你应该知道你是什么 做或者选择RFC中推荐的值。
  • k,是根据N和g计算的,所以一旦你选择了那些,就可以得到k。

如果您有兴趣实施SRP的详细信息,Google可以使用C语言提供代码 - Google csrp code