大规模监控侵犯了我们的基本权利,威胁了言论自由。本指南将会教授一个基本的监控自我保护技巧:加密电子邮件。学会后,你将能够收发其他人(包括截获邮件的监控代理和窃贼)无法阅读的电子邮件。你需要的是一台带网络连接的计算机,一个电子邮箱账户和大约四十分钟时间。
即使你没有不可告人的秘密,使用加密可以保护对方的隐私,使得大规模监控系统变得难以运作。如果你确实有重要的东西需要保护,那么你并不孤独;告密者在揭发人权侵犯、腐败和其他犯罪问题时,也是使用同样的工具保护他们身份。
除了使用加密技术,对抗监控还需要我们作政治斗争,以减少政府对我们的海量数据收集。但重中之重是保护好你自己,使得政府难以监控你的通信。本指南将帮助你做到这一点。它是为初学者设计的,但如果你已经掌握了GnuPG 的基本知识,或是一位资深自由软件用户,你会喜欢进阶提示与加密探讨会指南。
本指南需要使用自由许可的软件;自由软件是完全透明的,任何人都可以复制它,制作自己的版本。这使得它比专有软件(比如Windows 和 macOS)更难受到监控。在fsf.org上了解更多关于自由软件的信息。
大多数 GNU/Linux 操作系统自带 GnuPG,如果你正在使用这类系统,你不必下载 GnuPG。如果你使用的是 macOS 和Windows,请按以下步骤下载 GnuPG。在配置 GnuPG 前,你需要一款桌面电子邮件程序。大多数 GNU/Linux 发行版已经安装好IceDove 了,它可能叫另一个名字 Thunderbird。电子邮件程序提供了访问邮箱账户的新途径(当然你也可以像 Gmail那样通过浏览器访问),但它拥有更多的功能。

打开电邮程序,按照向导一步一步配置好电邮账户。通常第一步是从“账户设置” →“添加邮件账户”开始的。从系统管理员和电邮账户帮助页面可以获得电邮服务器设置信息。
如果使用的是 GNU/Linux,或是已经安装了 GnuPG,请跳至第 2 节。
如果你使用的是 macOS 或 Windows,你首先需要安装 GnuPG程序。根据你自己的操作系统完成下述操作。在本指南后面的篇幅,所有操作系统的步骤都是相同的。
macOS 的默认包管理器安装 GnuPG 和其他自由软件非常困难(比如安装 Emacs、GIMP 和 Inkscape)。我们推荐安装叫Homebrew 的第三方包管理器,用它安装GnuPG,能够使安装过程变得简单。对此,我们需要用到一个叫“终端”(Terminal)的程序,它已经预安装在 macOS 上了。
# 在Homebrew主页点击剪贴板图标复制第一条命令,把它粘贴在终端里。按回车键,等待安装完成。
# 在终端输入如下命令安装 GnuPG:brew install gnupg gnupg2
GPG4Win 是一个包含 GnuPG的电邮文件加密的软件包。下载安装它的最新版本,所有步骤都选择默认选项。安装结束后,你可以关闭程序创建的窗口。
通常,术语 GnuPG, GPG, GNU Privacy Guard, OpenPGP 和 PGP可以互换其称呼。技术上说,OpenPGP(Pretty Good Privacy)是一种加密标准, GNU Privacy Guard(常被缩写为GPG 和 GnuPG)是实现该标准的程序。大多数电邮程序提供了 GnuPG 接口,GnuPG 也有叫 GnuPG2 的新版本。

要使用 GnuPG系统,你将会用到一把公钥和一把私钥,他们合称为密钥对。每一把都是由随机字母数字组成的长字符串,并且独一无二。你的公钥和私钥是由一种特殊的数学函数联系在一起。
你的公钥不像现实中的钥匙,它被公开储存在被称之为密钥服务器的在线目录上。人们可以下载使用它,借助GnuPG,人们向你发送加密邮件。你可以把密钥服务器想象成一本电话簿;想要给你发送加密邮件的人能够找到你的公钥。
你的私钥更像是现实中的钥匙,你需要自行保管(在你的计算机中)。你使用 GnuPG和你的私钥来解密他人发给你的加密邮件。无论如何,你都不应该向他人分享你的私钥。
除了加密和解密,你可以使用这些密钥对消息进行签名,并验证其他人签名的真实性。我们将在下一节里详细探讨它。


我们将在终端里使用 GnuPG 程序的命令完成创建密钥对。
无论在 GNU/Linux、macOS 还是 Windows 系统,你都能够使用终端(macOS 叫 Termial,Windows 叫PowerShell),一些 GNU/Linux 发行版可以通过快捷键Ctrl + Alt + T 打开终端。
# 输入gpg --full-generate-key 开始生成密钥。
# 创建何种类型的密钥,请选择默认选项:1 RSA and RSA.
# 输入以下密钥长度:4096 来得到强壮的密钥。
# 选择失效日期;我们建议2y (两年)。
按照提示继续设置个人信息。
使用--gen-key 还是--full-generate-key 视使用的 GPG版本而定。
在“密码”界面,取一个强壮的密码吧!你可以自行取密码,也可以使用 Diceware 方法。自己取密码虽然快捷,但不安全。使用 Diceware需要更长时间,并要求掷骰子,但它能生成攻击者难以猜测的密码。要使用它,请阅读 Micah Lee 写的这篇文章的“使用Diceware 生成安全密码 ”章节。
如果你喜欢自己取密码,想一个能记住的至少十二字符长的东西,包含至少一个小写和一个大写字母,至少一个数字或标点符号。永远不要使用你在其他地方使用过的密码。不用使用任何可辨认的规律,诸如生日、电话号码、宠物名字、歌词或书中的名言等等。
gpg --version 可以检查是否安装了 GnuPG。如果未安装,在 GNU/Linux操作系统下会有类似提示:Command 'gpg' not found, but can be installed with: sudoapt install gnupg。使用这条命令安装 GnuPG。sudo apt updatesudo apt install gnupg2gpg2 --full-generate-key 使用--gen-key 还是--full-generate-key 视使用的 GPG版本而定。
gpg --list-keys 查看所有密钥。你的密钥将会显示在上面,在稍后的第 3 节,爱德华的密钥也会显示出来。gpg --list-key [你的邮箱]。gpg --list-secret-key 查看自己的私钥。
我们将公钥上传到密钥服务器,想给你发送加密信息的人现在可以从因特网上下载到你的公钥了。上传时菜单中有多个密钥服务器可供选择,它们拥有彼此的完整副本,所以你选择哪一个无关紧要,但最好记住上传密钥的原始服务器。请注意,新密钥上传后,服务器间可能要数小时才能完成同步。
# 复制 KeyID:gpg --list-key [你的邮箱] 这条命令将列出公钥信息,它包括KeyID,这是一串由数字字母组成的独一无二的字符。复制 KeyID,你将在下面命令中使用它。
# 上传密钥到服务器:gpg --send-key [keyID]
使用下面命令导出私钥,并在下一步中导入到电邮客户端中。将它储存在安全的地方,如果需要转移密钥,请保证以可信的方式传输,避免泄露私钥。使用下面命令导出密钥:
$ gpg --export-secret-keys -a [keyID] > my_secret_key.asc
$ gpg --export -a [keyID] > my_public_key.asc
你需要生成吊销证书,并把它保存在安全的地方(请参考第 6.C步了解如何安全保存吊销证书)。它能够在发生密钥丢失或密钥泄露时用到。此步骤是本指南的重要步骤,您将在第5 节里了解原因。
# 复制 KeyID:gpg --list-key [你的邮箱] 这条命令将列出公钥信息,它包括KeyID,这是一串由数字字母组成的独一无二的字符。复制 KeyID,你将在下面命令中使用它。
# 生成吊销证书:gpg --gen-revoke --output revoke.asc [keyID]
# 它将引导你输入吊销原因,我们建议选择1 = key has been compromised。
# 但你也可以不输入原因;将它留空,按回车键,确认选择。
gpg --keyserverkeys.openpgp.org --send-key [keyID]像其他文件和目录一样,gpg 密钥是权限的主体。如果权限没有正确设置,系统可能无法接受你的密钥。下面步骤将帮助你排查问题,更正权限设置。
# 检查权限:ls -l ~/.gnupg/*
# 设置权限为只有你可以读、写和执行。这是该目录的推荐权限设置。
使用此命令设置:chmod 700 ~/.gnupg
# 设置权限为只有你可以读和写。这是目录里密钥文件的推荐权限设置。
使用此命令设置:chmod 600 ~/.gnupg/*
如果需要在 ~/.gnupg 里创建目录,你必须对这个目录给予执行权限。打开目录需要执行权限。关于权限的更多信息,请查看这篇指南。
使用下面命令转移密钥。将它保存在安全的地方,以可信的方式进行传输,避免密钥泄露。如下是导入和导出密钥的命令:
$ gpg --export-secret-keys -a [keyID] > my_private_key.asc
$ gpg --export -a [keyID] > my_public_key.asc
$ gpg --import my_private_key.asc
$ gpg --import my_public_key.asc
确认 KeyID 是正确的,将它添加到完全信任之中:
$ gpg --edit-key [你的邮箱]
因为这是你的密钥,你应当选择ultimate。你不应该对他人的密钥选择完全信任。
参考第 2.B步的疑难解答有关权限的信息。当传输密钥时,权限设置可能会变得混乱,提示出现一些错误。这是一些简单的避免方法
Icedove(或 Thunderbird)电邮程序集成了 PGP 功能,这让它非常便于使用。我们将在下面一系列步骤中带你在电邮客户端里使用密钥。




完成邮件加密设置后,你就帮助增加了因特网上的加密流量。首先我们把密钥导入到电邮客户端,我们也将学习如何从服务器导入其他人的公钥,这样你就可以发送和接收加密邮件。
# 打开电邮客户端,选择“工具” →OpenPGP 密钥管理器
# 选择“文件” →从文件导入私钥
# 选择你在第 2.B 步导出保存的私钥文件
# 使用密码解锁
# 你会看到 “已成功导入 OpenPGP 密钥!” 的窗口确认导入成功
# 在 “账户设置” → “端到端加密”里,确认你的密钥已经导入,并选择将此密钥视为个人密钥。

现在你将要尝试与名为爱德华(Edward)的 FSF 计算机程序进行通信,它掌握了如何加密。除非另有说明,你与真人通信时也遵循同样的步骤。

这一步很特别,因为你和真人通信时不需要做。在你的邮件程序菜单中,选择“工具” →“OpenPGP密钥管理器”。你应当看到你的密钥在弹窗的列表中。在你的密钥处右键,选择“通过电子邮件发送公钥”。这会创建一封草稿消息,就好像你点击了“撰写”按钮,在附件中会看到你的公钥。
收信人地址填写edward-zh@fsf.org。在邮件主题栏和正文里任意撰写内容。先别发送。
我们希望爱德华能够打开你的密钥文件,因此我们需要第一封特别邮件是未经加密的。请下拉菜单“安全”,选择不加密,将加密关闭。加密关闭后,点击发送。
爱德华可能需要两三分钟回复邮件。在这期间,你可以跳过前面的部分并阅读本指南善用加密章节。爱德华回复后,继续下面的步骤。从这里开始,你所要做的与真人通信时相同。
你打开爱德华的回复邮件,在使用私钥解密消息时,GnuPG 可能会提示要求输入密码。


你需要爱德华的公钥才能给他发送加密邮件,因此你需要从密钥服务器下载它。有两种不同方式可以做到:
选项一 爱德华的公钥在它回复你的第一封邮件里。在邮件右侧,撰写区域的上方,你能够找到 OpenPGP按钮,旁边有锁和齿轮图标。点击它,选择“此消息是用您没有的密钥所签名的”旁边的寻找。爱德华密钥的细节将会显示。
选项二 打开 OpenPGP 密钥管理器,在密钥服务器选择在网上寻找密钥。输入爱德华电子邮箱,导入密钥。
接受 (未验证) 选项将这个你要添加到密钥管理器,现在它将用于向爱德华发送加密电邮和验证数字签名。
弹出窗口将确认是否导入爱德华密钥,你会看到这个密钥关联了许多邮箱。这没问题,你可以安全导入密钥。
因为你使用了爱德华的公钥加密邮件,解密则就要求爱德华的私钥。爱德华是唯一有它私钥的人,因此除了他,没人能解密。
在你的邮件程序中写一封新的邮件,收信人地址填写edward-zh@fsf.org。在主题中填写“加密测试”或类似的词语,并在正文中写一些内容。
这次,在下拉菜单“安全”里选择要求加密 将加密开启。加密开启后,点击发送。
即便你加密了邮件,主题行是不受加密的,因此不要在主题里填写私人信息。发送人和接收人的邮件地址也是不经过加密的,因此监控系统可以知道你在和谁通信。同时,监控代理将会知道你使用了GnuPG,即便它不知道你在说什么。当你发送附件时,可以选择是否加密,加密附件是独立于真实邮件的。
为了防范潜在的攻击,你可以关闭 HTML 格式,使用纯文本渲染正文。在 Icedove 和 Thunderbird 里,到 “查看” →“消息体为” →纯文本 可以做到这一点。

当爱德华收到你的邮件,它会使用它的私钥去解密消息,并给你回复。
爱德华可能需要两三分钟回复邮件。在这期间,你可以跳过前面的部分并查阅本指南善用加密章节。
爱德华将用加密邮件给你回信,告知你的邮件已经收到并被解密。你的邮件客户端会自动解密爱德华的消息。
邮件里的 OpenPGP将会在锁形图标上显示绿色标记,表明消息已经加密。橙色警告表明密钥已经被接受但未经验证。如果你未接受密钥,你会看到小问号标记。点击提示按钮将引导你设置密钥属性。
GnuPG提供了对消息或文件签名的方式,验证它们的确来自于你,并且始终未被篡改。这些签名比笔头签名更强有力——因为无法被伪造,没有你的私钥就无法签名(这是保护私钥安全另一个的原因)。
你可以向任何人签名消息,因此让对方意识到你在使用 GnuPG——他们可以和你进行安全的通信——是个不错的主意。如果他们没有GnuPG,他们仍将有能力阅读你的消息并查看你的签名。如果他们有 GnuPG,他们将有能力验证你签名的真实性。
要想对发给爱德华的邮件签名,并撰写一些消息给他,点击紧邻锁形图标的铅笔图标,它会变成金黄色。你要是对消息签名,GnuPG可能会在你点击发送消息前询问你密码,这是因为签名需要解锁私钥。
在“账户设置” → “端到端加密”,你可以选择默认添加我的数字签名。

邮件加密是一种强有力的技术,但它有弱点:它要求验证某人的公钥的确是属于他的。否则,无法阻止攻击者使用你朋友姓名和邮件地址,生成密钥,进行冒充。这就是为什么自由软件程序员开发出密钥签名和信任网。
当你签署了某人的公钥,相当于你公开声称这把公钥经你验证是属于他的,而不是其他人。
签署密钥和消息签名使用了同种类型的数学运算,但有着不同的含义。通常,对自己邮件进行签名是一种良好实践,但随意签署别人的公钥,最终你会意外地为冒充者做了担保。
使用你的公钥的人可以看到谁签署了此公钥。长期使用 GnuPG后,你的密钥可能有数百支签名。你可以认为,值得信任的人对这支公钥签名的数量越多,那么这支公钥越可信。信任网是 GnuPG用户的聚集地,他们用签名传递着信任链,连接彼此。

在电邮菜单中,找到 OpenPGP 密钥管理器,右键爱德华的密钥,选择密钥属性。
在“您是否要接受”里,选择“接受,但我还未验证过是否为正确密钥”。
你刚刚有力地表达了“我信任爱德华的公钥,它的确属于爱德华”。由于爱德华是一个机器人,这对它并不意味着什么,但这是一个良好的实践。但对于真人,这很重要。在签名前检查 ID 章节阅读更多有关对其他人密钥签名的信息。
密钥的指纹可以确认其对应使用的公钥,指纹是像 F357AA1A5B1FA42CFD9FE52A9FF2194CC09A61E8(这是爱德华的密钥)的数字串。电邮程序菜单的 OpenPGP密钥管理,右键选择密钥属性,可以查看当前计算机中你和其他人的公钥指纹。在告诉他人你邮箱地址的同时,分享你的指纹是一个不错的实践,这样人们可以在从服务器下载你公钥的时候,再次检查下载的公钥是否正确。
你可能已经看到有人使用短 key ID 表示公钥。密钥管理窗口中,你可以直接看到 keyID。这八位字符曾经用于表示身份,现已经不再安全可靠。你需要检查完整的指纹,以验证你拥有对方正确的密钥。不幸的是,有人故意生成的后六位指纹与另一支密钥相同的指纹进行伪造欺骗,这种情况是很常见的。
每个人使用 GnuPG 方法不尽相同,遵循一些基本实践是保护邮件安全的重要方式。一旦不遵守,你便是拿着通信双方的隐私做冒险,并且危及信任网。

加密消息是多多益善的。如果你只是偶然加密邮件,突兀的加密消息就像给监控系统发出警报。如果全部邮件都是加密的,监控人员将不知道从何处开始——这不是说加密部分邮件毫无帮助——它使大规模监控变得困难,这是重要的开始。
除非你不想暴露身份(这还要求其他保护措施),每一封邮件都不签名是没有理由的,无论你是否加密。除了允许 GnuPG验证消息确实来自于你,签名是一种非侵入性的方式,提醒别人你在使用 GnuPG,并表示对安全通信的支持。如果你经常给不熟悉 GnuPG的人发送签名消息,在你的标准邮件签名(这里的签名指的是文字,而非密码学签名)中附上本指南的链接将会不错。

GnuPG 能够使邮件更安全,但仍要小心非法密钥,它可能导致消息落入坏人之手。使用非法密钥加密的邮件可能能被监控程序读取。
在邮件程序里,回到爱德华发给你的第一封加密邮件。因为爱德华用你的公钥加密了它,在 OpenPG 按钮上方会有一个绿色标记。
使用 GnuPG 时,要养成看通知条的习惯。如果你收到的邮件是用不受信任的密钥签名的,程序会提醒你。
还记得你何时生成密钥和保存 GnuPG生成的吊销证书的吗?该将证书备份到安全的数字储存设备上了——理想的地方是闪存盘、磁盘和硬盘,它们存放在家中安全的地方——而不是你随身携带的设备。我们已知的最安全方式是将吊销证书打印出来,保存在安全地方。
如果你的私钥丢失或失窃,你需要这张证书文件让人们知道你不再使用这对密钥对。
如果你丢失了私钥或是某人取得了它(比如你的计算机失窃或是被入侵),在其他人使用你私钥阅读你的加密邮件或是伪造签名前,立即吊销是非常重要的。本指南不包含如何吊销密钥,但你可以遵循这些指示。在你吊销完成后,生成新的密钥对,并给所有使用你的密钥的人发送邮件,并附上新密钥的拷贝,确保他们知道发生了什么。
当你使用网页浏览器获取你的邮件,那么你使用的是网页邮箱,它是一个直接储存在网站里的电子邮件程序。和网页邮箱不同,你的桌面邮件程序是运行在你自己的计算机上。即使网页邮箱无法解密加密过的邮件,它仍然会以加密形式显示出来。如果你常用的是网页邮箱,当你收到一封混乱的电子邮件时,你应当知道去打开自己的电子邮件客户端。