用 GPG 加密 github commit
背景
GnuPG(简称 GPG),它是目前最流行、最好用的开源加密工具之一。
要了解什么是GPG,就要先了解 PGP。
1991年,程序员 Phil Zimmermann 为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。
GPG 有许多用途,比如对文件,邮件的加密。而本文要说的是,如何使用 GPG 来加密 Github Commits。
在 Github 上查看一些项目的 Commits 时,会发现「This commit was signed with a verified signature.」字样,具体来说,就是下图示例那样:

那为什么要对 commit 进行验证呢?
引用一下 Github 官方的解释:
With GPG keys, tags or commits that you've authored on GitHub are verified and other people can trust that the changes you've made really were made by you.
说白了就是验证你的你的代码提交是不是来源于受信的电脑。当然没有绝对的安全,只是更进一步的确保代码提交是你本人操作。
安装 GPG
macOS:
brew install gnupg gnupg2
Debian / Ubuntu:
sudo apt-get install gnupg
Fedora:
yum install gnupg
生成 GPG keys
gpg --full-generate-key
回车,提示信息如下:
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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: directory '/Users/Kimi/.gnupg' created
gpg: keybox '/Users/Kimi/.gnupg/pubring.kbx' created
请 选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择?
选择加密算法,默认选择第一个选项即可,表示加密和签名都使用 RSA 算法。 选 1,回车。
选择密钥长度,默认为 2048,建议输入 4096。
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)4096
输入 4096,回车。
设定密钥的有效期。
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)
密钥永远不会过期
密钥只是个人使用的话,建议选择第一个选项,即永不过期。 输入 0,回车。
系统会问你上述设置是否正确。
以上正确吗?(y/n)y
输入 y,回车。
系统会要求你输入个人信息。
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
真实姓名:
填入你的名字,需是英文。回车。
电子邮件地址:
填入你的邮箱地址。回车。
注释:
「注释」可以空着不填。回车。 系统会再次让你确认填入的信息。
选定了这个用户 标识:
“Kimi Gao <mrgaonju@gmail.com>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O
输入 O,回车。 系统会让你设定一个私钥的密码。

可以不填选择「OK」。系统这时开始生成密钥,这时会要求你做一些随机的举动,以生成一个随机数。你拿起鼠标随便晃晃,直到完成密钥生成。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动