【发布时间】:2017-12-02 08:58:38
【问题描述】:
我需要生成一个 PGP 公钥/私钥。我以前从来没有这样做过。我已阅读文档,但给出的示例与我在计算机上看到的不匹配。
我使用gnupg 生成了密钥。
我运行命令列出公钥
gpg --list-keys --keyid-format LONG
我得到了这样的结构。
pub rsa2048/123456789101112A 2000–01-01 [SC] [expires: 2000-01-01]
ABCD1234ABCD1234ABCD1234ABCD1234ABCD1234
uid [ultimate] Firstname Surname <email@gmail.com>
sub rsa2048/ABCDEFGHIJKLMNO1 2000-01-01 [E] [expires: 2000-01-01]
然后我运行一个命令来获取密钥
gpg --list-secret-keys --keyid-format LONG
我得到相同的结构
sec rsa2048/123456789101112A 2000–01-01 [SC] [expires: 2000-01-01]
ABCD1234ABCD1234ABCD1234ABCD1234ABCD1234
uid [ultimate] Firstname Surname <email@gmail.com>
ssb rsa2048/ABCDEFGHIJKLMNO1 2000-01-01 [E] [expires: 2000-01-01]
这里不同的是pub、sub、sec和ssb标签,但内容是完全一样。
生成的每个示例中的公钥私钥是什么?
第一行 pub 或 sec 中 'rsa2048/' 后的序列(例如123456789101112A)是公钥吗?那么下面一行中较长的序列(例如ABCD1234ABCD1234ABCD1234ABCD1234ABCD1234)是匹配的私钥?
或者是第一行 pub 或 sec 中 'rsa2048/' 之后的序列中的公钥(示例中为123456789101112A ),那么匹配的私钥是 'rsa2048/' 后面的 sub 或 ssb 行(例如ABCDEFGHIJKLMNO1)? p>
【问题讨论】:
-
doc/DETAILS包含有关--with-colons格式的信息,其中包含与“人类可读”版本相同的信息。这可能会让你走上正轨。算法后面的数字是OpenGPG KeyIDs。他们总是引用公钥(即使是私钥)。 pub 和 sub 是公钥,sec 和 ssb 是私钥。 -
非常感谢!那真的,真的很翔实!!不过,这会导致另一个问题;我现在知道我的
Primary Key是什么,我的Subkey是什么。所以我假设我可以使用主键的KeyId来加密?子键的KeyId到decrypt?除了我的子密钥Key Capabilities只是'e' - 加密。所以我不能用它解密? -
如果你仔细看,主键是一个纯S点火键。这就是为什么它有一个用于Encryption 的子密钥。您使用签名密钥的 secret 密钥对消息进行签名,并使用 public 密钥来验证签名。对于 encryption 密钥,您使用 public 密钥进行加密,使用匹配的 private 密钥进行解密。 Gnupg 非常严格地尝试确保您使用单独的密钥进行唱歌和加密。
-
这只是一个关于 gnupg 的问题——不是关于 bash 的问题(gnupg 不是 bash 的一部分,它是一个独立的程序,不依赖于任何特定的 shell),或者关于终端(这种行为是如果您的输出发送到终端,或者发送到文件、Web 浏览器或其他任何地方,则相同)。我已经清理了标签。
-
另外,请注意关于 UNIX 工具的一般问题更适合我们的姊妹网站Unix & Linux,而 Stack Overflow 专门针对关于编写软件的问题。
标签: gnupg