PGP 密钥服务器如何同步密钥?

信息安全 公钥基础设施 pgp gnupg
2021-08-24 22:55:26

我想了解有关公共 PGP 密钥服务器如何同步密钥的技术细节。

如果我将我的密钥发送到一个密钥服务器,它究竟是如何“传播”到所有其他密钥服务器的?谁将它发送给谁以及如何发送?我需要知道什么我想从头开始编写自己的公钥服务器软件?

我正在尝试寻找一些协议描述,甚至是处理这个问题的实际代码,但我找不到它。


我想到的例子之一是像http://pgp.mit.eduhttp://pgp.zdv.uni-mainz.de这样的密钥服务器。据我所知,如果我将密钥上传到第一个,它会以某种方式“神奇地”转移到另一个,然后在互联网上公开找到数十个其他密钥服务器。

我正在询问这些密钥服务器如何交换提交的密钥的具体标准,如果没有一个具体的策略,那么通常使用什么策略。

1个回答

关键服务器使用不同的协议进行同步,形成了一个由全球百余台服务器组成的网络。

电子邮件同步

密钥服务器同步的“旧”方式是基于密钥服务器相互发送电子邮件。每当密钥服务器收到他还不知道的新信息(由用户上传或从另一个密钥服务器接收)时,他会将这些信息转发到其同步列表中的所有其他密钥服务器。

SKS 协议

由于旧的基于电子邮件的协议不能很好地扩展(尤其是同步列表中的服务器数量),因此为同步密钥服务器 (SKS)定义了一个新协议,该协议基于集合协调。

这些关键服务器在给定的时间间隔内相互“闲聊”。从一个非常基本的角度来看,集合协调对所谓的分区树中的键进行排序,这允许在不传输大量信息的情况下轻松找到差异。然后只交换修改后的密钥。

麻省理工学院和美因茨大学密钥服务器

对于 SKS 密钥服务器(以及 Hockeypuck,它是 SKS 协议的另一种实现),可以通过获取他们的统计信息页面来检索八卦合作伙伴,以http://[keyserver]:11371/pks/lookup?op=stats. 查看MIT 密钥服务器和美因茨大学密钥服务器的统计页面,您会发现它们甚至有一个直接的、相互同步的协议(查看“Gossip Peers”专栏)。

另一边的 CCC Hanau的密钥服务器不直接与 MIT 的那个八卦。如果您将密钥上传到这些服务器中的任何一个,另一个将不会直接知道它,而是通过美因茨大学的中间服务器(或任何其他同步路径)。

可视化整个密钥服务器网络

SKS keyserver pool定期爬取 key server 网络,并提供 key server network 的dot文件(SKS pool 中所有服务器的,不包括基于旧邮件同步算法的同步链接)。