如何安全备份GPG私钥?


22

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

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

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

这非常有效。

现在该工具正在存储我的所有密码,我想备份所有这些数据,这样如果我的计算机崩溃,我将不会被锁定在我的所有在线帐户中。

该工具与git很好地集成,因此我能够轻松地将.gpg文件推送到另一台计算机上的私有git仓库。根据我的理解,这些文件没有私钥来解密它们是没用的。

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

Answers:


10

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

我能想到的唯一一个问题就是以版本控制的方式存储私钥,除非你能以某种方式破坏旧版本,否则密钥密码更改会为你带来的保护远远少于其他方式。

它可能带来的一系列安全隐患是以一种其他人可能能够访问密钥文件的方式存储私钥在这种情况下,攻击者和密钥之间的所有内容都是密码的强弱。

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

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

然而,这是一个非常大的问题:大多数人的密码或密码都是相当糟糕的,只要计算机化的尝试破解它们。GnuPG的进入相当长的一段长度,尝试用你给它的工作,以及它可以,但对于实体的数据保护,你需要一个好的密码,并且需要设置它之前导入私有密钥到git仓库。在导入密钥后,攻击者原则上可以攻击它的任何版本,如果他们有理由相信某个特定版本具有较低质量的密码短语,则可能会这样做。因此,请务必小心选择密码。我已经写了一篇关于如何处理密码的小编,包括关于如何选择您需要能够记住的密码或密码的建议,您可能会觉得这些密码或密码很有用。


6

我最近一直在考虑类似的设置。在解决你的问题之前,让我指出一些困扰我的问题。这是在大篇幅解释这里。简而言之,当Pass调用GPG时,它会在引擎盖下执行不必要的非对称(RSA / EC)加密。不必要 - 因为这里没有不受信任的政党。

这很烦人,因为非对称加密比对称加密更不具备面向未来的能力。例如,今天的非对称加密由足够大的量子计算机打破,而这些计算机尚不存在。更一般地说,非对称加密依赖于“数学问题”,我们不知道如何解决,远远超过对称加密。

为了缓解这个弱点,你可以做的最少的事情就是保持你的GPG公钥与Pass私有一起使用,因为例如(潜在的)量子攻击需要这个公钥:见这里

关于你的实际问题,目前还不清楚你是打算公开还是私下存储git repo(带密码)。如果你想把它保密,你几乎可以做你想要的,并将GPG私钥的安全性降低到你备份回购的媒体的安全性。然而,这可能会成为一个鸡和蛋的问题:如果回购是私人的,如果发生崩溃你怎么回来?换句话说,在一个“坏撞车”的情况下,必须有您检索的东西第一。因此,您可能希望将git repo保持为私有,但是备份GPG密钥的方式可以首先检索,而不管其他任何内容。

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

  • 创建一个超强密码短语,这种密码短语不打算多年打字。建议:冗长,令人难忘的拼写错误的短语具有一些个人意义,或者从一本不会用完副本的书中,如果你需要查找它。

  • 使用导出的GPG密钥创建tarball,也可以使用SSH凭据创建tarball。

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

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

  • 创建一个可以在没有凭据的情况下克隆的公共存储库。

  • 将加密和装甲的焦油球放在那里。

要在“严重崩溃”后检索它:

  • 启动实时USB记忆棒。

  • 克隆公共回购。

  • gpg --decrypt

对称密码将是你对僵尸的主要保护。在选择密码短语时,人们有时不会给你或匿名读者带来怀疑的好处。但是通过一个好的密码,对称加密应该是可靠的。

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


4

我使用的另一个选项是:在纸上打印您的钥匙

详细信息在链接的答案中。最大的优点是:您可以轻松地将它存储在任何您想要的地方,您可以通过查看它来检查它是否仍然可能处于良好状态。但最大的优势是:没有人可以在没有实际存在备份和接收备份的地方进行破解。


据我所知,在这种情况下,纸张与可移动媒体相比没有优势,并且缺点是如果需要恢复密钥,则必须键入密钥的所有乱码。
地图2016年

优点是,它更加耐用,您可以在没有计算机的情况下亲自检查它是否仍然可读。如果我使用的每张软盘,CD或DVD都有一美元现在有不可恢复的数据错误,我可以用这笔钱继续下去。你不必输入任何东西!PaperBack将其打印为2D代码并添加了纠错功能。您只需扫描或拍摄它,程序就会将其转回到之前打印的任何内容中。
Josef 2016年

当然,假设你还有技术可以做到这一点。
地图

好吧,我认为在20年内我可以轻松获得带有Open-source软件副本的Windows VM或Linux的概率远高于我可以让硬件读取软盘/ CD的概率/DVD。假设我做了1990年。我现在甚至可以在我的浏览器中运行软件。但是,如果想要获得能够让您使用现代PC读取5 1/4英寸软盘的硬件,那就太好了。
Josef

2

另一个答案是“离线”,即将其存储在一些安全且未连接到任何计算机的地方。我把所有钥匙的完整,未加密的副本保存在软盘上(我已经这么做了很长时间,现在这是一种习惯)在银行的保险箱里。我在银行的媒体上保持未加密的原因是,“丢失”密钥的一个潜在场景是忘记密码短语(我的密码短语往往有很多奇怪的标点符号和拼写,忘记其中一个使得它不可用)。我从来不必诉诸于从那份副本中取回它,但我计划最坏的。

此外,在媒体上有一个关键的撤销和一个说明指示我的继承人如何处理它,在我不再可用的情况下。


如果备份主签名私钥,是否可以用于生成撤销证书?在什么情况下备份吊销证书很有用?
Matei David 2016年

啊,是的,但你必须明白,我不能确定执行请求的人是多么精通计算机(请注意,不是我会使用它,而是“我的继承人”)。因此,已经生成撤销和“仅发送附带此文件的电子邮件”的说明不太可能被错误管理。
地图

@MateiDavid在最初创建密钥对时生成吊销证书,并存储该吊销证书,如果密钥对您不可用,则允许您撤销密钥。有可能发生这种情况的有效方案。当然,你必须非常好地保护撤销证书,因为任何掌握它的人都可以发布它,从而撤销你的密钥对。不过,我不确定撤销证书是如何适用于OP的情况的。
2016年

是的,我们已经走了一个老鼠洞。我道歉,我提到撤销证书仅仅是为了完整性我对我采取的步骤的描述,并没有与原始问题有任何关系。
地图2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.