GPG を使用して公開鍵ブロックから「ユーザー名」フィールドを取得するにはどうすればよいですか?

GPG を使用して公開鍵ブロックから「ユーザー名」フィールドを取得するにはどうすればよいですか?

これに多くの時間を費やした後にこのことについて質問しなければならないという事実は、少なくとも次の 2 つのステートメントのうちの 1 つが真実であることをすでに示しています。

  1. 私は何かひどく間違ったことをしています。
  2. PGP/GPG は、意図的に可能な限り扱いにくく、混乱を招くような、非常に厄介なものです。

基本的に、私のシステムは、送信時(返信として私から送信)にメッセージを自動的に暗号化できるように、送信されたすべての PGP 公開鍵ブロックを自動的にインポートします。

PGP/GPG でプレーンテキスト メッセージを暗号化する場合、どの「受信者」を使用するかをプログラムに指示します。この紛らわしい用語は、実際には GPG に保存されている公開キーの「フルネーム + 電子メール アドレス」フィールド (何らかの理由で「ユーザー名」と呼ばれています) を指します。

まあ、そのような PGP 公開鍵ブロック (これは機能します) を「インポート」する場合、「ユーザー名」フィールドが何であるかがわかりません。暗号化機能では正しい「保存された公開鍵」を参照する必要があるため、それがわからない場合は実際に使用できません。

しかし、公開キーから「ユーザー名」フィールドを実際に抽出するにはどうすればよいでしょうか。 --import コマンドを実行するとこれが返されると思われますが、私の知る限り、返されません。また、何時間もマニュアルを調べましたが、これに関連するものは何も見つかりませんでした。

記録のために言っておきますが、私は次の StackOverflow スレッドを見つけました:https://security.stackexchange.com/questions/50965/extracting-the-gpg-userid-from-the-public-key-file ... しかし、私にはまったく意味がわかりません。「解決策」では、何らかの ID がすでに認識されており、指定されていますが、それが本質的に私たちが探しているものなので、全体のポイントが無効になっているようです (ただし、「ユーザー名」フィールドです)。

あらゆる種類の「一般的な/便利な PGP/GPG コマンド」を見てきましたが、どれもこれについてまったく触れていません。えっ? これは最も基本的で重要なタスクのようです... とても混乱しています。--import コマンドでは、使用できる ID がまったく提供されないのはなぜですか? 提供されるのですが、複雑な方法で提供されるのですか?

答え1

--import コマンドでは、使用できる ID が何も提供されないのはなぜですか? 提供されるのですが、複雑な方法なのでしょうか?

そうです。ほとんどの場合、「使用可能な ID」に対する期待が間違っています。

PGP/GPG でプレーンテキスト メッセージを暗号化する場合、どの「受信者」を使用するかをプログラムに指示します。この紛らわしい用語は、実際には GPG に保存されている公開キーの「フルネーム + 電子メール アドレス」フィールド (何らかの理由で「ユーザー名」と呼ばれています) を指します。

このフィールドは「ユーザー ID」と呼ばれます。「ユーザー名」ではありません。

多くのプログラム(主にgpg、そしてそれをラップするすべてのツール)意思受信者は、電子メール アドレスのみ、またはユーザー ID の他の部分文字列の一致、完全な 160 ビット公開キー フィンガープリント、または「キー ID」(32/64 ビットの切り捨てられたフィンガープリント) によっても受け入れられます。例:

gpg --recipient [email protected] --encrypt
gpg --recipient EA708A76F932CCEAF60D364375F1129BE6E591E4 --encrypt
gpg --recipient "EA70 8A76 F932 CCEA F60D 3643 75F1 129B E6E5 91E4" --encrypt
gpg --recipient fred --encrypt
gpg --recipient 0x75F1129BE6E591E4 --encrypt

(一致を に渡すことでテストできます。gpg --list-keysgpg -k fred: )

これらのうち、指紋で受信者を指定するのが最も安全なオプションです。「ユーザー ID」フィールド (全体または一部) は、Web of Trust を使用するか、または正当な「Fred Foobar」キーと偽の「Fred Foobar」キーを区別する他の方法がある場合にのみ、安全な識別子となります。

まあ、そのような PGP 公開鍵ブロック (これは機能します) を「インポート」する場合、「ユーザー名」フィールドが何であるかがわかりません。暗号化機能では正しい「保存された公開鍵」を参照する必要があるため、それがわからない場合は実際に使用できません。

GnuPG は常にこのフィールドを出力の一部として表示しますgpg --import(64 ビットの「キー ID」とともに)。例:

$ gpg --status-fd=2 --import < /tmp/test.key
gpg: キー75F1129BE6E591E4: 公開鍵 "テストユーザー <[メールアドレス]>「インポート
gpg: 処理された合計数: 1
gpg: インポート済み: 1

これを自動化ツールで使用するには、--status-fd完全な 160 ビットのフィンガープリントを提供するを使用します。例:

$ gpg --status-fd=2 --import < /tmp/test.key
[GNUPG:]インポートOK 0 EA708A76F932CCEAF60D364375F1129BE6E591E4
[GNUPG:] キー_考慮済み EA708A76F932CCEAF60D364375F1129BE6E591E4 0
[GNUPG:] IMPORT_RES 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0

他の PGP ソフトウェア (GnuPG 以外) を使用していて、インポートしたキーに関する情報が表示されない場合は、その他の PGP ソフトウェアの UI の問題です。

関連情報