3

Meteor 使用安全远程密码协议(SRP) 对用户进行身份验证。Meteor 文档没有对所提供的安全级别做出任何进一步的声明,但我想知道 SRP 是否可以在不需要 SSL/TLS 的情况下提供安全性?SRP 上的维基百科页面指出:

...窃听者或中间人无法获得足够的信息来暴力猜测密码,而无需为每次猜测与各方进行进一步交互...

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

非常感谢

4

2 回答 2

9

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

但是,它不会甚至尝试)在各方之间创建加密连接,例如 SSL/TLS。虽然监听的人无法获得足够的密码信息来代替我登录(或模仿服务器让其他人登录),但它不会(本身)加密进一步的通信——除非你做的不仅仅是SRP 本身,其他任何人仍然能够读取通过连接传递的所有数据。

于 2013-11-14T16:29:15.990 回答
3

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

  1. 在用户注册期间,它以纯文本形式将其 salt 和验证器发送到服务器,因此攻击者能够对其进行离线暴力破解或字典攻击。为了防止它,你最好至少使用安全素数 N=2048 字节或更高字节的 SHA256 散列(在我的情况下,SHA512 和 N=8192 似乎工作得足够快,同时是一个巨大的过度杀伤)。当然还有一个强大的用户密码。
  2. 拥有验证者和盐的攻击者将无法在服务器上进行身份验证,但他可以将自己伪装成客户端的服务器。不过,他将无法获得密钥或发起 MITM 攻击。在大多数情况下,它对攻击者来说毫无用处,但你永远不知道......
  3. 如果您计划在某种 Web 界面中实现此协议,请注意它不会保护您的用户免受简单的网络钓鱼攻击。由于在浏览器中它需要 JavaScript 在发送之前保护密码,所以坏人可以只向用户提供一个纯 html 表单,在他们想要的任何地方发送纯文本密码。所以无论如何强烈推荐使用 TLS/SSL。

总结一下:SRP 是一个很好的附加安全层,它有助于保护用户密码、生成会话加密密钥、验证客户端到服务器以及防止 MITM 攻击,但如果它位于 TLS/SSL 通道内,则更加安全.

os.urandom 会与你同在吗?;)

于 2016-08-23T20:24:22.493 回答