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

已发表: 2022-08-18
显示 bash 提示符的 Linux 笔记本电脑
fatmawati achmad zaenuri/Shutterstock.com

隐私是一个越来越热门的话题。 在 Linux 上, gpg命令允许用户使用公钥密码术加密文件,在这种情况下丢失您的加密密钥将是灾难性的。 这是备份它们的方法。

OpenPGP 和 GNU 隐私保护

电子文件相对于纸质硬拷贝的优势之一是您可以对电子文件进行加密,以便它们只能由授权人员访问。 如果他们落入坏人之手,那也没关系。 只有您和预期的收件人可以访问文件的内容

OpenPGP 标准描述了一种称为公钥加密的加密系统。 该标准的 GNU Privacy Guard 实现产生了gpg ,这是一个用于根据标准进行加密和解密的命令行工具。

该标准概述了一种公钥加密方案。 虽然它被称为“公钥”,但涉及到两个密钥。 每个人都有一个公钥和一个私钥。 顾名思义,私钥永远不会泄露或传输给其他任何人。 可以安全地共享公钥。 实际上,必须共享公钥才能使该方案起作用。

当文件被加密时,发送者的私钥和接收者的公钥在编码过程中被使用。 然后可以将文件传递给收件人。 他们使用他们的私钥和发送者的公钥来解密文件。

公钥和私钥作为匹配对生成并与特定身份相关联。 即使您不将敏感材料传输给其他人,您也可以在自己的计算机上使用它们来为私人文档添加额外的保护层。

如何在 Linux 上使用 GPG 加密和解密文件
相关如何在 Linux 上使用 GPG 加密和解密文件

加密使用世界一流的算法和加密功能。 如果没有适当的公钥和私钥,您根本无法进入加密文件。 而且,如果您丢失了钥匙,这也适用于您。 生成新密钥无济于事。 要解密您的文件,您需要在加密过程中使用的密钥。

不用说,备份您的密钥至关重要,知道如何恢复它们也是如此。 以下是完成这些任务的方法。

.gnupg 目录

您的密钥存储在主目录中名为“.gnupg”的目录中。 此目录还将存储已向您发送加密文件的任何人的公钥。 当您导入它们的公钥时,它们会被添加到该目录中的索引数据库文件中。

当然,此目录中的任何内容都不是以纯文本形式存储的。 当您生成 GPG 密钥时,系统会提示您输入密码。 希望您已经记住了该密码是什么。 你会需要它的。 没有它就无法解密“.gnugp”目录中的条目。

如果我们使用tree实用程序查看目录,我们将看到子目录和文件的这种结构。 如果您的计算机上还没有tree ,您会在发行版的存储库中找到它。

 树.gnupg 

.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 密钥详细信息

我们被告知 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 备份 --output public.gpg 

导出公共 GPG 密钥

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

 gpg --export --export-options 备份 --output public.gpg [email protected] 

导出单个身份的公共 GPG 密钥

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

 gpg --export-secret-keys --export-options 备份 --output private.gpg 

导出 GPG 私钥

因为这是您的私钥,所以您需要先通过 GPG 进行身份验证,然后才能继续。

请注意,系统不会要求您输入密码。 您需要输入的是您在首次创建 GPG 密钥时提供的密码。 好的密码管理器可以让您将此类信息保存为安全笔记。 这是存放它们的好地方。

提供 GPG 密码以导出私钥

如果密码被接受,则进行导出。

为了备份您的信任关系,我们需要从您的“trustdb.gpg”文件中导出设置。 我们将输出发送到一个名为“trust.gpg”的文件。 这是一个文本文件。 可以使用cat查看。

 gpg --export-ownertrust > trust.gpg
 猫信任.gpg 

导出 GPG 信任关系

这是我们创建的三个文件。

 ls -hl *.gpg 

导出命令创建的三个文件

我们将把它们移到另一台计算机上,然后恢复它们。 这将在该机器上建立我们的身份,并允许我们使用现有的 GPG 密钥。

如果您没有将密钥移动到另一台计算机上,而只是备份它们,因为您想更加确定它们是安全的,请将它们复制到其他媒体并安全地存储它们。 即使他们落入坏人之手,你的公钥无论如何都是公开的,所以那里没有害处。 如果没有您的密码,您的私钥将无法恢复。 但是,请确保您的备份安全且私密。

我们已将文件复制到 Manjaro 21 计算机。

 ls *.gpg 

导出的文件传输到 Manjaro 计算机

默认情况下,Manjaro 21 使用 Z shell, zsh ,这就是它看起来不同的原因。 但这没关系,它不会影响任何事情。 我们所做的是由gpg程序而不是 shell 管理的。

要导入我们的密钥,我们需要使用--import选项。

 gpg --import public.gpg 

导入公共 GPG 密钥

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

 gpg --import private.gpg 

导入 GPG 私钥

系统会提示我们输入密码。

输入密码以导入 GPG 私钥

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

确认导入的 GPG 私钥

将显示导入密钥的详细信息。 在我们的例子中,我们只有一把钥匙。

要导入我们的信任数据库,请输入:

 gpg --import-ownertrust trust.gpg 

导入 GPG 信任关系

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

 gpg --list-secret-keys --keyid-format LONG 

验证导入是否有效

这为我们提供了与之前在 Ubuntu 计算机上看到的完全相同的输出。

保护您的隐私

通过备份来确保您的 GPG 密钥是安全的。 如果您遇到计算机故障或只是升级到较新的型号,请确保您知道如何将您的密钥转移到新机器上。

相关:如何使用 rsync 备份你的 Linux 系统