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


45

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

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,我知道它们是安全的。
  • 为什么不为完整性提供保护?
  • 而且,我该如何解决?

顺便说一句,您只能gpg -c myfile加密和gpg myfile.gpg解密,myfile默认情况下输出将被解密。
cprn

1
@CyprianGuerra gpg myfile.gpg将导致解密的输出发送到我的系统上的stdout ...
gertvdijk 16-10-13

有趣。我将其
设为

我从这里下载了GUI,并使用它解密了文件。有效!pgptool.github.io
Iftikhar Ahmad Dar

Answers:


69

背景

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

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


我不需要证书签名吗?
bilal fazlani '16

@bilalfazlani签名,您需要一个GnuPG密钥对,是的。如果您不想公开,则无需公开。只需与共享加密文件的对等方共享公共密钥,他们就应该与您一起验证密钥的指纹。
gertvdijk

感谢您的详细回答。您能否进一步说明如何使用密钥对?
Ben-Nabiy Derush

在接收方发生“消息不受完整性保护”,您告诉如何在发送方解决此问题。问题是如何忽略接收方的问题以便能够解密较旧的消息(在enigmail中)
ensonic,

@ ben-NabiyDerush这两篇文章可能会澄清您关于如何(以及为什么)使用公共和私有密钥对的问题。公钥密码学信任网
jpaugh,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.