## 本文适用环境为GNU/Linux. Windows用户请自行查找相关资料,谢谢!
## 本文基本来自 这里
## 本文采用GNU Free Documentation License.
## Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
----------------------------开始正文前的Q&A-----------------------------
Q. 什么是GnuPG?可以吃吗?
A. 不。GnuPG是一个用于给你的文件加密/解密/签名的程序。
Q. 我是电脑小白,我适合阅读这篇文章吗?
A. 如果你使用Linux,请继续阅读。否则请绕行。
Q. 这个gnupg的加密原理是神马?能介绍一下吗?
A. 请自助阅读相关wikipedia条目等。
-----------------------------正文自斯始-----------------------------
GnuPG,全称为Gnu Privacy Guard,是一个被广泛使用的加/解密程序。它遵循OpenPGP数据加/解密标准。我们可以使用GnuPG实现不对等加密(当然也可以进行对等加密),以在互联网上安全地传输信息。下面结合实践来介绍GnuPG的使用。
首先,你需要安装gnupg。请参考各自发行版的软件包管理器使用指南。
例如对Archlinux,运行 # pacman -S gnupg
安装后,你需要先生成自己的密匙 $ gpg --gen-key
依照屏幕提示完成密匙生成过程。注意expiration time需适应于你的需求,并且passphrase需设置得强一些,否则若有人同时获得了你的私匙和passphrase,就能够伪造你发送文件。
这里需要说的是,所谓不对等加密,即有两个密匙:公匙与私匙。私匙是你自己保存,不能公开的,而公匙是需要向他人公开的。如何应用这两个密匙呢?你可以用私匙在某文件上“签名“,其他人用你的公匙即可验证这个文件确实是由你发出的。其他人也可以使用你的公匙对某文件进行加密,并发送给你;你用自己的私匙即可对该文件实行解密,保证文件传输的安全。主要的公匙算法有RSA、Elgamal等。
你可以用 $ gpg --list-key 来查看你目前拥有的公/私匙。
生成你的密匙以后需要做的第一件事,就是生成一个“revocation certificate”。万一你的私匙和passphrase都被其他人获取了,你可以通过发布这个东西来提醒其他人不要再继续使用你原来的公匙了。
$ gpg --output revoke.asc --gen-revoke mykey
其中mykey可以是你的key ID,也可以是email等能够对应你的密匙对的信息。
接下来要做的便是导出你的公匙
$ gpg --armor --export mykey
其中 --armor 作用是输出为ascii格式,不加该参数时输出为binary哦!你也可以加参数 --output file 来输出至文件。
导出公匙后,就可以将你的公匙贴到你的博客/个人主页等地方与他人分享了。你也可以将公匙上传至一些gpg公匙服务器。比如pgp.mit.edu等。那么如何上传呢?当然,你可以直接以http方式登陆并上传。你也可以使用命令 $ gpg --keyserver yourkeyserver --send-keys yourkeyids 来上传。至于获取其他人的公匙,你可以用--recv-keys 替代 --send-keys。
那么,如何导入其他人给你的公匙呢?你可以使用命令 $ gpg --import filename.gpg 。使用命令 $ gpg --list-keys 来查看你机器中已有的公匙。需要说明的是,为了确保你导入的公匙确实是真的,而不是某人冒充的,gnupg有一种机制,称为web of trust,以后会介绍。当利用web of trust能够确定公匙真实性时,就不需要你人工确认,如若不然,就需要你自己确认啦!方法如下:
输入命令 $ gpg --edit-key somebody@example.com , 再输入fpr回车,gpg就会输出该公匙对应的fingerprint ,你与对方通过电话等方式确认该项无误之后,键入sign回车,对该公匙进行“签名”,表示你承认了该公匙的真实性。这与“web of trust”的有效运转也有很大的关系,之后我将进行介绍。完成签名以后,键入 > quit 以退出。
接下来的问题就是如何加密解密文件了。很简单: $ gpg --output doc.gpg --encrypt --recipient yourname@example.com doc 。 解释一下: --output 后面跟的是加密后的文件名, --encrypt 代表加密的意思,--recipient 后面跟的则是用于加密的私匙对应的个人标识,最后面的doc代表的则是需加密文件的文件名,就这么简单。
解密时,使用命令 $ gpg --output doc --decrypt doc.gpg 即可。此时gpg会提示你输入你的passphrase哦。 当然,你也可以用对称加密方法加密文件: $ gpg --output doc.gpg --symmetric doc 。此时gpg会提示你输入用于加密的passphrase,到时候就要用你此时输入的passphrase来解密啦。
## 未完待续

