インポートせずにgpgキーの詳細を表示するにはどうすればよいですか?


131

postgresql aptリポジトリのgpgキーのコピーがあり、ファイルに含まれているgpgキーの詳細を表示したいと考えています。キーリングにインポートしなくても可能ですか?

回答:


149

OpenPGPキーデータを見ると、いくつかの詳細レベルがあります。基本的な概要、この概要の機械可読出力、または個々のOpenPGPパケットの詳細な(そして非常に技術的な)リストです。

基本的なキー情報

OpenPGPキーファイルの短いピークの場合、パラメーターとしてファイル名を渡すか、STDINを介してキーデータをパイプすることができます。コマンドが渡されない場合、GnuPGは実行したいことを推測しようとします-キーデータの場合、これはキーの概要を出力します:

$ gpg a4ff2279.asc
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub   rsa8192 2012-12-25 [SC]
      0D69E11F12BDBA077B3726AB4E1F799AA4FF2279
uid           Jens Erat (born 1988-01-19 in Stuttgart, Germany)
uid           Jens Erat <jens.erat@fsfe.org>
uid           Jens Erat <jens.erat@uni-konstanz.de>
uid           Jens Erat <jabber@jenserat.de>
uid           Jens Erat <email@jenserat.de>
uid           [jpeg image of size 12899]
sub   rsa4096 2012-12-26 [E] [revoked: 2014-03-26]
sub   rsa4096 2012-12-26 [S] [revoked: 2014-03-26]
sub   rsa2048 2013-01-23 [S] [expires: 2023-01-21]
sub   rsa2048 2013-01-23 [E] [expires: 2023-01-21]
sub   rsa4096 2014-03-26 [S] [expires: 2020-09-03]
sub   rsa4096 2014-03-26 [E] [expires: 2020-09-03]
sub   rsa4096 2014-11-22 [A] [revoked: 2016-03-01]
sub   rsa4096 2016-02-24 [A] [expires: 2020-02-23]

を設定すると、安全でない短いキーIDの代わりに--keyid-format 0xlong長いキーIDが出力されます

$ gpg a4ff2279.asc                                                                 
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub   rsa8192/0x4E1F799AA4FF2279 2012-12-25 [SC]
      0D69E11F12BDBA077B3726AB4E1F799AA4FF2279
uid                             Jens Erat (born 1988-01-19 in Stuttgart, Germany)
uid                             Jens Erat <jens.erat@fsfe.org>
uid                             Jens Erat <jens.erat@uni-konstanz.de>
uid                             Jens Erat <jabber@jenserat.de>
uid                             Jens Erat <email@jenserat.de>
uid                             [jpeg image of size 12899]
sub   rsa4096/0x0F3ED8E6759A536E 2012-12-26 [E] [revoked: 2014-03-26]
sub   rsa4096/0x2D6761A7CC85941A 2012-12-26 [S] [revoked: 2014-03-26]
sub   rsa2048/0x9FF7E53ACB4BD3EE 2013-01-23 [S] [expires: 2023-01-21]
sub   rsa2048/0x5C88F5D83E2554DF 2013-01-23 [E] [expires: 2023-01-21]
sub   rsa4096/0x8E78E44DFB1B55E9 2014-03-26 [S] [expires: 2020-09-03]
sub   rsa4096/0xCC73B287A4388025 2014-03-26 [E] [expires: 2020-09-03]
sub   rsa4096/0x382D23D4C9773A5C 2014-11-22 [A] [revoked: 2016-03-01]
sub   rsa4096/0xFF37A70EDCBB4926 2016-02-24 [A] [expires: 2020-02-23]
pub   rsa1024/0x7F60B22EA4FF2279 2014-06-16 [SCEA] [revoked: 2016-08-16]

情報を提供する-vか、-vvさらに追加します。ただし、この場合はパッケージの詳細を印刷することをお勧めします(以下を参照)。

機械読み取り可能な出力

GnuPGにはコロンで区切られた出力形式もあり、簡単に解析でき、安定した形式です。フォーマットはのGnuPGに記載されていdoc/DETAILSたファイル。このフォーマットを受け取るオプションは--with-colonsです。

$ gpg --with-colons a4ff2279.asc
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
pub:-:8192:1:4E1F799AA4FF2279:1356475387:::-:
uid:::::::::Jens Erat (born 1988-01-19 in Stuttgart, Germany):
uid:::::::::Jens Erat <jens.erat@fsfe.org>:
uid:::::::::Jens Erat <jens.erat@uni-konstanz.de>:
uid:::::::::Jens Erat <jabber@jenserat.de>:
uid:::::::::Jens Erat <email@jenserat.de>:
uat:::::::::1 12921:
sub:-:4096:1:0F3ED8E6759A536E:1356517233:1482747633:::
sub:-:4096:1:2D6761A7CC85941A:1356517456:1482747856:::
sub:-:2048:1:9FF7E53ACB4BD3EE:1358985314:1674345314:::
sub:-:2048:1:5C88F5D83E2554DF:1358985467:1674345467:::
sub:-:4096:1:8E78E44DFB1B55E9:1395870592:1599164118:::
sub:-:4096:1:CC73B287A4388025:1395870720:1599164118:::
sub:-:4096:1:382D23D4C9773A5C:1416680427:1479752427:::
sub:-:4096:1:FF37A70EDCBB4926:1456322829:1582466829:::

GnuPG 2.1.23以降でgpg: WARNING: no command supplied. Trying to guess what you mean ...は、--import-options show-onlyオプションを--importコマンドと一緒に使用することで警告を省略できます(--with-colonsもちろん、これはなしでも機能します)。

$ gpg --with-colons --import-options show-only --import a4ff2279
[snip]

古いバージョンの場合:警告メッセージはSTDERRに出力されるため、STDINを読み取るだけで、警告から重要な情報を分離できます。

技術的な詳細:OpenPGPパケットのリスト

追加のパッケージをインストールしなくても、を使用gpg --list-packets [file]して、ファイルに含まれているOpenPGPパケットに関する情報を表示できます。

$ gpg --list-packets a4ff2279.asc
:public key packet:
    version 4, algo 1, created 1356475387, expires 0
    pkey[0]: [8192 bits]
    pkey[1]: [17 bits]
    keyid: 4E1F799AA4FF2279
:user ID packet: "Jens Erat (born 1988-01-19 in Stuttgart, Germany)"
:signature packet: algo 1, keyid 4E1F799AA4FF2279
    version 4, created 1356516623, md5len 0, sigclass 0x13
    digest algo 2, begin of digest 18 46
    hashed subpkt 27 len 1 (key flags: 03)
[snip]

このpgpdump [file]ツールは同様にgpg --list-packets機能し、同様の出力を提供しますが、これらすべてのアルゴリズム識別子を読み取り可能な表現に解決します。おそらくすべての関連ディストリビューションで利用できます(Debian派生物では、パッケージはpgpdumpツール自体のように呼ばれます)。

$ pgpdump a4ff2279.asc
Old: Public Key Packet(tag 6)(1037 bytes)
    Ver 4 - new
    Public key creation time - Tue Dec 25 23:43:07 CET 2012
    Pub alg - RSA Encrypt or Sign(pub 1)
    RSA n(8192 bits) - ...
    RSA e(17 bits) - ...
Old: User ID Packet(tag 13)(49 bytes)
    User ID - Jens Erat (born 1988-01-19 in Stuttgart, Germany)
Old: Signature Packet(tag 2)(1083 bytes)
    Ver 4 - new
    Sig type - Positive certification of a User ID and Public Key packet(0x13).
    Pub alg - RSA Encrypt or Sign(pub 1)
    Hash alg - SHA1(hash 2)
    Hashed Sub: key flags(sub 27)(1 bytes)
[snip]

1
ありがとう。「gpg --list-keys path-to-key-file」を使用して、見たいものを取得しました:... hashed subpkt 2 len 4(sig created 2013-02-24)hashed subpkt 9 len 4(key 4y134d23h24mの後に期限切れ)...そしてpgpdumpは出力をもう少し読みやすくします。
Amos Shapira 2014年

@AmosShapiraよろしいですか?そのコマンドは私にはまったく機能しません。もしかして--list-packets
ジョナサンクロス

1
@JonathanCross確かに、記述された出力はのように聞こえ--list-packetsます。
イェンスERAT

1
この醜いものWARNING: no command suppliedをstderrに取り除く方法は?(これgpgはスクリプトでの使用を適切に阻止します。暗号化に関しては、stderrへの出力を致命的なエラーとして扱うことが唯一の安全な方法です。この方法でのみ、stderrに出力される新しい重要な弱点が発見されたときに備えられます)。
Tino

1
簡単な方法があることは知りません。ただし、キーファイルをキーリングとして使用して--list-keysから、次のように実行できますgpg --no-default-keyring --keyring=/tmp/<keyfile> --list-keys。または、単に警告メッセージを破棄します(ba)shスクリプトには、stderrをフィルタリングするための多くのオプションがあります
Jens Erat

31

私は単純にうまくやっていくことができるようです:

$gpg <path_to_file>

このような出力:

$ gpg /tmp/keys/something.asc 
  pub  1024D/560C6C26 2014-11-26 Something <something@none.org>
  sub  2048g/0C1ACCA6 2014-11-26

オペレーションは特に関連する主要な情報を特定しませんでした。この出力は私が気にしているすべてです。


30

(最初にキーリングにインポートせずに)キーのフィンガープリントを確認してリストするには、次のように入力します。

gpg --with-fingerprint <filename>

編集:Ubuntu 18.04(gpg 2.2.4)では、上記のコマンドでフィンガープリントが表示されません。--with-subkey-fingerprint代わりにオプションを使用してください

gpg --with-subkey-fingerprint <filename>

4
これは受け入れられた答えであるはずです。@Skyrによるコメントとして投稿されコメントに同意します。
gertvdijk 2016年

2
ACK、これは非常に優れており、ローカルの個人用キーリングなどは必要ありません。キー名が表示されます。
Florian Heigl 2017

1
不明な/文書化されていない理由によりgpg --with-fingerprint、私の側で指紋の印刷が抑制されます。Ubuntu 18.04gpg (GnuPG) 2.1.18
Tino

私にも同じことが起こっています@Tino、理由について追加情報を見つけましたか?
kjones

@Tinoと@kjones --with-subkey-fingerprintは、Ubuntu 18.04で動作するはずの情報で回答を更新しました
Ronny Andersson

9

このオプション--list-packetsは、ファイルからpgpデータを解析し、その構造を出力します。公開鍵を解析するときに、署名のユーザーIDとキーIDを簡単に抽出できます。

このコマンドはデータ形式のみを解析し、署名などの検証は行わないことに注意してください。


2

この答えに出くわしたとき、解析しやすい出力を取得する方法を探していました。私にとってオプション--with-colonsはトリックをしました:

$ gpg --with-colons file
sec::4096:1:AAAAAAAAAAAAAAAA:YYYY-MM-DD::::Name (comment) email
ssb::4096:1:BBBBBBBBBBBBBBBB:YYYY-MM-DD::::

ドキュメントはここにあります


YYYY-MM-DDのすばらしい出力はどのようにして得ますか?それをgpg2.xと--with-colonsで再現することはできません。
MKesper

1

--keyid-formatスイッチを使用して、短いまたは長いキーIDを表示することもできます。

$ gpg2 -n --with-fingerprint --keyid-format=short --show-keys <filename>

これは次のように出力されます(PostgreSQL CentOSリポジトリキーからの例):

pub   dsa1024/442DF0F8 2008-01-08 [SCA]                                                                       │
      Key fingerprint = 68C9 E2B9 1A37 D136 FE74  D176 1F16 D2E1 442D F0F8                                    │              honor-keyserver-url
uid                    PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>                      │                     When  using --refresh-keys, if the key in question has a preferred keyserver URL, then use that
sub   elg2048/D43F1AF8 2008-01-08 [E]

0

pgpdumphttps://www.lirnberger.com/tools/pgpdump/)は、pgpブロックの検査に使用できるツールです。

ただし、ユーザーフレンドリーではなく、かなり技術的です。

  • 公開鍵または秘密鍵を解析します(警告なし)
  • それはキーリングを変更しません(私の経験では、gpgがフードの後ろで何をするかはそれほど明確ではありません)
  • すべてのパケット、特にキーに関するさまざまなテキストデータを示すユーザーIDのパケットを出力します。
pgpdump -p test.asc 
New: Secret Key Packet(tag 5)(920 bytes)
    Ver 4 - new
    Public key creation time - Fri May 24 00:33:48 CEST 2019
    Pub alg - RSA Encrypt or Sign(pub 1)
    RSA n(2048 bits) - ...
    RSA e(17 bits) - ...
    RSA d(2048 bits) - ...
    RSA p(1024 bits) - ...
    RSA q(1024 bits) - ...
    RSA u(1020 bits) - ...
    Checksum - 49 2f 
New: User ID Packet(tag 13)(18 bytes)
    User ID - test (test) <tset>                        
New: Signature Packet(tag 2)(287 bytes)
    Ver 4 - new
    Sig type - Positive certification of a User ID and Public Key packet(0x13).
    Pub alg - RSA Encrypt or Sign(pub 1)
    Hash alg - SHA256(hash 8)
    Hashed Sub: signature creation time(sub 2)(4 bytes)
        Time - Fri May 24 00:33:49 CEST 2019
    Hashed Sub: issuer key ID(sub 16)(8 bytes)
        Key ID - 0x396D5E4A2E92865F
    Hashed Sub: key flags(sub 27)(1 bytes)
        Flag - This key may be used to certify other keys
        Flag - This key may be used to sign data
    Hash left 2 bytes - 74 7a 
    RSA m^d mod n(2048 bits) - ...
        -> PKCS-1

残念ながら、それは標準入力を読みません:/


私のpgpdump読み取りstdin。たとえば、curl -s https://www.theguardian.com/pgp/PublicKeys/Guardian%20Application-Security.pub.txt | pgpdump正常に動作します。
rickhg12hs

0

キーID(8バイト、16桁の16進数)を取得するために、これはGPG 1.4.16、2.1.18、および2.2.19で機能したコマンドです。

gpg --list-packets <key.asc | awk '$1=="keyid:"{print$2}'

(キーIDに加えて)さらに情報を取得するには:

gpg --list-packets <key.asc

さらに詳しい情報を入手するには:

gpg --list-packets -vvv --debug 0x2 <key.asc

コマンド

gpg --dry-run --import <key.asc

3つのバージョンすべてでも動作しますが、GPG 1.4.16では短い(4バイト、8桁の16進数)キーIDのみを出力するため、キーを識別するのは安全ではありません。

他の回答にあるいくつかのコマンドは、(例えばgpg --show-keysgpg --with-fingerprintgpg --import --import-options show-only)GPGの複数のバージョンをターゲットとする場合ので、彼らはポータブルではありません、上記の3つのGPGのバージョンのいくつかで仕事をしません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.