Using GPG to Protect Your Pirvacy and Information
GPG or GnuPG 是目前最流行、最好用的加密工具之一。是由 GNU 出品的 PGP 的开源实现版本. 广泛应用于加密、数字签章及产生非对称匙对等.
目录

Why Use GPG?
自从登登同学勇敢举报了美帝大范围窃听民众通讯之后, 越来越多的人开始注意自己的个人隐私 (o(▽)o (好~~). 其推荐的 tails 也是非常不错. 用 GPG 来加密往来邮件, 加密文件, 以防 帝国 美帝 窃听个人隐私…("▔□▔).(万一你写给女盆友的 亲密的 情书被偷看了, 嗯…
如何获取 GPG 呢?
Under Linux
在 fedora/SL/Centos 下:
sudo dnf install -y gnupg2
#or
sudo yum install -y gnupg2
debian/ubuntu:
sudo apt-get install gnupg2
#or
sudo apt install gnupg2
opensuse:
sudo zypper in gnupg2
Under Mac
mac 下的推荐GPGTools, 直接下载安装就好了. 还有一个macgpg, 现在不推荐使用了.
源码安装
如果想自己编译, 可以下载源码编译安装.
怎么使用 GPG 呢?
生成个人密钥
在终端下运行如下命令
gpg --gen-key
会看到如下的输出:
gpg (GnuPG) 1.4.19; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: keyring '/home/dark/.gnupg/secring.gpg' created
gpg: keyring '/home/dark/.gnupg/pubring.gpg' created
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 就好, 接下来就是密钥的长度, 过期时效, 名字, 邮箱, 注释, 最后输入密码(一定要记住). 最后的最后确认一遍, 然后随便做点什么小动作给他点熵值.
几分钟后你会看到类似如下的结果:
key 577F4A22 marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 4096R/577F4A22 2015-07-01
Key fingerprint = A573 2A0D 7237 5738 3A41 6A0D 2565 7C7D 577F 4A22
uid Yujiang Bi (Created at 2015.07.01. Old keys are not used.)
sub 4096R/56AE325C 2015-07-01
其中, uid
就是 用户 ID
, 577F4A22
也可以用来当作 用户 ID
, 以下用 UID
代替.
接着生成一张 " 撤销证书 ", 用来将来密钥作废时,请求外部的公钥服务器撤销你的公钥
gpg --output revoke.asc --gen-revoke UID
同样地, 确认, 原因, 注释, 密码, revoke.asc 就是撤销证书, 好好保存. 不要让别人偷了去了.
管理个人密钥
列出密钥
gpg --list-keys
这会列出系统已有密钥, 如下:
/home/dark/.gnupg/pubring.gpg
-----------------------------
pub 4096R/577F4A22 2015-07-01
uid Yujiang Bi (Created at 2015.07.01. Old keys are not used.)
sub 4096R/56AE325C 2015-07-01
第一行 pubring.gpg- 显示公钥文件名,第三行显示公钥特征(4096 位,Hash 字符串和生成时间),第四行显示 " 用户 ID",第五行显示私钥特征。
删除密钥
列出密钥后, 可以删除不用的密钥.
gpg --delete-key UID
这样就删除了 UID
这个密钥
输出密钥
公钥文件(.gnupg/pubring.gpg)以二进制形式储存, 可以这样导出到 ASCII 文本中:
gpg --armor --output public.txt --export UID
导出密钥到 ASCII 文本中:
gpg --armor --output private.txt --export-secret-keys UID
上传密钥
公钥服务器是网络上专门储存用户公钥的服务器, 上传到公钥服务器可以让别人导入你的公钥, 进而向你发送加密文件或邮件.
gpg --send-keys UID --keyserver hkp://subkeys.pgp.net
这样, 你的公钥就上传到了公钥服务器上了, 通过交换机制,所有的公钥服务器最终都会包含你的公钥。由于公钥服务器不会检查上传人的身份, 故需要你将你的公钥指纹发布到网上, 确保真实性, 让其他下载你公钥的人可以检验是否为真. 用下面的命令输出你的公钥指纹.
gpg --fingerprint UID
我的公钥指纹是
pub 4096R/577F4A22 2015-07-01
Key fingerprint = A573 2A0D 7237 5738 3A41 6A0D 2565 7C7D 577F 4A22
导入密钥
同样的, 你可以从公钥服务器上导入别人的公钥:
gpg --keyserver keys.gnupg.net --search-key UID
--search-key
参数可以是邮箱, 或者 uid
的名字.
如果准确知道导入公钥的 uid
, 可以直接导入
gpg --keyserver keys.gnupg.net --rec-key UID
或者让别人直接发给你, 然后导入
gpg --import [key-file]
确定公钥的真实性后, 可以对其签收:
gpg --sign-key UID
同样上面也能导入其他的自己的秘钥.
文件加密解密
文件加密
假定加密文件为 file
, 加密后的文件为 en-file
:
gpg --recipient UID --output en-file --encrypt file
UID
是接收人的秘钥UID
.
文件解密
收到别人给自己的加密文件 file
, 可以解密到 de-file
gpg --output de-file -d file
不加--output
会直接输出到终端
文件数字签名
对文件签名
有时候我们需要对文件签名,表示这个文件确实是本人发出的, 若有多个秘钥, 则需要加上 -u(--local-user) uid
gpg [-u UID] --sign file
之后会生成一个file.gpg
的二进制文件, 用--cleansign
代替--sign
会生成 ASCII 文件 file.asc
可以将签名写进另一个文件, 高度推荐这种用法,尤其是对二进制文件(如文档)签名的时候。另外, --armor
选项在这儿也非常有用, 会生成 ASCII 码形式的签名文件, 不加则是二进制的.
gpg [-u UID] --armor --detach-sign file
#or
gpg -a -b [-u UID] file
对文件签名验证
收到别人签名后的文件, 需要用对方的公钥验证签名是否为真, 如果没有其公钥, 需要先导入.
gpg --verify file.asc
如果是签名和文件合在一起, 可以使用如下命令提取原始文件:
gpg --output file.orig -d file.asc
签名并加密
有时候我们需要签名的时候进行加密, 可以这样做:
gpg [-u Sender] [-r Recipient] [--armor] --sign [--clearsign] --encrypt [Data]
Sender
是自己的 UID
, Recipient
是对方的 UID
.
验证签名并解密
如果数据既签名又加密, 则验证签名过程是在解密中进行的
gpg --output de-file -d file
邮件加密解密
… Absent Now…
水水更健康 "o((>ω<))o"


