一、什么是GPG
要了解什么是GPG,就要先了解PGP。
1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。
GPG有许多用途,本文主要介绍文件加密。本文的使用环境为Linux命令行。如果掌握了命令行,Windows 或 Mac OS 客户端,就非常容易掌握。
二、使用GPG
1.创建密钥
gpg --gen-key
第一段是版权声明,然后让用户自己选择加密算法。默认选择第一个选项RSA,表示加密和签名都使用RSA算法,目前来说,RSA算法是安全性最强的。我们输入1,然后回车
然后会让我们配置密钥的加密长度。RSA 密钥长度应在 1024 ~ 4096 位之间,默认是2048。密钥的长度越长,安全性越高,但是加密和解密的速度就越慢。在此我们使用默认配置2048。
接下来设置密钥的有效期,默认值0代表永不过期。然后会让我们确认密钥的有效期,直接输入y继续。如果想设置在密钥2年后过期,那么应该输入2y,然后回车,其他类推。
输入y确认之后,会要求我们输入个人信息来构造用户ID,按顺序为:真实姓名、Email地址、注释,其中注释可以为空。
然后用户ID就生成好了,此时会向你确认信息是否需要修改:输入N修改姓名,C修改注释,E修改Email,O表示确认,Q退出。我输入字母O确认。
然后需要设置一个密码来保护我们的私钥。这里输入密码的时候,不会在控制台上显示出来。
然后我们的公、私钥就已经生成好并签名完成。
公钥:pubring.gpg,私钥:secring.gpg。其中生成公钥的密钥ID是:7A701106,私钥的ID为:BBA3B083。其中密钥ID即为公钥ID,也可以作为用户ID,。这里有两处需要记住,第一就是设置的私钥密码,第二就是生成公钥的密钥ID。私钥密码是解密时需要的。密钥ID是对文件进行加密需要的。
到此为止,我们已经完成了生成公钥和私钥的任务了。这时,最好再生成一张"撤销证书",以备以后密钥作废时,可以请求外部的公钥服务器撤销我们的公钥。
然后会让我们设置吊销原因,输入描述(可选);以空白行结束:
0 = 未指定原因 1 = 密钥已泄漏 2 = 密钥被替换 3 = 密钥不再使用 Q = 取消
这里需要输入我们设置的私钥保护密码,才能解开私钥
上面一段的翻译,就是说让我们保护好这个证书文件。,翻译过来大概是这个意思
请把这个文件转移到一个可隐藏起来的介质(如软盘)上;如果坏人能够取得这
份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏
到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万
小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他人也能够看得到的地方!
2.密钥管理
(1)参数列出系统中已有的密钥
gpg -k 或者 gpg --list-keys //列举公钥 gpg -K 或者 gpg --list-secret-keys //列举私钥
(第一行是公钥文件路径,第二行是公钥信息,第三行是用户ID,第四行是私钥信息。)
(2)删除密钥
gpg --delete-key [用户ID] # 删除公钥
gpg --delete-secret-keys [用户ID] # 删除私钥
(3)导出密钥
公钥和私钥(gpg文件)都是以二进制形式存储,使用--armor参数可以导出为ASCII码形式。
导出公钥文件
gpg --armor --export [用户ID] --output public-key.txt
导出私钥文件
gpg --armor --export-secret-keys --output private-key.txt
3.加密解密
(1)公钥加密
假定有一个压缩文件test.zip,我们对它进行加密。
gpg --recipient [用户ID] --output test.zip.gpg --encrypt test.zip
encrypt参数表示对文件进行加密,encrypt参数指定源文件。recipient参数指定接收者的公钥,output参数指定加密后的文件名,
运行上面的命令后,test.zip.gpg就是已加密的文件。
(2)私钥解密
对方收到加密文件以后,就用自己的私钥解密。
gpg --output test2.zip --decrypt test.zip.gpg
output参数指定解密后生成的文件。decrypt参数指定需要解密的文件。解密文件保存为test2.zip。
参考
https://www.jianshu.com/p/268064e67719
https://www.jianshu.com/p/1257dbf3ed8e