跳转至

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 签名。