我想自动使用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键将会很好。
我知道自动导入始终是第一个密钥存在安全风险,但自动导入密钥并不意味着我也会自动信任它们。
答案 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