这是为了找到分组密码的密码。可以使用以下方法解密测试生成的密码
$ openssl enc -d -aes-256-cbc -md md5 -a -in filename
它通过控制台提示输入密码。
我读过 openssl-enc 手册页,并解码了每个选项。我对加密和解密中的 MD5 哈希函数以及 AES 算法感到困惑。
我想在 hashcat 中执行等效操作来获取此密码的密码
我知道这并不能破解 AES 密码。我必须攻击密钥派生函数,也就是 MD5。
我应使用什么 hashcat 哈希模式,或者如何使用 hashcat 对其 KDF 进行暴力攻击来尝试此密码的多个密码?
答案1
因此,您需要注意的是,这不是一个简单的“暴力破解 MD5”操作。相反,一般的暴力破解过程应该是:
- 生成输入“密码”
- 通过 OpenSSL KDF 运行“密码”(以 MD5 加盐哈希格式,它是修改后的 PKCS#5 PBKDF1)获取 AES 密钥和 IV
- 尝试解密 AES 数据
- 检查解密是否成功(!!!)
我们在这里遇到的最重要的问题是#4。简单来说,没有可靠的方法可以确定任意 openssl-enc 解密是否成功- 它可以找到一把钥匙想是正确的,但实际得到的数据是垃圾。OpenSSL 不明确存储任何验证数据;相反,它依赖于最后一个块的填充格式是否有效. 由于缺乏有关预期解密数据的任何进一步信息,因此最基本的验证只能依靠运气。
虽然如果启用了填充,解密操作可能会产生错误,但它并不是输入数据或密钥是否正确的有力测试。随机块具有正确格式的概率大于 1/256,并且早期输入数据的问题不会产生最终的解密错误。
尽管如此,开放请求为 hashcat 添加此类支持。一个插件可用。请注意,要使用此您必须提供解密数据的已知标头,因为这是用来检查猜测的密钥是否正确的。
例如,ZIP 文件的已知标头是PK
。 SQLite 数据库的已知标头是SQLite format 3.
。 任意文本文件没有明显的已知标头(...祝你好运?)。 等等,等等。