安全存储密码的5条简单规则

太多时候,系统被黑客入侵,其用户数据库也遭到破坏。 尽管有大量资源可用于正确存储用户凭据,但在很多情况下,数据库包含纯文本密码哈希值低的密码双向加密密码 。 不仅是遗留数据库; 就在本周,我看到了一个Reddit线程 ,至少有一个开发人员主张自定义哈希函数和“默默无闻的安全性”。

尽管密码学是一门复杂的学科,但您无需成为专家就可以很好地管理用户的凭据。 选择方案时,只需遵循以下简单规则: 1

  1. 使用经过安全专家公开审查的,行之有效的单向哈希算法,例如bcryptPBKDF2scrypt
  2. 不要尝试编写自己的哈希算法。 您不能依靠“默默无闻的安全性”; 您必须假定攻击者拥有您的源代码,并且可以攻击劣等算法。 2
  3. 我是说真的,不要编写您自己的哈希算法! 只需使用规则1中的一项即可。 它们是免费的,几乎可以在任何平台上使用,并且已经由安全方面的最佳专家证明是安全的。
  4. 说真的,你为什么还读这个? 规则#1是您所需要的!
  5. 好吧,如果您真的要忽略规则1,请至少通知您您的用户您没有安全地存储他们的密码,并且如果数据库被破坏,他们的密码将成为公共知识。

我不想处理绝对问题,特别是在软件开发方面,但是我对此确实感到很强烈。 在任何情况下都不应该开发自己的密码哈希算法! 3这是在Java使用PBKDF2而不导入任何外部库的示例; 如果您使用Node.js,那么有一个用于bcrypt的模块 ; 有一个用于scryptRuby宝石 ; 甚至PHP也有使用bcrypt的内置密码哈希函数 。 实际上,几乎所有语言都可以免费使用这三种算法中的任何一种库。 只是Google“ 您的选择语言bcrypt或scrypt OR pbkdf2 ”,您会发现很多选择。

几乎可以肯定,没有经过严格的公开同行评审的任何哈希函数都没有正确设计。 如果Niels Provos自己(bcrypt的创建者之一)在我的团队中,并且想使用他私下创建的新哈希函数,我将继续使用bcrypt。 尽管我怀疑Provos先生会愚蠢到建议使用这种算法; 他可能已经创建了下一个很棒的密码哈希算法,但是他可能会意识到,只有在其安全专家对其进行评估之后,才能依靠它。

所以,当你需要存储用户凭据,只是请, 与bcrypt,scrypt,或PBKDF2哈希他们。 这简单。 不要试图变得聪明。

  • 1甚至更好:不必存储用户凭据。 考虑使用OAuth提供程序或组织的内部身份系统。 它节省了一些精力,并使您的用户免于记住另一组凭据。
  • 2本质上,这是Kerckhoff的原则 :“该系统一定不需要保密,并且可以在不造成麻烦的情况下被敌人偷窃”
  • 3好的,我想如果您要参加密码哈希竞赛或进行学术研究,那很好。 但是,除非经过全面的公众审查,否则您仍不应在实际的应用程序中使用它。

翻译自: https://www.javacodegeeks.com/2015/04/5-simple-rules-for-securely-storing-passwords.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值