列出由给定密钥签名的所有密钥

列出由给定密钥签名的所有密钥

使用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 上运行时间不到一秒。

-k都是--list-sigs非常古老的gpg选项。我只在 2.0 和 2.1 上对此进行了测试,但我相信它可以在 1.4 上运行。

相关内容