你是否知道,每一次
git commit -S
背后,都站着一把“数字身份”的钥匙?在安全通信与软件发布的世界中,GPG 密钥正是你可信身份的“指纹”。
一、什么是 GPG 密钥?
GPG,全称为 GNU Privacy Guard,是 OpenPGP 标准的实现。它是一种非对称加密工具,提供:
✅ 身份认证(签名)
✅ 加密与解密
✅ 完整性验证
✅ 密钥管理
它被广泛用于:
Git 提交签名(
git commit -S
)Linux 软件包签名(APT、RPM)
加密电子邮件
文件机密传输
二、核心概念图解:GPG 如何工作?
GPG 使用公钥加密体系:
+-----------+ 公钥加密 +-----------+
| 发送方A |------------------>| 接收方B |
| 使用B的公钥 | | 用私钥解密 |
+-----------+ +-----------+
+-----------+ 私钥签名 +-----------+
| 发送方A |------------------>| 接收方B |
| 用私钥签名 | | 用公钥验证 |
+-----------+ +-----------+
📮 加密通信:用对方的公钥加密 → 对方用自己的私钥解密
✍️ 数字签名:用自己的私钥签名 → 其他人用你的公钥验证身份
三、密钥组成结构:不仅只有一对公私钥!
GPG 的密钥结构如下:
你可以用主密钥来管理多个用途分离的子密钥,以提高安全性。
四、GPG 密钥生成实战(命令行一步步)
1. 安装 GPG 工具
Ubuntu / Debian:
sudo apt install gnupg
2. 生成密钥对
gpg --full-generate-key
将引导你选择:
算法类型(推荐默认 RSA+RSA)
密钥长度(2048 或 4096)
密钥有效期
用户 ID(Name + Email)
密钥密码(保护私钥)
⏳ 等待生成随机数池……你可以动动鼠标,加快生成速度。
3. 查看生成的密钥
gpg --list-keys
gpg --list-secret-keys --keyid-format LONG
你会看到类似:
/home/user/.gnupg/secring.gpg
-------------------------------------
sec rsa4096/ABCD1234EF567890 2025-07-22 [SC]
Key fingerprint = 7D98 XXXX XXXX XXXX XXXX XXXX XXXX 1234 5678 90AB
uid [ultimate] Alice <alice@example.com>
ssb rsa4096/DEADDEAD12345678 2025-07-22 [E]
sec
:主密钥ssb
:子密钥[S]
:签名用[E]
:加密用[C]
:认证用
五、核心操作命令表
六、Git 提交签名:让代码“带身份”
1️⃣ 配置 GPG 签名
git config --global user.signingkey ABCD1234EF567890
git config --global commit.gpgsign true
还需要配置:
gpg --export --armor your@example.com
将导出的公钥添加到 GitHub / Gitea / GitLab 账户中。
2️⃣ 签名提交
git commit -S -m "这是一次带签名的提交"
成功后,GitHub 页面将显示绿色的 Verified
标识。
七、密钥托管与信任链
GPG 支持上传公钥至公钥服务器:
gpg --send-keys <keyid> --keyserver hkps://keys.openpgp.org
也可将密钥发布到 GitHub 页面、博客、邮件签名中。
⚠️ 注意:私钥绝对不能泄露!
八、实战建议与安全提醒
九、总结:GPG 是现代身份安全的根基之一
你不需要成为密码学专家,也可以:
用 GPG 保护你的代码
用签名 证明你的身份
用加密 传输你的机密
🔐 在信任稀缺的数字世界,GPG 是为数不多的自我掌控身份的手段之一。