直接使用 openssl 命令加密文件时的文件安全性 / 以及首先使用 SHA1 哈希密码呢?

信息安全 加密 密码 哈希 openssl 密码破解
2021-09-02 05:23:19

我一直在使用这个命令来加密文件有一段时间了:

openssl aes-256-cbc -a -salt -in secrets.txt -out secrets.txt.enc

然后我输入密码。

谁能告诉我,粗略地说,破解这个有多难?

我看到它正在使用盐,但这不应该真正提高安全性,除非您实际上将散列密码存储在某处(如网站登录数据库),对吗?正如我所说,我只是在本地加密文件,每次手动输入我的密码。

我也知道openssl只使用一次迭代来生成 IV,所以我想这不是一个非常耗时的过程!如果我错了,请纠正我。

在您看来,这到底有多安全?


额外的问题:如果我首先对密码进行 SHA1 哈希处理怎么办?

echo -n "mypassword" |openssl sha1

并在加密文件时粘贴 SHA1 哈希?我知道这会降低安全性,因为现在破解者肯定知道密码的格式(SHA1 哈希),但是您认为这在实践中会降低多少安全性?遍历所有(或足够的)SHA1 哈希是否可行?

3个回答

请参阅此答案的结尾:OpenSSL 将密码短语转换为加密密钥和 IV 的作用很弱,因为它只是对 MD5 的几次调用,还不够慢。没有办法在 OpenSSL 中简单地更改它(没有适当的命令行选项,这是硬编码的)。

预先散列你的密码不会改变太多。进行大量嵌套散列会稍微增强一些东西,但不会达到理想的水平,因为直到最后一步才会考虑盐(攻击者仍然可以进行大量可共享的预计算)。密码散列,具有可配置的慢度和盐,不是允许即兴创作的东西。到那时,完全放弃 OpenSSL 并使用更好的工具会更加安全和简单。我建议GnuPG:带有-c标志的命令行工具进行基于密码的对称加密,并且比openssl enc.

该命令的安全性直接取决于您选择的密码的安全性。截至目前,aes-256-cbc 是不可破解的,因此您可以依靠一些只能通过知道密码才能从中获取数据的人。

对密码进行哈希处理几乎没有什么区别。密码哈希用于隐藏密码,这样即使有人得到了存储的密码,他们仍然不会知道用户密码。这与加密文件完全无关。唯一的好处是它们将使您的密码短语长 40 个字符,但它只会是一个大小写和数字的字母字符。如果有人知道它会大大减少破解它的时间。使用像 pbkdf2 这样的 kdf 的好处是,将密码强制匹配到哈希需要更长的时间。因此,即使在某些时候使用散列很有用,也更容易暴力破解每个可能的散列,而不是计算散列。更好的方法是选择一个需要很长时间才能破解的密码。

您应该做的是使用 zxcvbn 选择一个好的密码并使用它。目前世界上最快的密码破解计算机每秒可以破解 3500 亿个密码,因此拥有 20 多个字符的密码加上使用 zxcvbn 以确保它不会被字典攻击之类的东西破解,将确保您的文件无法在下个千年,即使他们拥有一千台这样的计算机。

如其他答案中所述,以前版本的 openssl 使用非常弱的密钥派生过程从密码中派生加密密钥。但是,openssl 1.1.1 版现在支持使用 PBKDF2 进行密钥派生,具有随机生成的盐和多次迭代(默认为 10,000 次)的 sha256 散列。

要使用 aes-256-cbc 加密文件,请使用密码:

 openssl enc aes-256-cbc -e -salt -pbkdf2 -iter 10000 -in plaintextfilename -out encryptedfilename

解密:

 openssl enc aes-256-cbc -d -salt -pbkdf2 -iter 10000 -in encryptedfilename -out plaintextfilename

有关详细信息,请参阅https://www.openssl.org/docs/man1.1.1/man1/openssl-enc.html