SRP 旨在保护密码的传输免受暴力攻击,即使密码很容易被暴力破解。
但是,如果某些暴雪身份验证服务器遭到入侵,则相关的攻击向量是不同的。除了存储方案,攻击者还可以监听正在进行的交易,并同时存储由 SRP 服务器生成的临时 DH 机密。后一种攻击有点复杂,需要攻击者进行大量准备,但是,它肯定会泄露用于对受感染系统进行身份验证的任何登录名。
更传统的攻击向量是验证值。在 SRP 中,服务器端的验证器值不是传统的哈希值,而是求幂的结果,就像在 Diffie-Hellmann 中一样。
据我所知,没有对 SRP 与 PBKDF2 或 bcrypt 的详细分析。在 SRP 网站 (srp.stanford.edu) 的某个地方,我曾经看到一个注释,人们实施了一个暴力破解器,并发现所需的暴力破解工作类似于传统的哈希破解。
这是意料之中的:众所周知,这种求幂很难求逆,就像哈希函数一样。假设暴雪实现了像 RFC2945 这样的标准化协议并且没有尝试自己发明细节,这些验证值也将包含使彩虹表不切实际的盐。
主要区别在于暴力破解单个验证值的努力。在这里,像 bcrypt/PBKDF2 这样的系统采用比例因子来增加每次密码猜测的计算量。我知道的 SRP 方案没有明确支持这一点。求幂的计算成本通常比哈希高一些,但这取决于您正在操作的组(模数)。我认为增加 SRP 中验证值的模数很容易,但它也会增加每个对等方的其他 2 次幂运算的计算工作量,这些运算量必须在每个协议运行中完成。
更新:再次查看 RFC2945,密码和盐首先被散列,然后取幂。在这里使用 PBKDF2 很容易,而不仅仅是散列来实现暴力破解工作的缩放因子,而不会对协议的其余部分产生太大影响。此外,即使选择了一个小的/不合适的指数 N,该方案仍然与简单的基于质询-响应的 pw-authentication 一样安全。
总体而言,暴雪可能有点幸运,因为他们的密码存储方式非常少见,而且适当的暴力破解工具并不常见。然而,对于一个坚定的攻击者来说,存储秘密的 SRP 方法并不比具有良好反暴力缩放因子的最先进方法更安全(可能稍微不安全)。话虽这么说,但我对暴雪使用一些最先进的加密技术进行密码验证表示赞赏,因为在线暴力破解通常更成问题。