简介
GnuPG(GNU Privacy Guard,GPG)是一款开源软件,用于非对称加密。它是满足 GPL 协议的 PGP(Pretty Good Privacy)加密软件实现。GnuPG 依照由 IETF 制定的 OpenPGP 技术标准设计,用于加密、数字签章及产生非对称密钥对。GPG 与 PGP 功能兼容。
如果你想发送加密信息,首先你需要得到接收者的公钥,然后通过该公钥对信息进行加密传输,接收者使用私钥就可解密并读取文件。同时,你也可以在公共网络用数字签章表明身份和安全性。
GPG
安装
在 Linux 系统中,GnuPG 通常已经被默认安装。在 Windows 和 macOS 系统中,你可以从 GnuPG 官方网站 下载安装。
配置
~/.gnupg - GPG 配置目录
~/.gnupg/gpg.conf – GPG 配置文件
~/.gnupg/trustdb.gpg – GPG 信任库,用于存储你信任的其他 GPG 密钥
~/.gnupg/pubring.gpg – GPG 公钥库,用于存储你的公钥和他人的公钥
~/.gnupg/secring.gpg – GPG 私钥库,用于存储你的私钥
生成密钥
# 正常模式
gpg --gen-key
# 专家模式
gpg --expert --full-gen-key
1.请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择? 1
2.RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)4096
您所要求的密钥尺寸是 4096 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
以上正确吗?(y/n)y
3. You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
真实姓名:zhouzhongping
电子邮件地址:zhouzhongping@7wate.com
注释:测试使用
您正在使用‘utf-8’字符集。
您选定了这个用户标识:
“zhouzhongping (测试使用) <zhouzhongping@7wate.com>”
4.更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o
5.您需要一个密码来保护您的私钥。
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
常用命令
查看
# 查看公钥
gpg --list-keys
gpg -k
# 查看私钥
gpg --list-secret-keys
gpg -K
编辑
# 编辑密钥页面
gpg --edit-key [密钥ID]
GPG 以下命令需要进入编辑密钥页面。
命令 | 描述 | 示例 |
---|---|---|
quit | 退出此菜单 | 无需示例,直接输入 quit 即可 |
save | 保存并退出 | 无需示例,直接输入 save 即可 |
help | 显示此帮助 | 无需示例,直接输入 help 即可 |
fpr | 显示密钥指纹 | fpr |
list | 列出密钥和用户标识 | list |
uid | 选择用户标识 N | uid 1 |
key | 选择子密钥 N | key 1 |
check | 检查签名 | check |
sign | 为所选用户标识添加签名 | uid 1 , 然后 sign |
lsign | 为所选用户标识添加本地签名 | uid 1 , 然后 lsign |
tsign | 为所选用户标识添加信任签名 | uid 1 , 然后 tsign |
adduid | 增加一个用户标识 | adduid , 然后按提示操作 |
deluid | 删除选定的用户标识 | uid 1 , 然后 deluid |
addkey | 增加一个子密钥 | addkey , 然后按提示操作 |
delkey | 删除选定的子密钥 | key 1 , 然后 delkey |
expire | 变更密钥或所选子密钥的使用期限 | key 1 , 然后 expire , 接着按提示输入新的到期日 |
passwd | 变更密码 | passwd , 然后按提示输入新密码 |
trust | 变更信任度 | trust , 然后按提示选择新的信任级别 |
revsig | 吊销所选用户标识上的签名 | uid 1 , 然后 revsig |
revuid | 吊销选定的用户标识 | uid 1 , 然后 revuid |
revkey | 吊销密钥或选定的子密钥 | key 1 , 然后 revkey |
enable | 启用密钥 | enable |
disable | 禁用密钥 | disable |
clean | 压缩不可用的用户标识并从密钥上移除不可用的签名 | clean |
minimize | 压缩不可用的用户标识并从密钥上移除所有签名 | minimize |
导出
# 导出公钥
gpg --armor --output public-key.txt --export [密钥ID]
# 导出私钥
gpg --armor --output private-key.txt --export-secret-keys [密钥ID]
在这里,--armor
选项会生成.asc 后缀的 ASCII 类型的文本文件,如果不使用该选项,则会生成.gpg 后缀的二进制文件。
导入
# 从本地文件导入密钥
gpg --import [密钥文件]
# 从服务器导入密钥
gpg --keyserver [服务器] --search-keys [用户ID]
公布
# 将密钥发布到公开服务器
gpg --send-keys [密钥ID] --keyserver [服务器]
# 发布用户指纹
gpg --fingerprint [密钥ID]
删除
# 删除指定公钥
gpg --delete-key [密钥ID]
# 删除指定私钥
gpg --delete-secret-keys [密钥ID]
常用选项
命令选项 | 描述 | 示例 |
---|---|---|
—list-keys | 列出所有的密钥 | gpg --list-keys |
—gen-key | 生成新的密钥对 | gpg --gen-key |
—delete-key | 删除密钥 | gpg --delete-key [key-id] |
—import | 导入密钥 | gpg --import [key-file] |
—export | 导出公钥 | gpg --export -a "User Name" > public.key |
—armor | 创建 ASCII 字符格式的输出(用于在邮件等场合) | gpg --armor --export [key-id] |
—encrypt | 加密文件 | gpg --encrypt --recipient [key-id] [file] |
—decrypt | 解密文件 | gpg --decrypt [file] |
—sign | 生成只有你自己可以识别的签名文件 | gpg --sign [file] |
—verify | 验证签名文件 | gpg --verify [file] |
—edit-key | 编辑密钥的详细设置,例如添加/删除别名、设置过期时间等 | gpg --edit-key [key-id] |
—send-keys | 将密钥发送到 keyserver | gpg --send-keys [key-id] |
—recv-keys | 从 keyserver 接收密钥 | gpg --recv-keys [key-id] |
—refresh-keys | 从 keyserver 更新所有密钥的信息 | gpg --refresh-keys |
—full-generate-key | 使用全面设置来生成新的密钥对 | gpg --full-generate-key |
—quick-add-uid | 快速添加新的用户 ID 到现有的密钥 | gpg --quick-add-uid [key-id] [User ID] |
—change-passphrase | 改变密钥的保护密码 | gpg --change-passphrase [key-id] |
加密和解密
# 加密文件
gpg --recipient [密钥ID] --output demo.en.txt --encrypt demo.txt
# 解密文件
gpg --decrypt demo.en.txt --output demo.de.txt
gpg demo.en.txt
# 签名文件(GPG格式)
gpg --sign test.txt
# 签名文件(ASCII格式)
gpg --clearsign test.txt
# 生成单独签名
# -a 选项会生成 ASCII 格式的签名
gpg -a --detach-sign test.txt
# 验证签名
gpg --verify test.txt.asc test.txt