GnuPG是一个复杂的密钥管理系统,可以对数据进行安全签名或加密。GPG是一个用于创建和操作GnuPG密钥的命令行工具。

GnuPG最广泛地用于拥有任何交互式身份验证手段或者免密登陆的SSH (Secure Shell)连接,这显著提高了远程连接的安全级别。

以下章节描述了创建、使用和维护GnuPG密钥安全性的方法。

Section 16.1: 导出公钥

为了让你的公私钥对发挥作用,你需要把你的公钥共享给其他人使用。请确保您在这里使用的是您的公钥,因为您永远不应该共享您的私钥。你可以使用以下命令导出公钥:

[demouser@vbox ~]$ gpg --armor --export aya234@163.com > public_key.asc

其中EMAIL_ADDRESS记得修改为你关联的电子邮件地址。

您也可以将您的公钥上传到公钥服务器,以便其他人可以使用它。

在终端中输入以下命令:

[demouser@vbox ~]$ gpg --list-keys
gpg: 正在检查信任度数据库
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: 深度:0  有效性:  1  已签名:  0  信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2027-11-05 进行
[keyboxd]
---------
pub   ed***** 2024-11-05 [SC] [有效至:2027-11-05]
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
uid             [ 绝对 ] username <username@domain.com>
sub   cv***** 2024-11-05 [E] [有效至:2027-11-05]

接下来,搜索与要导出的密钥相关联的8位数字字符串(主ID)。私钥文件在~/.gnupg/private-keys-v1.d路径中。执行命令:

gpg —send-keys PRIMARY_ID

其中PRIMARY_ID是该键的实际ID。现在,公钥已经上传到密钥服务器,并且可以公开使用。

Section 16.2: 快速创建和使用GnuPG密钥

安装haveged(例如sudo apt-get Install haveged (非必须))以加速随机字节处理。然后执行gpg --gen-key创建公私钥对,过程有提示需要用户名和密码:

[demouser@vbox ~]$ gpg --gen-key
gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: 目录‘/home/demouser/.gnupg’已创建
注意:使用 “gpg --full-generate-key” 以获得一个全功能的密钥生成对话框。

GnuPG 需要构建用户标识以辨认您的密钥。

真实姓名: username
电子邮件地址: username@domain.com
您选定了此用户标识:
    “username <username@domain.com>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
gpg: /home/demouser/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 目录‘/home/demouser/.gnupg/openpgp-revocs.d’已创建
gpg: 吊销证书已被存储为‘/home/demouser/.gnupg/openpgp-revocs.d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.rev’
公钥和私钥已经生成并被签名。

pub   ed***** 2024-11-05 [SC] [有效至:2027-11-05]
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
uid                     username <username@domain.com>
sub   cv***** 2024-11-05 [E] [有效至:2027-11-05]

执行gpg --list-keys查看结果

[demouser@vbox ~]$ gpg --list-keys
gpg: 正在检查信任度数据库
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: 深度:0  有效性:  1  已签名:  0  信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2027-11-05 进行
[keyboxd]
---------
pub   ed***** 2024-11-05 [SC] [有效至:2027-11-05]
      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
uid             [ 绝对 ] username <username@domain.com>
sub   cv***** 2024-11-05 [E] [有效至:2027-11-05]

将公钥发布至服务器

gpg --keyserver pgp.mit.edu --send-keys NNNNNNNN