首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么密码强度在密码哈希的上下文中经常被低估和不确定?

为什么密码强度在密码哈希的上下文中经常被低估和不确定?
EN

Security用户
提问于 2014-02-14 23:39:21
回答 3查看 1.3K关注 0票数 4

安全性的一个方面已经困扰了我很长一段时间:为什么哈希算法和盐类的重要性肯定是肯定的,但密码强度要么根本没有提到,要么被认为是一个相当“哲学”的问题?

对我来说,正确的散列实现有三个组件:

  1. 慢速和无碰撞算法。
  2. 很好的随机盐。
  3. 强,字典-防攻击密码。

任何组件中的故障都会使整个散列操作变得毫无用处。因此,对我来说,没有必要使用MD5,但允许他们使用12345作为密码。对我来说,密码的强度是不可分割的,严格来说是一个技术问题,它的重要性不亚于其他两个方面。

然而,当谈到简单的特定问题时,根本就没有具体的答案!

想要哈希算法的建议吗?愿为您效劳!

想知道如何得到好盐吗?有千千万万种方法!

想知道什么应该是最低可接受的密码强度?呃..。你知道,这是一种权衡和一些政治事务,所以“尽你所能”。

但是,对于“尽你所能”的技术,是否有一个技术性的、实用的定义呢?就像哈希算法一样?

或者,换句话说,为什么总是有一个哈希算法的建议,和一个特定的(“使用这个”),但从来没有建议的密码强度(“至少允许这样的强度或理解风险”)?或者总是非常强调应该使用的算法,而根本不关心密码的强度。难道这就不能给人留下这样的印象:仅靠散列算法就足够了,让可怜的程序员产生一种错误的安全感吗?

EN

回答 3

Security用户

发布于 2014-02-15 07:23:39

密码哈希在安全指南中包含了很多内容,而且没有很好的理由。停止SQL注入和可执行文件上传要重要得多。我认为,这么多讨论的原因是因为它使用了有趣的技术(如bcrypt),而且默认情况下很少有身份验证库正确使用。

您提到的密码存储最佳实践并没有得到普遍认可,尽管这个站点上的用户大力推广它。特别是,在高流量站点上使用慢哈希算法通常是不可能的,因为处理负载太大。有一个有趣的文档这里

密码存储通常对用户是不可见的。不管您使用的是未加盐的MD5还是氪星,用户都不会看到任何不同。密码强度对用户来说是非常明显的,特别是,它是注册过程的一部分,大多数网站都希望尽可能地保持简单。

一些相当普遍的事情是,拥有更多的安全性会让你付出一些代价。这是密码存储和强度之间的区别。做更强的密码存储需要网站管理员--但是你可以买更多的硬件等等。执行更强的密码复杂性会让站点用户付出代价--如果他们不喜欢的话,他们就会离开。

所有安全选择都应基于对风险的理解。对于愤怒的小鸟来说,你不需要和网上银行,或者核武器一样的安全水平。在商业环境中,这种基于风险的思维通常不是针对只需要网站管理员的防御进行的,但是对于任何影响用户体验的东西,这种想法都是很难做到的。

关于密码的强度,我的建议是:

  • 低灵敏度-至少6个字符
  • 中等敏感度:至少8个字符,以及字母、数字和标点符号的混合)或至少16个字符(由用户选择)
  • 高灵敏度-使用多因素认证

不过,这并不仅仅取决于网站的敏感性。在线攻击和离线攻击是有区别的。网站密码不需要那么强,因为攻击者只能尝试在线猜测,您可以使用锁定策略来减缓这些攻击。但是,Truecrypt密码可能会被脱机攻击(如果攻击者有驱动器的话)--所以它们需要更强大。

密码锁定策略是很好地进行密码身份验证的另一个重要部分,但它们的覆盖范围与密码存储不同。

越详细地查看密码,就会发现它们是一个非常有缺陷的身份验证机制。所有这些使密码尽可能安全的最佳实践建议就像试图用胶带重新连接飞机的机翼一样。

票数 2
EN

Security用户

发布于 2014-02-15 00:09:34

长话短说,您可以完全控制您如何散列密码。但是,除了非常有限的一点之外,您无法控制用户密码的强度。

密码散列中存在最佳实践,因此可以将弱密码的影响降到最低。盐类应该是独一无二的,因此破解一个密码的成功不会对破解其他密码的努力有所帮助。应该使用像bcrypt或scrypt这样的慢散列来减缓攻击者反复进行密码猜测的速度。这些算法增加了密码破解的难度至少几个比特的熵。

另一方面,你对密码本身所能做的最好的事情就是限制密码的最小长度。需要符号可能会导致最小的额外熵,因为绝大多数用户只会在密码的末尾添加一个感叹号。在一天结束时,一个好的密码是熵,而众所周知的是,用户不善于想出所有的密码,但只有极少量的密码。更糟糕的是,您实际上无法测试熵--它是生成密码的方法的度量,而不能直接测量密码本身。“密码强度检查器”通常是相当糟糕的,通常只会让用户失望,他们最终会为了使用自己喜欢的密码而试图玩游戏。

因此,我们尽我们所能,在过程的各个部分,我们可以控制,并试图限制的缺点,我们不能。

票数 0
EN

Security用户

发布于 2014-02-15 20:37:56

它已经困扰了我很长一段时间了,为什么哈希算法和盐的重要性是肯定的,但是密码强度要么根本没有提到,要么被认为是“哲学”的问题?或者,换句话说,为什么总是有一个哈希算法的建议,和一个特定的(“使用这个”),但从来没有建议的密码强度(“至少允许这样的强度或理解风险”)?

  • 可以定义并有意义地度量散列算法(包括盐类)的缺陷,而不受所有其他因素的影响。
  • 散列技术可以发布并进行同行评审。
  • 算法的选择是由我们,作为专业的建设系统。
  • 业务/所有者/需求设置者/检查签名者:
    • 根本不在乎算法
    • 只关心算法不会太慢而引起用户的抱怨
    • 只关心密码规则不会引起用户抱怨
    • (很少)只关心算法是否符合法律、法规、认证、标准或类似的要求。

  • 用户的第一个或两个标准差:
    • 只关心算法不会慢到让他们烦恼
    • 只关心密码规则不那么复杂,以致于惹恼他们,
      • 必须记住任何事情使他们感到烦恼
      • 没有正确键入密码会惹恼他们。
      • 第一次登录的失败惹恼了他们
      • 不得不输入太多的字符使他们感到厌烦。
      • 不能使用他们最喜欢的密码会惹恼他们
      • 有了规则,他们还没有习惯去惹恼他们

  • 与算法不同的是,发布的密码会立即变得脆弱,因此无法进行同行评审。
  • 虽然明文密码本身(即只知道用户输入的字符串)总是可以被判断为“弱”,但它们永远不能被判断为“强”。
    • 请参阅我应该拒绝明显的错误密码吗?
    • “密码”显然很弱。
    • “5f4dcc3b5a765d61d8327deb882cf99”*几乎完全一样弱,但它看起来很强(长,小写阿-f和数字)。
      • 请注意,如果它实际上是一个密码随机字符串,那么长度就足以克服有限的字符集。

代码语言:javascript
复制
- "NWY0ZGNjM2I1YWE3NjVkNjFkODMyN2RlYjg4MmNmOTk="\*\* is also almost exactly as weak, yet it looks even stronger (long, upper case, lower case, numbers, symbols).
  • 你永远不会知道一个基于规则的字典攻击所使用的准确的词表和规则。你也永远不会像攻击者那样对其他漏洞泄露的最新密码进行更新(或者,可能是他们的论坛伙伴)。

在密码为12345的情况下,使用一个很好的散列算法可以传递很少的额外安全性,但是使用一个1000字节的纯粹随机的密码,如果它也存储在明文中的话,就没有什么额外的安全性了。这条链只有它最弱的一环才是最坚固的!

*MD5(“密码”)

** Base64(MD5(“密码”))

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/51561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档