加密文件以发送给协作者时,我看到此消息:
gpg: using subkey XXXX instead of primary key YYYY
为什么会这样?我注意到,当他们向我发送加密文件时,它似乎也针对我的子密钥而不是我的主密钥进行了加密。对我来说,这似乎不是问题;gpg(1.4.x,macosx)只是处理它并继续前进。但对于他们来说,通过他们的自动化工具设置,这似乎是个问题,他们要求我一定要使用他们的主键。
我试着读了一些书,并且订购了迈克尔·卢卡斯 (Michael Lucas) 的“GPG & PGP”一书,但我不明白为什么会有这种区别。我读过用于签名的密钥和用于加密的密钥会有所不同,但我最初认为这是关于公钥和私钥的。
如果这是一个信任/验证问题,我经历了比较指纹和验证的过程,是的,我信任这个密钥。当我这样做时,我注意到主键和子键有不同的“使用”注释:
primary: usage: SCA
subkey: usage: E
“E”似乎意味着“加密”。但是,我还没有找到任何关于此的文档。此外,我的合作者多年来一直在使用这些工具和技术,那么为什么这对我来说只是个问题呢?
更新
虽然下面的原始帖子正确地解释了为什么您可能想要使用单独的加密和签名密钥,但它并没有很好地回答为什么您使用子密钥而不是主密钥的问题。Debian Wiki 提供了更详尽的答案。
总而言之,您的主密钥是您的在线身份,您的身份和声誉是通过让其他人通过自己签名来保证该密钥是您的来建立的。(您可能认为它就像是您的 Twitter 句柄,而您的声誉是您的 Twitter 关注者,或者您可能反对这种类比,但我希望它能让您了解为什么要保护它。)所以,既然您的主要密钥非常重要,是多年积累起来的,你非常想保护它。特别是,您不想将其存储在可能被盗或被黑的计算机上;你想把你的主键离线保存在一个安全的地方。
当然,这会使您的主键使用起来非常不方便。因此,对于日常操作,您希望使用一个问题不大的密钥,以便在它受到威胁时进行替换。这就是发明子键的原因。
子密钥仍然是公钥/私钥对,只要您拥有私钥,它就是安全的。在密码学上,它与您的主密钥一样安全。不同之处在于,您的声誉仅通过您自己的签名(来自您的私钥的签名)附加到它。使用 Twitter 类比,全世界都相信你是你的 Twitter 用户,因为你所有的追随者都这么说(我知道,它并不总是那样有效,但类比很难!),然后建立信任你可以然后更容易说服全世界你拥有你的 Instagram 句柄,只需发推文,人们就会相信你,因为推文来自你的帐户,他们信任你。
您仍然希望确保您的子密钥安全,但现在如果它被泄露,这不是您的主密钥被泄露(或者,在类比中,有人劫持了您的 Twitter 帐户)时的大问题。现在你可以通过签署一个撤销证书和一个新的子密钥并将它们都发布到你的公共密钥环上来撤销子密钥并发布一个新的子密钥(比如发推文“嘿,我的 Instagram 句柄改变了,不要使用旧的,使用这个一个代替”)。这使得将子密钥保存在笔记本电脑上比将主密钥保存在笔记本电脑上更容易接受。
TL;DR子密钥通过将公钥的加密功能与(主)公钥的信任和身份功能分开,使密钥管理变得更加容易。
原帖
如果仔细研究公钥加密的数学细节,您会发现签名和解密实际上是相同的操作。因此,在天真的实现中,可以通过要求某人签名来欺骗某人解密消息。
在实践中做了几件事来防止这种情况。最明显的是您从不签署实际消息,而是签署消息的安全散列。不太明显,但为了更加安全,您使用不同的密钥进行签名和加密。此外,将加密密钥分开保存可以让您将另一个可以说更重要但绝对不常用的密钥保持离线状态并更加安全。您检查过的密钥就是这种情况。顺便说一句,标志的意思是:
请注意,在所有情况下,“密钥”均表示公钥和私钥对。
如果您的朋友已正确设置所有内容,这对您的朋友来说应该不是问题,但正确设置所有内容可能比应有的更复杂。因此,最好的解决方案可能是让您的朋友生成一个新的公钥,用于签名和加密。就像我说的那样,因为抵御攻击的主要防御措施是仅对消息的加密安全散列进行签名,所以拥有这样的密钥并不是一个严重的弱点。
旗帜参考
备用参考
除此之外,我不太可能提供太多帮助。我一直发现 PGP/GPG 过于复杂,因为它所完成的工作很少。祝你好运。