ソリューション(上記の更新された回答)

ソリューション(上記の更新された回答)

私はgpgUbuntuとOSXで2.2.20を使用して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.txtOSXでは、このコマンドはUbuntuで動作しない復号化されたコンテンツも出力します。

私はいくつかの事実を見つけました。

  1. OSX では、gpg次のメッセージを出力します。gpg: Note: RFC4880bis features are enabled.これは関連している可能性があります。
  2. gpgOSXのバージョンは、Ubuntuの2.2.20よりも最新のバージョン2.3.4です。gpg

ここで何が起こっているのかを説明できる人はいますか?奇妙なことに、verboseモードでもログにエラーは表示されません。 Ubuntuに最新バージョンをインストールできないようですgpg(少なくともそうではありませんapt)。混合バージョンにもっと注意する必要がありますかgpg

答え1

私はこのエラーを見つけようと半日を過ごしました。 gopassが最初に失敗し始めたときにエラーはありませんでした。

私はUbuntuがmacosのメッセージをエンコードでき、macosがメッセージをデコードできることを発見しました。実行すると、次のことを報告します。gpg: AES256.CFB encrypted data

そして、gpg出力のデコード中にmacosで同じファイルをエンコードするときgpg: AES256.OCB encrypted data

@dave_thompson_085の推測は良いです。

ソリューション(上記の更新された回答)

要約:主なデフォルト設定でAEADを実行してgpg --edit-key ...から無効にします。setpref SHA512 SHA384 SHA256 SHA224 SHA1 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressedその後、メッセージを再暗号化します。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そして、デフォルトがどのように選択されるかを見てください。

関連情報