如果您创建一个新的 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]
(输出由gpg --list-keys
和组合而成gpg --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
答案1
在英国,2000 年调查权力规管法说
49 (9) 本条规定下的通知不得要求披露以下任何密钥——
(a) 仅用于生成电子签名;且
(b) 事实上并未被用于任何其他目的。
…这意味着,在某些情况下,英国政府可能会强迫你交出你的解密密钥(如果你是居民),但他们不是允许使用您的签名密钥冒充您。
答案2
我不知道 GPG/PGP 为什么要这样做,但这种做法的一个可能动机是灾难恢复。您可能希望将加密私钥的副本交给非常亲密、值得信赖的朋友,这样,如果您的房子被陨石击中,您仍然可以阅读保存在云中的旧消息。(同样,您可能需要将加密密钥1 交给您的老板,以便他可以在您离开后阅读您的电子邮件。)
但其他人没有理由拥有你的签名密钥对的副本。________________
1
“ 你可能需要向某人提供你的加密密钥”——参见TEV 的答案。
答案3
简单的答案是,您使用密钥的次数越多,泄露的有关密钥的信息就越多。
签名密钥用于验证您是否信任密钥,并推断密钥所有者,但更重要的是,您的通信来自您。这称为不可否认性。
为了便于讨论,我们假设使用密钥 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.
“
答案4
添加已经回答的内容:
签名和加密操作使用各自不同的算法和参数。这些算法可能存在各自的弱点。在给定算法中发现的弱点可能意味着与该特定算法一起使用的私钥/密钥可能在某种程度上受到损害。
每种用途使用不同的密钥可以在发现特定用途的漏洞时隔离后果。
此外,使用相同的密钥和两种不同的算法可能会产生新的攻击方案,这种方案只有在两种情况下都使用给定的密钥时才会存在(例如,如果每种算法的不同弱点会相互补充,或者每种算法都会泄露一些关于私钥/秘密密钥的非相同信息,从而增加可发现的私钥/秘密密钥位的数量)。