gpg 导出哪些密钥以及密钥环中有什么?

gpg 导出哪些密钥以及密钥环中有什么?

我最近一直在研究互联网上的相关内容gpg。我必须说这非常令人困惑。

特别是导入/导出部分。当你生成一个密钥时,基本上默认会得到 4 个密钥。导出密钥有哪些可能的方法(仅一个密钥,一次多个密钥)?删除密钥有哪些可能的方法(相同)?另外,我现在不确定我是否正确解释了gpg --list-keys结果gpg --list-secret-keys。例如,我似乎只导出一个键(子键gpg --export SUB_ID!),但是在导入时我也得到了主键。

答案1

我设法发现了什么。如我错了请纠正我。

有公钥和私钥,它们成对出现。有主键,每个主键可以有一个或多个子键。默认情况下,当您生成密钥时,您将获得四个密钥 ( (1) RSA and RSA (default))。一对用于签名和认证的密钥对(主密钥)和一对用于加密的密钥对(子密钥)。此外,还有两个密钥环,用于私钥和公钥。

现在到棘手的部分。我正在尝试导入/导出密钥。为此,我创建了一个带有 2 个子项的项。然后我以不同的方式导出它:

$ gpg --export PRI_ID > ~/_/export-1
$ gpg --export PRI_ID! > ~/_/export-2
$ gpg --export SUB_ID_1! > ~/_/export-3
$ gpg --export SUB_ID_2! > ~/_/export-4
$ gpg --export-secret-keys PRI_ID > ~/_/export-secret-keys-1
$ gpg --export-secret-keys PRI_ID! > ~/_/export-secret-keys-2
$ gpg --export-secret-keys SUB_ID_1! > ~/_/export-secret-keys-3
$ gpg --export-secret-keys SUB_ID_2! > ~/_/export-secret-keys-4
$ gpg --export-secret-subkeys PRI_ID > ~/_/export-secret-subkeys-1
$ gpg --export-secret-subkeys PRI_ID! > ~/_/export-secret-subkeys-2
$ gpg --export-secret-subkeys SUB_ID_1! > ~/_/export-secret-subkeys-3
$ gpg --export-secret-subkeys SUB_ID_2! > ~/_/export-secret-subkeys-4

并开始导出密钥,看看会发生什么:

$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-1; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-2; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-3; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-4; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-keys-1; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-keys-2; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-keys-3; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-keys-4; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-subkeys-1; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-subkeys-2; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-subkeys-3; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-subkeys-4; gpg -k; gpg -K

以下是我的结论,与手册页中的内容有些矛盾:

`gpg --export PRI_ID` exports all public keys (3 keys)
`gpg --export PRI_ID!` exports primary public key (1 key)
`gpg --export SUB_ID!` exports public primary key and public subkey (2 keys)
`gpg --export-secret-keys PRI_ID` exports all 3 keypairs (6 keys)
`gpg --export-secret-keys PRI_ID!` exports primary keypair (2 key)
`gpg --export-secret-keys SUB_ID!` exports primary keypair and subkey keypair (4 keys)

gpg --export-secret-subkeys类似于gpg --export-secret-keys,但不会导出私有主键(或者像他们所说的那样使其变得无用,sec#)。一般来说,PRI_ID, SUB_IDs 是可以互换的,除非你在它们后面加上感叹号。但对于--delete-key--delete-secret-key即使使用感叹号,它们也可以互换。

UPD据我看gpg --list-packets来是错的,与手册页没有矛盾。--export-secret-keys毕竟必须导出密钥。只是公钥可以从私钥推断出来。

不过,终究还剩下一件事。主键和子键之间有什么样的联系?为什么当我导出子项时,我也会得到主键?

UPD哦,每个密钥对共享一个且相同的 ID。

相关内容