暴力破解,是一种针对于密码的破译方法,将密码进行逐个推算直到找出真正的密码为止。例如一个已知是四位并且全部由数字组成的密码,其可能共有10000种组合,因此最多尝试10000次就能找到正确的密码。而当遇到人为设置密码(非随机密码,人为设置密码有规律可循)的场景,则可以使用密码字典(例如彩虹表)查找高频密码,破解时间大大缩短。 设置长而复杂的密码、在不同的地方使用不同的密码、避免使用个人信息作为密码、定期修改密码等是防御暴力破解的有效方法。
穷举法是指根据输入密码的设定长度、选定的字符集生成可能的密码全集,进行地毯式搜索。例如一个已知是四位并且全部由数字组成的密码,其可能共有10000种组合,因此最多尝试10000次就能找到正确的密码。理论上利用这种方法可以破解任何一种密码,但随着密码复杂度增加,破解密码的时间会指数级延长。
穷举法适用于猜解随机生成的短信验证码等,因为各种随机生成密码出现的概率是一样的,不受人的记忆影响。
字典式攻击是将出现频率最高的密码保存到文件中,这文件就是字典,暴破时使用字典中的这些密码去猜解。
字典式攻击适用于猜解人为设定的口令,因为人为设定受人方便记忆影响不同密码出现的概率是不一样的,12345678、password作为密码的概率比fghtsaer作为密码的概率要高得多。与穷举法相比,字典式攻击虽然损失了较小的命中率但节省了较多的时间。
彩虹表攻击也属于字典式攻击,但它是一种高效地破解哈希算法(MD5、SHA1、SHA256/512等)的攻击方式。
网站为了增加安全性,不会直接将用户密码存储在数据库中,而是将密码进行哈希,变成一长串毫无意义的字符,并且哈希算法是不可逆的,没有解密算法可以还原成原来的密码。面对哈希后的密码,破解的方法有两个,一是用穷举法组合出所有的密码可能,然后经哈希加密算法计算,将结果与目标哈希值进行比对,但边计算边比对会耗费海量的时间;二是提前生成可能密码与对应哈希串的对照表,但是对照表将占据海量的磁盘空间,以14位字母和数字的组合密码为例,生成的密码32位哈希串的对照表将占用5.7×10^14 TB的存储空间。
彩虹表是时间空间折中的方法,其核心思想是将明文计算得到的哈希值由R函数映射回明文空间,交替计算明文和哈希值,生成哈希链,将这个链的首尾存储在表中,中间的都删掉,用的时候临时算,那么存储的空间比原来的减少了一半,而计算次数也并没有大量增多。由于在哈希链的计算过程中引入不同的R函数,将不同的R函数用不同的颜色表示,众多的哈希链就会像彩虹一样,所以叫做彩虹表。

彩虹表
使用彩虹表进行破解,普通PC也能达到每秒1000亿次以上的惊人速度。为了增加安全性,可能会多次哈希,例如MD5后再MD5一次;或者在原始密码前后补上一串字符,增加密码长度后再哈希,学名叫加盐(salt),这些算法的结果都可以加入彩虹表中。最完善的彩虹表差不多能破解出目前网上99.9%的密码。
许多人设置的密码都过于简单,或者使用电话号码、出生日期、亲人或宠物的名字作为密码,或者在不同网站使用相同密码,这些行为导致密码很容易被破解。
在 2020 年末,NordPass 公布了 2020 年使用率最高的 200 个密码,排名靠前的几个密码分别为 123456、123456789、password、12345678、111111、123123、12345、1234567890、1234567、000000、1234 …… ,除了纯数字,还有各种数字和字母组合,例如:qwerty、abc123 和 picture1 等。
暴力破解不会造成直接的入侵,但攻击者通过暴力破解获得了系统/用户的账号和密码,以此为后续的入侵做准备。对于个人而言,直接从用户那里窃取金钱,或者窃取其身份,身份盗用可能导致进一步的财务损失。对于企业而言,通过暴力破解可以登录Telnet服务、POP3服务和MySQL服务等,登录成功将会导致用户信息泄露、文件共享、邮件泄露或无法正常发送邮件等高危事件。
系统设计时考虑以下几个方面:
---END---