Administrator
Published on 2025-07-28 / 1 Visits
0
0

《GPG 密钥详解:用加密签名打造你的身份防线》

你是否知道,每一次 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 的密钥结构如下:

角色

类型

用途

主密钥(primary key)

RSA / ECC

生成子密钥、管理信任

子密钥(subkey)

RSA / ECC

签名、加密、认证用

你可以用主密钥来管理多个用途分离的子密钥,以提高安全性。


四、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]:认证用


五、核心操作命令表

功能

命令

导出公钥

gpg --armor --export <uid或keyid>

导出私钥

gpg --armor --export-secret-key <uid或keyid>

导入公钥

gpg --import publickey.asc

删除公钥

gpg --delete-key <uid>

删除私钥

gpg --delete-secret-key <uid>

签名文件

gpg -s -o signed.txt file.txt

验证签名

gpg --verify signed.txt

加密文件

gpg -e -r recipient@example.com file.txt

解密文件

gpg -d encrypted.txt.gpg


六、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 是为数不多的自我掌控身份的手段之一



Comment