微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算蛮力密码破解时间的确切公式是什么?

如何解决计算蛮力密码破解时间的确切公式是什么?

根据我对这些东西的了解,我得出了一个粗略的答案,但我绝不是专家,我希望有更博学的人来看看我是否有错以及哪里错了。

前提:
我们将对不遵循任何已知模式的完全随机密码使用暴力破解,并且假设我们使用的是没有已知漏洞的对称加密算法,例如 AES-256。

s: seconds to crack
c: length of the password in characters
p: hashes/s of the cracking machine
28: possible combinations for 1 byte

我的公式:


    s = 28c ÷ p

这是非常乐观的,因为不是每个字节都映射到一个可能的字符,但除此之外,公式是否正确?

解决方法

这基本上是正确的,尽管以更一般的形式考虑它可能会更好:

total_time = total_hashes / hashes_per_time

还有:

expected_time = total_time / 2

如果您想暴力破解密码(即用户可以输入的内容),那么您需要考虑可以输入的内容组合的数量。在美式键盘上,这大约是 96 个字符,因此对于 c 的最大密码长度,total_hashes 是 96^c + 96^(c-1) + 96^(c-2) + ...(与 96^c 相当接近)。如果你想粗暴的小写拉丁语,那个 26^c + <smaller terms>。如果您要暴力破解的是 AES 密钥,那么密钥中的每位有 2 个值,因此暴力破解 256 位密钥是 2^256。

对于所有线性搜索,在搜索 50% 的空间后,您有 50% 的可能性找到结果。因此,要找到“预期时间”,请除以 2。

另一方面,如果你对可能发生的事情只有一点了解(例如,用户倾向于使用更多的拉丁字母而不是符号,密码规则会减少有效模式的数量,搜索通常更有成效)长密码之前的短密码),即使您的总时间没有变化,您也可以组织您的搜索并缩短您的预期时间。

“密码”和“字符”也是非常宽泛的术语。有多少“字符”是好的(如果允许的话)?它只是一个键入的字符还是两个 UTF-16 字节或三个 UTF-8 编码字节或四个 UTF-32 编码字节或其他什么?在决定“c”代表什么以及您要搜索的空间时,这很重要。这些类型的问题就是为什么我建议从纯粹的“总/比率”的角度来思考。您可以采用最保守的答案(256^b,其中 b 是总字节数,而不是字符数),但这对于密码来说可能非常低效。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。