使用OpenSSL加密文件时,可以使用-pass pass:mySillyPassword,其中mySillyPassword是加密中使用的密码。此外,可以使用盐,其中-salt -s(十六进制字符串)用于指定盐。
为什么有人想要使用密码代替盐或与盐一起使用?另外,我理解只使用-salt命令会导致OpenSSL生成salt。这比用户定义的盐更好吗?如果OpenSSL随机生成一个salt,那么用户将来如何知道解密该文件的盐是什么?
答案 0 :(得分:5)
在OpenSSL中,salt将被添加到加密数据的前面,这将允许它被解密。 salt的目的是防止字典攻击,彩虹表等。以下内容来自OpenSSL文档:
如果没有-salt选项,则可以高效执行 字典攻击密码和攻击流密码 加密数据。原因是没有盐相同 密码始终生成相同的加密密钥。当盐是 正在使用加密数据的前八个字节是保留的 对于salt:它在加密文件时随机生成 解密后从加密文件中读取。
文档建议salt始终与密码一起使用,除非必须与不支持salt的早期版本兼容。
答案 1 :(得分:0)
Password
和SALT
是两件事。您必须具有带或不带盐的密码(密码是必填项,盐是可选的,但建议使用)。
用于加密的实际key
由password
和SALT
(如果提供)驱动。因此,即使使用相同的密码来加密两个文件,如果使用了SALT,那么密钥也将有所不同,并且密文当然也是如此。
密码永远不会附加或编码到密文中。相反,将盐添加到密文的开头。但是没有密码就不能用于解密密文。
为什么SALT很重要?想象一下,您使用不带SALT的相同密码来加密十个文件。对手可以生成潜在密码的密钥字典,然后一旦一个密钥成功解密了一个文件,就可以解密所有文件。使用SALT,他必须为每个SALT创建十个不同的字典,这对他来说使事情变得更昂贵,对我们而言也更安全。
让我们做一些实际的事情,我将使用openssl 1.1.1:
没有SALT的密码:
echo "secret data in my file" > plaintext.txt
openssl enc -aes-128-cbc -nosalt -k "mySecretPassword" -in plaintext.txt -out enc1.nosalt.bin
openssl enc -aes-128-cbc -nosalt -k "mySecretPassword" -in plaintext.txt -out enc2.nosalt.bin
两个密文都应该相同,因为加密密钥仅取决于密码,在两种情况下都相同。
xxd enc1.nosalt.bin
00000000: 576e a82c 0dac 92d8 5e45 5ef4 3f6f db6a Wn.,....^E^.?o.j
00000010: 5630 554f 3f28 a0de ae96 91d9 1024 d5ca V0UO?(.......$..
xxd enc2.nosalt.bin
00000000: 576e a82c 0dac 92d8 5e45 5ef4 3f6f db6a Wn.,....^E^.?o.j
00000010: 5630 554f 3f28 a0de ae96 91d9 1024 d5ca V0UO?(.......$..
密码和SALT:
openssl enc -aes-128-cbc -k "mySecretPassword" -in plaintext.txt -out enc2.salted.bin
openssl enc -aes-128-cbc -k "mySecretPassword" -in plaintext.txt -out enc1.salted.bin
即使我们使用相同的密码,由于SALT,密文也应该有所不同。请注意,Salt附加在密文的开头。
xxd enc2.salted.bin
00000000: 5361 6c74 6564 5f5f 9cfe 2d62 a2d4 70b8 Salted__..-b..p.
00000010: aee4 afb5 85c9 76a2 cb04 7e1d 27d9 94d4 ......v...~.'...
00000020: a1b3 c4d6 39b8 f5a8 c300 81b5 b6ed 4cca ....9.........L.
xxd enc1.salted.bin
00000000: 5361 6c74 6564 5f5f e73c ee5b 701b bba8 Salted__.<.[p...
00000010: fa25 c54e befa 26dc ddb1 3a2d 2bd7 a95b .%.N..&...:-+..[
00000020: bda9 56f0 4445 f229 3398 4076 1044 dad6 ..V.DE.)3.@v.D..
答案 2 :(得分:0)
对于不使用openssl / GPG解密密文的对手,SALT非常重要。 当与密码(不是密钥)匹配时,使用openssl的字典atack将解密使用该密码加密的所有文件,同意吗? 对手的主要目标是了解加密标准(AES,DES等)。