GPG 密钥管理,第 2 部分

欢迎回到 GPG 系列,我们正在探索如何将 GPG 与其他应用程序一起使用来保护您的数据。 在第一部分中,我们介绍了 GPG 的功能。 您了解了完整性、不可否认性和真实性。 在第二部分中,介绍了密钥的创建和发布,以及吊销证书的创建。 该系列的第三篇文章介绍了使用您的密钥对文件或通信进行签名和加密。

最后一部分将更深入地介绍 GPG 密钥的管理,包括 Web of Trust 和密钥签名方。 它还将讨论导出、添加和删除密钥、使用子密钥和检索公钥。

信任网络

GPG 密钥的真正威力在于它们用于与他人交流。 为了使其工作,您需要信任您下载的公钥,其他人也必须信任您的密钥。 当您第一次开始时,您的网络可能很小并且仅由您认识的人组成。 最终,您的网络可能包括具有多种分离度的人。 您将能够信任您不认识的人的密钥,因为您认识的人已经签署了他们的密钥。 这是信任网络的基础。 它是一个基于相互关联的签名和信任可以信任的密钥网络。

场景

无分离

"I trust my brother. I trust his key."

1 分离度

"I trust my brother to only sign keys of people he trusts, so I will sign keys of people he signs that I do not know."

2 分离度

"I trust the keys my brother has signed, but I do not trust those people to sign keys properly."

当信任相隔几度的密钥时,您需要一个签名链。 为了提高您找到连锁店的能力,您需要让您认识的人以外的其他人签署您的密钥。

一个很好的方法是参加一个密钥签名派对。 当您参加会议时,请提前寻找密钥签名派对或提出自己组织一个。

什么是密钥签名方?

密钥签名方是使用 GPG 加密系统的人的聚会。 聚会的目的是让这些人签署彼此的钥匙。 密钥签名方有助于在很大程度上扩展信任网络。 本文不会深入介绍密钥签名方,因为网络上已经有一些优秀的资源。

添加和删​​除 GPG 密钥

有两种方法可以将密钥添加到您的密钥环。 最常想到的是从公钥服务器检索密钥。 另一种是使用数字文件并将其导入您的密钥环。 使用数字文件的最典型情况是当您将自己的密钥从一台机器移动到另一台机器时。 在这种情况下,您将从导出的文件中导入私钥和公钥。

海马

在 Seahorse 主窗口中,选择 Remote > Find Remote Keys… 这将打开一个搜索对话框,允许您使用电子邮件地址或指纹搜索密钥服务器。

输入您要搜索的电子邮件或指纹后,您可以选择或取消选择要搜索的服务器。 点击搜索后,将返回与条件匹配的键列表。

GPG 密钥管理:查找远程密钥结果

正如你在 example 上面,搜索中可能会返回多个键(通常如果有人从旧键迁移到新键,就会发生这种情况)。 单击正确的密钥,然后单击导入按钮。 没有任何反馈表明密钥已成功导入,但现在只要在“查看”菜单下选择“显示任何”视图,它就会列在 GPG 密钥列表中。 如果要从密钥环中删除密钥,只需右键单击列表中的密钥,然后从选项中选择删除。

GPG密钥管理:删除密钥

然后将提示您确认删除。 完成后,该密钥将不再可用。

命令行

要使用命令行从密钥服务器检索密钥,请使用以下命令。

$ gpg2 --recv-keys D172C836
gpg: requesting key D172C836 from hkp server keys.gnupg.net
gpg: key D172C836: "Justin W. Flory <[email protected]>" 26 new signatures
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   2  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: next trustdb check due at 2016-11-09
gpg: Total number processed: 1
gpg:         new signatures: 26

命令行选项可以更好地反馈密钥已导入这一事实以及它在您的信任网络中的状态。

要使用命令行删除密钥,请使用以下命令。

$ gpg2 --delete-keys D172C836 
pub  4096R/D172C836 2014-09-24 Justin W. Flory <[email protected]>

Delete this key from the keyring? (y/N) y

您可以使用

gpg2 –list-keys

命令。 这将列出您保存的所有密钥。 如果您有很长的键列表,则可能需要使用

gpg2 –list-keys | grep D172C836

将结果过滤到您要查找的键。

编辑 GPG 密钥

可以为您的密钥环上的密钥指定不同的信任级别。 由于这些密钥将形成信任链,因此级别必须考虑两个因素:

  • 您能否验证要求签名密钥的人是他们声称的人?
  • 您能相信要求签署密钥以遵循良好密钥签名实践的人吗? 或者,换句话说,你能相信他们签署的密钥吗?

您可以为密钥分配不同级别的信任。 级别是:

  • 未知: 对所有者在密钥签名中的判断一无所知。 您最初不拥有的公钥环上的密钥具有此信任级别。
  • 没有任何: 众所周知,所有者对其他密钥进行了不正确的签名。 换句话说,你不信任他们。
  • 边缘:所有者了解密钥签名的含义,并在签名之前正确验证密钥。
  • 满的: 所有者对密钥签名非常了解,他在密钥上的签名会和你自己的一样好。
  • 最终的:这应该只用于您自己的密钥。 你是唯一可以最终信任的人!

与 GPG 密钥管理中的情况一样,第 1 部分,Seahorse 或命令行均可用于执行这些密钥管理任务。

编辑密钥的另一个功能是更改密钥的到期日期。 当您的密钥即将到期并且您仍想使用该密钥时,这很有用。 您可能还记得 GPG 密钥管理第 1 部分,密钥过期是密钥管理中的保护措施之一。

海马

使用 Seahorse,您可以签署密钥并指定信任级别。 要在 Seahorse 中签署公钥,请右键单击该密钥并选择编辑。 然后,在出现的对话框中,选择“信任”选项卡。 是的,被标记为 Trust 有点奇怪,但它是您用来签署密钥的标签。

GPG 密钥管理:海马信任和签名

要签署密钥,只需单击签署此密钥按钮。 如果要更改信任级别,则需要转到详细信息选项卡。

GPG 密钥管理:Seahorse Change Trust

要更改信任级别,请打开下拉菜单。 在当前 example,下拉菜单默认为未知级别。 Seahorse 允许以下级别:未知、从不、边缘和完整。 Ultimate 为您自己的密钥保留,不可用于公共密钥。

命令行

要使用命令行签署密钥,请使用以下命令:

$ gpg2 --sign-key 014131E4

pub  4096R/014131E4  created: 2016-01-24  expires: 2020-01-23  usage: SC  
                     trust: unknown       validity: unknown
sub  4096R/50862BD9  created: 2016-01-24  expires: 2020-01-23  usage: E   
sub  4096R/F6ABF0B6  created: 2016-01-24  expires: 2020-01-23  usage: S   
[ unknown] (1). Justin W. Flory <[email protected]>
[ unknown] (2)  Justin W. Flory <[email protected]>
[ unknown] (3)  Justin W. Flory <[email protected]>
[ unknown] (4)  Justin W. Flory <[email protected]>
[ unknown] (5)  Justin W. Flory (SpigotMC) <[email protected]>
[ unknown] (6)  Justin W. Flory (CrystalCraftMC) <[email protected]>
[ unknown] (7)  Justin W. Flory (Fedora Project) <[email protected]>
[ unknown] (8)  Justin W. Flory (CrystalCraftMC) <[email protected]>
[ unknown] (9)  Justin W. Flory (Rochester Institute of Technology) <[email protected]>
[ unknown] (10)  Justin W. Flory (Server Logging Address) <[email protected]>

Really sign all user IDs? (y/N)

要编辑密钥,请使用以下命令:

$ gpg2 --edit-key 014131E4
pub  4096R/014131E4  created: 2016-01-24  expires: 2020-01-23  usage: SC  
                     trust: unknown       validity: unknown
sub  4096R/50862BD9  created: 2016-01-24  expires: 2020-01-23  usage: E   
sub  4096R/F6ABF0B6  created: 2016-01-24  expires: 2020-01-23  usage: S   
[ unknown] (1). Justin W. Flory <[email protected]>
[ unknown] (2)  Justin W. Flory <[email protected]>
[ unknown] (3)  Justin W. Flory <[email protected]>
[ unknown] (4)  Justin W. Flory <[email protected]>
[ unknown] (5)  Justin W. Flory (SpigotMC) <[email protected]>
[ unknown] (6)  Justin W. Flory (CrystalCraftMC) <[email protected]>
[ unknown] (7)  Justin W. Flory (Fedora Project) <[email protected]>
[ unknown] (8)  Justin W. Flory (CrystalCraftMC) <[email protected]>
[ unknown] (9)  Justin W. Flory (Rochester Institute of Technology) <[email protected]>
[ unknown] (10)  Justin W. Flory (Server Logging Address) <[email protected]>

gpg>

进入编辑模式后,您可以输入

帮助

或输入

?

获取选项列表。

gpg> ?
quit        quit this menu
save        save and quit
help        show this help
fpr         show key fingerprint
list        list key and user IDs
uid         select user ID N
key         select subkey N
check       check signatures
sign        sign selected user IDs [* see below for related commands]
lsign       sign selected user IDs locally
tsign       sign selected user IDs with a trust signature
nrsign      sign selected user IDs with a non-revocable signature
deluid      delete selected user IDs
delkey      delete selected subkeys
delsig      delete signatures from the selected user IDs
pref        list preferences (expert)
showpref    list preferences (verbose)
trust       change the ownertrust
revsig      revoke signatures on the selected user IDs
enable      enable key
disable     disable key
showphoto   show selected photo IDs
clean       compact unusable user IDs and remove unusable signatures from key
minimize    compact unusable user IDs and remove all signatures from key

* The `sign' command may be prefixed with an `l' for local signatures (lsign),
  a `t' for trust signatures (tsign), an `nr' for non-revocable signatures
  (nrsign), or any combination thereof (ltsign, tnrsign, etc.).

要更改密钥的信任级别,您可以使用

相信

选项在

gpg>

迅速的。

gpg> trust
pub  4096R/014131E4  created: 2016-01-24  expires: 2020-01-23  usage: SC  
                     trust: unknown       validity: unknown
sub  4096R/50862BD9  created: 2016-01-24  expires: 2020-01-23  usage: E   
sub  4096R/F6ABF0B6  created: 2016-01-24  expires: 2020-01-23  usage: S   
[ unknown] (1). Justin W. Flory <[email protected]>
[ unknown] (2)  Justin W. Flory <[email protected]>
[ unknown] (3)  Justin W. Flory <[email protected]>
[ unknown] (4)  Justin W. Flory <[email protected]>
[ unknown] (5)  Justin W. Flory (SpigotMC) <[email protected]>
[ unknown] (6)  Justin W. Flory (CrystalCraftMC) <[email protected]>
[ unknown] (7)  Justin W. Flory (Fedora Project) <[email protected]>
[ unknown] (8)  Justin W. Flory (CrystalCraftMC) <[email protected]>
[ unknown] (9)  Justin W. Flory (Rochester Institute of Technology) <[email protected]>
[ unknown] (10)  Justin W. Flory (Server Logging Address) <[email protected]>

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

Your decision?

子键

GPG 密钥的泄露是一个严重的问题,可以通过使用子密钥来最小化。 子密钥是 OpenPGP 的一项功能,它允许从属于主 OpenPGP 密钥的密钥。 大多数时候,这些键与主键的指纹相关联,但它们也有可能拥有自己的指纹。 使用子密钥的主要原因是最大程度地减少丢失或被盗的设备的影响,该设备上有您的密钥。 采用这种策略的人通常使用一个主键和两个子键。 一个子密钥用于签名,另一个用于加密。 本文不会深入讨论子键,因为已经有很好的资源可以讨论细节。

Seahorse 可以在键属性的详细信息选项卡上添加子键。

GPG密钥管理:海马添加子密钥

如果您使用命令行来编辑您的主密钥,您还有一个额外的选项来添加子密钥。

gpg> addkey
Please select what kind of key you want:
   (3) DSA (sign only)
   (4) RSA (sign only)
   (5) Elgamal (encrypt only)
   (6) RSA (encrypt only)
Your selection?

从这一点来看,该过程与 GPG 密钥管理第 1 部分中讨论的生成密钥相同。

使用吊销证书

在 GPG 密钥管理第 1 部分中,我们介绍了撤销证书的自动创建以及使用它的原因。 虽然可以在 Seahorse 中撤销密钥,但我建议将撤销证书存储在与密钥不同的位置。 即使您丢失了密钥,这也将允许您撤销密钥。

要使用 Seahorse 吊销证书,请转到关键属性的详细信息选项卡,然后单击过期按钮。

GPG密钥管理:海马密钥详细信息导出

如上所述,如果您失去了对密钥的控制权,您可以使用命令行来撤销证书。 步骤是:

  • 从密钥服务器检索您的公钥或导入它的保护副本。
  • 导入您的吊销证书。

以下命令将从保存的文件中导入公钥和吊销证书。

$ gpg2 --import cprofitt-key.asc 
gpg: key 2B9A96EA: public key "charles profitt <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1
$ gpg2 --import 538713F7D7395D0F24706B0106E078D72B9A96EA.rev 
gpg: key 2B9A96EA: "charles profitt <[email protected]>" revocation certificate imported
gpg: Total number processed: 1
gpg:    new key revocations: 1
gpg: no ultimately trusted keys found

导入吊销证书后,您的密钥将被吊销。 剩下的唯一步骤是将其发送到密钥服务器。 将撤销的密钥发送到密钥服务器后, 没有回头路. 以后使用时,您的密钥将被撤销和失效。

至此,GPG系列赛正式结束 Fedora 杂志。 有了这些新知识,我们希望您对数字安全的基础知识、如何管理 GPG 密钥以及如何在自己的生活中使用它们有更多的了解。