如何在 Linux 上备份和恢复您的 GPG 密钥

隐私是一个越来越热门的话题。在 Linux 上,gpg
命令允许用户使用公钥密码术来加密文件,在这种情况下,丢失您的加密密钥将是灾难性的。这是备份它们的方法。
OpenPGP 和 GNU 隐私卫士
电子文件相对于纸质硬拷贝的优势之一是您可以对电子文件进行加密,以便它们只能由授权人员访问。如果他们落入坏人之手,也没关系。只有您和预期的收件人可以访问文件的内容。
OpenPGP 标准描述了一种称为公钥加密的加密系统。该标准的 GNU Privacy Guard 实施产生了 gpg
,这是一个根据标准进行加密和解密的命令行工具。
该标准概述了一种公钥加密方案。虽然称为“公钥”,但涉及到两个密钥。每个人都有一个公钥和一个私钥。顾名思义,私钥永远不会透露或传输给任何其他人。可以安全地共享公钥。事实上,公钥必须共享才能使该方案起作用。
当文件被加密时,发送者的私钥和接收者的公钥用于编码过程。然后可以将该文件传送给收件人。他们使用自己的私钥和发件人的公钥来解密文件。
公钥和私钥作为匹配对生成并绑定到特定身份。即使您不将敏感材料传输给其他人,您也可以在自己的计算机上使用它们来为私人文档添加额外的保护层。
加密使用世界一流的算法和密码功能。没有适当的公钥和私钥,您根本无法进入加密文件。而且,如果您丢失了钥匙,这也适用于您。生成新密钥无济于事。要解密您的文件,您需要在加密过程中使用的密钥。
不用说,备份您的密钥是最重要的,知道如何恢复它们也是如此。以下是完成这些任务的方法。
.gnupg 目录
您的密钥存储在主目录中名为“.gnupg”的目录中。该目录还将存储向您发送加密文件的任何人的公钥。当您导入它们的公钥时,它们将被添加到该目录中的索引数据库文件中。
当然,此目录中的任何内容均未以纯文本形式存储。当您生成 GPG 密钥时,系统会提示您输入密码。希望您已经记住了该密码是什么。你会需要它。没有它就无法解密“.gnugp”目录中的条目。
如果我们使用 tree
实用程序查看目录,我们将看到子目录和文件的这种结构。如果您的计算机上还没有 tree
,您会在发行版的存储库中找到它。
tree .gnupg

目录树的内容是:
- openpgp-revocs.d:此子目录包含您的吊销证书。如果您的私钥成为常识或以其他方式泄露,您将需要它。您的撤销证书用于淘汰旧密钥和采用新密钥的过程。
- private-keys-v1.d:此子目录存储您的私钥。
- pubring.kbx:加密文件。它包含公钥(包括您的公钥)和一些关于它们的元数据。
- pubring.kbx~:这是“pubring.kbx”的备份副本。它在对“pubring.kbx”进行更改之前更新。
- trustdb.gpg:它包含您为自己的密钥和属于其他人的任何已接受公钥建立的信任关系。
无论如何,您应该定期、频繁地备份您的主目录,包括隐藏的文件和文件夹。这当然会备份“.gnupg”目录。
但是您可能认为您的 GPG 密钥非常重要,足以保证对其进行定期备份,或者您可能希望将您的密钥从您的台式机复制到您的笔记本电脑,以便在两台机器上都有它们。毕竟,你是两台机器上的你。
确定要备份的密钥
我们可以要求 gpg
告诉我们您的 GPG 系统中有哪些密钥。我们将使用 --list-secret-keys
选项和 --keyid-format LONG
选项。
gpg --list-secret-keys --keyid-format LONG

我们被告知 GPG 正在查看“/home/dave/.gnupg/pubring.kbx”文件。
屏幕上显示的都不是您的实际密钥。
- “sec”(秘密)行显示加密中的位数(本例中为 4096)、密钥 ID、密钥创建日期和“[SC]”。 “S”表示密钥可用于数字签名,“C”表示可用于认证。
- 下一行是密钥指纹。
- “uid”行包含密钥所有者的 ID。
- “ssb”行显示秘密子密钥、创建时间和“E”。 “E”表示它可以用于加密。
如果您创建了多个密钥对用于不同的身份,它们也会被列出。只有一对密钥可以为该用户备份。备份将包括属于此密钥所有者收集并决定信任的其他人的任何公钥。
备份
我们可以要求 gpg
备份所有身份的所有密钥,或者备份与单个身份关联的密钥。我们将备份私钥、秘密密钥和信任数据库文件。
要备份公钥,请使用 --export
选项。我们还将使用 --export-options backup
选项。这确保包含所有特定于 GPG 的元数据,以允许在另一台计算机上正确导入文件。
我们将使用 --output
选项指定输出文件。如果我们不这样做,输出将被发送到终端窗口。
gpg --export --export-options backup --output public.gpg

如果您只想备份单个身份的密钥,请将与密钥关联的电子邮件地址添加到命令行。如果您不记得它是哪个电子邮件地址,请使用 --list-secret-keys
选项,如上所述。
gpg --export --export-options backup --output public.gpg dave@madeupdomain.com

要备份我们的私钥,我们需要使用 --export-secret-keys
选项而不是 --export
选项。确保将其保存到不同的文件中。
gpg --export-secret-keys --export-options backup --output private.gpg

因为这是您的私钥,所以您需要先使用 GPG 进行身份验证,然后才能继续。
请注意,您没有被要求输入密码。您需要输入的是您在首次创建 GPG 密钥时提供的密码。好的密码管理器可以让您将此类信息保存为安全笔记。这是存放它们的好地方。

如果密码短语被接受,则导出发生。
为了备份您的信任关系,我们需要从您的“trustdb.gpg”文件中导出设置。我们将输出发送到名为“trust.gpg”的文件。这是一个文本文件。可以使用 cat
查看。
gpg --export-ownertrust > trust.gpg
cat trust.gpg

这是我们创建的三个文件。
ls -hl *.gpg

我们会将它们移到另一台计算机上,然后恢复它们。这将在该机器上建立我们的身份,并允许我们使用现有的 GPG 密钥。
如果您没有将密钥移动到另一台计算机而只是备份它们,因为您想加倍确保它们的安全,请将它们复制到其他一些媒体并安全地存储它们。即使它们落入坏人之手,您的公钥无论如何都是公开的,所以不会有任何危害。如果没有您的密码,您的私钥将无法恢复。但是,请保持备份的安全和私密性。
我们已将文件复制到 Manjaro 21 计算机。
ls *.gpg

默认情况下,Manjaro 21 使用 Z shell,zsh
,这就是它看起来不同的原因。不过这没关系,不会影响什么。我们所做的是由 gpg
程序控制的,而不是 shell。
要导入我们的密钥,我们需要使用 --import
选项。
gpg --import public.gpg

密钥的详细信息在导入时显示。还为我们创建了“trustdb.gpg”文件。导入私钥同样简单。我们再次使用 --import
选项。
gpg --import private.gpg

我们被提示输入密码。

将其输入“密码”字段,按“Tab”键,然后按“Enter”。

显示导入密钥的详细信息。在我们的例子中,我们只有一把钥匙。
要导入我们的信任数据库,请键入:
gpg --import-ownertrust trust.gpg

我们可以再次使用 --list-secret-keys
选项检查所有内容是否已正确导入。
gpg --list-secret-keys --keyid-format LONG

这为我们提供了与之前在 Ubuntu 计算机上看到的完全相同的输出。
保护您的隐私
通过备份确保您的 GPG 密钥安全。如果您遇到计算机故障或只是升级到较新的型号,请确保您知道如何将您的密钥转移到新机器上。