是时候破解文件加密密码了——不仅仅是迭代

信息安全 密码学 密码 蛮力 密码分析 文件加密
2021-09-01 16:20:52

我经常看到破解一定长度的密码需要 x 时间。但这似乎只是遍历所有可能性所需的时间。检查每次迭代以查看它是否有效所需的时间如何?这不会使过程花费更长的时间吗?

我最感兴趣的情况是有一个文件被认为是加密的,但使用了未知的方法。(对网络密码登录不太感兴趣)。在这个文件上尝试数十亿个密码的过程是什么,它将如何影响解密的总时间?

3个回答

枚举所有可能的密码,在某个时刻将每个密码都保存在内存中,这是一个非常快速的过程。可以假设一台简单的 PC 将能够在每个时钟周期和每个 CPU 内核中构建一个这样的密码。因此,PC每秒将枚举数十亿个密码。如果你看到的数字远低于这个数字,那么它们也包括密码验证成本。

密码验证成本变化很大。通常,要验证密码的系统会存储加盐哈希密码如果哈希函数是SHA-1,那么运行在 2.4 GHz 的 Intel Core2 x86 CPU 将能够每秒(和每个内核)尝试大约 1200 万个密码:这就是处理器的速度能够对每个密码应用哈希函数(密码枚举本身不到该成本的 1%)。我的电脑是四核的,所以每秒 4800 万。我还有一个不错的 Nvidia 显卡,它可以使用简单的原始 SHA-1 进行密码散列,实际上每秒 1.6 亿次。以这种速度,所有 8 个字符的密码(包括大小写字母和数字)大约在两周内被签入。

好的密码存储方案使用迭代或级联散列,其中密码被散列数千次:这使密码验证慢了数千倍,这并不意味着用户明显减速,但使任务更加困难(即,数千对于攻击者来说,要困难得多)。

是的,这也是一个重要因素使检查密码正确性变得耗费资源至少是使攻击者更难的某种方式。这正是KeePass试图防止字典攻击所做的。

但问题是,仅基于此措施,您指望攻击者不会只是切换到速度更快的计算机/破解机器。

但是,如果您可以对该过程施加一些外部限制,它确实会有所帮助。事实上,如果适用的话,限制您的密码检查的速率是一个很好的解决方案 - 通常您会尝试 3 次“猜测”您的银行帐户密码,并且您会被锁定一段时间或无限期。尝试暴力破解。

如果我的问题是正确的,那就是暴力破解用于文件加密的密码,而不是破解散列密码的标准集合中的密码。你甚至可能不知道加密文件的格式。

因此,它与Unicity distance - Wikipedia的概念有关,并且与此处的上一个问题密切相关如果有人破解了加密,他们怎么知道他们成功了?- IT 安全

我怀疑对于大多数具有常见数据格式的文件来说,验证给定密码是否成功所需的时间通常非常快。但另一方面,如果仔细选择文件以使其看起来非常随机(例如高度压缩并去除典型的标头和元数据),实际上可能很难验证每个密码。