自动下载pgp密钥

时间:2015-02-17 16:06:48

标签: linux bash shell gnupg pgp

我想自动使用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”并按ENTER。

我的问题是:有没有办法自动插入密钥服务器中第一个找到的密钥到密钥环?因为如果我想用大约200个地址来做,那么如果我可以通过脚本导入它们而不坐在计算机旁边并且总是按“1”并按Enter键将会很好。

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

1 个答案:

答案 0 :(得分: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