让我们使用安全密码







很久以前,在机房入口处有一个邪恶的祖母来保护密码就足够了,很久以前,在早期大型机时代,就已经有了出色的两因素认证。在终端机中输入个人密码之前,必须带护卫人员进入展位。所有这些都会自动将攻击范围缩小到一些实际可以访问终端的人员。那时,经常有成千上万的密码被泄露,现代世界中出现了调制解调器,哈希和其他乐趣。



如果您有用户并且他们使用密码登录,建议您再看一看来自美国国家标准技术研究院国家网络安全中心等组织的最新建议



特别是,不再需要密码轮换。并在“ FUCKING ROSE”笑话的最佳传统中要求某些符号。让我们讨论要点,并尝试使用户更加方便和安全。



身份验证不是二进制的



不,我知道严格制定规则的人现在会开始反感。理论上,用户可以登录也可以不登录。您将无法登录。然而,现代信息安全指南暗含了一种非二进制的用户信任方法。



完全信任的用户设法正确输入密码并从授权的设备登录。对从可信设备登录但在输入密码时输入错误的用户的信任度略低。如果用户正确输入密码,但设备不受信任,第二个因素未确认,并且IP属于Thor的输出节点,那确实很糟糕。在第三种情况下,是时候拉开刻有“警报!狼偷了兔子!”



作为提供服务的人们,我们的任务是使人们感到舒适,安全并且在犯错误时不会感到非常痛苦。因此,值得放置某些异常活动的迹象,以便包括某些其他措施来保护帐户。例如,输入3-5次错误的密码后,提示用户进行验证码输入。是的,每个人都讨厌它,但是大多数用户不会遇到它。那些已经降低其信任等级的人会在再次输入密码之前放慢一点速度。但是,我们将阻止自动暴力攻击。



无需限制最大密码长度





长密码更安全。让用户使用它们。



好吧,这并不是完全没有必要。几兆字节长的粗体密码可能会在意想不到的地方溢出或出现其他奇怪的后果。但是可以保证有条件的最大长度为300个字符以适合任何典型用户。此外,NIST坚持相同的建议:

验证者必须允许用户使用至少64个字符的难忘密码。


对于特别优待的服务,NIST还提供了另一个重要建议:

不允许截断用户密码。


是的,有一些非常奇怪的服务认为12个字符就足够了,这意味着可以安全地切断其余28个字符并仅检查第一个片段的哈希。我不知道受影响的人对此有何想法,但是同一家银行组织经常为此遭受痛苦。不要那样做 如果用户希望将来自Iliad的片段与Bloodstock组的文本片段一起使用,请使用。



确保所有ASCII字符均有效



特殊字符存在某些问题。例如,在某些情况下,使用“ {} / \”或其他类似字符可能会无效。假设花括号会破坏有效的JSON并导致密码处理崩溃。或撇号字符,可以在SQL注入中使用。是的,密码输入表单也可以作为攻击的入口。



从理论上讲,您可以简单地禁止使用此类符号以使其更容易使用。但是,这样做会减少用户密码的熵,并且如果密码是自动生成的,将给用户带来不便。您将必须选择某些例外模式。再次提及NIST马克思

所有可打印的ASCII [RFC 20]字符(包括空格)必须是有效的密码。Unicode字符[ISO / ISC 10646]也必须有效。


是。一切都正确。这是您的头痛和其他测试。但是,如果用户想使用ਪਾਸਵਰਡ或මෙයදlet,请让他这样做。或在密码中添加卷饼字符以增强加密强度。有权。



而且,在使用特殊字符的要求方面落后于用户。是的,只是不要碰他。让他使用他想要的东西。有关大量泄漏的研究表明,人们仍然使用带有特殊字符的愚蠢替代品,这根本无法改善这种情况。具体地说,Microsoft写道:

大多数人使用相同的模式,例如,大写字母作为第一个字符,特殊字符和数字位于最后两个位置。网络罪犯意识到这一点,并用典型的替代词来定制其字典攻击,例如用“ s”代替“ $”,用“ a”代替“ @”,用“ i”代替“ l”。


是的,是同一个微软公司,因为每个月都有成千上万的人提供与以前的密码不一致的新密码,其中包含不同情况下的特殊字符和字母。他们是现在在其准则中编写“消除字符组成要求”的人。



毕竟,如果使用了标准词汇词和典型的替换模式,那么最终,诸如cain和abel,hashcat,ripper的典型实用程序就可以在几小时甚至几分钟的时间内猜测出典型视频卡上的密码。



不要使用密码提示



与将用户的提示以明文形式存储在数据库中相比,永远埋没被忘记的密码要安全得多。



2013年,Adobe泄露了其密码数据库。它被歪曲地加密了,但是最不愉快的是它包含了恢复提示,Randal Monroe并​​没有在xkcd中嘲笑它。

NIST同意相同的观点,NIST不建议以任何形式存储提示。忘记了-通过邮件进行恢复并进行所有其他检查。



减轻用户大脑的负担



国家网络安全中心发布了一个很酷的信息图表让我引用一小段话:



请注意,密码的主要问题在于,好的密码是随机的,几乎难以记住。如果有很多服务,那么用户将几乎不可避免地使用相同的密码。更高级的将执行“ myp@ssword_habr.com”之类的操作。自然,在一处泄露密码会自动破坏所有其他服务中的帐户。

因此,让用户使用密码管理器。是的,这就像是用于银行卡的专用钱包,可让您同时丢掉它们。但是在这里,您需要了解,与在不同资源上对相同密码进行破坏相比,对脱机密码存储区进行破坏的情况非常少见。密码管理器不一定是完美的。它需要比各地的相同类型的密码更好。不要像某些讨厌的服务那样阻止将密码粘贴到剪贴板中的字段中。显然,这将迫使用户放弃密码管理器,而使用弱选项。



第二点说,如果没有明显的妥协迹象,则无需强迫用户更改密码。这只会激励他使用具有相同密码的模式。如果密码在许多泄漏的词典之一中弹出,则发出警报要好得多。当然,您不能让用户创建词典中已经包含的密码。



结论



  1. 对用户友善。不要强迫他想出典型的模式来做愚蠢的事情。标准的习惯要求直接将他推向了这一点。只需注意以下几点:
  2. 在适用的情况下,使用密钥认证而不是密码。
  3. 如果密码在词典数据库中,则不要让用户使用该密码。他是否将它们泄漏到那里或其他人都没有关系。
  4. , . . .
  5. , .
  6. , .













All Articles