为什么 GPG/PGP 默认使用不同的密钥进行签名/加密?

Cha*_*_99 24 pgp public-key-encryption gnupg

如果您创建新的 GPG 密钥,默认情况下您将获得一个仅签名的主密钥对和一个仅加密的子密钥对。

pub  2048R/XXXXXXXX  created: 2013-02-09  expires: 2014-02-09  usage: SC  
sec  2048R/XXXXXXXX           2013-02-09 [expires: 2014-02-09]

sub  2048R/ZZZZZZZZ  created: 2013-02-09  expires: 2014-02-09  usage: E
ssb  2048R/ZZZZZZZZ           2013-02-09 [expires: 2014-02-09]  
Run Code Online (Sandbox Code Playgroud)

(输出组合自gpg --list-keysgpg --list-secret-keys

还建议不要使用您的主密钥进行常规签名(邮件/数据),而是创建另一个仅签名子密钥并将您的主密钥删除/备份到安全和离线位置,仅用于密钥签名.

这是有道理的,因为大多数加密端点是笔记本电脑/电话或其他始终在线的移动设备,它们会使您的私钥面临被盗或丢失的风险。使用安全存储的主密钥,您可以随时撤销此类丢失的子密钥,而不会丢失您的密钥签名。

因此,虽然主密钥 <-> 子密钥分离对我来说很清楚,但我不明白为什么要强调分离签名和加密密钥(即使它们都是子密钥)。有人可以解释为什么这是必要的,或者至少从安全或实用的角度解释有什么好处?

从技术上讲,创建签名和加密子密钥是完全可行的,并且由 GnuPG 支持。

pub  2048R/YYYYYYYY  created: 2013-08-13  expires: 2014-08-13  usage: SCEA
sub  2048R/VVVVVVVV  created: 2013-08-13  expires: 2014-08-13  usage: SEA 
Run Code Online (Sandbox Code Playgroud)

小智 10

在英国,调查权力法案2000规

49 (9) 根据本条发出的通知不应要求披露任何钥匙——

(a) 旨在仅用于生成电子签名的目的;和

(b) 实际上没有被用于任何其他目的。

……这意味着在某些情况下,英国政府可能会强迫您交出您的解密密钥(如果您是居民),但他们不能用您的签名密钥来冒充您。


Sco*_*ott 7

我不知道为什么 GPG/PGP 会这样做,但这种事情的一个可能动机是灾难恢复。您可能希望将您的加密私钥的副本提供给一位非常亲密、值得信赖的朋友,因此,如果您的房子被陨石击中,您仍然可以阅读保存在云中的旧邮件。(同样,您可能需要将加密密钥1 交给您的老板,以便他在您离开后阅读您的电子邮件。)

但是其他人没有理由拥有您的签名密钥对的副本。
________________
1 ?“您可能需要向某人提供您的加密密钥”——参见TEV 的回答


Dan*_*ton 2

简单的答案是,您使用密钥的次数越多,泄露的有关密钥的信息就越多。

您使用签名密钥来验证您信任密钥,并推断所有者,但更重要的是您的通信来自您。这称为不可否认性

为了便于论证,假设使用密钥 10000 次意味着您泄露了某人重建该密钥所需的所有信息。使用一把密钥超过 9999 次将意味着其他人可能会冒充您并将您的可信签名传递给邪恶第三方的密钥或文档,从而导致您所有可信网络相信该方是您或该文档来自您。

但是,如果您还使用同一密钥进行加密,则可以更快地达到阈值。

为了避免这种潜在的烦恼,创建了第二个密钥,该密钥仅用于加密/解密,仅用于像您一样加密数据。一旦此密钥已使用 9999 次,您就可以使此密钥过期,而不会失去您使用有效签名密钥所给予的所有信任。您重新生成密钥,生成新的加密密钥,并使用您的签名密钥对其进行签名,以表明这是每个人都可以验证的可信加密密钥。

编辑:

重新阅读我上面写的内容和GNU 隐私手册我的结论是这sub是一个私钥并且pub必须是一个公钥。@GnP 这个答案:

The keyword pub identifies the public master signing key, and the keyword sub identifies a public subordinate key.