你有没有自问过,电子邮件在传输过程中会不会被别人读取?不幸的是,即便是陌生人也可以不动声色地截取甚至篡改你的电子邮件。 在传统的邮寄方式(又称“蜗牛”)中,信件通常是封在信封内,贴上邮票,然后在邮局间传递,直到它们到达其目的地。通过互联网来邮寄信件没有传统方式安全;电子邮件通常在服务器间明文传输,没有采取任何特别措施来防止通信被别人偷看或篡改。 要帮助你保护个人隐私权,Red Hat Linux 9 包括了 GnuPG - GNU Privacy Guard (GNU 隐私卫士)- 它在典型 Red Hat Linux 安装中被默认安装。它又称为 GPG . GnuPG 是用于安全通信的工具;它是对 PGP(Pretty Good Privacy,一种广受欢迎的加密程序)加密技术的完全和免费的代替。使用 GnuPG,你可以给你的数据和通信加密,并可以使用 数码签名(digitally signing) 来验证你的通信。GnuPG 还能够解密及校验 PGP 5. x 。 因为 GnuPG 和其它加密标准兼容,你的安全通信可能会与其它操作系统(如 Windows 和 Macintosh)上的电子邮件程序兼容。 GnuPG 使用 公钥加密术(public key cryptography) 来为用户提供安全的数据交换。在公钥加密术方案中,你生成两把钥匙:公钥和密钥。你和通信对方或钥匙服务器互换你的公钥,你决不应该出示你的密钥。 加密依赖于对钥匙的使用。在传统的或对称的加密术中,传输双方都有相同的钥匙,他们可以使用这把相同的钥匙来给彼此的传输解密。在公钥加密术中,两把钥匙并存:一把公钥,一把密钥。个人或组织把他们的密钥保密,但是公布他们的公钥。用公钥加密的数据只能用密钥才能解密;用密钥加密的数据只能用公钥才能解密。
加密术的多数知识已超出本书涉及的范围;关于它的著述比比皆是。在本章中,我们只希望你对 GnuPG 有足够的了解,因而能在你自己的通信中开始使用加密术。关于 GnuPG、PGP 和加密技术的详细信息,请参见第 B.8 节。 B.1.配置文件在你第一次运行 GnuPG 命令的时候,你的主目录中会创建一个 .gnupg 目录。从版本 1.2 起,其配置文件名已从 .gnupg/options 改为 .gnupg/gpg.conf 。如果在你的主目录中找不到 .gnupg/gpg.conf , .gnupg/options 文件就会被使用。如果你只使用版本 1.2 或更高,推荐你使用以下格式重新命名你的配置文件:
如果你从 1.0.7 以前的版本中升级,你可以在你的钥匙圈中创建签名缓存来减短钥匙圈的访问时间。要执行这一操作,执行一次以下命令:
B.2.警告消息在执行 GnuPG 命令时,你可能会看到这条消息:
出现该警告是由于非根用户无法锁定内存页。如果用户无法锁定内存页,他们可以执行内存外的“拒绝服务”(DoS)攻击;这就可能会造成安全问题。有关细节请参阅 http://www.gnupg.org/(en)/documentation/faqs.html#q6.1 。 你可能会看到以下消息:
如果你的配置文件的权限被设置为允许其他人读取,这则消息就会被显示。如果你看到这条警告,推荐你执行以下命令来改变文件的权限:
另一条常见的警告消息是:
如果你的配置文件所在的目录的权限被设置为允许其他人读取,这则消息就会被显示。如果你看到这条警告,推荐你执行以下命令来改变文件的权限:
如果你从以前的版本中升级 GnuPG,你可能会看到以下消息:
出现该警告是因为你的 ~/.gnupg/gpg.conf 文件包含以下行:
版本 1.0.7 和更高喜欢使用另一种语法。把以上行改成:
B.3.生成钥匙对要开始使用 GnuPG,你必须首先生成一组新的钥匙对:一把公钥和一把密钥。 要生成钥匙对,在 shell 提示下,键入以下命令:
因为你使用最频繁的是你的用户帐号,你应该登录到你的用户帐号(而不是根帐号)时执行该命令。 你会看到一个介绍屏幕,其中有钥匙选项,包括一个 推荐的选项(默认),该屏幕类似:
多数要求你选择选项的屏幕会在括号内列出默认选项。你可以按 [Enter] 键来接受默认选项。 在第一个屏幕上,你应该接受默认选项: (1) DSA and ElGamal 。该选项会允许你生成数码签名,并用两种技术来加密(和解密)。键入 1 然后按 [Enter] 键。 下一步,选择钥匙大小或长短。通常,钥匙越长,你的消息抵御攻击的能力就越强。默认的 1024 位对多数用户来说已足够强劲,因此按 [Enter] 键来接受默认。 下一个选项请你指定钥匙的有效期,通常,使用默认值( 0 = key does not expire )就可以。如果你想设立一个 过期日期,请记住,你需要通知和你互换公钥的人员 这个过期日期并向他们提供一把新公钥。如果你不设立过期日期,你会被要求确认这个决定。按 [y] 来确认你的决定。 你的下一个任务是提供用户 ID,这包括你的姓名、电子邮件地址,以及其它可选注解。当你结束后,你的面前就会出现你输入的信息的摘要。 一旦你接受了你的选择,你还必须输入一个口令句。
输入并校验口令句之后,你的钥匙就生成了。你会 看到一条和以下相仿的消息:
当屏幕活动停止后,你的新钥匙就制作成功并被放置在你的主目录下的 .gnupg 目录中。要列举你的钥匙,使用下面的命令:
你会看到和以下相似的输出:
如果你使用低于 1.0.6 的版本来生成 GnuPG 钥匙,把你的密钥导出后又导入一个新钥匙,你必须具体信任你自己的密钥来给使用高于 1.0.7 版本的项目签名。要信任你的钥匙,键入以下的命令(请替换 <user-id> ):
在 Command> 提示后键入 trust ,然后选择 5 = I trust ultimately 来信任你自己的密钥。 B.4.生成一份废弃证书在你生成了钥匙对之后,你应该为你的公钥创建一份废弃证书。如果你忘记了你的口令句,或该口令句已被窃取,你应该公布这份证书来通知用户你的钥不应该再被使用。
在钥匙被废弃之前,你的签名对那些阅读你发出的信件的人有效,并可以被他们用来解密收到的消息。要生成废弃证书,使用 --gen-revoke 选项:
注意,如果你在上面省略了 --output revoke.asc 选项,你的废弃证书就会被显示在标准输出,即显示屏幕上。虽然你可以使用文本编辑器来把它们剪贴到一个文本文件中,但是直接把输出转写入登录目录中的文件可能更加简易可行。这样,你就可以保存证书以备将来之用,或将其移到软盘中,存放在一个安全之处。 其输出会类似:
按 [Y] 来创建列出钥匙的废弃证书。下一步,你会被要求选择废弃原因或提供描述。确认了原因后,输入你用来生成钥匙的口令句。 废弃证书( revoke.asc )创建完毕后,它会位于你的登录目录中。你应该把它复制到一张软盘中,并存放在一个安全的地方。(如果你不知道如何在 Red Hat Linux 中把文件复制到软盘上,请参阅 《Red Hat Linux 入门指南》 。) B.5.导出公钥在你使用公钥加密术之前,其他人必须有一份你的公钥。要把你的公钥提供给通信对方或钥匙服务器,你必须 导出(export) 这把钥匙。 你需要导出公钥才能在网页上显示它或在电子邮件中粘贴它,键入以下命令:
你不会看到任何输出,因为你在导出公钥的同时还把输出转写入另一个文件,譬如一个叫做 mykey.asc 的文件。(若命令中不加 > mykey.asc ,钥匙就会被显示在标准输出即屏幕上。) 现在, mykey.asc 文件就可以被插入电子邮件或导出到钥匙服务器中。要查看这把钥匙,键入 less mykey.asc 来在分页器中打开该文件(键入 [q] 来退出换页器)。它应该与下面的输出相似:
B.5.1.导出到钥匙服务器如果与你通信的人寥寥无几,你可以导出公钥后逐一地发送给他们。可是,如果你的朋友遍布四海,逐一发送公钥就非常费时费力了,你可以使用钥匙服务器来解决这个问题。 钥匙服务器是一个在互联网上为任何人贮存和传递公钥的仓库。可用的钥匙服务器有很多,多数都试图保持彼此同步;向一个钥匙服务器发送公钥就如同向所有钥匙服务器发送公钥一样。通信人可以从钥匙服务器中请求你的公钥,把它导入到他们的钥匙圈上,然后他们就可以和你进行安全通信了。
你可以从 shell 提示或浏览器中发送你的公钥;显然,你必须在线才能发送或从钥匙服务器接收钥匙。
图 B-1. 复制公钥 注意,如果你向另一个基于网站的钥匙服务器提交公钥,方法和以上步骤基本上相同。 至此你便大功告成。不管你使用的是 shell 提示还是万维网,你都会看到一条消息通知你钥匙已被成功提交 — 或在 shell 提示下,或在钥匙服务器的网站上。从现在起,想和你安全通信的用户就可以导入你的公钥并把它添加到他们的钥匙圈上了。 B.6.导入公钥钥匙互换的另一方面是把别人的公钥导入到你的钥匙圈上 — 它和导出公钥一样简单。当你导入别人的公钥时,你就可以用它来解密他们发来的邮件并根据你钥匙圈上他们的公钥来检查他们的数码签名。 导入钥匙的最简单的方法之一是从网站上下载或保存它。 公钥被下载并保存到 key.asc 文件后,使用下列命令来把它添加到你的钥匙圈上。
另一种保存钥匙的方法是使用浏览器的 「Save As(另存为)」 功能。如果你使用 Mozilla 之类的浏览器,你可以在钥匙服务器中找到某钥匙,把该网页存为文本文件(点击 File => Save Page As )。在 Files of Type 旁边的下拉菜单中,选择 Text Files (*.txt) 。然后,你就可以导入该钥匙 — 但是别忘了你储存的文件名。譬如,如果你把钥匙存为叫做 newkey.txt 的文本文件,要导入文件,在 shell 提示下,键入下面的命令:
它的输出会与下面相似:
要检查该过程是否成功,使用 gpg --list-keys 命令;你应该看到你的钥匙圈上列出了一把新导入的钥匙。 当你导入公钥后,你把它添加到你的 钥匙圈(keyring) 上,它是一个保存公钥和密钥的文件。 然后,当你从该实体中下载文档或文件时,你可以根据添加到你的钥匙圈上的钥匙来校验那个文档。 B.7.数码签名在哪里?数码签名可以用来和你手写的签名做比较。和传统的通信方式不同,传统签名有可能被伪造,数码签名却无法被伪造。这是因为该签名是用你的独特密钥制作的,收信人可以使用你的公钥来校验它。 数码签名会给文档加注时间戳;这意味着你在给文档签名时的时间也是签名的一部分。因此,如果某人企图修改文档,签名校验就会失败。某些电子邮件程序,如 Exmh 或 KDE 的 KMail ,在程序的界面中包括了使用 GnuPG 来给文档签名的功能。 两种有用的数码签名是: 净签(clearsigned) 文档和 分离签名(detached signatures) 。这两类签名都使用同样的验证保安,不要求收信人给你的整条消息解密。 在净签消息中,你的签名会在信件主体内以文本块形式出现;分离签名是和你的通信一起发出的一个分开的文件。 B.8.其它资料加密技术中可以研究讨论之处极多,这里只对 GnuPG 蜻蜓点水地介绍了一下。如果你想深入了解这方面的知识,可以参看下面的资料。 B.8.1.安装了的文档
B.8.2.有用的网站
|








