实际的“字典创作”
即确定您的基本词典和通用规则是否会产生他们想要的密码
首先,要意识到当我们谈论密码破解时,“字典”是指一个基本密码候选列表,它们可以单独使用,或者——更有效地——作为基于规则的攻击的一部分。
Hashcat 论坛有一个词表位置列表。为了防止链接失效,其中一些是:
http://www.skullsecurity.org/wiki/index.php/Passwords
从这里开始
phpbb 列表非常棒,只有 184,389 个单词
Rockyou 列表是一个很好的下一步,14,344,391 字
- 在不同的地方也有不同大小和其他标准的过滤rockyou变体;如果你愿意,可以环顾四周。
http://hashcrack.blogspot.de/p/wordlist-downloads_29.html
- 包括指向更大的 Purehate 和 Xploitz 列表以及许多站点的链接
http://packetstormsecurity.org/Crackers/wordlists/
- 许多旧的备用名单;如果您愿意,可以将它们一起折腾,这些已经存在很长时间了。
http://www.md5this.com/tools/wordlists.html
有关规则回字典攻击可以做什么的一些指导,请查看Hashcat了解它支持的规则类型,并注意当您拥有明文用户密码时,应用许多规则非常简单、非常快速。撤销”; 即,给定一个实际的密码,它可以很容易地来自一个基本的破解字典单词加上一些规则吗?
例如:
- 您可以使用简单的 UPPER() 等效项和全大写字典来处理所有大写/小写规则 - 如果找到它,它就很弱。(杰奎琳)
- 纯粹为了满足长度最小值而添加/添加数字是一种简单的模式匹配 - 如果最后/前 N 个字符是数字,并且剩余长度不够,那么它很弱。(里迪克123)
- 从开头/结尾删除 N 个数字,将其大写,然后检查字典中的余数 (JacQueLine12)
- 以上,但 N-1 个数字和/或符号 (#1JacQueLine)
- 以上,但日期格式。(JacQueLine02121995)
- 如果最后/前N-1个字符是数字,最后/第一个是符号,剩下的长度不够,就是弱。(!JacQueLine1)
- 一次取出一个字符,看看它是否与字典匹配。(杰奎琳)
- 结合其中的一些。
- 扭转所有这些。
将非常常见的字典单词作为子集进行模式匹配,拉出该子字符串,然后再次搜索;找出组合攻击中键空间的限制
正确马电池主食
- 正确:第 1813 个最常用的英语单词,phpbb 上的第 16828 行,Ubuntu 美式英语 small 上的第 9871 行。
- horse:第 1291 个最常用的英语单词,phpbb 上的第 14820 行(horses 在第 1723 行!),Ubuntu 美式英语 small 上的第 21607 行。
- 电池:第 3226 个最常用的英文单词,phpbb 上的第 7775 行,Ubuntu 美式英语 small 上的第 3644 行。
主食: 6个字符,全部小写,不在前5000个最常用的单词中。phpbb 上的第 40524 行(订书钉在第 3852 行!),Ubuntu 美式英语小版上的第 42634 行。
因此,correcthorsebattery会通过拉出前 4000 个英文单词来拉出所有三个单词,因此适合 4000^3 的键空间。 correcthorsebatterystaple通过了该测试,甚至达到了 4000^4 名(仅因为订书钉)。
许多破解者从暴力破解小密码开始,然后是小词表和大规则集,然后是大词表——据我所知,最大的超过 30GB,几乎包括在给定流行论坛上发现的任何人破解的所有密码,加上许多其他大型词汇表。
为自己找到一个快乐的媒介——足够快、足够高性能、足够大并且有足够的“规则”来删掉破解软件的前几次快速通道——如果你使用的 PBKDF2 有足够的(数十万次)迭代,或者 BCrypt 或SCrypt 具有足够高的工作因子,那么只有小字典 + 大规则集和大字典 + 小规则集将是几年的实际攻击。
减少用户反感
你会在某种程度上激怒用户群,就像你说他们需要满足你的复杂性规则时所做的一样。
当你说“密码”、“密码”、“P@$$w0rd”、“P@$$w0rd1”、“P@$$w0rd123”,甚至“P@$$w0rd123!”时 是错误的密码,你会惹恼他们。当您说“Jennifer2007”是一个错误密码时,他们会感到沮丧(也许 Jennifer 也会感到沮丧!)。尽你所能管理他们的挫败感,并简单地接受一些。就我个人而言,我会建议你明确一点——告诉他们他们的密码是已知破解词典中的一个单词加上两个数字,这是正常的破解规则!
请注意,添加此密码的一个主要目的是让用户了解什么是弱密码,以便他们有一些了解以减轻他们的挫败感。
作为教育的一部分,也许向他们展示一些您生成的通过您自己的测试的替代方案,如果您不及格他们的密码,所以一定要让用户知道他们击中了哪个特定规则,无论是“密码是密码猜测单词列表中的一个单词攻击者”或“密码是攻击者使用的密码猜测词表中的一个词,加上一个切换大小写规则,最后加上一个数字”。
1) 完全随机的密码
2) 完全随机的密码翻译成泡泡或其他可发音的子集
3) 正确的horsebatterystaple 类型密码,但使用更长且不常见的单词。以Ubuntu美式英语疯狂词典为例,减去美式英语小词典中的所有单词,选出N个长度至少为7个字符的单词。这使您没有任何真正简短的单词,也没有最常用的单词。
4) 1、2 和/或 3 的混合。
然后,如果他们愿意,您的用户可以简单地选择您向他们展示的内容(当然,通过 HTTPS,您可以使用最好的密码套件)。
就个人而言,我也强烈建议提高你的长度限制;我会推荐大约 14 个,但对于大多数用户群来说,这太长了。至少尝试 12 甚至 10 个,这样一个完全随机的密码可能在最小长度和字符集下具有少量价值。
其中大部分来自我对我应该拒绝明显糟糕的密码的回答吗?,虽然这个答案有更多的数学和解释为什么涉及。