字典攻击和蛮力攻击有什么区别?

信息安全 密码 哈希 攻击 蛮力 字典
2021-08-15 20:41:02

有人可以解释蛮力攻击和字典攻击之间的主要区别吗?这个词rainbow table和这些有关系吗?

3个回答

相似之处 字典和蛮力攻击都是猜测攻击;他们不是直接寻找缺陷或绕过。可以是离线攻击,也可以是在线攻击。

一种网络攻击试图自动化程序到合法的系统提供输入。他们不是要在功能上创建漏洞利用,而是要滥用预期的功能

一个脱机攻击企图仿效加密/散列和要求过程的已知输出(即,你不攻击的系统,你已经拥有了散列/加密密码)


蛮力攻击

定义:尝试通过尝试所有可能的组合来确定秘密

品质:

  • 尝试次数受最大长度和每个位置尝试的字符数限制(如果考虑 Unicode 密码,则为字节)
  • 完成的时间更长,但可能的明文值的覆盖范围更大(所有可能性只有在设置为最大长度并且每个位置都考虑每个可能的字符时)

物理世界示例:给定一个要求按顺序输入三个数字的密码锁,您尝试所有可能的组合 - 例如,首先是 1-2-3,然后是 1-2-4。

请注意,蛮力攻击不一定会按顺序尝试所有选项。高级暴力攻击可能会做出某些假设,例如,复杂性规则需要大写,第一个字符更可能是大写而不是小写)。


字典攻击

定义:通常是使用预编译选项列表的猜测攻击。与其尝试所有选项,不如只尝试可能有效的完整选项。

品质:

  • 字典或可能的组合基于一些可能的值,并倾向于排除遥远的可能性。它可能基于了解有关特定目标的关键信息(家庭成员姓名、生日等)。该字典可以基于在大量用户和已知密码中看到的模式(例如,全球最可能的答案是什么)。字典更有可能包含真实的单词而不是随机的字符串。
  • 字典攻击的执行时间减少了,因为组合的数量被限制在字典列表中
  • 覆盖范围较小,特别好的密码可能不在列表中,因此会被遗漏

现实世界的例子:

  • 进入秘密俱乐部需要知道所有者的名字,你猜“Rob”或“Jake”而不是“computer”
  • 给定上面相同的锁示例,您可以尝试与锁所有者或锁所有者的朋友和家人的生日相等的组合。

交易

两种攻击之间的主要权衡是覆盖率与完成时间。如果您对密码是什么有一个合理的想法,您可以跳过不太可能的答案并在更快的时间内获得响应。这很重要,因为密码经常会更改,而且随着密码长度的增加,猜测每种可能性的时间会变得非常非常快。

杂种

当然,为了平衡权衡,有些攻击会利用这两种技术。例如,如果攻击者认为用户可能通过连接字典单词然后添加一个数字(每次他需要更改密码时递增)来形成密码,那么正在执行的猜测可能会结合单词列表然后附加数字(例如,“mypassword2014”,然后是“mypassword2015”)。Hybrids 也可能以蛮力的方式组合单词:考虑要求用户每 90 天更改一次密码,他可能会形成像“mypasswordsummer”这样的密码,然后是“mypasswordfall”。


彩虹表与字典/蛮力

彩虹表通常是仅离线攻击。在蛮力攻击或字典攻击中,您需要花时间将您的猜测发送到真实系统以离线运行算法。给定一个缓慢的散列或加密算法,这会浪费时间。此外,正在完成的工作不能重复使用。

彩虹表是预先计算的列表。您实际上是从散列/加密文本向后工作。攻击者将运行算法以在给定每个可能的输入的情况下获得每个可能的输出。输入列表可能是蛮力、字典或混合的。基于输出列表,攻击者现在有一个可重用的表,将输入映射到已知输出。

使用预先计算的表,现在可以在给定密码的加密/散列版本的情况下进行简单的查找。如果你能找到受害者的加密/散列版本,你就可以轻松地返回真正的明文密码。彩虹表用于减少冗余工作。预先完成工作并存储表格需要权衡取舍。例如,如果您只是在进行暴力破解或字典攻击,您可以在找到答案后立即停止。但是,彩虹表必须完全计算。

如果您要运行彩虹表攻击并且 5 亿条目中的第 5 个条目是您的匹配项,那么用于创建其他 499,999,995 个密码的所有努力和时间都可能被视为浪费。但是,如果您希望破解多个密码以在多次攻击中重用该表,则可以节省时间。

蛮力攻击意味着探测算法上的完整密钥空间

字典攻击意味着您仅从字典(不包含完整的密钥空间)中探测密码/密钥

蛮力攻击主要用于加密算法本身(您也可以将其用于密码,但大多数时候使用字典攻击)。

字典攻击主要用于针对密码。加密算法很少受到字典攻击的攻击,因为大多数时候它们使用随机数作为密钥(如果您使用弱 PRNG,那么字典攻击可能是可行的)。这种攻击的典型字典将包含最常用的密码。

彩虹表用于反向攻击散列密码。这意味着我有一个可能包含哈希值的表并查找匹配的密码。

为了防止使用彩虹表的攻击,每个散列密码应该不同地加盐,因为我需要一个彩虹表来处理每个散列和每个盐。

字典攻击:攻击者尝试已知或常用密码的列表。因此,她/他会尝试密码列表(字典)。一般来说,字典攻击之所以成功,是因为许多人倾向于选择简短易记的密码,例如superman,harrypotter等。

蛮力攻击:不使用密码列表;相反,它旨在尝试密码空间中的所有可能组合。

例如,假设密码是四位数的 PIN 码。

在这种情况下,字典攻击将尝试使用常用 PIN 码列表,例如:012320004444(请参阅最常见的 PIN 码列表)。

相反,暴力攻击会尝试所有可能的 PIN 码,这意味着它将尝试 10^4 = 10000 次,直到以 100% 的概率找到正确的 PIN 码。(4 因为我们有 4 个数字,而 10 因为每个数字可以是 0 到 9 之间的任何值)

理论上,蛮力攻击会发现密码,但是尝试所有可能的组合可能需要很长时间。通常攻击者从字典攻击开始,如果失败,他会转向暴力攻击。

彩虹表:与暴力破解或字典攻击没有直接关联。不要以纯文本形式存储密码(在数据库或文件中),这一点非常重要。使用安全散列函数对密码进行散列scrypt,并存储此散列。彩虹表攻击是一种旨在从散列值中猜测密码纯文本的方法(为了阻止攻击,在散列时添加唯一值 - 盐)。