【问题标题】:Handling secret OpenPGP keys for unit testing处理用于单元测试的秘密 OpenPGP 密钥
【发布时间】:2015-08-03 11:50:00
【问题描述】:

我正在开发一个项目,该软件使用 GnuPG 二进制文件进行加密操作。有些函数有 OpenPGP 加密输出,有些函数采用 OpenPGP 加密输入。

为了进行单元测试,我的计划是为 unittest@project.example.com 生成一个无密码密钥并将其包含在存储库中。这(自然)会使密钥不适合生产使用,但这很好,因为用户应该生成/使用自己的密钥。


现在我的问题。如果密钥包含在存储库中,任何人都可以将其上传到密钥服务器,使用它来签署他/她自己的密钥,或撤销它(并上传撤销)。 GPG 可以自动从密钥服务器下载密钥,在个人密钥环中拥有这样的密钥(其中私钥是公共知识)似乎是不明智的。

是否可以将已撤销的密钥版本上传到密钥服务器(因此没有人会信任它)并在存储库中包含未撤销密钥的密钥版本?这是否可以解决密钥出现并在个人钥匙串中被信任的问题,同时仍然允许使用相同的密钥进行单元测试?

【问题讨论】:

  • 为什么不以非交互方式为每次测试运行生成新密钥?
  • 那么我还必须为每次测试运行更改测试用例。加密的有效负载是预期输出的一部分。

标签: unit-testing security gnupg pgp openpgp


【解决方案1】:

在本地包含未撤销版本的同时撤销密钥服务器上的密钥将毫无问题,除非您实际从密钥服务器获取已撤销版本。只需在撤销密钥之前创建一个副本,并确保使用本地甚至新的 GnuPG 主目录(无论如何,您都应该这样做,以保持单元测试的可重复性并将它们与开发人员的帐户分开)。这样,您应该确保您的钥匙链中不会有吊销证书,除非有人手动获取它(他不应该这样做,您可能想在某处记录)。

要考虑的另一种情况是保持 primary 密钥私有,但只发布一个秘密 子密钥。这可能会使实际用于加密的密钥的后续更改更​​容易,并防止其他人弄乱主密钥(创建用户 ID、撤销任何内容、颁发证书等)。

【讨论】:

  • 计划从一个新的 GnuPG 主目录开始,因此在撤销之前导出密钥,将其存储在存储库中并作为测试设置重新导入它应该可以解决问题。保持 pimrary 密钥的秘密是一个有趣的想法,我能想到的唯一问题是它会降低项目的可分叉性。
  • 每个人都可以在需要时将新的密钥组放入其中。不过,记录背后的过程和想法可能是件好事。
猜你喜欢
  • 2020-01-04
  • 2018-03-17
  • 2023-02-10
  • 2020-03-18
  • 2019-10-28
  • 1970-01-01
  • 2012-11-20
  • 2012-04-28
  • 2016-11-10
相关资源
最近更新 更多