gpg 导出哪些密钥,密钥环中有哪些?

x-y*_*uri 5 gpg

最近我一直在浏览互联网上的内容gpg。我必须说这很令人困惑。

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

x-y*_*uri 5

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

有公钥和私钥,它们成对出现。有主键,每个主键可以有一个或多个子键。默认情况下,当您生成一个密钥时,您将获得四个密钥 ( (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
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

`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)
Run Code Online (Sandbox Code Playgroud)

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。