如何匹配导出的 OpenPGP 公钥和私钥对?

如何匹配导出的 OpenPGP 公钥和私钥对?

我备份了几个公钥和私钥文件,如何查看哪个公钥文件对应哪个私钥文件?

我使用以下方法生成了 2048 字节的 GnuPG 公钥和私钥对

gpg --gen-key

为了备份公钥,我使用以下方式导出它们

gpg --armor --output ~/gpg_keys_backup/<Public Key Id>-public.key --export <Public Key Id>

为了备份私钥,我使用以下方式导出它们

gpg --armor --output ~/gpg_keys_backup/<Private Key ID>-private.key --export-secret-keys <Private Key ID>

如何确定哪些备份密钥属于一对?

答案1

通过列出密钥文件的内容,可以查询某个密钥属于哪个公钥。

gpg --list-packets [secret-key-file] | head
:secret key packet:
        version 4, algo 1, created 1356475387, expires 0
        pkey[0]: [8192 bits]
        pkey[1]: [17 bits]
        gnu-dummy S2K, algo: 0, simple checksum, hash: 0
        protect IV: 
        keyid: 4E1F799AA4FF2279

引用的最后一行keyid包含公钥的长密钥 ID。

答案2

首先,公钥 ID 和私钥 ID 是相同的,因此您的文件名应该首先匹配。

第二,其实公钥是不需要备份的,只要导入私钥(私钥包含公钥和私钥),公钥和私钥都会被导入。

gpg --import private.key


但假设文件名由于某种原因不匹配,那么你可以运行

gpg yourfile.key,它将打印类似以下内容的内容:

pub  2048R/1234ABCD 2016-12-31
sub  2048R/5678EFGH 2016-12-31

匹配私钥/公钥的密钥 ID(此示例中为 1234ABCD)。


如果您有大量密钥,那么与其匹配它们,不如简单地忽略导出的公钥并从私钥重新生成它们,这可能会更容易。

gpg --import private.key
gpg --armor --output <Key Id>-public.key --export <Key Id>

相关内容