GPG-命令基本使用

GPG 官网

介绍

GPG, GNU Privacy Guard, 是一个用于数据加密和数字签名的工具, 它实现了 OpenPGP 标准 (包括公钥加密, 对称加密, 数字签名, 压缩, 密钥管理等).

安装

在 Archlinux 上为:

1
sudo pacman -S gnupg

其同时也会安装 pinentry, 用于为各种环境提供密码输入的界面.

基本使用

创建 GPG 密钥对

1
gpg --gen-key

之后会先要求输入 user ID:

然后是 Email address:

之后会进行确认:


(确认的话输 O 即可)

注意, 如果没有安装 pinentry 的话, 到这里程序会中断:

1
2
3
4
5
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: agent_genkey failed: No pinentry

此时安装后重新生成密钥对.

之后会要求输入一个密码以保护生成的 gpg 密钥对 (对称加密):

注意若隔了一段时间没输入, 则会 timeout 然后退出:

1
2
3
4
5
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: agent_genkey failed: Timeout
Key generation failed: Timeout

输入密码后, 则会生成密钥对.

1
2
3
4
5
6
7
8
9
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/E4262EF89F95B93E4DAB6DDE3B204A0C09160802.rev'
public and secret key created and signed.

pub ed25519 2024-05-13 [SC] [expires: 2026-05-13]
E4262EF89F95B93E4DAB6DDE3B204A0C09160802
uid jie <2694783083@qq.com>
sub cv25519 2024-05-13 [E] [expires: 2026-05-13]

这里的:

  • trustdb.gpg 文件, 用来存储密钥信任度信息的数据库文件. 信任数据库包含了你对各个公钥所有者身份的信任程度, 以及你对他们签名准确性的信任程度. 这个数据库用于决定哪些密钥是可以信任的, 哪些是不可信的
  • revocation certificate (撤销证书), 指一个特殊类型的证书, 用于在你的私钥丢失或被盗的情况下, 使你的公钥失效. 撤销证书应当被安全地存储在一个只有你可以访问的地方. 当你需要使你的公钥失效时 (例如, 你的私钥被盗或丢失), 你可以发布你的撤销证书. 一旦发布, 任何看到这个撤销证书的人都会知道你的公钥不再可用
  • openpgp-revocs.d 目录, 用于存储撤销证书. 每当你创建一个新的 GPG 密钥对时, GnuPG 会自动为你生成一个撤销证书, 并将其存储在这个目录中

加密/解密一个文件

默认是 AES (Advanced Encryption Standard) 对称加密 (用什么加密就用什么解开) 如:

1
gpg -c file.txt

命令运行后, 会随机生成一个会话密钥, 用于实际加密文件内容, 然后会调用 pinentry 来获取密码输入, 用这个密码加密会话密钥, 连同加密的文件内容存储在 .gpg文件中.

.gpg 文件的结构大致如:

  • 文件头部, 包含 GPG 版本信息和加密算法等元数据
  • 用输入的密码加密的会话密钥。
  • 用会话密钥加密的文件内容

解密如:

1
gpg --decript file.txt.gpg

这会将解密文件内容输出到终端.

非对称加密

如:

1
gpg -e -r "Your GPG ID or Email" myfile.txt
  • -e, 指 --encrypt.
  • -r, 指 --recipient, 用于指定接收者的公钥 ID 或者与其关联的电子邮件地址.

当你创建一个 GPG 密钥对时, 你需要提供一个用户 ID, 这通常是你的姓名和电子邮件地址. 例如, 可能会创建一个这样的用户 ID: "Alice <alice@example.com>". 在这个例子中, Alice 是姓名, alice@example.com 是电子邮件地址.

而在指定公钥时, 则可以用用户 ID 来指定, 如: gpg -e -r "Alice <alice@example.com>" myfile.txt.

除了用户 ID, 每个 GPG 密钥也有一个唯一的密钥 ID. 例如, 一个密钥 ID 可能是 0x12345678. 你也可以使用这个密钥 ID 来指定一个公钥. 例如, 你可以使用 gpg -e -r 0x12345678 myfile.txt.

解密用:

1
gpg -d file.txt.gpg
  • -d, 指 --decrypt.

此时 GPG 会在 ~/.gnupg/ 目录下查找并使用相应的私钥解密.


GPG-命令基本使用
http://example.com/2024/05/13/GPG-命令基本使用/
作者
Jie
发布于
2024年5月13日
许可协议