GPG 常用操作详解:从入门到精通

GPG (GNU Privacy Guard) 是开源的 OpenPGP 标准实现,广泛应用于数据加密、数字签名和安全通信领域。无论是开发者提交代码、运维人员保护配置文件,还是普通用户加密敏感文件,GPG 都是保护隐私的核心工具。本文将深入解析 18 个最常用的 GPG 操作,涵盖密钥管理、加密解密、签名验证等场景,结合最佳实践和真实案例,助你快速掌握 GPG 的核心技能。

GPG 加密示意图

目录#

  1. 安装与环境准备
  2. 密钥管理
  3. 加密与解密
  4. 签名与验证
  5. 密钥服务器操作
  6. 高级配置与最佳实践
  7. 总结
  8. 参考资源

一、安装与环境准备#

在开始操作前,先安装 GPG:

  • Linux (Debian/Ubuntu):
    sudo apt-get install gnupg
  • macOS (通过 Homebrew):
    brew install gnupg
  • Windows: 下载 Gpg4win

验证安装:

gpg --version

✅ 输出应显示 gpg (GnuPG) x.x.x 版本信息


二、密钥管理#

2.1 生成密钥对#

生成一个 RSA 3072 位的密钥对(推荐):

gpg --full-generate-key
  • 选择密钥类型:RSA and RSA (默认)
  • 密钥长度:3072(安全性平衡点)
  • 设置有效期:1y(一年后过期)
  • 输入用户信息(姓名、邮箱)和强密码(至少12字符)

🔐 最佳实践:为子密钥单独加密(如签名、加密),主密钥离线存储:

gpg --full-generate-key --expert  # 启用高级模式创建子密钥

2.2 列出密钥#

查看所有公钥:

gpg --list-keys

查看所有私钥:

gpg --list-secret-keys

输出示例:

/Users/alice/.gnupg/pubring.kbx
--------------------------------
pub   rsa3072 2023-01-15 [SC] [有效至:2024-01-15]
      D8F8B8E1F2A3B4C5E6A7B8C9D0E1F2A3B4C5D6E7
uid           [ 绝对 ] Alice <[email protected]>
sub   rsa3072 2023-01-15 [E] [有效至:2024-01-15]

2.3 导出与导入密钥#

导出公钥(ASCII 格式):

gpg --armor --export [email protected] > alice_public.asc

导出私钥(⚠️ 务必加密存储):

gpg --armor --export-secret-keys [email protected] > alice_private.asc

导入密钥:

gpg --import alice_public.asc  # 导入公钥
gpg --import alice_private.asc # 导入私钥(需密码)

2.4 吊销证书#

若私钥泄露,生成吊销证书:

gpg --gen-revoke [email protected] > revoke.asc

上传到密钥服务器使公钥失效:

gpg --keyserver keyserver.ubuntu.com --send-keys D8F8B8E1F2A3B4C5E6A7B8C9D0E1F2A3B4C5D6E7

三、加密与解密#

3.1 加密文件#

加密 secret.txt 给 Alice:

gpg --encrypt --recipient [email protected] secret.txt

生成 secret.txt.gpg 加密文件。

📌 常用选项

  • --armor 生成 ASCII 格式(.asc后缀)
  • --output 指定输出文件名
gpg --armor --encrypt -r [email protected] -o secret.asc secret.txt

3.2 解密文件#

解密接收到的加密文件:

gpg --decrypt secret.txt.gpg > plaintext.txt

输入密钥密码后,解密内容保存到 plaintext.txt


四、签名与验证#

4.1 创建签名#

document.pdf 生成分离式签名(常用):

gpg --detach-sig document.pdf

生成 document.pdf.sig 签名文件。

📝 直接生成签名文件(内嵌签名):

gpg --sign document.pdf  # 生成 document.pdf.gpg

4.2 验证签名#

验证签名文件与原始文档:

gpg --verify document.pdf.sig document.pdf

输出示例:

gpg: 签名建立于 2023年05月01日 星期一 14:30:45 CST
gpg:               使用 RSA 密钥 D8F8B8E1F2A3B4C5E6A7B8C9D0E1F2A3B4C5D6E7
gpg: 完好的签名(来自 “Alice <[email protected]>”)

五、密钥服务器操作#

5.1 上传公钥#

将公钥上传到服务器:

gpg --keyserver keyserver.ubuntu.com --send-keys D8F8B8E1F2A3B4C5E6A7B8C9D0E1F2A3B4C5D6E7

5.2 搜索与导入公钥#

搜索 Alice 的公钥:

gpg --keyserver keyserver.ubuntu.com --search-keys [email protected]

导入到本地:

gpg --keyserver keyserver.ubuntu.com --recv-keys D8F8B8E1F2A3B4C5E6A7B8C9D0E1F2A3B4C5D6E7

六、高级配置与最佳实践#

6.1 设置密钥有效期#

延长密钥有效期(需主密钥):

gpg --edit-key [email protected]
> expire      # 设置新有效期
> save        # 保存

6.2 编辑密钥属性#

编辑 UID(用户标识)或添加子密钥:

gpg --edit-key [email protected]
> adduid      # 添加新邮箱
> addkey      # 添加加密子密钥
> trust       # 设置信任级别

6.3 安全最佳实践#

  1. 主密钥离线存储:导出后删除本地主密钥,仅保留子密钥
    gpg --export-secret-subkeys [email protected] > subkeys.asc
    gpg --delete-secret-keys [email protected]
  2. 使用强密码:推荐密码管理器生成20+位随机密码
  3. 定期轮换密钥:每1-2年更新一次密钥
  4. 验证密钥指纹:交换公钥时当面核对指纹 gpg --fingerprint [email protected]
  5. 启用智能卡:如 YubiKey 存储私钥增强安全性

七、总结#

GPG 的核心操作围绕 密钥生命周期管理数据加密身份验证 展开。掌握本文的 18 个关键操作(生成密钥、加解密、签名验证等)可覆盖 90% 日常需求。关键要点:

  • 🔑 密钥安全是核心:离线存储主密钥+强密码保护
  • 📜 规范使用签名:确保软件分发和文档的真实性
  • 🔄 定期维护:更新过期密钥、吊销泄露证书
  • 🌐 善用密钥服务器:高效分发公钥

八、参考资源#

  1. GPG 官方手册
  2. Riseup GPG 最佳实践 (英文)
  3. GPG 密钥生成配置详解 (Cheat Sheet)
  4. OpenPGP 标准 RFC 4880
  5. 知乎专栏:GPG 实战指南

致谢:本文示例已在 Ubuntu 22.04 和 GnuPG 2.2.27 测试通过,适用于大多数 Linux/macOS 环境。

# 示例:生成测试密钥对(快速操作)
gpg --batch --passphrase "test123" --quick-gen-key "Test User <[email protected]>"

安全之路,始于密钥管理。立即动手试试这些命令,打造你的数字身份护甲!