在缓存中安全地存储密码哈希
Posted
技术标签:
【中文标题】在缓存中安全地存储密码哈希【英文标题】:Securely Storing Password Hashes in Cache 【发布时间】:2013-12-25 05:56:02 【问题描述】:我正在将后端服务器作为个人项目。目前,当有人注册时,他们的密码会使用 Bcrypt 进行哈希处理,并保存在数据库中。但是,每次我需要验证请求是否来自经过身份验证的用户时都查询数据库似乎太多了。结果,我开始怀疑将这些缓存在服务器的内存中。我认为在此内存中存储未散列的密码是不安全的。实现这一点的最安全方法是什么?我可以缓存密码的 Bcrypte 副本,然后验证用户的密码是否与缓存的 Bcrypt 副本匹配,但如果可以的话,我也想尽可能少地使用 bcrypt。我认为将密码及其 Bcrypt 版本一起存储在缓存中,即使没有链接到用户名,也是一个坏主意。在牢记安全性 + 性能的同时,我还能做些什么吗?
【问题讨论】:
为什么每次查询数据库“太多”?考虑替代方案很好,但听起来您过度设计了它。 我没有最好的硬件资源,如果可能的话,我想尽量减少执行的数据库查询和资源密集型作业的数量。但是,如果这完全损害了安全性,我会忍受的。 我认为将散列密码存储在缓存中很好。存储明文密码不是。除非你有数据告诉你,否则我的默认建议总是先做最简单的事情(换句话说,忘记缓存,只查询数据库)。 顺便问一下,您认为您需要多久检查一次密码?只有当用户登录时,对吧?不是每个请求。 嗨 - 你找到解决方案了吗? 【参考方案1】:缓存明文密码及其哈希值通常不是一个好主意。安全是有代价的,这里是你的表现。
如果您不需要一流的安全性(即较慢的哈希),您可以选择基于 SHA512 的快速哈希解决方案。
为了数据库性能,请尝试调整数据库缓存以加快检索速度。
【讨论】:
以上是关于在缓存中安全地存储密码哈希的主要内容,如果未能解决你的问题,请参考以下文章