我正在寻找一个开源组件,可以估计一个密码的强度。在网上搜索,我发现这个非常有趣:https://github.com/lowe/zxcvbn (关于它的更多细节:https://tech.dropbox.com/2012/04/zxcvbn-realistic-password-strength-estimation/)。
给我留下深刻印象的是,与相比,对给定密码进行分析的能力--“普通密码、普通美国人姓名和姓氏、普通英语单词以及日期、重复(aaa)、序列和QWERTY模式等常见模式--”。
有人知道类似的东西可以用于iOS/Mac应用程序吗?如果不是,什么是最好的开始方式?
发布于 2014-03-06 08:22:42
所以,最后,一年多后,伟大的马特-汤普森刚刚向GitHub发布了他自己的库,用于验证密码强度、验证规则,并对其强度进行评估。
发布于 2016-04-07 16:05:51
看看GitHub上名为zxcvbn-ios的开源库,它是为Objective重写的库:
发布于 2013-02-21 01:16:53
除了密码上有实际的英语单词,使其易受字典攻击外,您还可以简单地将其分析为抵抗纯蛮力攻击。
对字典攻击进行安全性检查时,必须使用大的单词列表。我还必须考虑到实际的字典攻击是如何工作的,如何混合字典单词,如果它们做了变体,比如用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年。
有了这个,你可以分析一个最坏的情况。它不准确,但它可以给你一个估计。
另一项重要的检查是密码哈希是否使用了salt。使用盐类来存储密码( (cryptography)是当今常见的做法。如果您不使用这种方法,那么您很容易受到彩虹表攻击( table )的攻击,在这种情况下,所有这些数学都是无用的,因为您的密码非常不安全,直到计算彩虹表的字符计数非常高(16左右)为止。
希望能帮上忙!
https://stackoverflow.com/questions/14935412
复制相似问题