GPG0-密钥基础操作

GPG简介

img
https://www.gnupg.org/index.html

软件介绍

GnuPG 是 RFC4880(即 OpenPGP,又称 PGP)标准的完整且自由的实现。它支持对数据与通信进行加密与签名,并配备灵活多样的密钥管理系统,以及面向各类公钥目录的访问模块。作为命令行工具,GnuPG(GPG)设计易于与其他应用集成,现有大量前端程序与库可供调用。GnuPG 同时提供 S/MIME 与 Secure Shell(SSH)支持。
自 1997 年发布以来,GnuPG 始终遵循自由软件理念,保障用户四大基本自由;在 GNU 通用公共许可证条款下,可自由使用、修改与再分发。

应用场景

GPG(GNU Privacy Guard)密钥基于非对称加密,由公钥和私钥组成。公钥可公开分享,用于加密信息或验证签名;私钥需保密,用于解密或签名。其核心功能包括:

  1. 加密通信:发件人用收件人公钥加密,仅对应私钥可解密,确保机密性;
  2. 数字签名:私钥签名文件或邮件,他人用公钥验证完整性及来源真实性;
  3. 身份认证:通过“信任网络”机制交叉验证公钥归属,防止伪造。

GPG广泛应用于安全邮件(如ProtonMail)、软件发布(如Linux发行版验证)、版本控制(Git提交签名)等场景,是开放生态中保障隐私与信任的基础设施。

基础操作

先说结论

# 1.创建密钥对
# 完全配置
gpg --full-generate-key
# 快速创建
gpg --gen-key

# 2.查看/导出
# 以ascii码方式查看密钥查看公钥
gpg -a -export (用户名 or ID)
# 以ascii码方式导出公钥
gpg -a -o filename -export (用户名 or ID)
# 以ascii码方式查看密钥查看私钥
gpg -a -export-secret-keys (用户名 or ID)
# 以ascii码方式导出私钥
gpg -a -o filename -export-secret-keys (用户名 or ID)

# 3,删除密钥
# 删除公钥
gpg --delete-keys  (用户名 or ID)
# 删除私钥
gpg --delete-secret-keys  (用户名 or ID)

# 4.导入密钥
gpg --import filename

操作环境

linux发行版中正常已经内置gpg程序,windows可以使用Gpg4win https://www.gpg4win.org/ ,或者WSL子系统

这里我使用的是WSL中的ubuntu子系统
img
img

创建密钥对

完全配置

这里推荐使用完全配置的方式创建

gpg --full-generate-key

首先选择密钥类型,推荐使用ECC系列的密钥算法,RSA算法为了安全性要至少4096位,DSA算法和RSA算法类似
img

直接回车的话会选择默认选项(*default* 项)
img

接着是密钥的有效期,默认是永久有效,这里可以设置一个时限避免密钥未来泄露,1w 代表 1周,1m代表1个月,选好后会进行确认
img

输入用户名、邮箱、备注,使用o进行确认,
这里用户名会作为keyid使用,但可以重复,只是重复后要操作很容易弄混,推荐单独设置
img

输入密码界面,这里的口令可以避免密钥文件丢失后被盗用,推荐设置8位以上并包含一个特殊字符
img
要输入两次
img

空口令或者弱密码会弹窗确认,两次都确认后可以忽略风险创建(不推荐)
img
img
img

快速创建

gpg --gen-key

也可以快速创建,快速创建时只需要输入用户名和邮箱,密钥类型等都是默认选项,有效期3年
img

查看密钥

# 查看公钥
gpg -k 或 gpg --list-keys
# 查看私钥
gpg -K 或 gpg --list-secret-keys

img
img

查看密钥/导出密钥

由于gpg的密钥是存在程序内的,因此查看和导出都需要通过程序进行,导出实际上就是把查看的内容保存到外部文件中

查看

# 以ascii码方式查看密钥
# 公钥
gpg -a -export (用户名 or ID)
# 私钥
gpg -a -export-secret-keys (用户名 or ID)

如果用户名重复,这里就比较麻烦,只能通过长ID和查看
img
img
可以看到直接通过用户名查看的结果和上面是都不一样的,但如果删掉其中一个就会相同,这里应该是两个密钥拼接在一起了
img

导出密钥

# 以ascii码方式导出密钥
#公钥
gpg -a -o filename -export (用户名 or ID)
# 私钥
gpg -a -o filename -export-secret-keys (用户名 or ID)

仔细观察可以看到其实就是多了一个’-o filename‘选项,导出的路径默认会在当前路径下(我这里中是家目录)

img

导出私钥的时候需要输入密钥口令,如果口令为空则直接导出

img

img

删除密钥

# 公钥
gpg --delete-keys  (用户名 or ID)
# 私钥
gpg --delete-secret-keys  (用户名 or ID)

用户名

通过用户名删除密钥时,仅会删除其中一条,当用户名下有好几条密钥时,备注和过期时间就可以区分密钥,这里可以看到是最初手动创建的密钥
img
删除私钥时不需要输入密码
img
img

KeyID

删除密钥的时候需要先删除私钥才能接着删除公钥
img
img
img
img

导入密钥

gpg --import filename

这里先把所有的密钥都清空了
img
导入密钥时没有顺序要求,密钥如果有保护口令需要输入口令
img

img
img
导入完成后查看结果
img

posted @ 2025-07-31 16:45  Gaoniaofei  阅读(45)  评论(0)    收藏  举报