用 PGP 保护代码完整性(二):生成你的主密钥
创始人
2024-03-01 22:36:17
0

在本系列文章中,我们将深度探讨如何使用 PGP 以及为工作于自由软件项目的开发者提供实用指南。在前一篇文章中,我们介绍了基本工具和概念。在本文中,我们将展示如何生成和保护你的 PGP 主密钥。

清单

  1. 生成一个 4096 位的 RSA 主密钥 (必要)
  2. 使用 paperkey 备份你的 RSA 主密钥 (必要)
  3. 添加所有相关的身份 (必要)

考虑事项

理解“主”(认证)密钥

在本节和下一节中,我们将讨论“主密钥”和“子密钥”。理解以下内容很重要:

  1. 在“主密钥”和“子密钥”之间没有技术上的区别。
  2. 在创建时,我们赋予每个密钥特定的能力来分配功能限制。
  3. 一个 PGP 密钥有四项能力
    • [S] 密钥可以用于签名
    • [E] 密钥可以用于加密
    • [A] 密钥可以用于身份认证
    • [C] 密钥可以用于认证其他密钥
  4. 一个密钥可能有多种能力

带有 [C] (认证)能力的密钥被认为是“主”密钥,因为它是唯一可以用来表明与其他密钥关系的密钥。只有 [C] 密钥可以被用于:

  • 添加或撤销其他密钥(子密钥)的 S/E/A 能力
  • 添加、更改或撤销密钥关联的身份(uid)
  • 添加或更改本身或其他子密钥的到期时间
  • 为了网络信任目的为其它密钥签名

在自由软件的世界里,[C] 密钥就是你的数字身份。一旦你创建该密钥,你应该格外小心地保护它并且防止它落入坏人的手中。

在你创建主密钥前

在你创建的你的主密钥前,你需要选择你的主要身份和主密码。

主要身份

身份使用邮件中发件人一栏相同格式的字符串:

Alice Engineer 

你可以在任何时候创建新的身份,取消旧的,并且更改你的“主要”身份。由于主要身份在所有 GnuPG 操作中都展示,你应该选择正式的和最有可能用于 PGP 保护通信的名字和邮件地址,比如你的工作地址或者用于在项目 提交 commit 时签名的地址。

密码

密码 passphrase 专用于私钥存储在磁盘上时使用对称加密算法对其进行加密。如果你的 .gnupg 目录的内容被泄露,那么一个好的密码就是小偷能够在线假冒你的最后一道防线,这就是为什么设置一个好的密码很重要的原因。

一个强密码最好使用丰富或混合的词典的 3-4 个词,而不引用自流行来源(歌曲、书籍、口号)。由于你将相当频繁地使用该密码,所以它应当易于输入和记忆。

算法和密钥强度

尽管现在 GnuPG 已经支持椭圆曲线加密一段时间了,但我们仍坚持使用 RSA 密钥,至少较长一段时间会这样。虽然现在就可以开始使用 ED25519 密钥,但你可能会碰到无法正确处理它们的工具和硬件设备。

在后续的指南中我们说 2048 位的密钥对 RSA 公钥加密的生命周期已经足够,你可能也会好奇主密钥为什么是 4096 位。 原因很大程度是由于社会因素而非技术上的:主密钥在密钥链上是最显眼的,如果你的主密钥位数比一些和你交互的开发者的少,他们肯定会鄙视你。

生成主密钥

为了生成你的主密钥,请使用以下命令,并且将 “Alice Engineer” 替换为正确值。

$ gpg --quick-generate-key 'Alice Engineer ' rsa4096 cert

这将弹出一个要求输入密码的对话框。然后,你可能需要移动鼠标或随便按一些键才能生成足够的熵,直到该命令完成。

查看命令输出,它就像这样:

pub rsa4096 2017-12-06 [C] [expires: 2019-12-06]
 111122223333444455556666AAAABBBBCCCCDDDD
uid Alice Engineer 

注意第二行的长字符串 —— 它是你新生成的密钥的完整指纹。密钥 ID(Key ID)可以用以下三种不同形式表达:

  • 指纹 Fingerprint ,一个完整的 40 个字符的密钥标识符
  • 长密钥 ID Long ,指纹的最后 16 个字符(AAAABBBBCCCCDDDD)
  • 短密钥 ID Short ,指纹的最后 8 个字符(CCCCDDDD)

你应该避免使用 8 个字符的短密钥 ID,因为它们不足够唯一。

这里,我建议你打开一个文本编辑器,复制你新密钥的指纹并粘贴。你需要在接下来几步中用到它,所以将它放在旁边会很方便。

备份你的主密钥

出于灾后恢复的目的 —— 同时特别的如果你试图使用 Web of Trust 并且收集来自其他项目开发者的密钥签名 —— 你应该创建你的私钥的硬拷贝备份。万一所有其它的备份机制都失败了,这应当是最后的补救措施。

创建一个你的私钥的可打印的硬拷贝的最好方法是使用为此而写的软件 paperkeypaperkey 在所有 Linux 发行版上可用,在 Mac 上也可以通过 brew 安装 paperkey

运行以下命令,用你密钥的完整指纹替换 [fpr]

$ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txt

输出将采用易于 OCR 或手动输入的格式,以防如果你需要恢复它的话。打印出该文件,然后拿支笔,并在纸的边缘写下密钥的密码。这是必要的一步,因为密钥输出仍然使用密码加密,并且如果你更改了密钥的密码,你不会记得第一次创建的密钥是什么 —— 我保证。

将打印结果和手写密码放入信封中,并存放在一个安全且保护好的地方,最好远离你家,例如银行保险库。

打印机注意事项 打印机连接到计算机的并行端口的时代已经过去了。现在他们拥有完整的操作系统,硬盘驱动器和云集成。由于我们发送给打印机的关键内容将使用密码进行加密,因此这是一项相当安全的操作,但请使用您最好的偏执判断。

添加相关身份

如果你有多个相关的邮件地址(个人、工作、开源项目等),你应该将其添加到主密钥中。你不需要为任何你不希望用于 PGP 的地址(例如,可能不是你的校友地址)这样做。

该命令是(用你完整的密钥指纹替换 [fpr]):

$ gpg --quick-add-uid [fpr] 'Alice Engineer '

你可以查看你已经使用的 UID:

$ gpg --list-key [fpr] | grep ^uid

选择主 UID

GnuPG 将会把你最近添加的 UID 作为你的主 UID,如果这与你想的不同,你应该改回来:

$ gpg --quick-set-primary-uid [fpr] 'Alice Engineer '

下次,我们将介绍如何生成 PGP 子密钥,它是你实际用于日常工作的密钥。

通过 Linux 基金会和 edX 的免费“Introduction to Linux” 课程了解关于 Linux 的更多信息。


via: https://www.linux.com/blog/learn/PGP/2018/2/protecting-code-integrity-pgp-part-2-generating-and-protecting-your-master-pgp-key

作者:KONSTANTIN RYABITSEV 译者:kimii 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

程序猿要chatpgpt干...
如何拥抱被chatpgpt拉开的人工智能大时代 昨天 chatgp...
2025-05-28 12:41:05
不在gitlog中显示pg...
在Git配置文件中设置选项,以告诉Git不要在log输出中展示PG...
2025-01-11 15:00:22
AWSKMS支持PGP加密...
目前 AWS KMS 已经支持使用 PGP 密钥对进行加密操作。例...
2024-11-19 08:00:51
AWSKMS支持PGP加密...
目前,AWS KMS不支持PGP加密,但可以使用其提供的其他加密服...
2024-11-19 08:00:10
安装编译器时出现“GPGM...
这个错误通常是由于GPGME库未正确配置造成的。解决方法是配置GP...
2024-11-09 07:01:55
Ansible:无法从RP...
在Ansible中,从RPM Fusion导入GPG密钥的过程中可...
2024-11-07 00:30:55

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...