我一直使用以下命令进行加密:
gpg --output encrypted.data --symmetric --cipher-algo AES256 un_encrypted.data
和解密:
gpg --output un_encrypted.data --decrypt encrypted.data
我想知道这样做是否安全,我在网上只看到 1 个关于这个命令的参考,这里,而其他网站则在不使用--cipher-algo AES256
命令的情况下运行它,而是使用默认密码,如下所示:
gpg --output encrypted.data --symmetric un_encrypted.data
我不需要在那里添加盐吗?没有像 OpenSSL 那样提供盐的命令吗?或者是由软件自动处理的。
另外,如果我像这样运行它,没有--symmetric
:
gpg --output encrypted.data --cipher-algo AES256 un_encrypted.data
我的问题是关于如何正确运行此命令以创建安全的 SHA256 加密文件。上述命令之间有什么区别吗?
答案1
如果您使用的是稳定版本的 gpg,--cipher-algo AES256
那么它应该正确使用 AES256 进行加密(SHA256 是一种哈希)。
它会自动选择自己的盐和密钥转换轮次,因此您不必(也不能)自己选择可能较弱的选项。OpenSSL 有很多选项,但它的默认设置(尤其是它的enc
)可能不是最强的。您链接的问题实际上引用了我关于OpenSSL 与 GPG- 基本上 gpg 是有效的,它已经过几十年的测试,可以难倒大政府,而 OpenSSL 的enc
命令可能仍然没有迭代计数的选项(2017-11-02 的 1.1.0f 手册页仍然列出了该错误)。
添加一些(多个)-v
选项以查看更多详细信息,例如盐(下面的772B0F3B94AD86BA):
$ gpg -vvvvvvvvv test.gpg
gpg: using character set 'utf-8'
gpg: WARNING: no command supplied. Trying to guess what you mean ...
# off=0 ctb=8c tag=3 hlen=2 plen=13
:symkey enc packet: version 4, cipher 9, s2k 3, hash 2
salt 772B0F3B94AD86BA, count 9961472 (211)
gpg: AES256 encrypted data
# off=15 ctb=d2 tag=18 hlen=2 plen=0 partial new-ctb
:encrypted data packet:
length: unknown
mdc_method: 2
gpg: encrypted with 1 passphrase
# off=36 ctb=a3 tag=8 hlen=1 plen=0 indeterminate
:compressed packet: algo=1
# off=38 ctb=ad tag=11 hlen=3 plen=25420
:literal data packet:
mode b (62), created 1519523431, name="test",
raw data: 25405 bytes
gpg: original file name='test'
gpg: decryption okay
如果您省略,--symmetric
那么 gpg 将尝试猜测您的意思,如果文件不是 gpg 加密的,那么它将放弃/失败:
$ gpg -vvvvvvvvv --cipher-algo AES256 test
gpg: using character set 'utf-8'
gpg: WARNING: no command supplied. Trying to guess what you mean ...
gpg: no valid OpenPGP data found.
gpg: processing message failed: Unknown system error
省略该--cipher-algo
选项应使用“默认使用的对称密码是 AES-128”(如页面上man gpg
关于该选项所述),但默认值可能因版本而异,或者我相信会被您的个人设置覆盖。仅供参考,可用的算法可以与选项一起列出--version
,例如:
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
除非您喜欢它,否则您实际上并不需要该选项,gpg 将根据需要--output
添加和删除扩展。.gpg
- 仅供参考,以下是RFC2440描述 OpenPGP 使用的数据元素(至少在 1999 年,尽管我确信它几乎仍然完全相关,尤其是对字符串到密钥 (s2k) 以及迭代和盐之类的描述)