其他博客地址

主力博客:https://tonghuix.io

2014年12月2日星期二

[图文教程] 在openSUSE下玩转GPG

关于这个话题最早首先是玛格丽特·苏在微博上贴图求助,同时也让我有兴趣好好去了解了解,特别是当时我又感兴趣于GPG与智能卡的交互。后来我曾在2014年openSUSE.Asia Summit上做过一个workshop,但效果不是很好,很多朋友觉得讲的不够细致,确实,GPG的命令行操作对初学者比较难,上手困难。
后来我就花费了一些时间考察了常用的一些GPG图形前端,最终选定了本文我要介绍的这个软件——Kleopatra。没错,名字就是来源于“埃及艳后”克里奥佩特拉(Cleopatra)。我选定Kleopatra有几个原因,第一是因为它比较简洁明了,容易上手。第二是因为功能丰富,除了常用的GPG/OpenPGP密钥操作以外,还支持x509个人证书等。第三是通用性,Kleopatra可以在包括Linux/BSD/Windows等操作系统上使用,Windows可以通过安装gpg4win来安装Kleopatra,这一点就超过了同样非常强大也非常简洁的GNOME Seahorse和Kgpg。
本文力求简明扼要地讲述如何在openSUSE下玩转GPG(其他Linux发行版、BSD和Windows也可以应用本文所有例子),力求一句话讲明与GPG相关的一些概念和操作,比如常用的加密/解密以及文件和密钥的签名及其校验。关于与电子邮件的结合,我会推荐使用Thunderbird+Engimail的组合,但不会过多详述。



相关概念

  • PGP (Pretty Good Privacy):可以简单理解为是一种数据加密解密和验证的应用程序。使用散列算法。此软件是闭源商业软件。
  • OpenPGP:这是一种数据加密算法的开放标准,也就是一种加密协议(RFC 4880)。而PGP也是这个标准的实现之一。
  • GnuPG(GPG):是OpenPGP标准的开源实现,使用GPL协议的自由软件。
  • 散列算法(Hashing,哈希算法):可以简单理解为是对一段数据(可能是文件、也可能是流)取其摘要的数学运算方法,这种运算有个特性,就是不可逆性,无法根据已经摘要的数据(即哈希值或散列值)恢复成原数据。常用的散列算法有MD5、SHA-1、SHA-256、SHA-512等等。可以用这种算法来验证数据的一致性,也可为数据生成数字指纹。
  • 非对称加密:先来说“对称加密”,就是在加密和解密过程中使用的是相同的密钥。而非对称加密,就是在加密和解密的过程中使用的是不同的密钥。一个公钥,一个私钥。使用公钥加密,使用私钥解密,因为公钥只是用来加密,甚至可以随处散播。而私钥就必须妥善且私密的保管好,否则就无法解密了。同时私钥还可以用来对文件进行数字签名,也就是对文件或信息生成一个散列值,若文件在传输过程中发生更改,再做散列操作以后,这个值就变了,这样就有了形似古时通信用“封印”的效果。我们常用的非对称加密算法有DSA和RSA等。

安装 Kleopatra

这个软件包一般在kdeim组件包内,有些发行版会单独打包,比如OpenMandriva/Debian/Ubuntu,可以单独安装Kleopatra包。若没有可以从源码编译。
Windows用户可以选择安装gpg4win这个软件,选择下载完整版包含Kleopatra的就行。Mac OS 用户可以安装gpgtool,但只有命令行版。

创建个人openPGP密钥对

打开 Kleopatra 之后选择文件—>新建认证,打开新建认证对话框。可以看到有两个大按钮,因为Kleopatra除了支持常用的OpenPGP协议以外,还可以用来生成个人站点x509证书。这里我们选择“创建个人 OpenPGPG 密钥对”

然后填入个人信息。特别注意名字和邮件地址不要填错。注释建议留空。之后我们按“高级设置”按钮,配置更多选项。

在这个高级设置对话框中,我们可以选择生成的算法,保持默认的RSA即可。为了更高的安全性,我们选择4096比特,这是目前gpg支持的最大位数,也是最安全的。另外就是证书有效期(也就是密钥的有效期),这里注意,为了安全起见,也为了防止密钥丢失造成的损失,这里推荐还是为密钥增加有效期,一般三年左右就行。这并不是不可修改的,还可以修改,建议逐年增加。如图所示:

然后选“下一步”。之后会有个确认信息,确认生成的密钥对是否如你所愿,特别注意名称和电子邮件地址不要写错。然后点选“创建密钥”按钮。

在创建密钥的过程中,会要求你输入一个密码,这个密码是个密钥的本地密码,强烈建议设置一个密码,不要为空!假设你的私钥丢失,落入他人之手,因为他没有此密码,也无法使用你的私钥。

密钥被创建以后,可以看到一个密钥的指纹,此指纹是对密钥对进行散列算法得到一个为了便于记忆和识别的编码。这里可以点选生成密钥对的副本,也可以邮件发送证书,目前不建议把证书(这里其实是你的公钥)上传到服务器。

如图所示,绿色阴影所在的密钥就是刚刚生成的密钥对。

双击此密钥可以获得密钥相关的细节。我们可以对其进行修改,修改好之后可以选择上传到密钥服务器,这里只会上传公钥,这样可以有更多人知道你的GPG公钥。之后别人就可以根据你的GPG公钥,给你发送加密信息了。

导入导出密钥

导出公钥的操作非常简单,只要在主界面上选中预导出的密钥,然后再按上面的“导出证书”按钮,之后就可以把此公钥另存到另一个地方了。也可以把此公钥发送给别人,也可以放到自己的网站供人下载上等等。可以下载我的个人公钥,在我个人网站的右侧栏里可以找到下载我GPG公钥的地方(如下图)。

在预导出的密钥上点右键,还有一个操作是“导出到密钥服务器”,这会将公钥上传到公共的密钥服务器上,这样大家下载起来也就更方便了。特别提醒,导出到服务器的公钥不能修改和删除,请确定你检查没问题了再上传。
若想导出公钥和私钥,可以在预导出的密钥上选右键,选择“导出私密证书”(也就是私钥),之后选择要导出的位置,建议勾选“ASCII形式”可提高一些安全性。这个操作还会把子密钥也一起导出(如果有的话)。

导入操作也很简单,直接点选主界面上的“导入证书”,之后选择你要导入的密钥备份文件即可。
如何导入公共密钥服务器中别人的公钥呢?只需点选在"在服务器上查询证书",在弹出的对话框中搜索你要导入的公钥的名称、电子邮件、指纹、指纹标识(其实就是指纹的最后8位)等。如果是指纹或者指纹标号,需要有“0x”前缀。如下图所示:

常用的加密/解密和签名操作

加密和的操作大同小异,非常简单。从文件—>加密/签名打开加密对话框,选择要加密的文件。如图所示,我一般会勾选“文本输出(ASCII形式)”,稍微增加一些安全性,也方便后续文本操作(比如拷贝粘贴)。如果你需要加密之后再归档打包也可以勾选相关的归档选项。

然后选择加密用的公钥,选中谁然后点选“添加”按钮,就会加入到下面的列表中。注意,如果你使用收件人的公钥加密,一定要记得把自己的公钥也加进去,否则这个文件你自己无法解密。在这个列表里若只有公钥,则会以正常字体现实,若公钥和私钥都存在,则会显示为粗体。

之后按“下一步”就会提示你加密成功。

可以看到原文件和加密以后的差别。

为文件签名与上面加密操作几乎一样,这里不再重复,但在最会一步会让你输入私钥的密码,也就是刚才我们创建密钥对的时候设置的密码。
签名以后的签名文件test.asc是下图这样。毕竟只是原文的散列,也就是原文的摘要,所以会显得很少。

如果要解密文件,则从文件—>解密/验证打开解密和验证对话框,选择要解密的文件,并选择要把解密以后的文件存放在何处。

验证文件签名,需要原文件和该文件的签名文件,本例是test文件及test.asc文件。这样才能进行验证。从文件—>解密/验证打开解密和验证对话框,选择要验证的文件签名和文件。直接选下一步即可。结果会直接显现。

为别人的GPG公钥签名

除了上述所有这些,还可以给别人的GPG公钥签名,这样的好处对别人进行认证,以帮助其增加信誉度。一个人被人签名越多,其自身的信誉也就水涨船高。
我们可以先导入某人的GPG公钥,用上面的方法。然后在他的公钥上点右键,选择“认证证书”。第一步要求你选择要认证的用户编号,如果某人有多个用户编号,根据情况勾选。然后别忘了勾选最下面的“我已验证此指纹”。这里要注意,为了防止某人骗取你的签名,需要做一些基本的验证:其一他的用户编号,也就是UID是不是他本人所掌握的邮件地址,只认证可信的用户编号。其二,让他提供给你一份全部长度的密钥指纹,至少16位,并仔细核对。其三,当面签署,最好能验证其身份证上的信息与用户标号(UID)一致。

之后第二步,选择你的私钥,如果你有两个或两个以上私钥时,注意不要看错。下面选择签名方式,一种是本地签名,一种是可导出的签名。这里选择第二种——认证所有可查看证书的人。可以勾选“稍候将认证的证书发送到服务器”,也可以不选,如果不选,就需要再为他做一步“导出到服务器”操作。

因为需要用你的私钥来签名,因此会要求你输入密码。之后认证成功会有一个提示,可以看到最终结果。

可以双击那个你签名的公钥,转到"用户编号和证书"选项卡,就可以看到我给此公钥新添加的签名了。

openPGP与电子邮件的结合

Kleopatra与电子邮件的结合不够好,若需要解密电子邮件,可能需要客户端先把邮件导出,然后再使用Kleopatra来处理。对于加密和签名,我们虽然可以把加密和签名的内容拷贝到正文里,不过毕竟这不太方便。所以各个邮件客户端都有与OpenPGP的结合,比如GNOME下的Evolution就可以很方便的直接与OpenPGP结合,相应的KDE下的Kmail搭配Kpgp也是同样的功能。
不过从跨平台通用性考虑可以使用 Thunderbird + Enigmail。网上这类文章很多了,这里不再赘述。特别要说明的是,Engimail可以完成上面所说的所有功能,但其生成密钥的方法略有点复杂,选项比较多,不利于初学者快速掌握。此文很不错,可以做参考
最后,Kleopatra的功能是非常强大的,除本文所介绍之外,还可以检查文件的校验和等等。可以说是一款不可多得的个人加密工具前端。我花了点之间,录制了一段操作视频,解释了一下以上各操作。

墙内镜像(非高清):http://v.youku.com/v_show/id_XODM5NzAzNTY0.html