使用 PGP 潜伏

作者:Michael K. Johnson

潜伏是一种历史悠久的实践。如果您不想在加入新闻组时显得愚蠢,您应该在那里潜伏,阅读文章但不发布任何内容,了解该新闻组对参与者的期望。邮件列表也是如此。有些人从不停止潜伏——在互联网和 Usenet 上,这都是可以的。

在阅读 Usenet 新闻或邮件列表时,您可能已经看到过 PGP 签名的消息。它看起来像这样(签名已略作修改以适应杂志版面)

-----BEGIN PGP SIGNED MESSAGE-----
This is an example PGP-signed message.
-----BEGIN PGP SIGNATURE-----
Version: 2.6.2
iQCUAwUBMYlOKyd5aW9FNqjdAQHVpAP4vrpL2MoIm3MFk
95e7mRaYwRoKSL4lpCDR8WvDo13ICvaa/IbYxZwH/5IFM
vve7a+HnFPFd7pKegsJxSc8MgFnnBCxTJAEeimLCmZ+DA
VHPwqnEjxdeTWvwoysg2hm89CUOxvn4ArbG3yntlRlL+k
0HPjV+D0Uvi+LN0sNroi5A==
=G3yB
-----END PGP SIGNATURE-----

您可以忽略所有 PGP 特有的内容,正常阅读消息。但是您也可以通过学习一些简单的命令——以及学习如何使用它们来利用它。

简单的安全?

您是否被 PGP 的手册吓倒了?也许您应该感到害怕。与其他软件产品不同,您可以随意摆弄它们,以便在需要时逐步学习,但密码学软件需要被充分理解才能真正安全。不正确地使用它会给您一种安全感——但这比根本不使用它更糟糕,因为有了这种虚假的安全感,您会用它来发送敏感信息,而这些信息是您以前做梦也想不到会通过电子邮件发送的。关于密钥管理的手册章节并不长,但您确实需要理解它,而要做到这一点,您确实需要阅读相当一部分手册。

如果您想编写 PGP 加密的电子邮件,您必须阅读手册。本文不能替代手册来教您如何保护您的电子邮件隐私。您可以选择随源代码一起发布的免费手册、MIT Press 出售的官方手册印刷版,或者 O'Reilly 的书籍PGP:Pretty Good Privacy,ISBN 1-56592-098-8,作者是 Simson Garfinkel。

那么为什么要阅读这篇文章?

这样您就可以“PGP 潜伏”。您不必发送 PGP 加密的电子邮件即可利用 PGP 签名;您可以简单地验证其他人发送的消息确实是由他们发送的,而不是由其他人冒充他们发送的。但是为了做到这一点,您确实需要一点背景知识。别担心,这不会有任何伤害...

PGP 基于公钥密码学。每个人都有一个公钥,其他人需要知道,以及一个私钥,绝对不能被任何人知道。消息使用发送者的私钥和接收者的公钥进行加密。消息只能用接收者的私钥解密,而只有接收者知道私钥。

然而,可以简单地签名消息而不加密它。发送者的私钥用于签名消息,发送者的公钥用于验证签名。请注意,接收者根本不需要任何密钥来验证签名。只要接收者能够信任他们拥有的发送者公钥副本是正确的,他们就可以信任签名。

由于您不需要保护私钥的秘密性即可使用 PGP 来验证签名,因此您无需阅读书籍即可学习如何创建私钥并保持其秘密性。您只需要知道如何找到其他人的公钥,并知道如何使用 PGP 检查签名。

如果您阅读过新闻组 comp.os.linux.announce,您现在应该已经注意到,那里发布的每条消息都“由版主使用 PGP 进行数字签名”。版主 Lars Wirzenius 让您确信他通过 PGP 签名批准了这些文章的发布。在他的签名中,他声明:“Finger wirzeniu@kruuna.helsinki.fi 获取验证签名所需的 PGP 密钥。”如果您运行命令 finger wirzeniu@kruuna.helsinki.fi,您将看到类似列表 1 的内容。不要从列表中键入该密钥;如果该密钥对您有任何好处,您将能够通过互联网获取它。如果您不喜欢 finger,您可以从他的主页 www.cs.helsinki.fi/~wirzeniu/ 获取它。

我仍然不相信

如果 comp.os.linux.announce 新闻组上出现伪造帖子的可能性不足以让您想要安装 PGP,请考虑另一种情况。假设您看到一条新闻组帖子或电子邮件消息,看起来像是来自 Ted Ts'o(Linux 的主要开发者之一),声称

  • Linux 中发现了一个安全漏洞,

  • 它正在被黑客利用,他们正在破坏他们入侵的系统,

  • 一个附加的内核补丁将解决这个问题,并且

  • 您应该尽快在您的系统上安装该补丁。

进一步假设该补丁超出了您的理解范围。您会安装该补丁吗? 让我们假设 Ted 是值得信赖的(这是一个很好的假设)。您如何知道这真的是 Ted 发的帖子或发送的消息?也许该补丁实际上创建了一个安全漏洞,黑客可以通过该漏洞进行攻击,而黑客正在伪造消息并假装是 Ted,以说服您应用该补丁。

您可以知道,因为 Ted 使用 PGP 签署了他的补丁,并且因为您拥有他的公钥副本。如果没有他的私钥副本,没有人能够正确签名,而 Ted 是一位安全专家,他会非常安全地保管他的私钥。

获取密钥

为了检查 PGP 签名的消息,您需要拥有公钥。您从哪里获得密钥?您想要获得真实用户的真实密钥,而不是伪造者伪造的密钥,伪造者使用伪造密钥来冒充发送者。

从根本上说,您需要从与消息不同的来源获取密钥。新闻和邮件众所周知是不安全的;任何人都可以伪造电子邮件或新闻消息,任何想阅读本文以了解 PGP 的人都可能不会注意到消息是伪造的,并且可能不知道如何区分真假。

如果有人伪造应该看起来像来自其他人的消息,并且他们包含 PGP,他们也会尝试传播他们冒充用户的伪造密钥。这意味着在理想的世界中,您将在之前收集公钥,然后再需要使用它们来验证消息。但是,很有可能当您想要阅读消息时,您还没有密钥。您在哪里查找密钥,以及如何知道它是正确的?

有时您可以从某人的 Web 主页获取密钥。如果您这样做,您必须权衡有人破坏了该系统上的安全性并损坏了那里的密钥的可能性。如果您在想要验证可疑消息之前很久就获得了密钥,那么您获得的密钥很可能是好的。通过 finger 检索密钥也是如此。如果您认为您将来可能想要验证 comp.os.linux.announce 帖子,请立即获取密钥。如果您有偏执症,请在接下来的几天内继续检查,以确保没有关于密钥被伪造或泄露的公告。

查找大量 PGP 密钥的一个地方是 BAL 的 PGP 公钥服务器,网址为 www-swiss.ai.mit.edu/~bal/pks-toplev.html。该网站拥有大量的公钥数据库,您要查找的人可能已将公钥提交到该数据库。没有安全性;任何人都可以发布对任何其他人公钥的更新,甚至是伪造的。您仍然必须验证您从 BAL 服务器获得的密钥;它只是一个方便的交换点。

这些技术都不能确保您获得的密钥是好的。所有安全性都只是程度问题,对于大多数目的而言,此技术提供了一个合理的保证级别,确保您拥有正确的密钥。不要把全部家当都押在上面。

本质上,PGP 允许您扩展您已经拥有的信任。如果您相信您的兄弟会当面告诉您真相,并且已验证您拥有的他的 PGP 公钥副本是正确的,那么您可以相当肯定,使用他的私钥正确签名的消息确实来自他。然而,您只能像确定他保守私钥秘密的能力那样确定这一点。

签名密钥

如果您的兄弟确信他拥有的 Joe 的公钥副本是正确的,并且您信任您的兄弟会给您 Joe 的公钥副本,那么您可以相当肯定,使用 Joe 的公钥签名的消息确实来自 Joe。这是一个非常有用的概念,PGP 支持它。

为了验证他是否肯定 Joe 的公钥确实属于 Joe,您的兄弟可以使用他自己的私钥签名密钥。如果您确定您拥有的兄弟的公钥副本是正确的,并且您的兄弟已签名 Joe 的公钥,那么如果您信任您的兄弟在验证密钥方面的判断,您就可以基本确定您拥有的 Joe 的公钥副本是正确的。现在您知道了 Joe 的密钥,如果您信任的判断,您可以合理地确信已签名的公钥的真实性。

PGP 用户组织了 PGP 密钥签名聚会(派对、会议上的 BOF(Birds of a Feather)会议等),以便面对面会面并互相签名密钥。随着人们去往不同地方的不同聚会,越来越容易说,“我信任我的兄弟,我的兄弟已签名 Joe 的密钥,Joe 已签名 Jean 的密钥,所以我可以相当肯定,使用 Jean 的密钥签名的此消息确实来自 Jean。”这个概念已被称为“信任网络”。

不要在信任网络方面走极端。PGP 不会让人变得值得信赖。正如 Zimmermann 在 PGP 手册中所说,“信任不一定是可转移的;我有一个朋友,我信任他不会撒谎。他是一个容易受骗的人,他信任总统不会撒谎。这并不意味着我信任总统不会撒谎。这只是常识。”如果您不信任某人在其他事情上,那么就没有理由信任他们对其他人密钥的签名。他们可能被欺骗、粗心大意或自己撒谎。

验证密钥

当人们验证他们拥有的其他人密钥副本是否正确时,他们不会费力地检查密钥的 ASCII 表示形式的 1000-10000 个字符。相反,他们比较一种称为指纹的缩写形式。每个密钥都通过其指纹进行验证,指纹由 32 个十六进制字符表示。两个密钥具有相同指纹的可能性非常接近于零,您甚至不必考虑它。因此,如果指纹匹配,则密钥匹配。

在检查指纹之前,最好快速检查ID。ID 甚至更缩写;它仅由 8 个十六进制字符组成。例如,如果用户使用两组不同的 PGP 密钥,则 ID 用于区分它们。

示例

由于我们从 comp.os.linux.announce 开始,让我们展示如何轻松检索公钥以验证这些消息。(我假设您已安装 PGP。如果您没有安装,我稍后会解释如何安装。我现在只想保持简单。)

PGP 通常会尝试在不被告知的情况下做正确的事情。如果您将公钥馈送给它,它会认为您想将其添加到您的“公钥环”中,以便随时检查或使用。通常,您使用文件名调用它,因此请尝试此操作

finger wirzeniu@kruuna.helsinki.fi > /tmp/cola
pgp /tmp/cola

如果 PGP 抱怨“无法创建密钥环文件 'home/.pgp/pubring.pgp'”,那么您应该创建目录 ~/.pgp 并重试

mkdir ~/.pgp
pgp /tmp/cola
rm /tmp/cola

PGP 将询问您是否要将密钥添加到您的公钥环;回答是。当它询问您是否要自己认证任何密钥时,回答否。在没有创建您自己的公钥和私钥的情况下,您无法做到这一点。您仍然可以验证消息,但您无法使用 PGP 的某些内置功能。这将看起来像列表 2

comp.os.linux.announce 密钥现在在您的公钥环上,您现在可以使用它来验证发布到 comp.os.linux.announce 的帖子。

检查签名消息

现在让我们尝试检查发布到 comp.os.linux.announce 的消息上的签名。使用您的新闻阅读器,将消息保存到文件中,最好使用扩展名“.asc”(ascii 的缩写)。让我们将其保存在文件 cola.asc 中,然后调用 PGP 来检查签名

pgp cola.asc

PGP 是冗长的(像往常一样),并检查签名。它所说的一部分让我们知道签名检查通过了——但它警告说它不能确定,因为您没有自己的密钥

File has signature.  Public key is required to
check signature.  Good signature from user
"Lars Wirzenius <wirzeniu@cs.helsinki.fi>".
Signature made 1996/05/01 11:36 GMT
WARNING: Because this public key is not certified
with a trusted signature, it is not known with
high confidence that this public key actually
belongs to:
"Lars Wirzenius <wirzeniu@cs.helsinki.fi>".

如果您想消除该警告,您将必须创建自己的密钥,并且在您这样做之前,您应该阅读手册并理解它。

PGP 还在一个名为 cola 的文件中保存了不带签名的消息副本——它从文件名中剥离了 .asc。如果您已将原始消息保存在名为“cola”的文件中,它会要求您提供一个不同的文件名来放置未签名的消息。不幸的是,目前,在不创建包含未签名文本的新文件的情况下检查签名的唯一方法是在 PGP 停止询问您要执行什么操作时按 CTRL-C。

检查指纹

为了验证您拥有的密钥副本是正确的,您需要将密钥放在您的密钥环上,然后使用 PGP 打印其指纹。使用命令

pgp -kvvc user_id

其中 user_id 是收件人的电子邮件地址的一部分或实际的 8 字符密钥 ID。列表 3 显示了用于签署 Linux 紧急响应小组 (ALERT) 公告的密钥的此命令的部分输出,这些公告用于宣布与 Linux 相关的安全问题。这 (-kvvc) 显示了每个密钥的很多信息;您可以使用命令获得更简洁的列表

pgp -kvc user_id

现在尝试打印 Lars 用于签署 comp.os.linux.announce 帖子的密钥的指纹。您可以在下面检查它。

生成指纹后,您需要将其与受信任的版本进行比较。这可能意味着本文中列出的指纹,也可能意味着在电话中致电发送者,或者可能包括书中列出的指纹。有很多选择——由您来判断您选择的选项是否为您的目的提供了足够好的验证。

以下是 Linux 世界中重要且有用的密钥的 ID 和指纹列表

  • Lars Wirzenius 的 comp.os.linux.announce 密钥:4CBA92D1 E7FA89856D9B781D F530EBFBD811CA3F

  • Linux 安全 FAQ 用于验证 ALERTS 的主密钥:ADF3EE95 AB4FE7382C3627BC 6934EC2A2C05AB62

  • Ted Ts'o 的签名密钥用于签名其他人的密钥(Ted 在会议上组织 PGP 签名 BOF,因此签名了很多其他人的密钥):466B4289 9C056649DF837EEF D8AC7542A2334B91

  • 您谦卑的作者,也将在一些会议上组织 PGP 签名 BOF,并想炫耀一下:4536A8DD 2AEC88084064CED8 DDF8122B61438315

(请注意,为了使指纹适合文章,我们删除了许多空格。空格只是为了帮助您阅读指纹,无论有没有空格,指纹都是相同的。)

Linux 开发人员开始讨论在 Linux 内核源代码的 CREDITS 文件中列出他们的 PGP 密钥 ID 和指纹。

相当好的隐私

在静静地使用 PGP 验证签名几年后,您很有可能会在某个时候想要将其用于其原始目的——隐私。也许您想将密码发送给某人。也许您只是想通过 Internet 发送您的信用卡。您不必成为信息地下世界的英雄也想要保持您的邮件私密;也有许多平淡的原因。如果您已经习惯使用 PGP 验证签名,您会发现学习如何使用 PGP 加密您的电子邮件并不困难。只需仔细阅读手册,以确保您的通信真正安全。

安装 PGP

安装 PGP 有点麻烦,部分原因是美国和加拿大对所使用的公钥算法授予了专利,部分原因是美国疯狂的 ITAR 法规。如果这是一篇社论,我会有很多话要说美国政府在这件事上的行为有多么愚蠢,但这不是一篇社论,所以我不会在这个问题上说一句话...

如果您拥有 Red Hat Commercial Linux,生活就很轻松。您可以从 ftp.hacktic.nl 上的匿名 ftp 在 /pub/replay/pub/redhat/ 目录中安装 RPM 中的 PGP。对于美国境外的人,您可以使用美国版本或国际版本;对于美国境内的人,由于专利法,您只能合法使用美国版本。截至撰写本文时,这两个版本的当前版本号均为 2.6.3,您只需在 pgp-2.6.3i-1.i386.rpm(国际版本)和 pgp-2.6.3usa-2.i386.rpm(美国版本)之间进行选择。该目录中还有 README 文件,更全面地解释了情况。您还可以获得一项额外的好处:自从发布 3.0.3 版本以来,Red Hat 创建的所有官方 RPM 都经过 PGP 签名,因此您知道您拥有的是官方版本。安装 PGP 将使该功能能够正常工作。

如果您使用 Debian,生活也很轻松。在选定的存档站点的 non-free 目录中,有国际版本和美国版本的 .deb 文件可用。如果您居住在美国境外,请从美国境外的 Debian 存档站点下载您的副本,以避免给 Debian 带来法律麻烦。您可以通过使用 ftp 连接到 ftp.debian.org 来获取存档站点列表。截至撰写本文时,您需要的文件是 pgp-i-2.6.2i-5.deb(国际版本)或 pgp-us-2.6.2i-5.deb(美国版本)。当基于 ELF 的 Debian 1.1 发布时,可能会有一个使用 ELF 二进制文件格式的新版本可用。

对于其他发行版,您可能必须从源代码构建 PGP。您可以从 net-dist.mit.edu 上的 ftp 在 /pub/PGP/ 目录中获取源代码。但是,MIT 会让您经历几个步骤,以确保您确实是美国居民,从而保护自己免受过于热心的美国执法官员的侵害。构建 PGP 的说明包含在内,祝您好运。

警告:在美国境内,您只能将免费版本的 PGP 用于非商业目的。对于商业目的,您需要购买 ViaCrypt 的 PGP 副本。您可以通过 viacrypt@acm.org 或 (800)536-2664 联系 ViaCrypt,或者您可以从最初将 ViaCrypt 的 PGP 移植到 Linux 的公司 SSC (LJ 的出版商) 购买该产品。

Michael K. Johnson 只是轻微的偏执狂... 他的公钥 ID 和指纹在上面列出;他的公钥已在 Bal 的公钥服务器上注册。

加载 Disqus 评论