你有没有自问过,电子邮件在传输过程中会不会被别人读取?不幸的是,即便是陌生人也可以不动声色地截取甚至篡改你的电子邮件。
在传统的邮寄方式(又称“蜗牛”)中,信件通常是封在信封内,贴上邮票,然后在邮局间传递,直到它们到达其目的地。通过互联网来邮寄信件没有传统方式安全;电子邮件通常在服务器间明文传输,没有采取任何特别措施来防止通信被别人偷看或篡改。
要帮助你保护个人隐私权,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 或更高,推荐你使用以下格式重新命名你的配置文件:
mv ~/.gnupg/options ~/.gnupg/gpg.conf 如果你从 1.0.7 以前的版本中升级,你可以在你的钥匙圈中创建签名缓存来减短钥匙圈的访问时间。要执行这一操作,执行一次以下命令:
gpg --rebuild-keydb-caches B.2.警告消息 在执行 GnuPG 命令时,你可能会看到这条消息:
gpg: Warning: using insecure memory! 出现该警告是由于非根用户无法锁定内存页。如果用户无法锁定内存页,他们可以执行内存外的“拒绝服务”(DoS)攻击;这就可能会造成安全问题。有关细节请参阅 http://www.gnupg.org/(en)/documentation/faqs.html#q6.1 。
你可能会看到以下消息:
gpg: WARNING: unsafe permissions on configuration file "/home/ username /.gnupg/gpg.conf" 如果你的配置文件的权限被设置为允许其他人读取,这则消息就会被显示。如果你看到这条警告,推荐你执行以下命令来改变文件的权限:
chmod 600 ~/.gnupg/gpg.conf 另一条常见的警告消息是:
gpg: WARNING: unsafe enclosing directory permissions on configuration file
"/home/ username /.gnupg/gpg.conf" 如果你的配置文件所在的目录的权限被设置为允许其他人读取,这则消息就会被显示。如果你看到这条警告,推荐你执行以下命令来改变文件的权限:
chmod 700 ~/.gnupg 如果你从以前的版本中升级 GnuPG,你可能会看到以下消息:
gpg: /home/ username /.gnupg/gpg.conf:82: deprecated option "honor-http-proxy"
gpg: please use "keyserver-options honor-http-proxy" instead 出现该警告是因为你的 ~/.gnupg/gpg.conf 文件包含以下行:
honor-http-proxy 版本 1.0.7 和更高喜欢使用另一种语法。把以上行改成:
keyserver-options honor-http-proxy B.3.生成钥匙对 要开始使用 GnuPG,你必须首先生成一组新的钥匙对:一把公钥和一把密钥。
要生成钥匙对,在 shell 提示下,键入以下命令:
gpg --gen-key 因为你使用最频繁的是你的用户帐号,你应该登录到你的用户帐号(而不是根帐号)时执行该命令。
你会看到一个介绍屏幕,其中有钥匙选项,包括一个 推荐的选项(默认),该屏幕类似:
gpg (GnuPG) 1.2.1; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details. Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection?
多数要求你选择选项的屏幕会在括号内列出默认选项。你可以按 [Enter] 键来接受默认选项。
在第一个屏幕上,你应该接受默认选项: (1) DSA and ElGamal 。该选项会允许你生成数码签名,并用两种技术来加密(和解密)。键入 1 然后按 [Enter] 键。
下一步,选择钥匙大小或长短。通常,钥匙越长,你的消息抵御攻击的能力就越强。默认的 1024 位对多数用户来说已足够强劲,因此按 [Enter] 键来接受默认。
下一个选项请你指定钥匙的有效期,通常,使用默认值( 0 = key does not expire )就可以。如果你想设立一个 过期日期,请记住,你需要通知和你互换公钥的人员 这个过期日期并向他们提供一把新公钥。如果你不设立过期日期,你会被要求确认这个决定。按 [y] 来确认你的决定。
你的下一个任务是提供用户 ID,这包括你的姓名、电子邮件地址,以及其它可选注解。当你结束后,你的面前就会出现你输入的信息的摘要。
一旦你接受了你的选择,你还必须输入一个口令句。
窍门:和你的帐号口令一样,好的词组口令是 GnuPG 安全保障的基本条件。譬如,你可以在口令中混和大小写字母、数字或标点符号。
输入并校验口令句之后,你的钥匙就生成了。你会 看到一条和以下相仿的消息:
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++.+++++.++++++++....++++++++++..+++++.+++++.+++++++.+++++++
+++.++++++++++++++++++++++++++++++++++++++..........................++++ 当屏幕活动停止后,你的新钥匙就制作成功并被放置在你的主目录下的 .gnupg 目录中。要列举你的钥匙,使用下面的命令:
gpg --list-keys 你会看到和以下相似的输出:
/home/ username /.gnupg/pubring.gpg -----------------------------------------
pub 1024D/B7085C8A 2000-06-18 Your Name <you@example.com>
sub 1024g/E12AF9C4 2000-06-18 如果你使用低于 1.0.6 的版本来生成 GnuPG 钥匙,把你的密钥导出后又导入一个新钥匙,你必须具体信任你自己的密钥来给使用高于 1.0.7 版本的项目签名。要信任你的钥匙,键入以下的命令(请替换 <user-id> ):
gpg --edit-key <user-id> 在 Command> 提示后键入 trust ,然后选择 5 = I trust ultimately 来信任你自己的密钥。
B.4.生成一份废弃证书 在你生成了钥匙对之后,你应该为你的公钥创建一份废弃证书。如果你忘记了你的口令句,或该口令句已被窃取,你应该公布这份证书来通知用户你的钥不应该再被使用。
注记: 在你生成废弃证书时,你不是在废弃你刚刚生成的钥匙,相反,你给自己提供了一种停止钥匙被继续公开使用的安全方法。在你忘记了口令、更换了 ISP(地址),或硬盘驱动器崩溃的情况下,这份废弃证书就可以用来宣告你原来的公钥无效。
在钥匙被废弃之前,你的签名对那些阅读你发出的信件的人有效,并可以被他们用来解密收到的消息。要生成废弃证书,使用 --gen-revoke 选项:
gpg --output revoke.asc --gen-revoke <you@example.com> 注意,如果你在上面省略了 --output revoke.asc 选项,你的废弃证书就会被显示在标准输出,即显示屏幕上。虽然你可以使用文本编辑器来把它们剪贴到一个文本文件中,但是直接把输出转写入登录目录中的文件可能更加简易可行。这样,你就可以保存证书以备将来之用,或将其移到软盘中,存放在一个安全之处。
其输出会类似:
sec 1024D/823D25A9 2000-04-26 Your Name <you@example.com>
Create a revocation certificate for this key? 按 [Y] 来创建列出钥匙的废弃证书。下一步,你会被要求选择废弃原因或提供描述。确认了原因后,输入你用来生成钥匙的口令句。
废弃证书( revoke.asc )创建完毕后,它会位于你的登录目录中。你应该把它复制到一张软盘中,并存放在一个安全的地方。(如果你不知道如何在 Red Hat Linux 中把文件复制到软盘上,请参阅 《Red Hat Linux 入门指南》 。)
B.5.导出公钥 在你使用公钥加密术之前,其他人必须有一份你的公钥。要把你的公钥提供给通信对方或钥匙服务器,你必须 导出(export) 这把钥匙。
你需要导出公钥才能在网页上显示它或在电子邮件中粘贴它,键入以下命令:
gpg --armor --export <you@example.com> > mykey.asc 你不会看到任何输出,因为你在导出公钥的同时还把输出转写入另一个文件,譬如一个叫做 mykey.asc 的文件。(若命令中不加 > mykey.asc ,钥匙就会被显示在标准输出即屏幕上。)
现在, mykey.asc 文件就可以被插入电子邮件或导出到钥匙服务器中。要查看这把钥匙,键入 less mykey.asc 来在分页器中打开该文件(键入 [q] 来退出换页器)。它应该与下面的输出相似:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.1 (GNU/Linux)
Comment: For info see http://www.gnupg.org
mQGiBDkHP3URBACkWGsYh43pkXU9wj/X1G67K8/DSrl85r7dNtHNfLL/ewil10k2
q8saWJn26QZPsDVqdUJMOdHfJ6kQTAt9NzQbgcVrxLYNfgeBsvkHF/POtnYcZRgL
tZ6syBBWs8JB4xt5V09iJSGAMPUQE8Jpdn2aRXPApdoDw179LM8Rq6r+gwCg5ZZa
pGNlkgFu24WM5wC1zg4QTbMD/3MJCSxfL99Ek5HXcB3yhj+o0LmIrGAVBgoWdrRd
BIGjQQFhV1NSwC8YhN/4nGHWpaTxgEtnb4CI1wI/G3DK9olYMyRJinkGJ6XYfP3b
cCQmqATDF5ugIAmdditnw7deXqn/eavaMxRXJM/RQSgJJyVpbAO2OqKe6L6Inb5H
kjcZA/9obTm499dDMRQ/CNR92fA5pr0zriy/ziLUow+cqI59nt+bEb9nY1mfmUN6
SW0jCH+pIQH5lerV+EookyOyq3ocUdjeRYF/d2jl9xmeSyL2H3tDvnuE6vgqFU/N
sdvby4B2Iku7S/h06W6GPQAe+pzdyX9vS+Pnf8osu7W3j60WprQkUGF1bCBHYWxs
YWdoZXIgPHBhdWxnY