web-dev-qa-db-ja.com

公開鍵ファイルからのPGPキーIDの抽出

PGP公開鍵ブロックからPGP鍵IDを抽出する方法は、CLIツールまたはなんらかのAPIを介してありますか?

バイナリファイルでキーのヘキサ値を見つけましたが、位置はキーの種類/サイズに基づいていると思います。

基本的に、私はbase64形式の公開鍵を持っています。GnuPGでインポートせずに、そこから鍵IDを取得したいと思います。

21
golja

OpenPGPメッセージ形式の RFC 4880 では、公開鍵から鍵IDを計算する方法について説明しています。

セクション12.2 からの抜粋:

V3キーの場合、8オクテットのキーIDは、RSAキーの公開モジュラスの下位64ビットで構成されます。

V4キーの場合:

V4フィンガープリントは、オクテット0x99の160ビットSHA-1ハッシュであり、2オクテットのパケット長が続き、その後にバージョンフィールドで始まる公開鍵パケット全体が続きます。キーIDは、指紋の下位64ビットです。

Base64でエンコードされた公開鍵の最後の64ビットを簡単に解析できます。これは、対応する公開鍵の鍵IDです。

12
Jor-el

gpg --dry-runを使用して、変更を防ぐことができます。

次の行は、その出力にキーIDを出力します(--with-colonsなどの通常の修飾子を使用して、さらに処理するために変更できます)。 A4FF2279はここのキーIDです。

$ gpg --dry-run --import pubkey.asc
gpg: key A4FF2279: public key "[User ID not found]" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg: no ultimately trusted keys found

試してみましたが、キーがキーチェーンに保存されませんでしたが、キーIDが出力されました。ただし、--dry-runには注意してください。manページには警告があります。

   --dry-run
         Don't make any changes (this is not completely implemented).

人間が読める、機械が読める、GnuPGの異なるバージョンの非常に技術的な出力の複数のバリアントに関するより詳細な説明は、 Stack Overflowの質問にありますgpgの表示方法インポートせずに重要な詳細情報を入力しますか? 。それらのすべてがキーIDも提示します。

17
Jens Erat

gpg --with-fingerprint GPG-KEY-filename-that-you-downloaded-from-internet

例えば ​​:

wget https://artifacts.elastic.co/GPG-KEY-elasticsearch

gpg --with-fingerprint GPG-KEY-elasticsearch

4
Georgios Doumas

Jens Eratの回答で述べられている「完全に実装されていない」問題を回避するには、一時ディレクトリでgpg --homedirを使用します。プラットフォームに応じて、mktempコマンドを変更する必要がある場合があります。

gpg --homedir $( mktemp -d -t '' ) --import /tmp/somekey.asc
2
gpg user

Gpgマニュアル(gpg(GnuPG)2.2.11)から:

--show-keys

このコマンドは、OpenPGPキーを入力として受け取り、ローカルに保存されたキーに対してコマンド--list-keysが行うのと同じ方法で、それらに関する情報を出力します。さらに、リストオプションshow-unusable-uids、show-unusable-subkeys、show-notations、show-policy-urlsも有効になります。自動処理の場合と同様に、このコマンドはオプション--with-colonsと組み合わせる必要があります。

例えば:

$ gpg --show-keys docker-ce.gpg pub rsa4096 2017-02-22 [SCEA] 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 uid Docker Release (CE deb) <[email protected]> sub rsa4096 2017-02-22 [S]

ここで、9DC858229FC7DD38854AE2D88D81803C0EBFCD88はキーIDです。

2
Traz

公開鍵がインポートされた後

pgp --import PublicKeyToImport.asc

走る

pgp --list-userids

--encryptで使用するキーまたはユーザーIDを決定します。

Alg  Type Size/Type Flags   Key ID     User ID
---- ---- --------- ------- ---------- -------
1
Miha