Quantcast
Channel: Security – ArchBoy
Viewing all articles
Browse latest Browse all 9

使用 GnuPG 实现电子邮件加密和数字签名——PGP 30分钟简明教程(1)

$
0
0
  • update 2013-05-14:之前写得可能有点晦涩难懂了,这次更新重新组织一下内容,先阐述最简单和容易实现的操作——邮件加密和签名,着重以图形工具讲解。然后放在第二篇再讲解命令行工具,以及对文件进行加密和数字签名的方法。

PGP (Pretty Good Privacy) 是由 Phil Zimmermann (之所以提这个名字是因为这位仁兄背后有一段故事,有兴趣可以找找他的八卦)于 1991 开发的一个用于数据加密和数字签名的程序,由于被广泛应用,以至于后来形成一个开放的标准 OpenPGP,这个标准也是目前最为常用的邮件加密和签名的方式。而 GnuPG 则是实现了该标准的一个开源免费程序,本文将会简单介绍如何使用 GnuPG 管理钥匙、加密/解密文件和电子邮件、数字签名文件和电子邮件。篇幅有点长,一共分两章,不过内容是很简单的。@ivarptr

目录:

  • 加密和数字签名的简单原理
  • 下载并安装 GnuPG
  • 使用(图形化)工具管理钥匙
  • 邮件的加密和数字签名
  • 使用命令行管理钥匙
  • 使用命令行加密解密文件
  • 使用命令行对文件进行数字签名
  • GnuPG 的更多指南

一、加密和数字签名的简单原理

首先每位用户都需要用 GnuPG 程序生成地球上惟一的一对钥匙,分别称为公钥和私钥(即 public key 和 private/secret key)。公钥用于加密、私钥用于解密。使用公钥加密过的信息只能由配对的私钥解开。这种加密方式叫做非对称加密。

非对称加密的过程是:如果A君要发送信息给B君,首先B君得把自己的公钥扔出来,A君得获取B君的公钥后用B君的公钥加密信息并发送过去,B君收到(加过密的)信息使用自己的私钥解密就可以还原信息了。

在数字签名时,私钥用于签名、公钥用于核对签名。

数字签名的过程是:如果A君要发送信息给B君,信息首先会被计算出一个指纹值(比如MD5值),然后A君使用自己的私钥加密信息和这个指纹值(这个过程称为签名)并发送出去,接受者B君收到信息之后使用A君的公钥来解密并重新核对一次信息的指纹值,这样B君就可以核对信息有无被篡改以及是否真的为A君所发出的了。

二、下载并安装 GnuPG

GnuPG 是一个集钥匙管理、加密解密、数字签名于一身的工具,对于 Linux 系统,一般可以在系统本身的软件源找到 GnuPG,比如对于 ArchLinux 可以使用如下命令安装:

$ sudo pacman -S gnupg

对于 Windows 系统可以下载免费开源程序包 GPG4Win,建议下载完全版,里面既包含了 GnuPG 命令行工具,又有图形化的钥匙管理工具 Kleopatra 和邮件客户端程序 Claws Mail。对于Mac OSX 系统则可以使用 GPGTools

更多的相关工具可以在这里找到

三、使用(图形化)工具管理钥匙

上一节提到,在不同的平台下所使用的管理工具各不相同,幸运的是他们的功能大同小异,而且界面简单,相信只要你一运行则不用看教程都会使用。下面就提一下使用要点:

seahorse

 

[图1] Linux Gnome 桌面环境自带的钥匙管理工具 seahorse

1、生成钥匙对。一般点击“文件”菜单就会找到“新建PGP钥匙”的选项,跟着提示输入你的名字(建议使用你常用的网名)、email地址以及备注(可以不填)就会生成一个属于你自己的钥匙对。期间会提示你输入一个密码,这个密码是用于保护你的私钥,建议使用比较复杂的密码。

2、发布你的公钥。因为你的朋友要发送加密信息给你则必须要先获取你的公钥,所以,作为一个有礼貌的 GnuPG 用户应该先发为敬。Internet上有很多免费的公钥服务器,你可以把你的公钥发布到随便一个服务器,它们之间会自动同步(最长可能需要几小时或者几天)。在管理工具里选定你的钥匙对,然后选择类似“发布”或者“远程-同步”之类的选项即可。在发布的时候工具可能会询问你使用哪个公钥服务器,正如刚才所说的,随便选一个就可以了。

3、获取你朋友的公钥(或者让朋友获取你的公钥)。在管理工具里选择类似“搜索”或者“远程-查找钥匙”,在搜索框里填写对方的email地址或者生成钥匙时所填写的名字,然后点击搜索就可以找到对方的公钥。作为练习,你可以搜索自己的公钥,如果搜索没有结果则可能时因为服务器还没同步,可以过几分钟再试试。或者搜索我的公钥,我公钥的 email 地址为 ivarptr@126.com。点击选中搜索结果,然后再选“导入”即完成。

4、签收(sign)公钥。为了安全起见,获取你朋友的公钥之后,还需要跟对方核对一下这个公钥是否真的为他所拥有(因为可能存在假冒的情况)。核对的方法是选中你朋友的公钥,再选择类似“属性”或者“详细信息”的选项,其中你可以看到这个钥匙的指纹值,你可以通过电话、聊天工具或者email跟你的朋友核对一下,如果指纹值相同,则点击“签收这个钥匙(sign this key)”,这样就表示你正式可用这个公钥了。如果上一步你导入了我的公钥,则看看指纹值是否为“0D24 0A94 A86C 7B83 3F7C 200E 1CAF 0CB0 72E7 5B05“,这个是我钥匙的指纹值,无误的话就可以点击签收了。(补充:为了避免跟“数字签名”这个名词相冲突,这里我把“sign”书写为“签收”,在一些教程里可能会翻译为“签名钥匙”)

好了,下面我们就可以开始邮件加密和数字签名噜。

四、邮件加密和数字签名

实现邮件加密和数字签名一般需要使用邮件客户端软件,现在一般比较完善的邮件客户端工具都内置集成 OpenPGP 的功能,即本身就可以无缝地使用 GnuPG。比如 Evolution、KMail、Mozilla Thunderbird,对于 Windows 和 Mac OSX 系统,我比较推荐 Thunderbird,这也是一个开源免费程序。谷歌告诉我 Windows 下的 Outlook 和 Live Mail 也支持但我没有试验过,如果不行又懒得下载 Thunderbird,那么使用 GPG4Win 附带的 Claws Mail 也是可以的。因为各个邮件客户端的设置大同小异,下面我以 Evolution 为例简单介绍如何设置。

其实关键的设置只有一步,就是关联你的 email 帐号和你的钥匙id。在 Evolution 的帐号属性里,转到 Security 页,在 OpenPGP Key Id 里输入你的钥匙的id(即生成钥匙对时所填写的名字)或者email地址即可。如下图:

evolution-pgp-setting

[图2] Evolution 的邮件帐号设置窗口

设置就这么简单。然后在每次写 email 时点击菜单的 Options 勾选 OpenPGP 签名或者/以及加密,然后再发送即可。如下图:

evolution-pgp-write

[图3] Evolution 的书写邮件窗口

对方收到邮件时,Evolution 会自动检验签名或者自动解密邮件内容。需要注意的是,再发送加密邮件给你的朋友之前,你要先获取他的公钥(见本文第2节)。

小练习:尝试用邮件客户端发送一封签名或者加密过的邮件给我:ivarptr@126.com。

提示1:在签名或者解密时,有可能会弹出一个窗口要求你输入一个密码,这个密码就是生成钥匙对时设置的密码。

提示2:用网易邮箱收取签过名(而未加密)的邮件时可能会显示检验失败,这是因为网易邮箱会在邮件末尾添加附件的下载地址,相当于更改了邮件的原始内容,所以签名检验失败是肯定的。

好了,如果你只需要电子邮件加密和数字签名,这篇教程到此为止了。如果你喜欢折腾以及对 OpenPGP 好奇,点击这里继续阅读本教程的第二章《使用 GnuPG 实现文件加密和数字签名——PGP 30分钟简明教程(2)》

本站文章采用 CC BY-NC-ND 授权协议,转载时请保留署名和本文链接,谢谢!From ArchBoy, post 使用 GnuPG 实现电子邮件加密和数字签名——PGP 30分钟简明教程(1)
ad:稳定靠谱的虚拟主机(VPS)提供商 Linode,点击这个链接了解一下吧~

Viewing all articles
Browse latest Browse all 9

Trending Articles