我正在使用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
Run Code Online (Sandbox Code Playgroud)
以下是 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 <my-email@gmail.com>"
gpg: AES256.OCB encrypted data
gpg: original file name='FNnyaS-bad.txt'
Run Code Online (Sandbox Code Playgroud)
bad.txt在 OSX 上,该命令还会输出在 Ubuntu 中不起作用的解密内容。
我注意到几件事:
gpg输出此消息:gpg: Note: RFC4880bis features are enabled.这可能是相关的。gpg版本是 2.3.4,比 Ubuntu 的gpg2.2.20 更新。谁能解释一下这里发生了什么?奇怪的是,即使在详细模式下,日志也不会出现任何错误。我似乎无法gpg在 Ubuntu 上安装较新版本(至少无法安装apt)。我只需要更加小心混合gpg版本吗?
我花了半天时间试图找出这个错误。当它第一次开始失败时,gopass 上没有错误。
我设法发现 Ubuntu 能够将消息编码到 macos,并且 macos 能够对其进行解码。当它执行时,它会报告:gpg: AES256.CFB encrypted data
而在解码 gpg 输出期间在 macos 上对同一文件进行编码时gpg: AES256.OCB encrypted data
所以@dave_thompson_085 有一个很好的猜测。
TLDR:
gpg --edit-key ...通过运行然后setpref SHA512 SHA384 SHA256 SHA224 SHA1 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed然后y然后在您的关键首选项中禁用 AEADsave。然后重新加密您的消息。
我已经深入探讨了这个问题。CFB 不是 AEAD 算法,它只是指示使用了哪个密码块。AEAD 定义了一个苹果酒块和一种验证相关纯文本(如包标头等)的方法。它是 MDC(修改检测代码)的更快替代方案。
如果在您的密钥首选项中启用, GPG 没有禁用AEAD和强制的选项,并且当您使用新的 gpg 生成密钥时,默认情况下会如此设置。解决此问题的唯一方法是编辑关键首选项以删除任何 AEAD 算法。MDCAEAD
我们先做一个小测试,看看AEAD是否被使用:
$ KEY=me@piotrczapla.com
$ echo test | gpg --encrypt --recipient $KEY | gpg --verbose --decrypt
...
gpg: AES256.OCB encrypted data
gpg: original file name=''
test
Run Code Online (Sandbox Code Playgroud)
如您所见,正在使用 OCB。现在让我们编辑关键首选项。您可以使用 showpref 显示您当前的偏好
$ gpg --edit-key $KEY
gpg> showpref
[ultimate] (1). Piotr Czapla <me@piotrczapla.com>
Cipher: AES256, AES192, AES, 3DES
AEAD: OCB
Digest: SHA512, SHA384, SHA256, SHA224, SHA1
Compression: ZLIB, BZIP2, ZIP, Uncompressed
Features: MDC, AEAD, Keyserver no-modify
Run Code Online (Sandbox Code Playgroud)
调整以下命令以匹配您的首选项,但禁用 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) <me@piotrczapla.com>
gpg> save
Run Code Online (Sandbox Code Playgroud)
然后测试aead没有被使用的:
$ echo test | gpg --encrypt --recipient $KEY | gpg --verbose --decrypt
...
gpg: AES256.CFB encrypted data
gpg: original file name=''
test
Run Code Online (Sandbox Code Playgroud)
并观察如何CFB选择默认值。
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |