2016-08-05 80 views
1

解密秘密在UNIX系统上,我加密使用OpenSSL AES-256-CBC文件file1openssl aes-256-cbc -a -salt -in file1 -out file1.enc -k secret检查/验证的OpenSSL

解密通过openssl aes-256-cbc -d -a -in file1.enc -out file1.dec -k secret

做有没有办法来验证在真正开始解密过程之前,秘密是正确的?

我的研究至今未显示任何有用的结果。

+0

Stack Overflow是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布有关Dev Ops的问题?](http://meta.stackexchange.com/q/134306)。 – jww

回答

1

如果您拥有的只是加密的数据,那么在解密之前无法确定密钥是否正确。除了通过检查数据是否有意义之外,在解密之后确定密钥是否正确也是不可能的,这是你所期望的。

您将不得不添加一些其他方法来确定密钥是否是正确的。

0

你要求的是检查完整性和/或真实性。 CBC模式下的AES不提供这些功能,只有普通的加密/解密。

如果您需要它,您应该从CBC切换到GCM模式。它在解密时提供真实性和完整性检查。因此,如果解密成功,您确信解密结果是正确的。

0

如果这是你的整个系统,那么不,OpenSSL没有任何机制在解密之前检查密码(或者在许多情况下甚至在解密之后)。但是,您可以构建这样的系统,如果您受限于此,甚至可以将其构建为OpenSSL。

如果我们将它从OpenSSL中构建出来,那么解决它的绝对最简单的方法就是使用相同的密码来加密一些已知的数据。一起粘贴加密的已知明文和加密的实际明文。你可以用多种方法把它们粘在一起;命令行表单中最简单的方法是将它们粘在单独的文件中,然后将它们结合在一起。

当你准备好解密时,撕开它们,尝试解密已知明文。如果它解密正确,那么你是黄金,你可以解密你的真实数据。

OpenSSL没有特别强大的KDF,所以这种方法可以使蛮力密码破解变得更容易一些(尽管没有文件中有一些已知头文件更容易)。

但是,这并不能保证密文不变。攻击者仍然可以修改它,而OpenSSL并不总是知道。有办法通过进一步修改格式来解决这个问题,但openssl不提供任何我知道的直接方式。这里最好的方法取决于你的确切限制。