11

使用 OpenSSL 加密文件时,可以使用 -pass pass:mySillyPassword,其中 mySillyPassword 是加密时使用的密码。此外,还可以使用盐,其中 -salt -s(十六进制字符串)用于指定盐。

为什么有人要使用密码而不是盐或与盐结合使用?另外,我知道仅使用 -salt 命令会导致 OpenSSL 生成盐。这比用户定义的盐有什么好处?如果OpenSSL随机生成一个salt,那么用户以后怎么知道salt是什么来解密文件呢?

4

4 回答 4

11

在 OpenSSL 中,盐将被添加到加密数据的前面,这将允许对其进行解密。salt的目的是防止字典攻击、彩虹表等。以下来自OpenSSL文档:

如果没有 -salt 选项,则可以对密码执行有效的字典攻击并攻击流密码加密数据。原因是没有盐,相同的密码总是生成相同的加密密钥。当使用 salt 时,加密数据的前 8 个字节为 salt 保留:它在加密文件时随机生成,并在解密时从加密文件中读取。

该文档建议始终将盐与密码一起使用,除非需要与不支持盐的早期版本兼容。

于 2013-06-25T12:46:13.547 回答
6

PasswordSALT是两个不同的东西。您必须有一个带或不带盐的密码(密码是强制性的,而盐是可选的,但建议使用)。

key用于加密的实际值由password和驱动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?(.......$..

密码和盐:

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..
于 2019-03-27T03:40:16.173 回答
0

SALT 对于不使用 openssl/GPG 来解密您的密文的对手很重要。当匹配密码(不是密钥)时,使用 openssl 的字典攻击将解密所有使用此密码加密的文件,同意吗?攻击者的主要目标是了解加密标准(aes、des 等)。

于 2020-04-07T19:56:00.983 回答
0

使用 SALT,它只能提高一点点安全性:如果黑客可以找到一个加密文件的密码,并且如果用户对所有文件使用相同的密码,那么无论是否使用 SALT,黑客都会被能够解密所有文件,无论它们是否具有不同的 SALT。

于 2021-12-09T22:05:36.367 回答