秘密子密钥的目的?

信息安全 pgp gnupg
2021-08-25 04:49:30

通过 gpg -k 和 gpg -K 的输出,我似乎总是拥有(以及创建)(子)密钥对。但是,如果pubsub的目的如下图所示,而 secretkey 的目的主要是解密,那么 secret-subkeys 的目的是什么?(我gpg --edit-key key-id得到了用法

$ gpg --list-keys ... && gpg --list-secret-keys ...
pub   4096R/615399D8 2015-11-06 [expires: 2016-02-04] --> usage: SC
uid                  ...
sub   4096R/B30A78EB 2015-11-06 [expires: 2016-02-04] --> usage: E
sub   4096R/BBE36ACB 2015-12-13 [expires: 2016-02-04] --> usage: S
sub   4096R/B53C8F6D 2015-12-13 [expires: 2016-02-04] --> usage: A

sec   4096R/615399D8 2015-11-06 [expires: 2016-02-04]
uid                  ...
ssb   4096R/B30A78EB 2015-11-06 [expires: 2016-02-04]
ssb   4096R/BBE36ACB 2015-12-13 [expires: 2016-02-04]
ssb   4096R/B53C8F6D 2015-12-13 [expires: 2016-02-04]
1个回答

对于某些算法,子密钥是技术上的必需品:例如 DSA(数字签名算法)只能用于签名,并且需要额外的加密子密钥(例如 Elgamal)。这不适用于 RSA,它可用于签名和加密。

区分主键和子键还有另一个原因:它允许(私有)主键尽可能少地暴露,仅用于密钥管理操作,如添加和撤销子密钥和用户 ID,以及验证其他密钥(这是C您提供的输出中打印的功能)。

通过使用子键,您甚至可以使用离线主键,这意味着您可以从默认密钥环中删除私有主键,并保持它安全断开连接,除非您确实需要它的极少数情况。有些人将它放在拇指驱动器上,有些人甚至使用专门用于此目的的旧电脑。

即使您不这样做:使用密钥也可能使其容易受到某些攻击。例如,DSA 在用于签名重用参数时很容易受到攻击如果您经常使用 DSA 密钥(例如,用于签署所有邮件),那么与您很少将其用于密钥管理的情况相比,您更有可能被此问题捕获并泄露您的私有主密钥。您的私有子密钥仍会被公开——但您可以轻松地撤销它并创建一个新子密钥,而不会像撤销主密钥时那样失去您在 OpenPGP 信任网络中的声誉。另一个优点是您可以在不同的机器上使用不同的签名子密钥(如果一台机器被黑客入侵,您不必全部更改)。不过,这对于加密密钥来说效果并不好。