如何将RSA SSH密钥作为_primary_私钥导入GPG?


16

我目前有一个已经使用了一段时间的SSH密钥,我想开始使用带有新密钥环的GnuPG。但是,考虑到我已经使用了多年的密钥,我仍然希望在GPG中将该密钥用作主/主密钥。我尝试通过这些说明导入密钥。

但是,我最终得到了所谓的“子键”。此外,如果我尝试在不创建标准GPG密钥的情况下导入它,则GPG甚至看不到该子密钥。(我假设子键首先需要由主键签名。)

如何在secring.gpg中将此键用作主键?


您从什么意义上说“ _primary_privatekey ”?
MadHatter

Answers:


16

简单的答案是:您没有。

SSH密钥和GnuPG(实际上是OpenPGP)密钥完全不同,即使这两个协议都可以使用RSA密钥对。

此外,您为什么要这样做?即使您使用相同的密钥材料来构成PGP密钥,您仍然需要将密钥作为PGP密钥进行分发。您可能没有向与之通信的人分发SSH公钥,因此从密钥分发的角度来看,这没有什么区别:他们将需要从您那里获取公钥。即使您一直在向其他人分发SSH公钥,他们也需要采取一些其他步骤才能将其导入到他们的OpenPGP实现中,这可能很容易,也可能并不容易。

正如卡巴斯德(Kasperd)十分明确指出的那样,必须只有一种方式(特别是)来解释签名。如果您要对PGP和SSH 使用相同的密钥,如果有人可以诱使您在一个签名消息中特制一条消息(这在某些签名系统攻击中是假定的功能),那么即使两个系统都被安全隔离。可能以一种方式在一个系统中具有一种含义,而在另一种系统中具有不同的含义来制作这样的消息。这本身就是一个漏洞。(可利用?谁知道。但是为什么要抓住机会?)

PGP和SSH密钥对都是长期密钥,用于保护临时(消息和会话)对称密钥以及验证远程用户的真实性。这使得PGP或SSH私钥比对应的对称密钥成为攻击者更高的价值目标。如果您对两者使用相同的密钥材料,并且攻击者能够意识到这一点,那么只会增加对该密钥对进行成功攻击的价值。

在没有详细研究任何一个协议的情况下,我认为认识到两者都使用相同的密钥材料可能是相当琐碎的,因为公钥基本上是明文传输的。

只需生成一个新的PGP密钥即可。如果需要,可以将其设为RSA,并且长度与SSH密钥相同。(无论如何,任何一个理智的人都不会比验证指纹更靠近它。)然后将公共密钥作为PGP密钥分发给您希望与其联系的人员。这将使每个人都容易得多,而且很可能更安全,但会牺牲系统随机熵池中的少量熵,而无论如何,应立即对其进行补充。


如果您的秘密密钥环上多个密钥,并且想要指定默认情况下应使用哪个密钥,请在〜/ .gnupg / gnupg.conf中使用default-key和可能的default-recipient{,-self}指令。


1
我同意这个答案。但是,还有另一个原因不使用相同的密钥材料。出于安全原因,只能使用一种方法来解释签名。如果可以用两种不同的方式来解释同一签名,那将是一个漏洞。即使ssh和gpg本身都是安全的,对手也可能诱使您与某人签署一条消息,然后将该签名带到另一个程序中,在该程序中它可能具有不同的含义。
kasperd 2014年

@kasperd好点。我修改了答案;您现在对此感觉如何?
CVn 2014年

这听起来不错。
kasperd 2014年

1
我认为这个答案并不完全正确:在Monkeysphere中,您可能需要将现有的OpenSSH密钥用作个人OpenPGP密钥中仅用于身份验证的子密钥。至少我想那样使用它。
user134450

这些键完全没有区别。他们的元数据是。
foo

5

您可以pem2openpgp使用monkeysphere项目中的工具将SSH密钥转换为OpenPGP密钥。然后,gnupg可以将其导入为常规的私钥/公钥对。正如另一个答案提到的那样,这通常不是一个好主意,因为ssh没有证书的概念,因此您正在有效地向现有密钥添加一项以前无法拥有的功能。这在密码学中通常是不行的。

无论如何,我都是使用我的ssh密钥之一完成的,但是我将密钥对添加为另一个OpenPGP密钥,作为一个只有一个功能标志的子密钥:身份验证。此标志适用于此类情况,在这种情况下,您不想使用密钥对(gnupg的含义--encrypt--sign选项)对任何事物进行签名或加密,但是无论如何都希望将其放在密钥箱中以便通过OpenSSH和gnupg-agent进行身份验证。

有关更多详细信息,请参见Monkeysphere文档。


2

有充分的理由将常规的PKCS格式的密钥转换为导入到gpg。

例如,如果您要将其放在智能卡上。gpg提供的card-info和card-edit命令提供的功能对此非常有帮助,那么为什么不将其用作工具呢?唯一需要克服的障碍是……确切的是:将密钥从标准PKCS#8格式(或“原始” RSA PKCS#1格式)导入gpg密钥存储区以进行进一步处理。

所以-请注意我对批准答案的反对意见!:)

可以在这里找到对此类问题的实际有用答案:https : //unix.stackexchange.com/questions/276317/how-can-i-import-a-key-in-pem-format-not-openpgp-into -gpg


1

在Ubuntu 16.04或Windows WSL上使用它。

sudo apt install -y monkeysphere
cat key.pem | PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "Key <key@example.com>" > key.pgp

进口卡。可以在Windows或Linux上完成。

gpg --import key.gpg

移至卡片

查找密钥签名标识符。

gpg --list-key

将身份验证密钥移至卡

gpg --edit-key FFFFFFFFFFF
keytocard

为认证插槽选择一个数字。

您已经完成了。

如果使用卡,请记住从gpg钥匙串中删除钥匙。使用上方的密钥标识符。

gpg --delete-secret-key FFFFFFFFFFF

杂项

不需要,但对于获取基于文本的pgp格式的密钥可能很有用。

gpg -a --export FFFFFF > key.asc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.