跳转至

GPG Verification

回顾一下cs161学过的内容,当我们用ssh远程连接机器时,需要进行密钥认证,此处维护的是“主机与服务器之间的会话”。

在现实的开发中,我们也需要进行密钥认证。比如,当我们提交commit时,如何向服务器证明我们的身份?如果没有身份认证,主机可能会以为是malicious attackers在进行攻击。

因此,我们需要一个signature,来证明我们的身份,很显然这里需要维护的是“本次commit”。

Why GPG

GPG(GNU Privacy Guard)密钥认证,允许你对Git提交和标签进行签名,这样其他人可以确认这些更改确实来自可信的源。当提交被GPG密钥签名后,在GitHub上会显示"Verified"(已验证)标记。

工作原理:

  1. 使用者需要生成一对GPG密钥:
    • 私钥:保密使用,用于签名
    • 公钥:上传到GitHub,用于验证
  2. 签名验证过程:
    • 你用私钥对提交进行签名
    • GitHub使用你上传的公钥验证签名
    • 如果验证成功,提交会被标记为"Verified"

Demonstration

alt text

alt text

每次commit跟着的Unverified,是因为我们没有进行GPG签名; 而Verified,是因为我们进行了GPG签名。

How to use GPG

Install GPG

在配置之前,请先确保本地安装了 GPG。

对于 macOS,可以使用 brew install gnupg 进行安装。

Generate GPG

在本地生成一个 GPG 密钥,以下是简单步骤(以 Mac 和 Linux 为例):

Bash
1
gpg --full-generate-key

选择类型(推荐默认的 RSA 和 RSA),设置密钥长度为 4096,指定有效期和填写姓名、邮箱等信息

Get GPG ID

生成密钥后,列出 GPG 密钥,找到其中的 ID:

Bash
1
gpg --list-secret-keys --keyid-format LONG

在输出中找到类似 sec rsa4096/XXXXXXXX 的一行,将其中的 XXXXXXXX 记下,这就是 GPG 密钥 ID。

Send PubKey to Github

将 GPG 公钥添加到 GitHub:

Operation Path: homepage -> settings -> SSH and GPG keys -> New GPG key

  1. 打开 GitHub,进入 Settings。
  2. 在 SSH and GPG keys 中选择 New GPG key。
  3. 将之前导出的公钥粘贴到文本框中,点击 Add GPG key。

GPG Configure in Local Machine

在本地机器上配置 Git 使用 GPG 签名(我推荐全局启用):

Bash
1
2
git config --global user.signingkey <YOUR_KEY_ID>
git config --global commit.gpgSign true

这样每次 commit 都会默认使用 GPG 签名。

如何验证已经在当前设备上开启全局GPG签名

在CLI中输入 git config --global --list

在输出中查找以下两行:

Bash
1
2
commit.gpgsign=true
user.signingkey=<YOUR_KEY_ID>

如果这两行存在,说明当前设备已全局启用了 GPG 签名,并且指定了用于签名的 GPG 密钥 ID。