特定の鍵で署名されたすべての鍵のリスト

特定の鍵で署名されたすべての鍵のリスト

使用GNUプライバシーガード(GnuPG):たとえば、特定のキーに対して0xDEADBEEFユーザーがそのキーで署名されたUIDを持つ公開鍵のみをキーリングに簡単に一覧表示できる方法は何ですか?

あなたの答えがGnuPG Modern(2.1.x)、GnuPG Stable(2.0.x)、またはGnuPG Classic(1.4.x)に適用されるかどうかを指定できれば便利です。

答え1

GnuPGにはそのようなオプションはありませんが、単純なスクリプトを使用して一致するすべてのキーを一覧表示できます。 @grochmalのスクリプトと比較して、GnuPGの出力形式を読む方が速く、より強力で、--with-colonsプログラム的に解析できます。また、単一のGnuPG呼び出しを制限します。

#!/bin/sh
keyid=${1:-'0000000000000000'}
gpg --with-colons --fingerprint --list-sigs |
while read line; do
  packettype="$(echo "${line}" | cut -d':' -f1)"
  case $packettype in
    fpr)
      fingerprint="$(echo "${line}" | cut -d':' -f10)"
      ;;
    sig)
      issuedby="$(echo "${line}" | cut -d':' -f5)"
      if [ "x${issuedby}" = "x${keyid}" ]; then
        echo "${fingerprint}"
      fi
      ;;
  esac
done |
uniq

これは、最初の引数として渡される長いキーIDに依存します。とにかくショートカットキーIDを使用しないでください。

答え2

私が知る限り、そのような選択肢はありません。しかし、スクリプトを書くのはとても簡単です。

#!/bin/sh
KEY=${1:-'C840C4F6'}  # that's my key
gpg -k |
grep 'pub ' |
cut -d ' ' -f 4 |
cut -d / -f 2 |
while read x; do
    if gpg --list-sigs "$x" | grep C840C4F6 >/dev/null; then
        echo "$x"
    fi
done

そしてGnuPGはかなり速いので、十分に速く実行されます。 300を超えるキーを使用すると、安価なVPSで1秒未満の時間で実行されます。

非常に古い-kオプションです。私はこれを2.0と2.1でのみテストしましたが、1.4でも動作すると思います。--list-sigsgpg

関連情報