当然,标题是一个把戏。 目前,您的密码仍然是秘密的。 为确保它保持不变,请尝试对自己回答以下问题:
- 您的密码强度如何 ?
- 为了防止其他人发现它们,它们应该有多强?
- 您的密码习惯真的足够吗?
在这里,我假设您是具有一定经验的Internet用户。 您不使用简单或通用密码。 您的密码长度至少为8个字符。 您混合使用字母,数字和特殊符号。 您永远不要对多个帐户使用相同的密码,至少不要对重要帐户使用相同的密码。
尽管如此,以一定的信心回答上述问题仍然有些挑战。 而且,几年前就一直有效的答案不再成立。 现代计算机技术的进步使许多以前的假设无效,以至于整个密码概念都被视为严重受损。
在这个简短的博客系列中,我将更深入地探索密码。 在第一篇文章中,我将通过仔细研究密码强度,破解家用PC上的几个密码,最后将所有内容放在一起得出一个肯定的答案,以尝试帮助您回答上述前两个问题。 在下一篇文章中,我打算更仔细地检查密码的创建和密码习惯。
密码漏洞
确定密码对各种类型的攻击的脆弱性时,需要考虑两个因素:
- 密码强度本身,即攻击者必须测试才能破解的平均猜测次数,通常以其熵来衡量
- 攻击者检查每个猜测的有效性的速度 ,通常以“每秒密码猜测”(p / s)来衡量。
虽然第一个因素由您(用户)直接控制,但是第二个因素完全由密码的存储和使用方式决定,因此不受您的控制。 大多数安全系统通常会通过在少量尝试失败后设置超时来严格限制测试速度。 在这种情况下,测试速度很少会超过1000 p / s(通常要低得多)。 但是,系统必须以某种形式存储密码,如果此信息被盗,情况将变得更加糟糕。
为了降低上述风险,大多数系统使用诸如MD5或SHA1之类的哈希算法,仅存储密码的加密哈希 ,而不存储密码本身。 这样的哈希值很难逆转,因此掌握哈希值的攻击者无法直接恢复密码。 但是,了解哈希可以使攻击者更快地离线测试猜测。
作为用户,您是否应该担心上述最坏的情况? 好吧,对于任何个人帐户来说,可能性都不太大,但是肯定不是不可能。 仅在2012年,由于Yahoo,LinkedIn,eHarmony和last.fm等安全漏洞 ,黑客获得了数百万个密码哈希。 由于这些事件,我本年度不得不亲自更改三个密码。 如果您像许多Internet用户一样,在数十个或数百个网站上拥有帐户,那么至少在接下来的一年中,至少有一种散列落入不法之徒的可能性实际上是很高的。
在某些情况下,快速猜测总是可能的。 这是当密码用于形成密码密钥(例如用于PGP或WPA)时 。
结论是,由于您作为用户无法控制密码的存储和使用方式,因此您应该假设,黑客迟早会尝试脱机破解密码。 影响结果的两个因素再次是密码强度以及黑客可以使用的计算设备的性能。
密码强度
根据Wikipedia所述, 密码强度是衡量密码在抵抗猜测和蛮力攻击中的有效性的度量。 它估计攻击者平均需要多少试验才能破解它。 密码的强度取决于以下因素:
- 长度
- 复杂性,所使用字符集的大小
- 不可预测性,无论是随机创建还是通过更可预测的过程创建
熵
密码强度通常以熵为单位进行度量。 这只是确定性找到密码所需的猜测数的以2为底的对数。 假设具有42位熵的密码需要2 42次尝试才能在蛮力搜索中尝试所有可能性。 请注意,平均而言,攻击者需要尝试使用一半的密码才能找到正确的密码。
计算真正随机密码的熵非常容易。 如果从一组N个可能的符号中随机生成长度为L的密码,则可能的密码数为N L。 因此,熵H由以下公式给出:
在考虑并非真正随机的人为密码时,情况变得更加有趣。 为了更轻松地记住密码,人们倾向于使用自然语言中的单词,该单词具有不均匀的字母分布,以及可预见的大写形式和增加数字或特殊符号。 由于破解程序可以利用所有这些密码,因此这种密码的熵要远低于相同长度的真正随机密码。 更糟糕的是,正确估计其熵也要困难得多。
让我们以密码Admin#123为例。 该密码的长度为9,使用小写和大写字母,数字和特殊符号,换句话说,是一整套可打印的ASCII字符,大小为95。仅考虑这一点的破解程序必须输入95 9 ,或总尝试次数为630,249,409,724,609,400次,因此熵为59.1。
但是,这远非最佳。 一个更聪明的破解程序可以利用以下事实:
- “ admin”是一个常见的5个字母的英语单词。 一个基于最多5个字母长的常见英语单词的字典攻击程序必须进行少于2000次尝试,因此初始熵约为11。
- 只有首字母大写,这是非常常见的格式。 仅测试此模式的程序必须对每个单词进行两次测试,这只会使总熵增加1。
- 数字和特殊符号添加在单词的末尾,这是另一种常见模式。 一个测试单词开头或结尾的数字和特殊符号的程序必须测试每个单词11次。 这又增加了3.5位。
- 只有一个特殊符号,它是键盘上方一行中数字上方的10个符号之一。 这又增加了3.3位。
- 数字模式“ 123”也很常见。 一个测试高达此长度的通用数字模式(例如,相等或连续的数字)的程序,每个单词的尝试次数将少于100次,这将增加6.6位。
因此,假设一个相当聪明的破解程序,我们得出的估计约为25.4位。
还有其他一些更容易使用的方法来估算人工生成的密码的强度,但是在实践中并没有真正证明它们:
- 使用在线强度测试计算器,例如Rumkin.com 。 该计算器仅考虑了上述一些事实,估计Admin#123的熵为35.5。
- NIST电子认证指南提出了一种非常保守的方法,根据该方法, Admin#123的熵估计为25.5,与上面的结果非常接近。
为了获得最佳结果,我建议使用多种方法并采用中间值。 在我们的例子中,我们将最终估计出约30位的熵。
现代密码破解
不幸的是,对于用户而言,近五年来的技术进步已经引入了工具,这些工具在密码破解方面比当时已知的工具要好得多。 令人惊讶的是,这项技术进步发生在看似无关的领域,即视频游戏。
为了满足对更好的3D游戏体验不断增长的需求,nVidia和ATI不断提高普通视频卡中图形处理单元(GPU)的性能。 现代GPU具有数以千计的处理核心和数百万亿次运算的性能。 在2007年,发明了一种使用这些设备进行密码破解的方法,并且实现该功能的软件很快就变得普遍可用。
密码破解算法可以微不足道地并行化,这使得GPU特别适合此任务。 更糟的是,诸如OpenCL之类的并行计算框架和诸如VCL之类的虚拟化库允许此类算法在集群中使用大量图形卡,并且随着添加的每个GPU的破解性能几乎呈线性扩展。
安全专家才刚刚开始注意到这种威胁,到目前为止,公司在很大程度上未能做出适当的响应。 我们仍然使用与5或10年前相同的密码创建策略和准则。 最大熵为52位(如果是人工生成的,则最大熵)的“强” 8个字符的密码如何与GPU驱动的破解程序相提并论? 简而言之,它们很烂。 在下一部分中,我们将确切地看到多少。
破解软件
有几种GPU支持的密码破解程序,包括商业版和免费版。 在这里,我只想提到两个免费的替代方案:
- IGHASHGPU是Ivan Golubev在2009年至2010年开发的首批此类工具之一。 它支持有限数量的哈希算法和攻击模式,并且不再积极开发或维护。
- oclHashcat-plus可以说是当今可用的最好的非商业密码恢复工具。 它支持更多的哈希算法和攻击模式,包括规则引擎来编写您自己的复杂攻击。 它是积极开发和维护的,并且具有不断增长的相关工具生态系统,其中许多工具都是开源的。
我的家用PC上的破解测试
我的家用PC上碰巧有一个4岁的ATI Radeon HD 4870视频卡。 到目前为止,它在3D游戏中的使用并不多,但是最近,当我使用IGHASHGPU对它进行一些密码破解测试时,它经历了数小时的满载。
我尝试的第一件事是对哈希为MD5的abc123的简单蛮力搜索。 这很快结束了。
好吧, abc123并不是完全安全的密码,与SHA1相比,MD5是一个相对较弱的算法。 因此,我使用这两种算法来处理更复杂的密码。 下表列出了MD5的结果。
密码 | 字符集大小 | 长度 | 熵 | 速度(Mp / s) | 预计到达时间 | 实际时间 |
---|---|---|---|---|---|---|
abc123 | 36 | 6 | 31.0 | 1100 | 2秒 | 2秒 |
abcd1234 | 36 | 8 | 41.4 | 1100 | 41m | 32m 7s |
管理员#123 | 72 | 9 | 55.5 | 1100 | 1年200天 | ? |
Admini $> 123 | 95 | 11 | 72.3 | 1100 | 162000岁 | ? |
Admini $ tr> 123 | 95 | 13 | 85.4 | 1100 | 下一个大繁荣 | ? |
Admini $ trat0r> 12 | 95 | 16 | 105.1 | 1100 | 下一个大繁荣 | ? |
在最后两种情况下,程序实际显示“ Next Big Boom”作为估计时间。 我决定不等那么久。
SHA1的时间始终是大约3倍。 要注意的重要一点是速度:在我过时的GPU上,MD5的速度为1100 Mp / s,SHA1的速度为360 Mp / s 。 这远远优于目前最快的Intel i7处理器所能达到的。
现代GPU上的破解速度
如您所料,与现代的同类产品相比,我使用了4年的视频卡的性能没什么特别的,尤其是当它们组装成大的簇时。 以下2012年12月的文章介绍了一个25-GPU的现代ATI视频卡集群,据报道,它们可以以350 Bp / s的速度对NTLM哈希进行暴力搜索。 由于NTLM哈希值仅比MD5哈希值稍弱,因此实际上比我的GPU快300倍 。
下图显示了我的GPU的破解时间以及每个熵的怪物数量。 使用简单的蛮力搜索,时间随着熵的每一位而加倍。 为了更好地可视化,使用时间的以10为底的对数。
在一天之内,我的GPU可以破解47位熵的密码,而Monster会很乐意处理更复杂的56位熵的密码。 在Monster上找到任何52位熵的8个字符的密码的平均时间只有大约2个小时。
每$速度
如果有足够的资源,构建25个GPU集群的人也可以构建更大的集群。 因此,与其查看给定大小的任何GPU群集的速度,不如查看当前和不久的将来每美元的速度 。
为此,我首先将Ivan Golubev提供的各种ATI显卡的GPU速度估计与维基百科中ATI GPU的比较结合在一起。 对于SHA1,我看到以下图片:
卡 | 年 | 价格(元) | 单位 | 时钟 | 玻璃纤维 | 速度,Mp / s | 速度/ GFLOPS |
---|---|---|---|---|---|---|---|
ATI Radeon HD 4770 | 2008年 | 640 | 750 | 960 | 352 | 0.37 | |
ATI Radeon HD 4870×2 | 2008年 | 560 | 1600 | 750 | 2400 | 880 | 0.37 |
ATI Radeon HD 5870 | 2009年 | 1600 | 850 | 2720 | 1360 | 0.50 | |
ATI Radeon HD 5970 | 2009年 | 599 | 3200 | 725 | 4640 | 2320 | 0.50 |
ATI Radeon HD 6970 | 2010年 | 369 | 1536 | 880 | 2703 | 1408 | 0.52 |
ATI Radeon HD 6990 | 2011年 | 699 | 3072 | 830 | 5100 | 2656 | 0.52 |
ATI Radeon HD 7950 | 2012年 | 449 | 1792 | 800 | 2867 | 1493 | 0.52 |
ATI Radeon HD 7970 | 2012年 | 549 | 2048 | 925 | 3789 | 1973年 | 0.52 |
ATI Radeon HD 8970 | 2013年 | 499 | 2048 | 1000 | 4096 | ? | ? |
上面的价格是卡的发行价格。 GFLOPS值的计算方法是将处理单元乘以其时钟,然后乘以2,最后除以1000。最后一个值Speed / GFLOPS是一个因子,它表示可用GFLOPS在任何给定GPU上用于以下用途的性能如何:密码破解。 同一系列的GPU往往相同。 在过去的五年中,这个数字最初Swift增加,然后达到稳定水平。
根据上表,可以很容易地计算出2008年之后任何一年的每$速度。我决定更进一步,并将其扩展到未来5年。 以下结果还是关于SHA1的。
年 | 玻璃纤维 | 价格(元) | GFLOPS / $ | 速度/ GFLOPS | 速度/ $ |
---|---|---|---|---|---|
2008年 | 2400 | 560 | 4.29 | 0.37 | 1.59 |
2009年 | 4640 | 599 | 7.75 | 0.50 | 3.87 |
2010年 | 2703 | 369 | 7.33 | 0.52 | 3.81 |
2011年 | 5100 | 699 | 7.30 | 0.52 | 3.79 |
2012年 | 3789 | 549 | 6.90 | 0.52 | 3.59 |
2013年 | 4096 | 499 | 8.21 | 0.52 | 4.27 |
2014年 | 8.66 | 0.53 | 4.55 | ||
2015年 | 9.12 | 0.53 | 4.83 | ||
2016年 | 9.58 | 0.54 | 5.12 | ||
2017年 | 10.03 | 0.54 | 5.42 | ||
2018年 | 10.49 | 0.55 | 5.72 |
为了得出上述数字,我做出了一些任意假设:
- GFLOPS / $每年将以2013年至2011年之间的增长率递增。与2009年和2008年相比,这是保守的。
- Speed / GFLOPS每年将以2013年到2009年之间的速度增长。这也有些保守。
以上计算仅考虑了卡本身的价格,而忽略了其他成本成分,例如电费,其他硬件,人员等。另一没有考虑的因素是,使用价格更优惠的旧卡将更经济有效。价格/性能比,而不是全新的。 最后,我假设哈希值已正确腌制,并且必须通过蛮力搜索而不是彩虹表之类的其他方法来完成破解。
密码强度有多高?
作为用户,要估计您的密码应该有多强,您应该找到以下问题的答案:对于给定的哈希算法A , 要在T时间内破解密码以花费X钱 ,今天需要多少熵。在不久的将来? 请注意,变量T和X可以根据您的习惯(例如,更改密码的频率)和实际需求(例如,此特定密码保护的资源成本)进行不同选择。 由于您通常对哈希算法一无所知,因此您应该假设算法较弱,例如MD5。
使用上一节中的数字可以轻松地回答上述问题。 下图显示了当前和未来5年中,SHA1和MD5半年的T成本相对于熵的美元成本,还是对数单位。
如您所见,为了使您的密码破解完全不花费任何代价,密码至少应为50位。 同样,所有功能在65至70位之间超过1,000,000 $标记。 因此,与所使用的哈希算法无关,在未来几年内破解70位或以上的密码将花费至少数百万美元。
基于以上考虑,我认为70位或更多熵的密码足以满足我和大多数Internet用户的密码保护要求。 另一方面,我认为熵少于50位的密码不足以实现此目的。
结论
既然您已经知道70位熵的密码足够强大,那么保护您的重要帐户就很简单,只需为所有密码创建这样的密码,对吗? 这是窍门:记住和输入甚至只有一个真正的70位熵的密码都不是简单的事情。 实际上,大多数用户会发现这很困难。
为了给您和我自己一些时间进行思考,我想在这里稍作停留,并在下一篇文章中进一步探讨该主题。
参考: Stoyan Rachev博客博客上的JCG合作伙伴 Stoyan Rachev的密码 : 密码不再是秘密,第1部分 。
翻译自: https://www.javacodegeeks.com/2013/03/your-password-is-no-longer-secret-part-1.html