GPG0-密钥基础操作
GPG简介
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)密钥基于非对称加密,由公钥和私钥组成。公钥可公开分享,用于加密信息或验证签名;私钥需保密,用于解密或签名。其核心功能包括:
- 加密通信:发件人用收件人公钥加密,仅对应私钥可解密,确保机密性;
- 数字签名:私钥签名文件或邮件,他人用公钥验证完整性及来源真实性;
- 身份认证:通过“信任网络”机制交叉验证公钥归属,防止伪造。
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子系统
创建密钥对
完全配置
这里推荐使用完全配置的方式创建
gpg --full-generate-key
首先选择密钥类型,推荐使用ECC系列的密钥算法,RSA算法为了安全性要至少4096位,DSA算法和RSA算法类似
直接回车的话会选择默认选项(*default* 项)
接着是密钥的有效期,默认是永久有效,这里可以设置一个时限避免密钥未来泄露,1w 代表 1周,1m代表1个月,选好后会进行确认
输入用户名、邮箱、备注,使用o进行确认,
这里用户名会作为keyid使用,但可以重复,只是重复后要操作很容易弄混,推荐单独设置
输入密码界面,这里的口令可以避免密钥文件丢失后被盗用,推荐设置8位以上并包含一个特殊字符
要输入两次
空口令或者弱密码会弹窗确认,两次都确认后可以忽略风险创建(不推荐)
快速创建
gpg --gen-key
也可以快速创建,快速创建时只需要输入用户名和邮箱,密钥类型等都是默认选项,有效期3年
查看密钥
# 查看公钥
gpg -k 或 gpg --list-keys
# 查看私钥
gpg -K 或 gpg --list-secret-keys
查看密钥/导出密钥
由于gpg的密钥是存在程序内的,因此查看和导出都需要通过程序进行,导出实际上就是把查看的内容保存到外部文件中
查看
# 以ascii码方式查看密钥
# 公钥
gpg -a -export (用户名 or ID)
# 私钥
gpg -a -export-secret-keys (用户名 or ID)
如果用户名重复,这里就比较麻烦,只能通过长ID和查看
可以看到直接通过用户名查看的结果和上面是都不一样的,但如果删掉其中一个就会相同,这里应该是两个密钥拼接在一起了
导出密钥
# 以ascii码方式导出密钥
#公钥
gpg -a -o filename -export (用户名 or ID)
# 私钥
gpg -a -o filename -export-secret-keys (用户名 or ID)
仔细观察可以看到其实就是多了一个’-o filename‘选项,导出的路径默认会在当前路径下(我这里中是家目录)
导出私钥的时候需要输入密钥口令,如果口令为空则直接导出
删除密钥
# 公钥
gpg --delete-keys (用户名 or ID)
# 私钥
gpg --delete-secret-keys (用户名 or ID)
用户名
通过用户名删除密钥时,仅会删除其中一条,当用户名下有好几条密钥时,备注和过期时间就可以区分密钥,这里可以看到是最初手动创建的密钥
删除私钥时不需要输入密码
KeyID
删除密钥的时候需要先删除私钥才能接着删除公钥
导入密钥
gpg --import filename
这里先把所有的密钥都清空了
导入密钥时没有顺序要求,密钥如果有保护口令需要输入口令
导入完成后查看结果