![是否有可能生成没有子密钥的 GnuPG 密钥?](https://linux22.com/image/1482639/%E6%98%AF%E5%90%A6%E6%9C%89%E5%8F%AF%E8%83%BD%E7%94%9F%E6%88%90%E6%B2%A1%E6%9C%89%E5%AD%90%E5%AF%86%E9%92%A5%E7%9A%84%20GnuPG%20%E5%AF%86%E9%92%A5%EF%BC%9F.png)
我使用 PGP 和 GnuPG 已有 20 多年了,我最老的密钥自 1996 年以来仍然保存在 MIT 服务器上。(RSA 1024 无子密钥...)
随着时间的推移,密钥变成了主密钥和子密钥对。这些年来我从来没有需要过子密钥功能。我个人也不认识任何使用过它的人。
我可能已经阅读了所有关于为什么“应该”使用子键的“充分理由”。但这些理由对我都不适用。
例如,当加密密钥被泄露时,子密钥非常有用!但我的加密密钥从未被泄露过。我也不知道谁的密钥被泄露过。
或者据说它对一个主密钥与多个加密密钥相关联的组织很有用。我还没有见过。我想知道宇宙中是否存在这样的组织。从我所看到的一切来看,子密钥的想法似乎是过度工程在现实生活中没有或很少使用。也许这个想法只是 DSA/elGamal 方案的合理化。
无论如何,我正在开发一些不使用子密钥的软件。另外,我希望我的密钥与 RetroShare(一种安全的 p2p IM 聊天和文件交换,仅使用单个密钥而无需子密钥)兼容。
有谁知道有没有办法生成没有子项的密钥。我只知道 --edit-key 菜单中有删除子项的选项。我不知道是否可以在没有子项的情况下生成密钥。有办法吗?非常感谢您提供的帮助,让我进一步了解这个问题。
答案1
使用子密钥的优点
更好地使用子密钥的心态可能看起来像是过度设计,但有一些强有力的论据。与 DSA 等仅签名算法一起使用时的必要性是显而易见的(并且没有争议)。当不严重依赖信任网络时,将私钥置于离线状态(并降低丢失风险)和更容易轮换密钥的能力可能看起来非常重要。但还有其他原因:在使用加密和签名时,分离使用可能会降低风险。例如,曾经有一个缺陷,即错误的随机数和 DSA 密钥,发出一堆签名会泄露您的私钥。如果该密钥也用于加密,那么您的私人通信也会被泄露。当然,DSA 密钥不能已经用于加密,但告诉我们 RSA 不会发生类似的问题?
另一个例子:OpenSSH 出现了一些问题,可能会将您的私有 SSH 密钥泄露给密钥服务器。我将 OpenPGP 身份验证子密钥与 monkeysphere 一起使用,在这种情况下,我的身份验证子密钥将被泄露,而不是我的主密钥。滚动身份验证子密钥花了我五分钟,而分发全新的密钥则需要一个小时(甚至更长时间)。
子密钥可能会增加一些复杂性,但您实际上看不到它,它工作得很好。计算和存储开销可以忽略不计,不需要额外的手动工作。为什么不“免费”获得一些(可能的)额外好处呢?
无论如何都不使用它们
可能存在一些原因不是使用子密钥。也许您只想依赖 OpenPGP 基础架构的某些部分,而根本不关心信任管理和其他部分。如果您为其他人创建软件,请考虑不要限制您的用户:也许对某些人来说,简单地提供子密钥而不是创建完全不相关的密钥对也是合理的?
生成不含子密钥的密钥需要使用支持加密和签名的算法,RSA 支持该算法(但 DSA 不支持)。要生成不含任何子密钥的“通用”主密钥,您必须使用密钥--expert
生成菜单:
gpg --expert --gen-key
然后选择(8)RSA(设置你自己的功能)。您将能够选择密钥的可能用途,其中C
(认证)是主密钥所必需的,S
(签名)、E
(加密)和A
(身份验证)可以任意选择。完成助手的其余部分,您将收到一个具有所选功能的主密钥,没有任何子密钥。
答案2
@jens-erat 谢谢你的回答,我也在寻找同样的东西。仅记录一个细节:
gpg --expert --gen-key
对我来说不起作用(GPG 2.2.4)。这个有效:
gpg --expert --full-generate-key