特定のファイルの暗号化に使用される(公開)鍵のリストをgpg
に尋ねる信頼できる方法が見つかりません。 1つ もっともらしい解決策 私には機能しません-myキーをリストすることはありません:
_gpg --list-only --no-default-keyring --secret-keyring /dev/null $testfile
_
私が派生した別の解決策 このスレッド はマルチステップであり、間違いなく、その脆弱性を示すいくつかのコーナーケースがあります:
_(gpg -vv --list-only $testfile 2>&1 | grep 'gpg: public key' | awk '{print $NF}' | xargs -L1 gpg --list-keys --with-colons) | egrep '^pub' | awk -F: '{print $5}'
_
さらに掘り下げた後、時間の経過とともに間違いなく壊れやすい方法でgpg
をだますことを含む別の潜在的なオプションがあります。
_gpg --dry-run --pinentry-mode cancel --output /dev/null "$testfile" 2>&1
_
誰もがそれらのどれよりも優れた解決策を持っていますか?
誰もが知っているなぜ明らかな_--list-only
_オプションが「正しい」ことをしないのですか?
重要な場合は、Mac OSXではgpg (GnuPG) 2.1.10
を使用し、Debian(Jessie)ではgpgv (GnuPG) 2.0.26
を使用します。
おそらく最も安全な方法は、OpenPGPパケットを一覧表示することです。 GnuPGの--list-packets
コマンド、または別のツールpgpdump
のいずれかを使用できます。サブキーのみを取得します。暗号化されたメッセージでは、主キーは参照されません。主キーを照会する場合は、ローカルキーリング(または、欠落している場合はキーサーバー)を使用して個別に解決する必要があります。
私の2つのサブキーに暗号化されたドキュメントの場合、出力は次のようになります(--list-only
が追加されたため、GnuPGはパスフレーズを照会しません)。
$ gpg2 --list-only --list-packets < encrypted.gpg
# off=0 ctb=85 tag=1 hlen=3 plen=524
:pubkey enc packet: version 3, algo 1, keyid CC73B287A4388025
data: [4090 bits]
# off=527 ctb=85 tag=1 hlen=3 plen=268
:pubkey enc packet: version 3, algo 1, keyid 5C88F5D83E2554DF
data: [2048 bits]
# off=798 ctb=d2 tag=18 hlen=2 plen=63 new-ctb
:encrypted data packet:
length: 63
mdc_method: 2
これにより、すべての(既知の)受信者が一覧表示されます。非表示の受信者が使用されている場合、明らかにこれは不可能です。
# off=0 ctb=85 tag=1 hlen=3 plen=524
:pubkey enc packet: version 3, algo 1, keyid 0000000000000000
data: [4093 bits]
pgpdump
の同様の出力:
Old: Public-Key Encrypted Session Key Packet(tag 1)(524 bytes)
New version(3)
Key ID - 0x0000000000000000
Pub alg - RSA Encrypt or Sign(pub 1)
RSA m^e mod n(4096 bits) - ...
-> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
Old: Public-Key Encrypted Session Key Packet(tag 1)(268 bytes)
New version(3)
Key ID - 0x5C88F5D83E2554DF
Pub alg - RSA Encrypt or Sign(pub 1)
RSA m^e mod n(2047 bits) - ...
-> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 02
New: Symmetrically Encrypted and MDC Packet(tag 18)(63 bytes)
Ver 1
Encrypted data [sym alg is specified in pub-key encrypted session key]
(plain text + MDC SHA1(20 bytes))
残念ながら、どちらも明確で安定した出力を持っていません。 GnuPGの--with-colon
オプションは、パケットのダンプには使用できません。
GnuPGは他のキーのみを出力し、自分のキーは出力しません(--list-only
がないと、代わりにキーを使用しようとします)。これが意図されたものであり、望ましい動作が議論の対象となる可能性があるかどうかは、単一の-v
/--verbose
を渡すだけで、独自のキーを一覧表示するのに十分なようです。
秘密鍵を「非表示」にしようとする最初の試みの問題は、--no-default-keyring
ステートメントの問題です。 man gpg2
から:
--no-default-keyring
キーリングのリストにデフォルトのキーリングを追加しないでください。 GnuPGはキーリングなしでは動作しないため、このオプションを使用し、
--keyring
または--secret-keyring
を介して代替キーリングを提供しない場合でも、GnuPGはデフォルトのパブリックキーリングまたはシークレットキーリングを使用します。
GnuPGalwaysは公開鍵リングを読み取ります。読み取り不能/空のシークレットキーリングを渡すだけでは不十分であり、代わりにパブリックキーリングを渡すだけで問題ありません。
gpg2 --no-default-keyring --keyring /dev/null --list-only