GPG加密与签名详解 | AI生成和翻译
GPG 基础:加密与签名
你在这里混淆了几个概念——GPG(GNU Privacy Guard)可以实现加密(保护文件内容)和签名(验证身份和完整性)——但它们是独立的功能。我将逐步分解说明,确认你的观点,并澄清哪些地方存在重叠或差异。这基于标准 GPG 用法(截至 2025 年变化不大)。
1. 生成密钥与个人信息(姓名/邮箱)
- 首次设置 GPG 时,你会生成一个密钥对:一个私钥(保密)和一个公钥(与他人共享)。
- 生成过程中,你需要提供姓名和邮箱作为密钥“用户 ID”的一部分(例如
gpg --gen-key)。这将密钥与你的身份绑定。 - 你还需要设置一个密码短语来保护你的私钥。这个密码短语不用于加密文件——它仅用于在需要时解锁你的私钥。
- 命令示例:
gpg --gen-key按照提示输入 RSA/RSA、密钥大小、过期时间以及你的姓名/邮箱。
2. 加密文件
- 使用密码(对称加密):这不涉及密钥或你的身份——适用于快速安全共享文件。GPG 使用密码短语生成单个加密密钥。
- 命令:
gpg -c filename.txt(提示输入密码短语,输出filename.txt.gpg)。 - 任何知道密码短语的人都可以解密:
gpg -d filename.txt.gpg。 - 这里不使用公钥/私钥;不进行身份验证。
- 命令:
- 使用公钥(非对称加密):要为特定对象加密,请使用他们的公钥。你的姓名/邮箱不直接参与加密输出。
- 命令:
gpg -e -r recipient@example.com filename.txt(输出filename.txt.gpg)。 - 只有接收者的私钥可以解密它。
- 命令:
- 加密输出是一个
.gpg文件,但它不是签名——它只是加密数据。仅加密不会产生“GPG 签名”。
3. 签署文件(你所描述的内容)
- 签署会将数字签名附加到文件(或其哈希值)上,以证明文件来自你且未被篡改。这是你的私钥和身份发挥作用的地方。
- 是的,你必须使用私钥生成签名。 GPG 使用你的密码短语解锁私钥。
- 分离式签名命令:
gpg --detach-sign filename.txt(输出filename.txt.sig)。 - 或内联式(一次性签名和加密):
gpg -s filename.txt(输出嵌入签名的filename.txt.gpg)。
- 分离式签名命令:
- 签名是一个加密“值”(例如用私钥签名的哈希值),包含你的密钥 ID 和用户 ID(姓名/邮箱)。
- 其他人使用你的公钥验证:他们导入你的公钥(例如从密钥服务器:
gpg --keyserver keys.openpgp.org --recv-keys YOUR_KEY_ID),然后运行gpg --verify filename.txt.sig filename.txt。- 如果匹配,会显示类似“来自‘你的姓名 <邮箱>’的签名良好”的信息。邮箱>
- 是的,这匹配身份并建立信任:
- 签名证明文件来自密钥所有者(你)。
- 如果你通过可信渠道(例如你的网站)共享了公钥,并且该密钥被你信任的人签名,你可以“信任”这个信任链。
- 它不加密文件——仅验证文件。结合加密以实现完整安全性(先签名后加密)。
关键差异与你的问题
| 功能 | 加密(密码) | 加密(公钥) | 签名 |
|---|---|---|---|
| 使用密码短语? | 是,用于对称密钥 | 否(使用接收者的公钥) | 是,用于解锁你的私钥 |
| 涉及姓名/邮箱? | 否 | 间接(通过你的密钥用于解密响应) | 是,嵌入在签名中 |
| 输出 | .gpg 文件(加密数据) |
.gpg 文件(加密数据) |
.sig 或嵌入在 .gpg 中(签名值) |
| 需要私钥? | 否 | 否(为他人加密时) | 是,用于生成 |
| 验证 | 密码短语解密 | 接收者的私钥 | 任何拥有你公钥的人 |
| 目的 | 隐藏内容 | 安全共享 | 证明身份/完整性 |
- 关于私钥的正确理解:是的,你必须使用私钥(通过密码短语解锁)进行签名。切勿共享它!
- 关于信任的正确理解:完全正确——如果签名通过你的公钥验证,并且你信任该密钥属于声称的作者(通过姓名/邮箱和信任网),你可以信任文件是真实且未被篡改的。这就像数字公证。
提示
- 始终备份你的密钥:
gpg --export-secret-keys --armor > private.asc(安全存储)。 - 仅用于密码(无密钥)时,像
age或openssl这样的工具是更简单的替代方案,但 GPG 在处理身份关联内容时非常出色。 - 常见陷阱:忘记导出/共享你的公钥意味着他人无法验证。
如果你指的是特定命令或场景(例如同时加密和签名),请分享更多细节!
参考资料
GPG 文档:加密与签名
GPG 快速入门指南