在Web应用程序中,SRP是SSL / TLS(服务器证书)的安全替代方案吗?

时间:2013-11-14 16:13:33

标签: security ssl meteor

Meteor使用Secure Remote Password Protocol(SRP)对用户进行身份验证。 Meteor文档没有提供有关安全级别的任何进一步声明,但我想知道SRP是否可以在不需要SSL / TLS的情况下提供安全性? SRP的维基百科页面声明:

  一个窃听者或中间的人无法获得足够的东西   信息无需进一步强制猜测密码   每次猜测都与各方互动...

我承认我对安全性知之甚少,但我找不到有关其使用的任何建议。

非常感谢

2 个答案:

答案 0 :(得分:9)

SRP仅用于交换密码。更准确地说,它纯粹是为了让通信保证两端都拥有相同的共享秘密,而不允许窃听者或中间人以某种方式猜测共享秘密。这就是它所做的一切:双向认证,所以如果/当(例如)我登录到服务器,我知道服务器真的是我想要登录的那个,并且它知道我是一个用户正确的密码。

,但是(甚至尝试)在各方之间创建SSL / TLS之间的加密连接。虽然有人在收听时无法获得足够的信息来记录我所在位置所涉及的密码(或模仿服务器以供其他人登录),但它(单独)加密进一步的通信 - - 除了SRP本身以外,其他任何人仍然可以读取通过连接传递的所有数据。

答案 1 :(得分:1)

我知道,我在这里回答有点迟,但我决定补充一些说明。正如Jerry Coffin所说,SRP用于密码交换,证明双方拥有一些共享秘密,并且它本身不提供任何加密,但是,在握手过程中双方都生成相同的密钥,以后可以用于通过一些其他算法加密/解密,即AES-256。 但是如果你决定使用这种身份验证方法,你应该考虑这个:

  1. 在用户注册期间,它以纯文本形式将其盐和验证程序发送到服务器,因此攻击者可以离线强制执行或字典攻击。为了防止它,你最好使用至少SHA256哈希,安全素数N = 2048字节或更高(在我的情况下,SHA512和N = 8192似乎工作得足够快,同时是一个巨大的矫枉过正)。当然还有一个强大的用户密码。
  2. 拥有验证程序和salt的攻击者将无法在服务器上进行身份验证,但他可能会将自己构建为客户端的服务器。但他无法获得钥匙或建立MITM攻击。在大多数情况下,它对攻击者来说毫无用处,但你永远不会知道......
  3. 如果您计划在某种Web界面中实施此协议,请注意它不会保护您的用户免受简单的网上诱骗。因为在浏览器中它需要JavaScript才能在发送之前保护密码,坏人可以只为用户提供一个简单的html格式,在任何他们想要的地方发送纯文本密码。因此,无论如何都强烈建议使用TLS / SSL。
  4. 总而言之:SRP是一个很好的附加安全层,它有助于保护用户密码,生成会话加密密钥,验证客户端到服务器,以及防止MITM攻击,但如果它在TLS内部则更安全/ SSL频道。

    os.urandom应该和你在一起! ;)