私はgpg
Ubuntuと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.txt
OSXでは、このコマンドはUbuntuで動作しない復号化されたコンテンツも出力します。
私はいくつかの事実を見つけました。
- OSX では、
gpg
次のメッセージを出力します。gpg: Note: RFC4880bis features are enabled.
これは関連している可能性があります。 gpg
OSXのバージョンは、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
その後、メッセージを再暗号化します。y
save
私はこの問題を深く調査しました。 CFBはAEADアルゴリズムではなく、どの暗号ブロックが使用されたかを示します。 AEADは、サイダーブロックと関連プレーンテキスト(パッケージヘッダなど)を検証する方法を定義します。 MDC(修正検出コード)よりも速い代替手段です。
GPGには、キー設定で有効になっている場合は無効または強制するオプションはありません。AEAD
新しいGPGでキーを作成するときは、デフォルトでこの方法で設定されます。この問題を解決する唯一の方法は、主要なデフォルト設定を編集してAEADアルゴリズムを削除することです。MDC
AEAD
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
そして、デフォルトがどのように選択されるかを見てください。