什么是GPG

一句话解释:一个用来对数据加密和签名的工具。

来自GPG官网:https://gnupg.org/

Short for GNU Privacy Guard and also abbreviated as GnuPG. GnuPG is a complete and free implementation of the OpenPGP standard as defined by RFC4880 (also known as PGP). GnuPG allows you to encrypt and sign your data and communications; it features a versatile key management system, along with access modules for all kinds of public key directories. GnuPG, also known as GPG, is a command line tool with features for easy integration with other applications. A wealth of frontend applications and libraries are available. GnuPG also provides support for S/MIME and Secure Shell (ssh).

GNU Privacy Guard的缩写,也缩写为GnuPG。GnuPG是由RFC4880(也称为PGP)定义的OpenPGP标准的一个完整且免费的实现。GnuPG允许您对数据和通信进行加密和签名;它具有一个通用的密钥管理系统,以及用于各种公钥目录的访问模块。GnuPG,也称为GPG,是一个命令行工具,具有易于与其他应用程序集成的特性。有大量的前端应用程序和库可用。GnuPG还提供了对S/MIME和安全Shell (ssh)的支持。

我们拿GPG做什么?

在这里我们主要是使用GPG来为git提交信息和标签做签名,这样能在github、gitee、gitlab上明确地显示是认证过的提交。
image.png

由于git配置的邮箱和用户名是可以随便修改的,所以其他人实际上是可以通过配置成你的邮箱和用户,然后冒充你的身份,去提交和修改代码,这样别人就不知道代码改动到底是不是真的来自于你。而如果你能对你们的每次提交行为都用GPG做签名(签名就是打上你独特的指纹的意思),而把这个GPG的公钥配置在你github的账号,那么你的提交就可以被github验证,验证通过就会显示一个绿色的Verified的标志,他人就能百分百确信这是你这个github用户做的提交了,也让其他人无法冒充你了。

Git如何配置GPG签名

官方教程

同时在github和gitee都有教程,参考:
Github GPG生成和配置教程

Gitee GPG生成和配置教程
其中在github的教程中会让你使用gpg的命令行程序,而gitee的教程会让你使用https://gpgtools.org/这个里面的gpg客户端程序。看你自己的喜好。

查看秘钥

  1. $ gpg --list-secret-keys --keyid-format=long

image.png

导入和导出公钥私钥

参考:
How to export and import keys with GPG

导出公钥

—export后面那串就是秘钥的ID,是你列出秘钥时,接在sec 4096R/后面的那串字符。

  1. $ gpg --armor --export E234A3D9KLJFLKF724 [22/01/20|11:55:23]
  2. -----BEGIN PGP PUBLIC KEY BLOCK-----
  3. 一大串公钥内容
  4. -----END PGP PUBLIC KEY BLOCK-----

导出私钥

  1. $ gpg --export-secret-key -a 用户名/秘钥ID > private.key

如果是填的用户名,则会将用户名下的所有秘钥的私钥都导出;如果是填的秘钥ID,则会将对应秘钥ID的私钥导出。

导入则参考上述发的参考连接。

同账号多秘钥

参考:If I have multiple OpenPGP keys in GnuPG with the same user ID/e-mail address, how can I distinguish between them?

—recipient可以用来指定你的操作所使用的的秘钥的ID,例如:

  1. gpg --encrypt --recipient A4FF2279
  1. $ gpg --help
  2. Options to specify keys:
  3. -r, --recipient USER-ID encrypt for USER-ID

配置git全局gpg签名

  1. cat .gitconfig
  2. [user]
  3. name = HWilliamGo
  4. email = williamintoandroid@outlook.com
  5. signingkey = 秘钥ID
  6. [gpg]
  7. program = /usr/local/bin/gpg

告诉git你用于签名的秘钥ID
告诉git你的gpg程序的位置

配置mac电脑下GUI程序的GPG签名

IDEA Sign commits with GPG keys
https://github.com/pstadler/keybase-gpg-github

安装pinentry-mac程序

  1. $ brew install pinentry-mac
  1. ~/.gnupg
  2. cat gpg.conf [22/01/20|22:00:56]
  3. use-agent
  4. no-tty
  5. ~/.gnupg
  6. cat gpg-agent.conf [22/01/20|22:01:01]
  7. pinentry-program /usr/local/bin/pinentry-mac
  8. ~/.gnupg