盐,盐。 这是最低限度的价格。

前几天,我读了这篇Arstechnica文章 ,意识到这种情况多么悲惨。 而且这并不是因为邪恶的黑客而造成的。 这很糟糕,因为很少有人知道如何处理一件非常普通的事情:身份验证(注册和登录)。 但是似乎像LinkedIn和Yahoo这样的很酷的公司都做错了(最近大量密码泄露了)
本文中描述的大多数问题都是使用bcrypt解决的。 并且必须使用盐。 其他选项也是可以接受的-PBKDF2,也许还有SHA-512。 请注意,bcrypt不是哈希函数,它是专门为密码存储设计的算法。 它具有内置的盐生成器。 这是有关该主题的两个堆栈交换问题: thisthis 。 杰夫·阿特伍德(Jeff Atwood)不久前也写过关于这个话题的文章
什么是盐? 它是一个随机字符串(准确地说是一系列位,但出于密码存储的目的,让我们将其视为字符串),该字符串在散列之前附加到每个密码上。 因此,“ mypassword”可能会变成“ 543abc7d9fab773fb2a0mypassword”。 然后,您每次需要检查密码是否正确时都添加盐(即salt + password应该生成与存储在数据库中相同的哈希)。 这有什么帮助? 首先,不能使用彩虹表(用于字符组合的预先计算的哈希表)。 Rainbow表是为较短的密码生成的,并且较大的盐会使密码很大。 由于攻击者知道您的食盐,因此仍然可以使用蛮力攻击,因此他可以只蛮力攻击salt +(尝试的密码集)。 但是,Bcrypt解决了蛮力问题,因为它是故意的“慢速”。
因此,使用 。 更喜欢bcrypt。 而且,如果您必须超级安全,那么这不是必须的-这是每个存储密码的网站的绝对最低要求。 而且不要说“我的站点只是一个论坛,如果有人获得密码会发生什么”。 用户倾向于重用密码,因此他们用于您的愚蠢站点的密码也可能是他们的Facebook密码电子邮件。 因此,无论您的网站是什么,都请认真对待,因为您冒着用户在房屋外安全的风险。 如果您认为使用bcrypt很难,那么根本不要使用密码。 使用“使用facebook / twitter登录”,OpenID(实际上比使用bcrypt困难)或其他形式的外部身份验证。
在几次使用“最小”一词之后,我将简要列出一些有关网络安全的事项,除了最低限度地使用盐之外,还应考虑这些事项。 如果您正在处理金钱或其他一些非常重要的员工,那么您将无法承受最低限度的费用:
  • 在各处使用https。 可以嗅探发送不安全的会话cookie,攻击者可以“窃取”用户的会话。
  • 一次性令牌–通过SMS发送短暂令牌(代码),或通过电子邮件发送登录链接–用于身份验证。 这样,您甚至都不需要密码(将身份验证复杂性转移到移动网络/电子邮件提供商)
  • 鼓励使用密码而不是密码-短密码更容易被暴力破解,但长密码却很难记住。 因此,您可以鼓励用户使用容易记住但难以攻击的密码短语,例如“风中的灰尘”或“谁让狗出去了”。 (我的注册页面有一个微妙鼓励的示例)
  • 要求对高度敏感的操作进行额外的验证,并且如果登录是自动的,则不允许更改电子邮件(使用具有悠久历史的“记住我” cookie)
  • 连续登录失败后锁定帐户-仅当攻击者控制了您的数据库时,“ bruteforce”才可用。 它不应通过您的界面发生。
  • 使用证书进行身份验证–公钥加密可用于在用户与服务器之间建立相互信任–用户知道服务器是正确的,并且服务器知道用户不是以某种方式获得密码的随机人。
  • 使用硬件令牌–使用数字签名与上述选项相同,但是它们将证书存储在硬件设备上,不能从那里提取。 因此,只有物理设备的所有者才能进行身份验证
Web安全是一个复杂的领域。 对于真实系统,不得遵循Hello World示例。 考虑对系统外部用户的所有影响。 底线:使用bcrypt。

翻译自: https://www.javacodegeeks.com/2012/08/bcrypt-salt-its-bare-minimum.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值