Meteor 使用安全远程密码协议(SRP) 对用户进行身份验证。Meteor 文档没有对所提供的安全级别做出任何进一步的声明,但我想知道 SRP 是否可以在不需要 SSL/TLS 的情况下提供安全性?SRP 上的维基百科页面指出:
...窃听者或中间人无法获得足够的信息来暴力猜测密码,而无需为每次猜测与各方进行进一步交互...
我承认我对安全性知之甚少,但我找不到任何关于其使用的建议。
非常感谢
SRP仅用于交换密码。更准确地说,这纯粹是为了让通信的两端保证他们都拥有相同的共享秘密,而不允许窃听者或中间人猜测共享秘密。这就是它所做的一切:双向身份验证,所以如果/当(例如)我登录到服务器时,我知道服务器确实是我想要登录的服务器,并且它知道我是一个拥有正确的密码。
但是,它不会(甚至尝试)在各方之间创建加密连接,例如 SSL/TLS。虽然监听的人无法获得足够的密码信息来代替我登录(或模仿服务器让其他人登录),但它不会(本身)加密进一步的通信——除非你做的不仅仅是SRP 本身,其他任何人仍然能够读取通过连接传递的所有数据。
我知道,我在这里回答有点晚了,但只是决定添加一些说明。正如 Jerry Coffin 所说,SRP 用于密码交换,证明双方拥有一些共享秘密,它本身不提供任何加密,但是在握手过程中双方生成相同的密钥,以后可以用于通过一些其他算法加密/解密,即AES-256。但是,如果您决定使用这种身份验证方法,则应考虑以下事项:
总结一下:SRP 是一个很好的附加安全层,它有助于保护用户密码、生成会话加密密钥、验证客户端到服务器以及防止 MITM 攻击,但如果它位于 TLS/SSL 通道内,则更加安全.
os.urandom 会与你同在吗?;)