将没有用户 ID 的 PGP 密钥导入到 gpg 中

将没有用户 ID 的 PGP 密钥导入到 gpg 中

我的公司使用 Authora Edge 来创建/管理 pgp 密钥。该公司意外关闭,我们正在将现有密钥迁移到 gpg 中。

当尝试导入公钥时,我收到以下错误:

# gpg --import ./Feedback-RSA-4096.public.asc
gpg: key 5DE4473F: no valid user IDs
gpg: this may be caused by a missing self-signature
gpg: Total number processed: 1
gpg:           w/o user IDs: 1

但是,我可以通过使用 --allow-non-selfsigned-uid 解决此问题:

# gpg --allow-non-selfsigned-uid --import ./Feedback-RSA-4096.public.asc
gpg: key 5DE4473F: accepted non self-signed user ID "Feedback-RSA-4096.public.asc"
gpg: key 5DE4473F: public key "Feedback-RSA-4096.public.asc" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

不幸的是,这在导入密钥时不起作用:

# gpg --expert --allow-non-selfsigned-uid --import Feedback-RSA-4096.private.txt
gpg: key 5DE4473F: no user ID
gpg: Total number processed: 1
gpg:       secret keys read: 1

知道如何将密钥导入 gpg 吗?我读到我可以使用专家模式,但到目前为止我的尝试没有成功。

答案1

确实,GnuPG 不会导入没有用户 ID 的密钥。幸运的是,这个--allow-non-selfsigned-uid选项成功了好简单只是发明一个临时用户 ID 并在导入之前将其作为短字节字符串写入文件。在本例中,我将使用用户 ID“foobar”,因此字节串将为\xb4\x06foobar.

为了使其工作,密钥文件必须采用二进制格式 -没有 ASCII 装甲。如果该文件可以用普通文本编辑器读取并且以 开头-----BEGIN PGP PRIVATE KEY BLOCK-----,那么它是 ascii 装甲的并且需要转换。如果它已经是二进制的,您应该制作一个副本。

如果原始密钥文件是 ascii-armored,则创建一个二进制副本:

gpg -o Feedback-RSA-4096.private.gpg --dearmor Feedback-RSA-4096.private.txt

否则,如果原始密钥文件是二进制文件,则创建一个重命名的二进制副本:

cp Feedback-RSA-4096.private.txt Feedback-RSA-4096.private.gpg

无论您使用上述哪个命令,都将创建名为 的密钥文件的二进制副本Feedback-RSA-4096.private.gpg。这样,如果出现问题,您就不会弄乱您的原始密钥文件。

将用户 ID 字节字符串附加到二进制副本:

printf '\xb4\x06foobar' >> Feedback-RSA-4096.private.gpg

使用以下选项导入密钥文件--allow-non-selfsigned-uid

gpg --allow-non-selfsigned-uid --import Feedback-RSA-4096.private.gpg

快完成了...

具有非自签名用户 ID 的密钥的功能受到严重限制,因此导入密钥后,您必须使用它gpg --edit-key foobar来进入编辑模式。进入编辑模式后,在gpg>提示符处输入adduid并按照屏幕上的提示添加真实(自签名)用户 ID。添加用户 ID 后,当仍处于编辑模式时,按gpg>提示输入1选择“foobar”用户ID(*名称旁边将有 表示已选择),然后输入deluid并确认删除该用户 ID。最后输入save保存更改并退出密钥编辑模式。

请注意,密钥数据包中始终包含相应的公钥数据包,因此导入包含密钥的文件也会导入公钥。这意味着您可以跳过导入公钥文件的步骤,而只导入私钥文件。

相关内容