
秘密鍵に対して以下のコマンドを実行して、それをキーサーバーにインストールするとします。
gpg --allow-secret-key-import --import my_private.key
おそらくキーサーバーから関連する公開キーをインポートするのでしょうか?
gpg: key xyz...: public key "[email protected]" imported
私の質問は、秘密鍵をキーチェーンにインストールせずに、この公開鍵の ID を見つけるにはどうすればよいかということです。
答え1
プライバシー強化メール (Base64 エンコード DER) 形式の次の公開キーがあるとします。
$ wget https://apt.dockerproject.org/gpg -O dockerproject.gpg.pub.key
$ cat dockerproject.gpg.pub.key
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFWln24BEADrBl5p99uKh8+rpvqJ48u4eTtjeXAWbslJotmC/CakbNSqOb9o
ddfzRvGVeJVERt/Q/mlvEqgnyTQy+e6oEYN2Y2kqXceUhXagThnqCoxcEJ3+KM4R
mYdoe/BJ/J/6rHOjq7Omk24z2qB3RU1uAv57iY5VGw5p45uZB4C4pNNsBJXoCvPn
TGAs/7IrekFZDDgVraPx/hdiwopQ8NltSfZCyu/jPpWFK28TR8yfVlzYFwibj5WK
dHM7ZTqlA1tHIG+agyPf3Rae0jPMsHR6q+arXVwMccyOi+ULU0z8mHUJ3iEMIrpT
X+80KaN/ZjibfsBOCjcfiJSB/acn4nxQQgNZigna32velafhQivsNREFeJpzENiG
HOoyC6qVeOgKrRiKxzymj0FIMLru/iFF5pSWcBQB7PYlt8J0G80lAcPr6VCiN+4c
NKv03SdvA69dCOj79PuO9IIvQsJXsSq96HB+TeEmmL+xSdpGtGdCJHHM1fDeCqkZ
hT+RtBGQL2SEdWjxbF43oQopocT8cHvyX6Zaltn0svoGs+wX3Z/H6/8P5anog43U
65c0A+64Jj00rNDr8j31izhtQMRo892kGeQAaaxg4Pz6HnS7hRC+cOMHUU4HA7iM
zHrouAdYeTZeZEQOA7SxtCME9ZnGwe2grxPXh/U/80WJGkzLFNcTKdv+rwARAQAB
tDdEb2NrZXIgUmVsZWFzZSBUb29sIChyZWxlYXNlZG9ja2VyKSA8ZG9ja2VyQGRv
Y2tlci5jb20+iQI4BBMBAgAiBQJVpZ9uAhsvBgsJCAcDAgYVCAIJCgsEFgIDAQIe
AQIXgAAKCRD3YiFXLFJgnbRfEAC9Uai7Rv20QIDlDogRzd+Vebg4ahyoUdj0CH+n
Ak40RIoq6G26u1e+sdgjpCa8jF6vrx+smpgd1HeJdmpahUX0XN3X9f9qU9oj9A4I
1WDalRWJh+tP5WNv2ySy6AwcP9QnjuBMRTnTK27pk1sEMg9oJHK5p+ts8hlSC4Sl
uyMKH5NMVy9c+A9yqq9NF6M6d6/ehKfBFFLG9BX+XLBATvf1ZemGVHQusCQebTGv
0C0V9yqtdPdRWVIEhHxyNHATaVYOafTj/EF0lDxLl6zDT6trRV5n9F1VCEh4Aal8
L5MxVPcIZVO7NHT2EkQgn8CvWjV3oKl2GopZF8V4XdJRl90U/WDv/6cmfI08GkzD
YBHhS8ULWRFwGKobsSTyIvnbk4NtKdnTGyTJCQ8+6i52s+C54PiNgfj2ieNn6oOR
7d+bNCcG1CdOYY+ZXVOcsjl73UYvtJrO0Rl/NpYERkZ5d/tzw4jZ6FCXgggA/Zxc
jk6Y1ZvIm8Mt8wLRFH9Nww+FVsCtaCXJLP8DlJLASMD9rl5QS9Ku3u7ZNrr5HWXP
HXITX660jglyshch6CWeiUATqjIAzkEQom/kEnOrvJAtkypRJ59vYQOedZ1sFVEL
MXg2UCkD/FwojfnVtjzYaTCeGwFQeqzHmM241iuOmBYPeyTY5veF49aBJA1gEJOQ
TvBR8Q==
=Fm3p
-----END PGP PUBLIC KEY BLOCK-----
以下のコマンドはすべて、キーリングに追加せずに長いキー ID を表示します。
$ gpg --list-packets dockerproject.gpg.pub.key | \
awk '/keyid:/{ print $2 }'
F76221572C52609D
$ gpg --with-colons dockerproject.gpg.pub.key 2>&1 | \
awk -F':' '/pub/{ print $5 }'
F76221572C52609D
$ gpg --dry-run --verbose --import dockerproject.gpg.pub.key 2>&1 | \
awk '/pub/{ print $3 }' | awk -F'/' '{ print $2 }'
F76221572C52609D
$ gpg --with-fingerprint --verbose dockerproject.gpg.pub.key 2>&1 | \
awk '/^sig/{ print $2 }'
F76221572C52609D
このバージョンを使用する場合gpg
:
$ gpg --version | head -n 1
gpg (GnuPG) 2.2.4
これらのコマンドはあまり使いやすくも直感的でもないし、STDERR のように紛らわしいメッセージを吐き出しますgpg: WARNING: no command supplied. Trying to guess what you mean ...
。また、バージョン間で微妙に異なることもよくあるようです。たとえば、私のバージョンでは、他の回答と比較して が必要になることがあります。このバージョンには、上記のほとんどのコマンドよりも簡単そうなフラグ--verbose
がありません。--show-keys
キー ID に関する役立つ情報:
- キーIDの短縮形式:
2C52609D
- キーIDの長い形式:
F76221572C52609D
- 調号:
58118E89F3A912897C070ADBF76221572C52609D
長い形式を短い形式として使用する必要があります安全ではない
答え2
キー 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-keys
: gpg --with-fingerprint
、、gpg --import --import-options show-only
) は、上記の 3 つの GPG バージョンの一部では機能しないため、複数のバージョンの GPG を対象とする場合には移植できません。
答え3
コマンドラインツールを呼び出してgpg
、オプションとしてキーファイルを渡すだけです
$ gpg my_private.key
sec 4096R/1234ABCD 2017-09-12 [email protected]
長いバージョン(警告なし「gpg: 警告: コマンドが指定されていません。...」 - gnupg-version >= 2.1.23 以降 - これを見つけたここ):
gpg --import-options show-only --import my_private.key
答え4
PGP キーを参照する場合、これが答えになるかもしれません。
gpg マニュアル (gpg (GnuPG) 2.2.11) より:
--キーを表示
このコマンドは、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 です。