解决方案(更新以上答案)

解决方案(更新以上答案)

我正在使用gpg2.2.20 在 Ubuntu 和 OSX 上使用我的 PGP 密钥来加密纯文本密码文件(两者都具有相同的 PGP 密钥)。我有一个加密文件,在 Ubuntu 中无法解密,但在 OSX 中可以解密。我还有一堆文件,两者都可以很好地解密。

这是我正在运行的内容(以及 Linux 上的整个详细输出):

$ gpg --verbose -o bad.txt --decrypt bad.gpg 
gpg: public key is 7XXXXXXXXXXXXXXX
gpg: using subkey 7XXXXXXXXXXXXXXX instead of primary key 5XXXXXXXXXXXXXXX

以下是 OSX 中相同命令的输出:

gpg: Note: RFC4880bis features are enabled.
gpg: public key is 7XXXXXXXXXXXXXXX
gpg: using subkey 7XXXXXXXXXXXXXXX instead of primary key 5XXXXXXXXXXXXXXX
gpg: encrypted with rsa4096 key, ID 7XXXXXXXXXXXXXXX, created 2022-01-23
      "My Name <[email protected]>"
gpg: AES256.OCB encrypted data
gpg: original file name='FNnyaS-bad.txt'

bad.txt在 OSX 上,该命令还会输出在 Ubuntu 中不起作用的解密内容。

我注意到几件事:

  1. OSXgpg输出此消息:gpg: Note: RFC4880bis features are enabled.这可能是相关的。
  2. OSX 的版本是 2.3.4,比 Ubuntu的 2.2.20gpg更新。gpg

谁能解释一下这里发生了什么?奇怪的是,即使在详细模式下,日志也不会出现任何错误。我似乎无法在 Ubuntu 上安装较新版本gpg(至少无法安装apt)。我只需要更加小心混合gpg版本吗?

答案1

我花了半天时间试图找出这个错误。当它第一次开始失败时,gopass 上没有错误。

我设法发现 Ubuntu 能够将消息编码到 macos,并且 macos 能够对其进行解码。当它执行时,它会报告:gpg: AES256.CFB encrypted data

而在解码 gpg 输出期间在 macos 上对同一文件进行编码时gpg: AES256.OCB encrypted data

所以@dave_thompson_085 有一个很好的猜测。

解决方案(更新以上答案)

总括:通过运行gpg --edit-key ...然后setpref SHA512 SHA384 SHA256 SHA224 SHA1 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed然后在您的关键首选项中禁用 AEAD 。然后重新加密您的消息。ysave

我已经深入探讨了这个问题。 CFB 不是 AEAD 算法,它只是指示使用了哪个密码块。 AEAD 定义了一个苹果酒块和一种验证相关纯文本(如包标头等)的方法。它是 MDC(修改检测代码)的更快替代方案。

如果在您的密钥首选项中启用,GPG 没有禁用AEAD和强制的选项,并且当您使用新的 gpg 生成密钥时,默认情况下会如此设置。解决此问题的唯一方法是编辑关键首选项以删除任何 AEAD 算法。MDCAEAD

如何编辑密钥首选项以使其与 gpg 2.2.x 兼容

我们先做一个小测试,看看AEAD是否被使用:

$ [email protected]
$ echo test | gpg --encrypt --recipient $KEY | gpg --verbose --decrypt
...
gpg: AES256.OCB encrypted data
gpg: original file name=''
test

如您所见,正在使用 OCB。现在让我们编辑关键首选项。您可以使用 showpref 显示您当前的偏好

$ gpg --edit-key $KEY

gpg> showpref
[ultimate] (1). Piotr Czapla <[email protected]>
     Cipher: AES256, AES192, AES, 3DES
     AEAD: OCB
     Digest: SHA512, SHA384, SHA256, SHA224, SHA1
     Compression: ZLIB, BZIP2, ZIP, Uncompressed
     Features: MDC, AEAD, Keyserver no-modify

调整以下命令以匹配您的首选项,但禁用 AHEAD。在更改首选项之前,它会要求您确认。在可能的情况下,这个列表可以解决问题:setpref SHA512 SHA384 SHA256 SHA224 SHA1 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed

一旦您确认更改并保存密钥。

gpg> setpref SHA512 SHA384 SHA256 SHA224 SHA1 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed

Set preference list to:
     Cipher: AES256, AES192, AES, 3DES
     AEAD:
     Digest: SHA512, SHA384, SHA256, SHA224, SHA1
     Compression: ZLIB, BZIP2, ZIP, Uncompressed
     Features: MDC, Keyserver no-modify
Really update the preferences? (y/N) y

sec  ed25519/285CE99FAA64E280
     created: 2022-07-20  expires: 2025-07-19  usage: SC
     trust: ultimate      validity: ultimate
ssb  cv25519/C2C95918A535E298
     created: 2022-07-20  expires: 2025-07-19  usage: E
ssb  ed25519/CDEBF13E9DE11878
     created: 2022-07-21  expires: 2027-07-20  usage: A
[ultimate] (1). Piotr Czapla (api key used to decrypt gopass on less secure instances) <[email protected]>

gpg> save

然后测试aead没有被使用的:

$ echo test | gpg  --encrypt  --recipient $KEY | gpg --verbose --decrypt
...
gpg: AES256.CFB encrypted data
gpg: original file name=''
test

CFB并观察如何选择默认值。

相关内容