我应该如何根据***更改加密警告:使用了不赞成使用的密钥派生


16

当我加密或解密文件时,我得到 *** WARNING : deprecated key derivation used. Using -iter or -pbkdf2 would be better.

我不明白这意味着什么,我应该如何更改我的程序。你可以帮帮我吗?我用加密openssl des3 <input >output.des3和解密 openssl des3 -d <input.des3 >output

关于环境

Ubuntu 18.10

~$ openssl version OpenSSL 1.1.1 11 Sep 2018


1
不再使用3DES作为加密方法。警告只是建议您使用另一种方法,有关更多详细信息,请参阅crypto.stackexchange.com/questions/51629/…
guiverc

1
任何一种密码都会发生该错误。您需要添加-pbkdf2来加密和解密命令。
Daniele Dellafiore

抱歉,请您举例说明如何在命令中添加-pbkdf2吗?我不知道应该如何添加。
汤米·波拉克(TommyPollák)”

1
在您的示例中,您只需要执行openssl des3 -e -pbkdf2 < input > output.des3openssl des3 -d -pbkdf2 < input.des3 > output。我也碰巧同意第一条评论,即您应该使用不同的分组密码而不是3DES(DES始于1977年),一种简单的方法就是交换这些命令中aes256当前的位置des3,以使用AES( 256位AES符合当前的安全标准。
joelhardi

谢谢!现在可以使用aes256正常工作,而不会发出警告。因此,问题得到了解答。
汤米·波拉克(TommyPollák)”

Answers:


12

比较两个主要和最新版本的OpenSSL的Synopsys,让我引用手册页。

OpenSSL 1.1.0

openssl enc -ciphername [-help] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]

OpenSSL 1.1.1

openssl enc -cipher [-help] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a] [-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-iter count] [-pbkdf2] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-rand file...] [-writerand file] [-engine id]

显然存在更大的差异,即考虑到此问题,在1.1.0中缺少这两个开关:

  • pbkdf2

  • iter


您现在基本上有两个选择。忽略警告或将加密命令调整为类似以下内容:

openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 100000 -salt -in InputFilePath -out OutputFilePath

这些开关在哪里:

  • -aes-256-cbc是您应该使用的最大保护等级或128位版本,3DES(Triple DES)早已被废弃,请参阅 NIST在2017年弃用了Triple DES,而所有现代CPU都大大加快了AES的使用; 您可以简单地验证您的CPU是否设置了AES-NI指令,例如使用grep aes /proc/cpuinfo赢,赢

  • -md sha512 是SHA-2函数系列比SHA-256更快的变体,但它可能更安全。赢,赢

  • -pbkdf2:使用PBKDF2(基于密码的密钥派生功能2)算法

  • -iter 100000 引用手册页覆盖了密码的默认迭代次数:

    在派生加密密钥时,对密码使用给定的迭代次数。较高的值会增加暴力破解生成的文件所需的时间。使用此选项,可以使用PBKDF2算法来导出密钥。


1
然后,当如何解密使用openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 1000 -salt -in InputFilePath -out OutputFilePath
升明志

1
通过简单地添加-d以下命令:openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 1000 -salt -d -in InputFilePath
Eduard Itrich

1
我很确定此建议存在一些问题。根据en.wikipedia.org/wiki/Key_derivation_function,您想要最慢的密钥派生算法。换句话说,不要使用sha512按照en.wikipedia.org/wiki/PBKDF2- in the year 2000 the recommended minimum number of iterations was 1000, but the parameter is intended to be increased over time as CPU speeds increase因此,我建议迭代次数介于10,000和100,000之间,而不是
1000。– oskarpearson

@oskarpearson是的,我刚刚读过它。更新答案。
LinuxSecurityFreak

@oskarpearson那么您建议使用什么哈希?
安东尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.