使用 GPG 对称加密时如何解决“警告:消息未受到完整性保护”?

ger*_*ijk 45 encryption data-integrity gnupg aes

我使用对称加密对文件进行了加密,如下所示:

gpg --symmetric myfile
Run Code Online (Sandbox Code Playgroud)

结果是一个文件myfile.gpg

好吧。现在让我们再次解密文件:

gpg -o myfile --decrypt myfile.gpg
Run Code Online (Sandbox Code Playgroud)

我被要求输入我设置的密码,然后我看到

gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
gpg: WARNING: message was not integrity protected
Run Code Online (Sandbox Code Playgroud)

我不确定那里的第一行和最后一行。

  • 什么是 CAST5 密码,它是否安全?我知道 3DES 和 AES,我知道它们是安全的。
  • 为什么它不受完整性保护?
  • 此外,我该如何解决这个问题?

ger*_*ijk 70

背景

CAST-5是 GnuPG 使用的较旧的加密算法,因为在 GnuPG 最初创建source时,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
    
    Run Code Online (Sandbox Code Playgroud)
  • 配置文件(推荐):将以下行添加到您的~/.gnupg/gpg.conf配置文件中。

    cipher-algo AES256
    
    Run Code Online (Sandbox Code Playgroud)

    我推荐这种方法,因为它将用于此用户帐户上的所有未来 GPG 操作。

用户解密文件没有任何改变 - GnuPG 会自动检测到这一点。

请注意,使用 AES-256 密码,消息会自动受到完整性保护。要在其他未启用的密码(如 CAST-5)上手动启用完整性保护,请在加密--force-mdc时添加该选项。

更好的是:签名!

更好的方法是使用您的密钥对(如果有的话)对您的文件进行签名。只需将--sign选项添加到加密命令中,如下所示:

gpg -o myfile.gpg --cipher-algo AES256 --sign --symmetric myfile
Run Code Online (Sandbox Code Playgroud)

这不仅可以验证文件的完整性,还可以让文件的接收者验证来源。对文件的任何更改都会导致签名检查失败。