如何安全地备份 GPG 私钥?

如何安全地备份 GPG 私钥?

我发现了一个非常有趣的 CLI 密码管理器,叫做经过。要使用它,您需要生成一个GPG2密钥对,并使用该工具帮助您将密码存储在gpg2加密文件中。

为了加密文件(添加新密码),它使用公钥。

要解密文件(检索存储的密码),它使用私钥,而私钥需要密码。

这很有效。

既然该工具存储了我所有的密码,我想备份所有这些数据,以便如果我的计算机崩溃,我不会被锁定在所有在线帐户之外。

该工具与 git 完美集成,因此我能够轻松地将 .gpg 文件推送到另一台计算机上的私人 git 存储库。据我所知,如果没有私钥解密,这些文件就毫无用处。

我的问题是:如何以安全的方式备份私钥和公钥,以便在需要时可以在另一台机器上恢复“数据库”?我是否可以将公钥和私钥都存储在我的 git 存储库中,并在以后将它们导入到另一台机器上?或者将私钥存储在私有的本地 git 存储库中是否被认为是不安全的做法?git 存储库需要密码才能访问。私钥是加密的,需要密码才能打开 - 这样存储起来安全吗?

答案1

将 PGP 私钥存储在修订控制系统中本身不会造成任何重大的安全问题。将私钥存储在本地,私人(未发布)与将私钥存储在同一台计算机上但在任何 git 存储库之外相比,git 存储库应该不会产生重大的安全隐患。

我能想到的唯一问题是,以版本控制的方式存储私钥,除非你能以某种方式销毁旧版本,密钥密码的更改给您带来的保护远远少于它们本来可能带来的保护。

存储私钥可能会带来一系列安全隐患以便其他人能够访问密钥文件。在这种情况下,攻击者和您的密钥之间的唯一障碍就是密码的强度。

认识到存储安全并不完美,在人们定期备份到云服务(字面意思是“别人的计算机”)的现代环境中更是如此,我们通常使用密码保护我们的密钥。我相信,即使您正在运行例如 gpg-agent,您也会这样做。

最重要的是,只要您的密码正确,即使将加密密钥文件的副本存储在别人的计算机上也应该是相对安全的。

然而,这是一个相当大的如果:大多数人的密码或口令短语在计算机破解方面都相当糟糕。GnuPG 会尽其所能地处理您提供的内容,但为了可靠的数据保护,您需要一个好的密码,以及需要来设置它将私钥导入git存储库。密钥导入后,攻击者原则上可以攻击任何版本,如果他们有理由相信某个版本的密码质量较低,他们很可能会选择该版本。因此,请务必谨慎选择密码。我写了一篇关于如何处理密码的入门文章,包括关于如何选择你需要记住的密码或密码短语的建议,您可能会发现它很有用。

答案2

我最近一直在考虑类似的设置。在回答你的问题之前,让我先指出一下我对此感到困扰的地方。这已经解释得很详细了这里简而言之,当 Pass 调用 GPG 时,它会执行不必要底层是非对称(RSA/EC)加密。不必要——因为这里没有不受信任的一方。

这很烦人,因为非对称加密比对称加密更不具前瞻性。例如,当今的非对称加密已被足够大的量子计算机破解,但量子计算机目前还不存在。更一般地说,非对称加密比对称加密更依赖于我们不知道如何解决的“数学问题”。

为了减轻这个弱点,你至少可以做的就是将与 Pass 一起使用的 GPG 公钥也保密,因为例如(潜在的)量子攻击需要这个公钥:看这里

回到你的实际问题,目前还不清楚你是打算公开还是私下存储 git repo(包括密码)。如果你想保持私密,你几乎可以做你想做的事,并将 GPG 私钥的安全性降低到你备份 repo 的介质的安全性。然而,这可能会成为一个先有鸡还是先有蛋的问题:如果 repo 是私有的,那么在发生崩溃时你如何恢复它?换句话说,如果发生“严重崩溃”,你必须找回一些东西第一的。因此,您可能希望将 git repo 保持私密,但以您可以首先检索的方式备份 GPG 密钥,而不依赖于其他任何内容。

离线备份解决方案有很多,如律师、地下室等。看这里。但地下室并不适合所有人,所以让我建议一个在线解决方案:

  • 创建一个超强密码,多年内都不会被输入。建议:一个很长、容易记住的拼写错误短语,具有一些个人意义,或者来自一本在你需要查找时不会用完的书。

  • 使用您导出的 GPG 密钥以及可能的 SSH 凭证创建一个 tarball。

  • 使用您的密码对称加密它:gpg --symmetric --armor

  • 创建一个免费的 git 托管帐户。

  • 创建一个民众存储库,无需凭证即可克隆。

  • 将加密和装甲的 tar 球放入其中。

要在“严重崩溃”后恢复它:

  • 启动实时 USB 驱动器。

  • 克隆公共 repo。

  • gpg --decrypt

对称密码将成为您抵御僵尸的主要保护措施。在选择密码时,人们有时不会给您或匿名读者带来好处。但有了好的密码,对称加密应该是可靠的。

当您导出 GPG 私钥时,它将使用自己的密码进行加密。GPG 的最新版本不允许未加密的导出。您可以在此处使用“常规”GPG 密码。请记住,如果发生崩溃,您将需要两个密码才能获取 GPG 私钥。

答案3

我使用的另一种选择是:在纸上打印你的钥匙

详细信息在链接的答案中。最大的优点是:您可以轻松地将其存储在您想要的任何地方,并且只需查看它就可以检查它是否仍然完好无损。但最大的优点是:没有人可以在不实际到达您存储备份的地方并拿走它的情况下破解它。

答案4

安全备份 gpg 私钥的一个好解决方案是将其打印在纸上。

有 paperkey 可以查看,https://wiki.archlinux.org/index.php/Paperkey

你也可以使用现成的软件来创建二维码,请参阅https://www.saminiir.com/paper-storage-and-recovery-of-gpg-keys/

相关内容