PGP私钥块是否也“包含”公钥?


13

我注意到,如果我将ASCII铠装的PGP私钥导入到否则为空的GnuPG密钥环中(通过~/.gnupg事先删除),则密钥环同时包含公钥和私钥。同样,装甲ASCII的专用密钥块大约是我的公用密钥块的两倍,这使我相信专用密钥块既包含专用密钥又包含公用密钥,而公用密钥块仅包含后者。

自从创建密钥以来,到现在为止,我都使用一个包含导出的私钥块的文件备份了密钥,而另一个包含了导出的公钥块的文件备份了我的密钥。我的公共密钥块备份是否冗余,因此仅保留私有密钥文件是否安全?

我使用以下命令创建私钥文件:

gpg --export-secret-keys -a > private

和以下命令来创建公用密钥文件:

gpg --export -a > public

1
为了使某人回答您的问题,您需要添加用于导出密钥的命令。答案可能就是这样。但是,如果不导出公钥,您将获得什么呢?我想说的是,将它留在您的备份例程中,它不会花费任何费用,并且出于各种目的,您只需要已有的公用密钥就可以使用它。
布拉姆2012年

谢谢布拉姆;我已经对问题进行了编辑,以使其更加清晰。是的,节省〜3 KB并没有真正的好处,我只是很好奇。
Delan Azabani 2012年

Answers:


15

是的,OpenPGP的“秘密密钥”和“秘密子密钥”数据包包含公共参数和私有参数。您可以使用pgpdump检查导出的密钥来验证这一点:

$ gpg --export-secret-key grawity | pgpdump
旧版:密钥包(标签5)(1854字节)
    Ver 4-新
    公钥创建时间-2009年10月31日星期六14:54:03 EET
    Pub alg-RSA加密或签名(pub 1)
    RSA n(4096位)-...
    RSA e(17位)-...
    Sym Alg-CAST5(Sym 3)
    迭代并加盐的字符串到密钥(s2k 3):
        哈希算法-SHA1(哈希2)
        盐-12 24 0f e1 5b 7e e2 46 
        数-65536(编码数为96)
    IV-91 a3 44 71 47 87 a4 ba 
    加密的RSA d
    加密的RSA p
    加密的RSA q
    加密的RSA u
    加密的SHA1哈希

对于大多数非对称密钥系统(不仅仅是OpenPGP),这都是正确的。


我认为对于PEM编码的RSA PUBLIC KEY和RSA SECRET KEY块而言,这并不正确。
vy32 '16

2
@ vy32:这些不是OpenPGP密钥,因此无关紧要。但是,它仍然是正确的为那些为好。(请注意,如何openssl genrsa仅输出“私有”块,以便可以从其派生公共块。)您可以自己检查它们:openssl genrsa 512 | openssl asn1parse -i。或查看RFC 3447附录A,该附录在RSAPrivateKey结构中清楚地显示了模数和publicExponent。
user1686 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.