Cooking with Linux - François, Can You Keep a Secret?
弗朗索瓦,这真是太遗憾了,但我们下次一定要确保它能准备好。其他的一切看起来都很完美,mon ami(我的朋友);所有的工作站都启动到了登录界面。太棒了!啊,我看到我们的客人们到了!弗朗索瓦,去酒窖的东翼。在那个旧的封死的门旁边,有一小批 1999 年的罗蒂丘(Côte-Rôtie)。是的,就是我们一直没能打开的那扇门。Vite, François!(快点,弗朗索瓦!)我向你保证,那里没有什么可怕的东西。
请坐,mes amis(我的朋友们)。我们今天为您准备了一份几乎完美的菜单,但遗憾的是,缺少一道菜。不过,罗蒂丘罗讷河谷红葡萄酒,这款既性感又神秘的红酒,应该能弥补它的缺席。我今天非常想为您准备我著名的 Crème Linuxaise(Linux 奶油汤),但出现了一些问题。您看,Linux 奶油汤是一道古老而秘密的家庭食谱,我不能冒险让它落入坏人之手。我也不能冒险通过电子邮件发送它,因为害怕被网络嗅探器拦截或读取;否则,弗朗索瓦就可以提前准备好它了。它就是那么秘密!
然而,下次就不会有问题了。我正在餐厅为所有用户设置 GnuPG 和公钥加密,以便可以毫无顾虑地发送敏感通信。GnuPG 是 GNU Privacy Guard(GNU 隐私卫士),一个可以加密消息和一般数据的程序。它是 PGP(Pretty Good Privacy,良好隐私密码法)的免专利开源替代品。许多 Linux 电子邮件软件包允许您使用 GnuPG 发送和接收加密电子邮件,这就是我今天想向您展示的内容。大多数现代发行版都包含 GnuPG,因此如果您的系统上没有它,请先检查您的 CD。您也可以在 www.gnupg.org 找到最新版本,但首先,让我们了解一些背景知识。
现在,我讲到哪儿了?啊,对了。从历史上看,所有的加密方法都基于共享密钥文件的前提。您会将同一个密钥交给您想要与之通信的人,消息就是用这个密钥编码的。想想秘密解码环,您就差不多明白了。问题是,任何拦截到密钥的人都可以解密您的所有消息。使用 GnuPG,消息是用两个密钥加密的,其中一个是您的私钥,您会小心翼翼地保管它,绝不会交给任何人。当我编码消息时,我通过将我的私钥与公钥结合使用来完成,不是我的公钥,而是由我想与之通信的人,例如弗朗索瓦,提供给我的公钥。加密/解密过程需要这两个密钥,并且任何拥有密钥对一半的人都一无所获,这就是为什么您永远不会交出您的私钥。要参与这个绝密行动,您需要创建一个密钥对,其中包含您的私钥(小心翼翼地保管)和您的公钥(交给您所有朋友的那个)。以下是命令
gpg --gen-key
接下来是一个简短的问答环节。第一个问题与加密算法或密码有关。默认值为 DSA 和 ElGamal。接受默认值。当询问密钥长度时,您可以从 768、1,024 和 2,048 字节中选择。由于 DSA 标准为 1,024,因此暂时选择 1,024。然后,系统会询问您密钥的到期日期,默认设置为无到期日期。但是,您可以定义天、周、月甚至年。现在,选择默认值并确认您的选择。最后,系统会要求您提供密钥用户的姓名、电子邮件地址和注释。
一切都结束了,只剩下密码短语,这是您的最后一步。确保您选择一些安全但又容易记住的东西。当您输入密码短语后,GnuPG 程序会生成您的安全密钥对。命令完成工作后,您可以通过查看主目录中的 .gnupg 目录来验证结果
$ cd /home/marcel/.gnupg $ ls gpg.conf pubring.gpg random_seed secring.gpg trustdb.gpg
gpg.conf 文件包含 gpg 命令的默认选项列表,值得一读。pubring.gpg 和 secring.gpg 文件尤其重要。立即备份这些文件,并将它们存储在计算机以外的其他地方,并且永远不要丢失它们——secring.gpg 文件包含您的个人密钥。最后一个文件 trustdb.gpg 是您的信任数据库。它定义了您分配给您收集的公钥的信任级别。
用户需要交换密钥才能交换加密信息。您可能猜到,导出密钥的选项是 --export,但您可能还需要包含 -a 选项,以便将输出限制为 ASCII 格式
gpg -a --export 3E2FCF7D > marcelkey.asc
生成的文件是一个简单的 ASCII 文本文件;如何将其发送给对方取决于您。有一些密钥服务器,您可以在其中上传您的公钥,以便任何人都可以下载它们(这使得大规模分发更容易),密钥签名聚会,小组聚在一起交换公钥或电子邮件附件。然后,接收者可以像这样导入密钥
gpg --import marcelkey.asc
在任何时候,您都可以选择使用以下命令查看密钥环中的密钥
gpg --list-keys
该命令的结果取决于您拥有的密钥数量,但以下内容应该让您了解期望的结果。特别注意 1024D 后面的十六进制数字。那是您将来将引用的密钥 ID
/home/marcel/.gnupg/pubring.gpg ------------------------------- pub 1024D/3E2FCF7D 2004-01-07 Marcel Gagné ↪(Writer and Free Thinker at Large) <mggagne@salmar.com> sub 1024g/B24717BE 2004-01-07 pub 1024D/EE392B87 2004-01-07 Francois ↪(I am but a humble waiter) <francois@salmar.com> sub 1024g/F4E07040 2004-01-07
在您可以使用朋友的密钥来加密电子邮件消息之前,您需要对密钥进行签名以验证其真实性。这涉及做两件事。如果您绝对、非常确定密钥的来源,您可以跳过第一步,即获取密钥的指纹
$ gpg --fingerprint francois pub 1024D/EE392B87 2004-01-07 Francois ↪(I am but a humble waiter) <francois@salmar.com> Key fingerprint = 8C5B 775C 33F8 E97C 5ADC ↪019D C6C8 4B83 EE39 2B87 sub 1024g/F4E07040 2004-01-07
请注意,我在上面的命令中使用了此人的姓名,这是密钥信息的一部分。如果您的密钥信息中有多个同名的人,请指定密钥 ID。要验证此指纹,请让您的朋友以完全相同的方式检查他或她的个人密钥的指纹。最后一步是对密钥进行签名。您可以使用 --edit-key 选项来执行此操作
gpg --edit-key francois
整个过程并不太复杂。系统会要求您确认您是否真的、真诚地想要签署此公钥;系统会再次要求您使用密码短语进行确认。您需要对所有您想要与之交换加密电子邮件的人员执行此操作。但是,一旦完成,就让秘密消息流动吧。
顺便说一句,GnuPG 有许多不错的图形实用程序,本质上是命令行实用程序的友好包装器。KDE 附带了一个名为 KGpg 的漂亮实用程序,它可以很好地与桌面和电子邮件系统集成。例如,如果有人在 KMail 中将公钥作为附件发送给您,并且您已经启动了 KGpg(命令名称:kgpg),那么您无需将附件保存到文件,切换到命令行并执行上述步骤。您应该会看到一个友好的弹出窗口,如图 1 所示。

图 1. KMail 确认密钥导入。
使用此工具(停靠在您的面板中),您可以编辑密钥;添加、删除和更改信任级别;并执行所有您可以使用命令行 GnuPG 执行的操作,但只需单击鼠标即可。您甚至可以在网上进行密钥服务器查找,并使用照片 ID。它与其他 KDE 工具的集成意味着您可以拖放来加密或通过单击 Konqueror 或剪贴板来访问 GnuPG 功能。KGpg 是 KDE 3.1 的一个附加组件,但随着 KDE 3.2 的发布,它将成为标准发行版的一部分。图 2 显示了 KGpg 的运行情况。
另一个值得您花时间的图形管理工具是 gpa。这是默认的 GNU Privacy Assistant(GNU 隐私助手)和 GnuPG 项目的官方密钥环编辑器。它也可以从 www.gnupg.org 获取。
现在,是时候发送那些加密的电子邮件了。打开 KMail,单击菜单栏上的“设置”,然后选择“配置 KMail”,之后将出现“配置 KMail”对话框。在左侧的侧边栏中,找到标记为“安全”的图标,然后单击它(图 3)。
右侧的新窗口有三个选项卡:“常规”、“OpenPGP”和“加密插件”。我们对“OpenPGP”选项卡感兴趣。在该选项卡上,查看标记为“选择加密工具”的下拉框,并从列表中选择“GnuPG - GNU Privacy Guard”。目前,不要选择自动签名和加密所有消息。但是,您可能希望将密码短语保留在内存中;当第一次遇到加密消息时,系统仍然会询问您。单击“应用”。
接下来,单击左侧的“身份”选项卡。除非您定义了多个电子邮件身份,否则应该只有一个条目。单击“修改”,然后从结果对话框中选择“高级”选项卡。在该面板的中间(图 4)是 OpenPGP 密钥的空间。那是您的个人私钥。单击此处的“更改”以打开另一个窗口,您可以从中选择您的私钥信息。
完成后,单击“确定”关闭“编辑身份”窗口,然后再次单击“确定”关闭“配置 KMail”窗口。为了将密钥正确重新加载到 KMail 中,您可能需要关闭 KMail 并重新启动它。
现在,您原则上可以发送加密电子邮件了。如果您已经在密钥环中拥有朋友的公钥并且您已对密钥进行签名,那么剩下的就是编写您的电子邮件了。开始一条新消息,并写下您需要写的内容。当您准备好发送时,单击消息菜单栏上的“选项”。请注意此处与加密相关的两个有趣的选项。一个说“签名消息”,另一个说“加密消息”。
签名消息通过将电子签名附加到您的消息来使用您的密钥,但不会对其进行加密。接收消息的人员随后有一种方法来验证消息是否确实来自您,如果他们想要验证的话。由于消息未加密,因此任何人仍然可以阅读它。这只是一种确认消息来自声称已发送它的人员的方法。加密更进一步,您正在使用朋友的公钥来加密消息。在这两种情况下,KMail 都会在发送消息之前询问您的密码短语。
不幸的是,并非所有电子邮件软件包都遵循相同的加密规则。否则就太简单了,non(不是吗)?让我们在假设场景中使用 17 号桌的两位先生,Larry 和 Michael。每个人都需要向对方发送敏感的公司信息,因此信息必须加密。Larry 使用 Evolution,而 Michael 使用 KMail。我们已经介绍了使用 KMail 发送加密邮件,因此让我们花一点时间看看 Ximian Evolution 中的过程。
打开 Evolution 后,单击您的收件箱。现在,单击菜单栏上的“工具”,然后选择“设置”。您现在正在查看“Evolution 设置”窗口(图 5)。如果左侧边栏中的“邮件帐户”图标未被选中,请单击以立即选中它。大多数人只有一个主帐户。如果您有多个帐户,请选择您要用于加密的帐户,然后单击右侧的“编辑”按钮。“帐户”对话框将出现,顶部有几个选项卡。您感兴趣的是标记为“安全”的选项卡。查找标记为“PGP/GPG 密钥 ID”的字段,并在其中输入您的密钥 ID。单击“确定”关闭该对话框,然后再次单击“确定”退出“Evolution 设置”窗口。
假设 Larry 和 Michael 已经交换了公钥,Larry 现在准备发送加密电子邮件了。为此,他像平常一样撰写电子邮件。当他准备好发送时,他单击菜单栏上的“安全”,然后选择“PGP 加密”。当他单击“发送”时,系统会要求 Larry 输入他的 GPG 密码短语。输入后,消息将被发送。在我继续之前,我应该提到,如果您只想对消息进行签名,您可以从“安全”菜单中选择“PGP 签名”。
尽管所有这些加密和解密的东西都很棒,但还是存在一些问题。例如,许多软件包(包括 KMail)将内联加密消息,但少数其他软件包(例如 Evolution)则不然。相反,加密消息是 MIME 附件。因此,在 Evolution 中读取来自 KMail(或 Eudora 或 Outlook)的消息需要您将消息另存为文本文件。然后,您可以使用以下命令对其进行解密
gpg -d message.txt
要读取发送到 KMail(和其他一些)的 Evolution 加密消息,您需要保存附件而不是消息本身。解密它的过程与上述相同。
Linux 世界中提供了许多电子邮件客户端。KMail 和 Evolution 是流行的图形选择,Mozilla 也是如此。对于 Mozilla 用户,一个名为 Enigmail 的插件允许无缝加密和签名消息。基于文本的客户端也支持加密,无论是通过自身还是通过插件;mutt 和 pine 是流行的例子。
Mon Dieu!(我的天啊!)时间过得这么快吗?恐怕,mes amis(我的朋友们),打烊时间又到了。弗朗索瓦会在您离开之前再次为您斟满酒杯。当您悠闲地品尝最后一杯酒时,花一些时间创建并相互交换公钥。也许我可以被说服与你们中的一些人分享 Crème Linuxaise(Linux 奶油汤)——当然,前提是采取适当的安全预防措施。谁知道呢,我们的安全措施可能正是酒窖里那扇门仍然紧闭的原因!下次再见,mes amis(我的朋友们),让我们为彼此的健康干杯。A vôtre santé! Bon appétit!(祝您健康!祝您好胃口!)
资源
Gnu Privacy Guard (GnuPG): www.gnupg.org
KMail: kmail.kde.org
Mozilla: www.mozilla.org
Mozilla Enigmail: enigmail.mozdev.org
Ximian Evolution: www.ximian.com/products/evolution
Marcel's Web Site (check out the wine page): www.marcelgagne.com
Marcel Gagné (mggagne@salmar.com) 居住在安大略省密西沙加市。他是 Moving to Linux: Kiss the Blue Screen of Death Goodbye!(ISBN 0-321-15998-5),Addison Wesley 出版社出版的作者。他的第一本书是广受好评的 Linux System Administration: A User's Guide(ISBN 0-201-71934-7)。在现实生活中,他是 Salmar Consulting, Inc.(一家系统集成和网络咨询公司)的总裁。