Sma*_*ker 4 security encryption passwords decryption hashing
我创建了一个像这样加密的哈希:$What_i_made=BCrypt(MD5(Plain Text Password))我想知道它是否可以被破解。目前,我想到了两种方法:
$What_i_made获取 MD5 Hash 然后对 MD5 Hash 进行字典攻击。但是,这需要很长时间,因为 Bcrypt 太慢了,而且 MD5 有 32 个字符长。$result=Bcrypt(MD5(random combination))和比较$result,以$What_i_made直到它们匹配。这会快得多,但我不确定如何做到这一点。我尝试过 John 和 Hashcat,但我不确定如何使用它们来完成此操作,因此我正在向社区寻求帮助。谢谢。:)顺便说一句,任何其他可行的工具也可以,我更喜欢一种允许尝试每种组合而不是字典攻击的方法。
这种复合散列与普通 bcrypt 相比没有任何好处。由于 MD5 冲突,它可能会稍微弱一些,但我认为实际上没有人可以利用它来使这种攻击更快。无论如何,没有理由使用 MD5 预先散列密码。现在,到实际答案。
你的方法 #2 不起作用,因为 bcrypt 使用集成的随机盐。对相同的输入进行两次散列将产生两个不同的散列,因为会生成不同的盐。
bcrypt 的结果实际上是一个包含实际 hash 和 salt 的数据结构。要验证密码是否正确,您必须从原始散列结构中提取原始盐并使用它来散列要验证的密码。如果生成的哈希与原始哈希匹配,则密码有效。此功能通常由 bcrypt 实现提供。
如果您要执行字典攻击,只需使用 MD5 预先散列字典中的所有条目,然后使用 MD5 字典运行 bcrypt 字典攻击。为成功破解密码反转 MD5 将非常容易,我将其留给您解决。
测试所有组合的基本蛮力攻击对于 bcrypt 是不切实际的,并且 MD5 无关紧要。
作为密码破解者,我鼓励我的所有目标都使用这种技术。;)
这似乎是一个好主意,但事实证明,对于现实世界的攻击,用 bcrypt 包装未加盐的哈希显然比简单地使用 bcrypt 更弱。
这是因为攻击者可以这样做:
bcrypt(md5($pass))语料库运行,以识别具有已知 MD5 的 bcrypt换句话说,在许多情况下,您可以简单地先破解内部哈希。而对于一个快散如MD5,这意味着可以破解任何密码首先,bcrypt对蛮力攻击性大大减弱。
(我不能相信这项技术,但它非常有效 - 特别是当用户在多个站点重复使用密码,并且攻击者可以访问泄露的密码数据时。)
这是一个更具体的单用户场景:
现在,假设攻击者想要攻击站点 B 上的所有 100,000 个 bcrypt 哈希……但攻击者还可以访问数千个其他泄漏:
是的,攻击也可以直接完成 - 通过自己对候选密码进行 MD5 处理,或者使用本机支持的工具bcrypt(md5($pass)),例如MDXfind:
$ echo "password" | tee bcrypt-md5.dict
password
$ echo -n 'password' | md5sum | awk '{print $1}'
5f4dcc3b5aa765d61d8327deb882cf99
$ htpasswd -bnBC 10 "" 5f4dcc3b5aa765d61d8327deb882cf99 | tr -d ':\n' | tee bcrypt-md5.hash; echo
$2y$10$JUbSRB0GQv.yKorqYdBaqeVYLtbZ/sRXdbPWt6u/6R3tqbaWTlQyW
$ mdxfind -h '^BCRYPTMD5$' -f bcrypt-md5.hash bcrypt-md5.dict
Working on hash types: BCRYPTMD5
Took 0.00 seconds to read hashes
Searching through 0 unique hashes from bcrypt-md5.hash
Searching through 1 unique BCRYPT hashes
Maximum hash chain depth is 0
Minimum hash length is 512 characters
Using 4 cores
BCRYPTMD5 $2y$10$JUbSRB0GQv.yKorqYdBaqeVYLtbZ/sRXdbPWt6u/6R3tqbaWTlQyW:password
Done - 1 threads caught
1 lines processed in 0 seconds
1.00 lines per second
0.07 seconds hashing, 2 total hash calculations
0.00M hashes per second (approx)
1 total files
1 BCRYPTMD5x01 hashes found
1 Total hashes found
Run Code Online (Sandbox Code Playgroud)
不幸的是(对于攻击者 ;) ),看起来约翰开膛手“巨型”版本不支持使用其动态语法的此算法:
$ john --format=dynamic='bcrypt(md5($pass))' --test
Error: dynamic hash must start with md4/md5/sha1 and NOT a *_raw version. This expression one does not
Run Code Online (Sandbox Code Playgroud)
但对于专注的攻击者来说,简单地从哈希中挖掘出这些 MD5,然后在 GPU 上以每秒数十亿个候选的速度攻击这些 MD5 会更有效率。
如果你想做这样的事情——例如,解决 bcrypt 的最多 72 个字符的问题——在 MD5 步骤中使用普通盐、站点范围的胡椒或真正的加密。
| 归档时间: |
|
| 查看次数: |
1777 次 |
| 最近记录: |