security - 关于SRP算法的问题

标签 security authentication ssl cryptography srp-protocol

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

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

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

  3. 那个 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();

最佳答案

在您自己实现任何安全协议(protocol)时,我会非常小心。做到正确是非常的,而且大多数情况下,通过实现复杂的安全协议(protocol),如果您不正确,实际上会危及系统的安全性(例如,错误的内存管理、时序攻击漏洞、等)。

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

所以根据我的回答,看看图书馆http://bouncycastle.org/它应该提供 SRP 协议(protocol)的实现。

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

关于security - 关于SRP算法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28528673/

相关文章:

kotlin 中的 Android keystore

java - keytool 命令的 import 和 -importcert 有什么区别

c# - 如何通过智能卡进行身份验证作为 httpClint/httpListener 中 Windows 身份验证的回退

postgresql - 如何在 Debian 的 Postgres 10 中使用 scram-sha-256?获取 "FATAL: password authentication failed"

java - Java 运行时是否强制要求对 SSL 证书使用 keystore ?

node.js - SSL : bad gateway 上带有 Sails.js/Node.js 和 NGINX 的 Socket.io

security - 安全套接字服务器实现的最佳方法?

c# - 如何使用 .NET P/调用 CryptUIWizExport 函数

iphone - 加密存储在 iCloud 中的文档的方法

mysql - 实现登录速度检查