8

我正在寻找一个可以估计密码强度的开源组件。在网上搜索,我发现这很有趣:https ://github.com/lowe/zxcvbn (以及有关它的更多详细信息:https ://tech.dropbox.com/2012/04/zxcvbn-realistic-password-strength -估计/)。

让我印象深刻的是能够将给定的密码与“常见密码、常见的美国名字和姓氏、常见的英语单词以及常见的模式,如日期、重复 (aaa)、序列 (abcd) 和 QWERTY 模式”进行比较。

有谁知道可以用于 iOS/Mac 应用程序的类似东西?如果没有,最好的开始方式是什么?

4

3 回答 3

11

所以,终于,一年多之后,伟大的 Mattt Thompson 刚刚在 GitHub 上发布了他自己的密码强度验证库,带有验证规则,并给出了强度评估。

这是:https ://github.com/mattt/Navajo

于 2014-03-06T08:22:42.227 回答
2

看看 GitHub 上名为 的开源库zxcvbn-ios,它是为 Objective-C 重写的库:

https://github.com/dropbox/zxcvbn-ios

于 2016-04-07T16:05:51.910 回答
0

除了在密码上有可能使其容易受到字典攻击的实际英文单词之外,您还可以将其简单地分析为它对纯暴力攻击的抵抗力。

检查字典攻击的安全性必须使用一个大的词表。我还必须考虑实际的字典攻击如何工作并混合字典单词,以及它们是否会发生变化,例如将 A 换成 4 等。

让我们专注于蛮力攻击,我相信我可以帮助你。

对于蛮力攻击,您首先需要做的是定义攻击将用来生成密码的字符集。可能会很快获得许多密码的第一次尝试是只使用小写字母。

在只有小写字母(大约有 25 个,取决于语言)和 N 个字符的密码的情况下,您将有 25 次方的 N 个不同组合。例如,一个小写的 6 个字母密码有 244140625 种不同的可能性。

现在让我们添加大写字母,所以再添加 25 个(总共 50 个)。在 6 个字母的密码上,我们将有 50 的 6 个组合的幂,即 15625000000。

添加一些数字?所以还有10个字符。

如果您添加一些符号,您可以添加另外 20 个常见的符号(猜数字)。

所以基本上你要做的就是分析一个密码并检查它是否有小写字母(可能总是),所以你将 25 添加到字符集计数中。它有大写字母吗?再算上25个。它有数字吗?再数10个。它还有其他符号吗?再数20个。

使用小写、大写、数字和符号(约 80 个字符集)的 10 个字符的密码将有大约 10737418240000000000 种组合。

现在计算密码的大小并进行数学计算。characterSetCount 的 nCharacters 次幂。

因此,您将获得的数字是攻击者原则上必须检查以确保他可以找到正确密码的组合数。您还可以假设攻击者不必检查所有密码即可找到正确的密码。检查其中一半将大致给它找到它和找不到它的相同机会。所以保留一半的组合作为参考。

现在,使用哪种散列算法来存储密码?

让我们假设MD5。对于 MD5,我发现这个http://bvernoux.free.fr/md5/index.php说明每秒检查 2 亿个哈希值。

获取您的一半组合数并将其除以 2 亿,您将获得攻击者使用该硬件和方法获取您的密码所需的秒数。例如,我们讨论过的包含所有类型字符的 10 个字符的密码大约需要 26843545600 秒。大约425年。

有了这个,您可以分析最坏的情况。它不准确,但它可以给你一个估计。

要检查的另一件重要事情是密码散列是否使用了盐。使用盐来存储密码(http://en.wikipedia.org/wiki/Salt_(cryptography))是当今的一种常见做法。如果你不使用这种方法,你很容易受到彩虹表攻击(http://en.wikipedia.org/wiki/Rainbow_table),在这种情况下,所有这些数学都是无用的,因为你的密码非常不安全。计算彩虹表的字符数非常高(16 个左右)。

希望能帮助到你!

于 2013-02-21T01:16:53.353 回答