【问题标题】:download a pgp key automaticly自动下载 pgp 密钥
【发布时间】:2015-02-17 16:06:48
【问题描述】:

我想使用 gpg 从密钥服务器自动下载 pgp 密钥,如下所示:

    gpg --searchkey carol@example.com

gpg 给了我这个结果。

    gpg: searching for "carol@example.com" from hkp server pool.sks-keyservers.net
    (1)     <carol@example.com>
              2048 bit RSA key 2F5E71CD, created: 2015-02-17
    Keys 1-1 of 1 for "carol@example.com".  Enter number(s), N)ext, or Q)uit > 

如果我想将此密钥添加到我的密钥环中,我需要按“1”并回车。

我的问题是:有没有办法自动将第一个找到的密钥从密钥服务器自动插入到我的密钥环中?因为如果我想使用大约 200 个地址进行操作,如果我可以通过脚本导入它们而不坐在计算机旁边并始终按“1”并回车,那就太好了。

我知道自动导入第一个密钥会带来安全风险,但自动导入密钥并不意味着我也自动信任它们。

【问题讨论】:

    标签: linux bash shell gnupg pgp


    【解决方案1】:

    在编写脚本时不要使用邮件地址来查找密钥。 Everybody can upload keys with arbitrary user IDs in them关键服务器根本不检查任何内容。甚至可以很容易地calculate short key ID collisions。信任密钥服务器上的任意密钥提供了一种非常、非常危险、错误的安全假设。

    出于脚本目的,请始终使用密钥指纹。这些指纹可以防止冲突攻击,并为 OpenPGP 密钥提供唯一标识符(理论上,它们没有,但它们提供了更大的密钥地址空间而不是 UUID,在实践中它被认为是唯一的)。

    要下载指纹列表,请使用类似

    gpg --recv-keys \
      0D69E11F12BDBA077B3726AB4E1F799AA4FF2279 \
      4AC1999F0BA293E8960AF2DA428C3085AF19CFE9 \
      ...
    

    (或者,删除反斜杠并将所有内容放在一行上)

    要简单地获取所有密钥以另一种方式验证信任(例如,通过信任网络,但不要忘记这样做),您必须围绕 GnuPG 编写的脚本。这是一个example script originally posted on security.SE,它获取一个每行包含一个邮件地址的文件并获取所有匹配的键:

    #!/bin/sh
    while read line
    do
        gpg --with-colons --batch --search $line 2>/dev/null | \
        awk 'BEGIN { FS = ":" };  $1=="pub" { print $2 }' | \
        xargs gpg --recv-keys
    done < $1
    

    【讨论】:

    • 感谢您的回复,但这并不能回答我的问题。好的,如果我有一个指纹列表,这很容易,但如果我不自动知道指纹,我想导入并稍后检查指纹。
    • 为此,您必须围绕 GnuPG 编写脚本。我从我发布的答案中添加了一些行,作为对 security.SE 上另一个问题的回复。
    猜你喜欢
    • 2021-09-04
    • 2012-05-06
    • 2021-11-06
    • 2011-02-17
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多