GnuPG-离线设备可以使用信任网络吗?

GnuPG-离线设备可以使用信任网络吗?

我计划通过 USB 向离线机器发布软件更新。
机器将被派送,并可能在现场停留多年,
在此期间,将雇用和解雇新的开发人员。

我计划在安装更新之前使用 GnuPG 检查 USB 记忆棒上的更新。

将会有一个主密钥,每个开发人员都会获得自己的开发人员密钥。

开发者密钥将由主密钥签名。部署的机器将完全信任主密钥。但是,部署的机器不会拥有所有的开发者密钥。

如果这些未知密钥是由完全信任的主密钥签名的,我怎样才能让已部署的机器明白它们可以信任用未知密钥签名的包?

在我的测试中,gpg --verify package.tar.gz.sig 失败,因为公钥未知。

为了让 gpg --verify 接受密钥,我必须首先 gpg --import developer_123.key。

但这并不能检查新密钥是否由受信任的主密钥签名!

我可以创建一个新的 rogue_developer 密钥(未由受信任的主密钥签名),导入该密钥,然后 gpg --verify 将验证该包。

我认为我误解了这个过程应该如何进行的基本理解?

我应该……
1) 允许所有开发人员使用主密钥签名(坏主意,密钥将被泄露,如果不重新部署机器,我将无法撤销它!)
2) 将导出的开发人员密钥与 USB 更新捆绑在一起。
但是,在导入它之前,我如何检查它是否由主密钥签名?
3) 是否有一种方法可以验证该包是否由我信任的主密钥签名,而无需导入该密钥?
4) 还有什么我没有想到的?

我肯定我理解错了什么... 因为 T 认为让 master 完全受信任意味着我们也要验证由该受信任密钥签名的密钥?
但这个过程是如何进行的?

谢谢您的指点!

克里斯。

编辑:
我创建了一个真正的开发人员 (DVKey) 和一个流氓攻击者 (ROKey) 进行测试。DVKey
由完全信任的主密钥签名。ROKey 不是由主密钥签名的。在验证由 DVKey 签名的包时,我得到

[cds@notebook ~]$ gpg --homedir FMHOME --verify ArchLinuxARM-rpi-2-latest.tar.gz.sig
gpg: 假设“ArchLinuxARM-rpi-2-latest.tar.gz”中存在签名数据
gpg: 签名于 2015 年 11 月 18 日星期三 21:15:55 GMT 使用 RSA 密钥 ID B90C2061 生成
gpg: 来自“DVKey ”的良好签名 [full]
[cds@notebook ~]$ echo $?
0

请注意,gpg 返回“0”,成功。

当我验证恶意包时,我得到了

[cds@notebook ~]$ gpg --homedir FMHOME --verify Untitled.log.sig
gpg: 假设“Untitled.log”中有签名数据
gpg: 签名于 2015 年 11 月 18 日星期三 21:23:03 GMT 使用 RSA 密钥 ID EEF5033E 生成
gpg: 来自“ROKey ” [未知] 的良好签名
gpg: 警告:此密钥未经可信签名认证!
gpg: 没有迹象表明签名属于所有者。
主密钥指纹:C00D C1EE 4670 2FE9 4B8D D03E 4DC6 8D9C EEF5 033E
[cds@notebook ~]$ echo $?
0

请注意,我收到了警告!但 gpg 仍然返回“0”,成功。我需要缺少可信签名才能验证失败。

再次感谢。

答案1

回答我自己的问题。

我找不到单独使用 gpg 确定信任级别的好方法。

我写了一个小的 C 程序。如果有人感兴趣的话,我会在这里提供链接。
https://github.com/chris-stones/gpg-verify-trust

使用 gcc“src/gpg-verify-trust.c -lgpgme -o verify_trust”进行编译。
取决于 gpgme 标头/库。

返回 0 表示不信任,
返回 1 表示边际信任,
返回 2 表示完全信任,
返回 3 表示最终信任,
任何其他返回值均表示错误。

相关内容