密码强度算法的标准化

Posted

技术标签:

【中文标题】密码强度算法的标准化【英文标题】:Standardizing of password strength algorithm 【发布时间】:2011-04-14 22:23:39 【问题描述】:

过去几个月,我一直想知道网站上所有这些密码强度计。如果您在每个注册表单中使用相同的密码,仪表上的结果有时会有所不同。一个说“强”,另一个说“正常”,可能有些人甚至会说“弱”。

所以问题是,如果有一个标准,程序员可以在他们的工作中使用它,让它变得不那么混乱,有时令人讨厌?

如果你说是或不是,请给出一两个论据。

谢谢!

附:不知道这是否已经讨论过,如果这是“重复”,请冷静。

编辑

看起来问题已被泄露。我没有考虑开始讨论密码强度。老实说,每个密码都可能被盗,只需要适当的工具。

这与一个站点或另一个站点的安全性无关。我实际上还没有看到任何银行网站使用任何类型的安全措施,他们可能会自己做所有事情以使其独一无二。

让我们再试一次。如果有一个活动,程序员展示他们的方法的代码,其他人必须投票,遵循一些投票准则,例如:你必须判断简单性、兼容性和安全性。

然后,获胜的方法(由程序员投票)将被选为“标准”方法并推广到表单中。

你觉得这种方法有什么用处吗?如果有,你会用吗?

【问题讨论】:

【参考方案1】:

使用“弱”和“强”等相关术语来标准化密码强度有点像使用类似术语来标准化锁的强度。你无法衡量“弱”或“强”;您可以测量的是破坏需要多长时间(类似于物理锁/保险箱的安全等级),候选钥匙的可接受容差(指纹或钥匙研磨必须与锁的原始样本有多接近)键入以工作)等。

Fredley 的算法会给你一个数字。该数字可以与任何其他数字进行比较,就像您可以量化相对优势或劣势的任何测量一样。至于“X 是弱”、“Y 是正常”这样的定义标准,我认为你不会让所有相关方都同意,因为密钥的绝对强度必须始终参考密钥的值。它保护的资源。你(或你的女儿)不会把她的日记放在金库门后面的银行保险箱里;一个 80 美分的玩具锁可以为那些她不想读它的人提供“强大”的安全保障(鼻涕虫的小哥哥或大哥哥、过夜的客人等)。然而,那个 80 美分的玩具锁不会在你的保险箱门上持续两秒钟,你的房子的契约,你的汽车的所有权,以及你曾祖母的一次性 25 克拉钻石项链是保留。

同样,银行网站所需的密码(或更准确地说是复合安全措施)将比在线论坛更强大,因为它所保护的资源具有更大的物质价值。论坛的话(尽管有一些著名的 Facebook 黑客事件导致照片泄露);如果黑客进入您的银行记录,他们可能会严重毁掉您的生活。

因此,“MittensABC”将是大多数论坛可接受的密码,因为它超过 8 个字符(26^8 = 大约 2080 亿个随机字母组合)并且包含大写和小写字母(“brute- force”这个密码将是 52^10 = 144 万亿个可能的 10 个字符的区分大小写字符串的组合)。但是,这对于银行来说是完全不够的:它主要由字典单词组成,不同之处仅在于您添加了易于猜测的字母组合,因此“智能”破解 alg 可以减少初始样本空间现代用法中的 100k 左右的单词,并附加基本的字母和数字字符串以提出可能有几百万种可能性(计算机运行的儿童游戏)。出于同样的原因,许多提供对非常私密信息的访问权限的网站不允许在密码中使用生日、SSN 等,因为如果该信息被盗,它可以作为破解算法的提示,进一步减少初始密码。可能的样本空间。

总之,“好”密码的构成取决于黑客/破解者坚持尝试破解该密码的可能性有多大。还有其他有用的工具,例如登录尝试之间的 10 秒冷却时间,或 15 分钟内的一定次数的尝试,这使得几乎不可能利用计算机的速度,但是智能算法,网站漏洞,或者一个愚蠢的用户都可以增加成功破解的机会。

【讨论】:

请注意,银行会使用 4 位或 5 位密码(至少我的密码是这样),因为他们会在 3 次尝试后锁定您的帐户。实际上,最安全的是现在允许用户选择自己的密码。由于您可以使用完整范围的可能单词而不是任意限制它们(我曾经不得不实施一项政策,该政策有很多愚蠢的限制,大大减少了可能的密码数量)您不必尝试给用户提示他们可以多么容易地窃取他们的帐户;-) 我实际上正在考虑使用更多的标准化方法,所以人们最终不会感到困惑,Hotmail 说他们的密码很强大,但 Google 说它很弱。关于您的“X”和“Y”,如果它们有恒定的值,那就太棒了,然后它们将在全球范围内使用,人们会知道他们的密码何时安全,何时不安全。 方法实际上可以扩展顺便说一下,这只是我所考虑的一个例子。 @Joey;在大多数情况下,这些都是 PIN,是的,它们需要有限的尝试次数。 BofA 的网站密码需要 8 个或更多字符,以及至少一个大写、小写和数字,仅用于“正常”强度。一个符号立即使其“强”,但显然它们将允许的符号限制为破折号、下划线和其他几个符号,以防止注入攻击。 @Tom:我的全部观点是 X 和 Y 不能有一个恒定的值,因为密码的强度取决于许多因素,包括它保护的价值和其他安全措施。 但是有了一个非常好的计算结果的公式,人们就有可能开始考虑在每个站点中使用更强大的密码。到处都是强密码并没有那么糟糕。 只是我的意见 Keith:我的网上银行使用的是5位密码;它与我借记卡的 PIN 不同。可能仍然是愚蠢的,或者不会为他们的利益而烦恼。【参考方案2】:

您想要一个衡量强度的理论答案还是一些或多或少是事实上的标准的实际实施?

如果是后者,这个老问题有一些很好的链接

How do I measure the strength of a password?

还有一些可能是事实上的标准的 jQuery 插件,例如

http://phiras.wordpress.com/2009/07/29/password-strength-meter-v-2/ http://projects.sharkmediallc.com/pass/

因为它们可用且易于使用,即使强度算法背后没有任何引用的研究。这些明显的遗漏是字典检查,以确保您没有使用字典单词或仅基于字典单词,这很可能需要服务器端实现才能做得很好。 (我想这没关系,因为您最终会将您编写的密码发送到同一台服务器。)

【讨论】:

【参考方案3】:

来自Wikipedia:

可以通过计算信息熵来计算随机密码的强度。如果密码中的每个符号都是独立产生的,则密码的信息熵由下式给出:

其中 N 是可能的符号数,L 是密码中的符号数。函数 log2 是以 2 为底的对数。 H 以位为单位。

***页面上有详细的计算。

【讨论】:

“如果密码中的每个符号都是独立生成的” - 但实际上,用户生成的密码不是吗? "NIST 建议使用以下方案来估计密码熵:第一个字符的熵为 4 位;接下来的 7 个字符的熵为每个字符 2 位;第 9 到第 20 个字符为 1.5每个字符的熵位;字符 21 及以上的每个字符具有一位熵。这表明 [...] 八字符密码具有大约 18 位熵。" 所以你是说这是人们正在使用的“当前”标准? 谁选择随机密码?! 需要安全密码的人。

以上是关于密码强度算法的标准化的主要内容,如果未能解决你的问题,请参考以下文章

如何检查密码强度? [关闭]

正则表达式验证密码强度

正则表达式验证密码强度

JS 密码强度

JavaScript密码强度验证

Python小实验——密码强度