2022-01-25 12:29:33 +08:00
|
|
|
|
---
|
2023-06-28 11:56:51 +08:00
|
|
|
|
title: GnuPG 简明指南
|
|
|
|
|
description: GnuPG 简明指南
|
|
|
|
|
keywords:
|
2023-11-09 17:30:33 +08:00
|
|
|
|
- GnuPG
|
|
|
|
|
- 简明指南
|
2023-06-28 11:56:51 +08:00
|
|
|
|
tags:
|
2024-10-14 16:48:38 +08:00
|
|
|
|
- FormalSciences/ComputerScience
|
|
|
|
|
- ComputerSecurity/InformationSecurity
|
2023-06-28 11:56:51 +08:00
|
|
|
|
author: 7Wate
|
|
|
|
|
date: 2023-06-28
|
2022-01-25 12:29:33 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 简介
|
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
[GnuPG](https://gnupg.org/)(GNU Privacy Guard,GPG)是一款开源软件,用于非对称加密。它是满足 GPL 协议的 PGP(Pretty Good Privacy)加密软件实现。GnuPG 依照由 IETF 制定的 OpenPGP 技术标准设计,用于加密、数字签章及产生非对称密钥对。GPG 与 PGP 功能兼容。
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
如果你想发送加密信息,首先你需要得到接收者的公钥,然后通过该公钥对信息进行加密传输,接收者使用私钥就可解密并读取文件。同时,你也可以在公共网络用数字签章表明身份和安全性。
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
|
|
|
|
## GPG
|
|
|
|
|
|
|
|
|
|
### 安装
|
|
|
|
|
|
2023-11-09 17:30:33 +08:00
|
|
|
|
在 Linux 系统中,GnuPG 通常已经被默认安装。在 Windows 和 macOS 系统中,你可以从 [GnuPG 官方网站](https://gnupg.org/) 下载安装。
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
|
|
|
|
### 配置
|
|
|
|
|
|
2022-05-30 12:27:50 +08:00
|
|
|
|
```shell
|
2023-07-03 16:09:19 +08:00
|
|
|
|
~/.gnupg - GPG 配置目录
|
|
|
|
|
~/.gnupg/gpg.conf – GPG 配置文件
|
|
|
|
|
~/.gnupg/trustdb.gpg – GPG 信任库,用于存储你信任的其他 GPG 密钥
|
|
|
|
|
~/.gnupg/pubring.gpg – GPG 公钥库,用于存储你的公钥和他人的公钥
|
|
|
|
|
~/.gnupg/secring.gpg – GPG 私钥库,用于存储你的私钥
|
2022-01-25 12:29:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 生成密钥
|
|
|
|
|
|
2022-05-30 12:27:50 +08:00
|
|
|
|
```shell
|
2023-07-26 17:34:31 +08:00
|
|
|
|
# 正常模式
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg --gen-key
|
2023-07-26 17:34:31 +08:00
|
|
|
|
|
|
|
|
|
# 专家模式
|
|
|
|
|
gpg --expert --full-gen-key
|
2022-01-25 12:29:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
2022-05-30 12:27:50 +08:00
|
|
|
|
```shell
|
2022-01-25 12:29:33 +08:00
|
|
|
|
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.您需要一个密码来保护您的私钥。
|
|
|
|
|
|
|
|
|
|
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
|
|
|
|
|
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 常用命令
|
|
|
|
|
|
2023-07-26 17:34:31 +08:00
|
|
|
|
### 查看
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2022-05-30 12:27:50 +08:00
|
|
|
|
```shell
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 查看公钥
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg --list-keys
|
|
|
|
|
gpg -k
|
2022-05-30 12:27:50 +08:00
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 查看私钥
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg --list-secret-keys
|
|
|
|
|
gpg -K
|
|
|
|
|
```
|
|
|
|
|
|
2023-07-26 17:34:31 +08:00
|
|
|
|
### 编辑
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
# 编辑密钥页面
|
|
|
|
|
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` |
|
|
|
|
|
|
|
|
|
|
### 导出
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2022-05-30 12:27:50 +08:00
|
|
|
|
```shell
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 导出公钥
|
2023-07-26 17:34:31 +08:00
|
|
|
|
gpg --armor --output public-key.txt --export [密钥ID]
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 导出私钥
|
2023-07-26 17:34:31 +08:00
|
|
|
|
gpg --armor --output private-key.txt --export-secret-keys [密钥ID]
|
2022-01-25 12:29:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
2023-11-09 17:30:33 +08:00
|
|
|
|
在这里,`--armor` 选项会生成.asc 后缀的 ASCII 类型的文本文件,如果不使用该选项,则会生成.gpg 后缀的二进制文件。
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2023-07-26 17:34:31 +08:00
|
|
|
|
### 导入
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2022-05-30 12:27:50 +08:00
|
|
|
|
```shell
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 从本地文件导入密钥
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg --import [密钥文件]
|
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 从服务器导入密钥
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg --keyserver [服务器] --search-keys [用户ID]
|
|
|
|
|
```
|
|
|
|
|
|
2023-07-26 17:34:31 +08:00
|
|
|
|
### 公布
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2022-05-30 12:27:50 +08:00
|
|
|
|
```shell
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 将密钥发布到公开服务器
|
2023-07-26 17:34:31 +08:00
|
|
|
|
gpg --send-keys [密钥ID] --keyserver [服务器]
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 发布用户指纹
|
2023-07-26 17:34:31 +08:00
|
|
|
|
gpg --fingerprint [密钥ID]
|
2022-01-25 12:29:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 删除
|
|
|
|
|
|
2022-05-30 12:27:50 +08:00
|
|
|
|
```shell
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 删除指定公钥
|
2023-07-26 17:34:31 +08:00
|
|
|
|
gpg --delete-key [密钥ID]
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 删除指定私钥
|
2023-07-26 17:34:31 +08:00
|
|
|
|
gpg --delete-secret-keys [密钥ID]
|
2022-01-25 12:29:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
2023-07-26 17:34:31 +08:00
|
|
|
|
## 常用选项
|
|
|
|
|
|
|
|
|
|
| 命令选项 | 描述 | 示例 |
|
|
|
|
|
| -------------------- | ----------------------------------------------------- | ------------------------------------------- |
|
|
|
|
|
| \--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]` |
|
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
## 加密和解密
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2022-05-30 12:27:50 +08:00
|
|
|
|
```shell
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 加密文件
|
2023-07-26 17:34:31 +08:00
|
|
|
|
gpg --recipient [密钥ID] --output demo.en.txt --encrypt demo.txt
|
2022-01-25 12:29:33 +08:00
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 解密文件
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg --decrypt demo.en.txt --output demo.de.txt
|
|
|
|
|
gpg demo.en.txt
|
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 签名文件(GPG格式)
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg --sign test.txt
|
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 签名文件(ASCII格式)
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg --clearsign test.txt
|
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 生成单独签名
|
|
|
|
|
# -a 选项会生成 ASCII 格式的签名
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg -a --detach-sign test.txt
|
|
|
|
|
|
2023-07-03 16:09:19 +08:00
|
|
|
|
# 验证签名
|
2022-01-25 12:29:33 +08:00
|
|
|
|
gpg --verify test.txt.asc test.txt
|
|
|
|
|
```
|