我使用对称加密对文件进行了加密,如下所示:
gpg --symmetric myfile
结果生成一个文件myfile.gpg
。
好的。现在让我们再次解密文件:
gpg -o myfile --decrypt myfile.gpg
我被要求输入密码,然后我看到
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
gpg: WARNING: message was not integrity protected
我不确定那里的第一行和最后一行。
- CAST5 密码是什么?它安全吗?我知道 3DES 和 AES,我知道它们是安全的。
- 为什么它没有受到完整性保护?
- 而且,我该如何解决这个问题?
答案1
背景
CAST-5是 GnuPG 使用的一种较旧的加密算法,因为在 GnuPG 最初创建时 AES 还不存在来源. 它并未被广泛使用(除了 GnuPG 出于兼容性原因)。
这WARNING: message was not integrity protected
是因为此功能在加密时默认不打开。如果打开此功能,GnuPG 可以判断文件在传输过程中是否被更改。
更新:Ubuntu/Debian 附带的 GnuPG 现代版本现在具有 MDC默认启用对于使用这些新版本签名的任何内容,您将不会再看到此消息。
解决方案
要使用更强大的 AES-256,您必须在命令行或配置文件中指定它。
命令行:添加
--cipher-algo AES256
选项,以便加密的整行变为gpg -o myfile.gpg --cipher-algo AES256 --symmetric myfile
配置文件(推荐):将以下行添加到您的
~/.gnupg/gpg.conf
配置文件中。cipher-algo AES256
我推荐这种方法,因为它将用于此用户帐户的所有未来 GPG 操作。
用户无需进行任何更改即可解密文件 —— GnuPG 会自动检测到。
请注意,使用 AES-256 密码时,消息将自动受到完整性保护。若要手动启用其他未启用完整性保护的密码(如 CAST-5),请--force-mdc
在加密时添加该选项。
甚至更好:签名!
更好的方法是使用密钥对(如果有的话)对文件进行签名。只需将选项添加--sign
到加密命令中,如下所示:
gpg -o myfile.gpg --cipher-algo AES256 --sign --symmetric myfile
这不仅可以验证文件的完整性,还可以让文件的接收者验证来源。对文件的任何更改都会导致签名检查失败。