到目前为止,我们应该都知道使用 bcrypt 或 scrypt 来存储足够多轮数的加盐密码哈希。(例如,请参阅https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) 教训:假设您的身份验证数据库将在某个时候受到损害。
我们还应该知道如何设计用户身份验证 cookie,以满足我们的应用程序使用具有每个用户密钥的 HMAC 所需的安全性和机密性级别。我见过的最常被引用的论文是http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf。
然而,我读过的每一篇解决安全用户身份验证的论文和提案都解决了一组不同的、重叠的问题(例如,窃听、篡改和重放攻击),并且通常也旨在存储对用户不透明的数据。
即使在服务器的身份验证数据库遭到破坏后,我也找不到任何解决如何使客户端用户身份验证 cookie 抵抗攻击的方法。
例如,上面的论文只是依赖于服务器密钥的保密性。我见过的许多实现也会生成一个用于 HMAC 并存储在服务器上的每用户令牌。在任何一种情况下,一旦服务器机密被泄露,伪造任何用户的凭据都是微不足道的。
对于典型的 Web 应用程序(即,在公司和银行环境之外),是否有任何参考或已知实现涵盖此场景?