密码强度库 – 目标C

我正在寻找一个可以估计密码强度的开源组件。 在网上search,我发现这非常有趣: https : //github.com/lowe/zxcvbn (和更多的细节: https : //tech.dropbox.com/2012/04/zxcvbn-realistic-password-strength -estimation / )。

给我留下深刻印象的是能够分析给定的密码,比较“常见的密码,常见的美国名字和姓氏,常见的英文单词,以及常见的模式,如date,重复(aaa),序列(abcd)和QWERTY模式。

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

最终,经过一年多的时间,伟大的Mattt Thompson刚刚向GitHub发布了自己的图书馆,用于validation密码强度,validation规则以及评估实力。

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

看一下GitHub上的开源库zxcvbn-ios ,它是针对Objective-C重写的:

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

除了在密码上有实际的英文单词,可以使其易受字典攻击的影响,你可以将其简单分解为对抗纯粹暴力攻击的抵制。

检查字典攻击的安全性需要使用大量的单词表。 我还必须考虑到实际的字典攻击是如何工作的,并且混合字典中的单词,如果他们做了像4的交易A这样的变化。

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

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

如果只有小写字母(其中大约有25个,取决于语言)和一个N个字符的密码,那么您将拥有25个N个不同组合的威力。 所以例如一个小写的6个字母的密码有244140625种不同的可能性。

现在让我们添加大写字母,所以另外25(50总)。 在一个6字母的密码,我们将有50的权力6组合,15625000000。

添加一些数字? 那么另外10个字符。

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

所以基本上你会做的是你分析一个密码,并检查它是否有小写字母(可能总是),所以你添加25的字符集计数。 有大写字母吗? 伯爵另有25人。 它有任何数字吗? 伯爵另有10人。 它有其他的符号吗? 另外20个到了。

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

现在计算密码的大小,并做math。 characterSetCount为nCharacters的权力。

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

现在,哪个哈希algorithm用来存储密码?

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

得到你的半个组合数,并将其除以2亿,并得到攻击者用这个硬件和方法得到你的密码的秒数。 举个例子,我们谈到的所有types的字符的10个字符的密码大约需要26843545600秒。 大概425年。

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

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

希望能帮助到你!