极客们都是怎么发邮件的?


【技术宅必备绝技,文艺人士慎入】通过国内的邮件服务商发送私密邮件是极为不安全的,这一点我在保护隐私,请用Gmail里已经讲得很清楚,今天我来介绍一种在极客圈颇为流行的邮件发送方式,可以完全地躲避国内的监控,你只要不打算对美国进行恐怖袭击,就连FBI也破解不了你发出去的私密邮件。

这套方法是通过采用开放OpenPGP标准的GnuPG开源软件(源代码地址:https://www.gnupg.org/download/来收发邮件。在Linux平台上,这个工具已经是内嵌的,只需用命令行直接安装即可(用Linux的本身就是高手,一定是知道如何使用GnuPG)。对于OS X和Windows的用户来说,都有直接安装的二进制版本,下载地址:https://www.gnupg.org/download/,找到最下面的GnuPG binary release,下载相应的版本即可(建议下载完整版,不用敲命令行,使用方便)。

邮件加密和数字签名的原理在以前的文章中已详细介绍。

为了讲解方便,我们先讲解基于命令行的,如果你比较喜欢图形工具(PGP4win完整版已内置GPA和Kleopatra图形界面),仍然建议先阅读完这部分内容,再看后面的图形界面教程,因为图形工具的操作基本上跟下面的命令一一对应。


一、生成密钥

$ gpg --gen-key

此命令可以生成地球上惟一的一对钥匙对,运行后会询问你几个问题,第一个问题如下:

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection?

输入1并回车,即采用默认的RSA加密算法。然后选择钥匙的长度:

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)

直接回车。然后选择钥匙的有效期限:

Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)

比如输入30表示有效期为30天,数字后面直接加上单位,比如30m表示30个月,30y表示30年(读完上述的English你就懂了)。我直接回车,钥匙永远有效。

然后询问你确定吗?果断输入y并回车。

接下来是填写一些个人信息:

Real name: since56
Email address: [你的用户名]@[邮箱服务器]
Comment: [可选]

第一行输入用户名,随便输入,我填写网名since56。

第2行输入你的E-mail地址。

第3行输入一行备注,备注的作用是进一步标识自己的身份。

信息输入完之后再输入o并回车。

这三行信息用于产生一个标识(uid),用来标识这个钥匙对,在下面的命令行里,就可以用用户名或者E-mail地址来指定这个钥匙对。

GnuPG 的钥匙(包括公钥和私钥)是保存在本机上的,如果有人或者黑客进入你的计算机把你的私钥盗走了,那么你的身份就有可能被冒充的风险。所以接下来你需要输入一个密码(passphrase)用于保护你的私钥,这个密码解密文件的时候要用到哦!推荐使用KeePass中的随机密码生成器生成高强度密码


二、查看本机钥匙信息

$ gpg –list-keys

输出的结果如下:

pub 2048R/C6C07752 2016-02-26 [expires: never expires]
uid since56  <[***]@[***]>
sub 2048R/C6C07752 2016-02-26 [expires:never expires]

上面的三行包括了你刚刚创建的钥匙的信息,特别注意C6C07752这个公钥id,这是唯一标识公钥的序列(用于公钥服务器上的公钥导入)。本机私钥的查看可以使用如下命令行:

$ gpg –list-secret-keys

三、导出公钥至公钥服务器

$ gpg -a --output key.public --export uid

使用以上命令即可生成一个名为key.public的公钥文件,为导入公钥服务器做准备,uid表示你的钥匙用户名(如since56),要查看此文件的内容,输入一下命令行:

$ cat key.public

发布到公钥服务器的方法有两种:

①命令行如下:

$ gpg --keyserver keys.gnupg.net --send-key id

id替换成你的公钥id。

②打开key.public文件,复制其中的内容,粘贴到默认的公钥服务器(地址:keys.gnupg.net),submit即可。

注:提交后不同公钥服务器之间会进行同步,可能需要过几分钟才能被查询到。


四、导入他人的公钥,进行文件加密操作

就拿我的公钥来说,你只要输入如下命令行:

$ gpg --keyserver keys.gnupg.net --search-key since56

就能查找我的公钥,大致内容如下:

gpg: searching for “since56” from hkp server keys.gnupg.net
(1) since56 <[***]@[***]>
2048 bit RSA key C6C07752, created: 2016-02-26
Keys 1-1 of 1 for “since56”. Enter number(s), N)ext, or Q)uit >

检查公钥id正确后,就果断按下1,如果有重名的话,可以按N来查看下一条。

如果你确切知道要导入的公钥id,也可以跳过搜索这步而直接使用如下的命令导入:

$ gpg --keyserver keys.gnupg.net --recv-key id

当然你也可以直接把公钥文件key.publc发送给对方,运行命令行:

$ gpg --import key.public

直接导入。

为了万无一失,你也可以通过查看对方公钥id的指纹值(fingerprint)来决定是否签收它,查看指纹值的命令行:

$ gpg --fingerprint

列出的结果如下:

pub 2048R/C6C07752 2016-02-26 [expires: never expires]
Key fingerprint = 8229 4294 4B64 AB84 46DA BE25 C2B3 FDE2 C6C0 7752
uid since56 <[***]@[***]>
sub 2048R/C6C07752 2016-02-26 [expires: never expires]

如果你看到取回来的公钥指纹值跟我博客这篇文章的一致,就可以放心大胆的签收了。签收命令如下:

$ gpg --sign-key since56

下面是最激动人心的加密文件操作了,任意选择一文件(以example.txt为例),使用如下命令加密它:

$ gpg -a --output example_encryption.txt -r since56 -e example.txt

这样就能生成一个加密文件example_encryption.txt,找到它,就准备把它发送给小伙伴吧!

小练习:现在你可以用 E-mail 把加密后的文件发给我,或者把里面的内容复制然后粘贴到我的博客评论里,接下来我会解密然后回复你。如果你希望我也以加密的形式回复你,记得同时告诉我你的公钥 id。


五、解密操作

假设我已经收到你发过来的加密文件 example_encryption.txt,使用如下的命令解密:

$ gpg --output example_plain.txt -d example_encryption.txt

解密文件为example_plain.txt。

至此,你已经完全学会GnuPG加密/解密文件了。

 

下面我来介绍数字签名的操作流程:

数字签名的形式只要有两种:

①生成独立的签名文件

同样是一个文本文件 example.txt,使用如下命令即可对它进行数字签名:

$ gpg -a -b example.txt -u uid

注:-b 表示以生成独立的签名文件的方式进行签名-u 后面加上私钥的uid

命令执行完毕之后,会在当前文件夹里生成一个 example.txt.asc 的文件,这个文件即签名(signature)。现在我应该把原信息文件 message.txt 连同签名文件 message.txt.asc 一起寄给你,然后你使用如下命令检验:

$ gpg --verify example.txt.asc

不出意外,你应该会看到如下两行:

gpg: Signature made Thu 18 Apr 2016 11:57:00 AM CST using RSA key ID C6C07752
gpg: Good signature from “since56<[***]@[***]>”

Good signature表示签名通过(即意味着原信息的内容没有被篡改或者伪造)。

②与原文件合并成一个新文件(签名会附在原文件的后面),签名验证方法同上,如果需要,也可以使用如下命令:

$ gpg --output example_original.txt -d example_signature.txt

把原文件提取出来。

详细地官方文档(中文版)链接https://www.gnupg.org/howtos/zh/index.html

 

下面我就以Windows平台下的PGP4win软件来讲解使用方法:

1.安装完成后,建议有兴趣的人去看一下README和使用纲要,对理解全过程有帮助。

2.首次进入会提醒你生成自己的钥匙对,用于收发邮件。操作过程完全无脑。

3.使用Kleopatra中的Lookup  Certificates on Server工具或在keys.gnupg.net站点上找到小伙伴们的公钥并导入,就能用它来加密文件了。

4.使用 File Manager 即可实现文件加密/解密和数字签名的操作。

 

最后,介绍几款优秀的支持OpenPGP标准的邮件客户端:Outlook,  Evolution,  Mozilla Thunderbird(笔者最爱)。进入只需简单配置几个参数就可以选择发送加密邮件啦!超简单!

发表评论

电子邮件地址不会被公开。 必填项已用*标注