16.1 概述
OpenPGP是一个用来描述加密和签名消息方法的一个开放标准。GPG是这个标准最有名的实现,可以通过自由软件许可证获得。
TLS专注在数据的移动,而OpenPGP专注的是静态的数据。TLS会话是活跃的:字节在安全的通道上在节点中间来来回回。而OpenPGP的交互相比来说是静态的:发送者使用提前分享好的信息来计算整个消息。实际上在OpenPGP中根本就没有任何东西被“发送”:例如它可以用来签署软件许可证。
和TLS类似,OpenPGP是一个混合的密码系统。用户拥有包括公钥和私钥的密钥对。公钥算法被用来做签名和加密。对称密钥算法被用来加密消息体;对称密钥自身是使用公钥加密保护的。这样只需要密钥被加密多次,消息就可以被多个接收者解密。
16.2 信任网
上一章中,TLS使用可信的根证书来确定节点的身份。OpenPGP不需要这样的可信的根。取而代之的是,它依靠的是信任网:朋友之间的信誉圈,他们可以通过实际见面来确认身份。
最简单的例子是有方向的信任密钥。人们可以见面,可以互相确认身份。他们可能认识批次,他们也可能确认某些身份。这样他们都有了彼此的公钥。
用户知道那个密钥是自己的,换言之他可以读取用该密钥加密了的消息。确保用户不会把密钥公开,这样也只有该用户可以读取到这些消息。没有人可以替换一方拥有的另一方的密钥,因为他们无法伪造签名。
这样就有了方向的信任链在两者之间,这两者就可以安全地交流。
一个看起来更复杂的情况是用户甲的朋友想要发送消息给用户乙。而这个朋友和用户乙并不认识,他没有用户乙的密钥,用户乙也没有他的。然而用户乙签名过用户甲的密钥,反过来也是。用户乙签名过他朋友的密钥,反过来也一样。这样这位朋友可以选择甲作为杠杆来告诉乙,他是实际上拥有乙签署的密钥的,然后用这样就可以安全地和乙通信。
用户甲的朋友是如何知道乙对甲的签名的呢?这是因为密钥和签名通常被上传到一个密钥服务器,他们可以在全世界自由地获取到。
上述的系统可以扩展到很多层。它不再是通过签名的小规模集会,这也是为什么很多人加入到签名组织中,然后互相签名。对于大事件,例如一个国际性的编程会议,这种系统是非常有效的。这个系统最主要的弱点是信任的孤岛:个体或者小的团体与网络中其他的人没有连接。
当然这只是使用OpenPGP的默认方式。没有什么可以阻止你使用一个特定公钥作为软件包的一部分,使用它来签名或者验证消息。这类似于在TLS中,想要使用用户根证书,或者客户端证书。