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

我目前有一个SSH密钥,我用了一段时间,我想开始使用一个新的钥匙圈GnuPG。 但是,鉴于我已经使用了我的密钥很久了,我仍然希望在GPG中使用该密钥作为主/主密钥。 我已经尝试通过这些说明导入密钥。

但是,我最终被认为是一个“子”。 此外,如果我尝试导入它而不创build标准的GPG密钥,GPG甚至不会看到这个子密钥。 (我假设子键需要首先由主键签名。)

如何使用此密钥作为secring.gpg中的主键?

简单的答案是: 你不。

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

另外, 你为什么要这样做呢? 即使您使用相同的密钥材料来组成您的PGP密钥,您仍然需要将密钥分配为PGP密钥。 您可能没有将您的SSH公钥分发给您所对应的人,所以从密钥分发的angular度来看,没有什么区别:他们需要从您那里获得公钥。 而且,即使您将SSH公钥分发给其他人,也需要采取一些额外的步骤才能将其导入到OpenPGP实现中,这可能会也可能不容易。

正如卡斯佩尔德所指出的那样,只有一种方法可以解释(特别是)签名。 如果你同时使用PGP和SSH的密钥 ,如果有人可以欺骗你在一个特定的签名系统攻击(特定签名系统攻击假设的能力)上签名,那么即使两个系统都是安全隔离的可能有可能以这样一种方式来制造这样的信息,即在一个系统中具有一个含义,而在另一个系统中具有不同的含义 。 这本身就是一个弱点。 (可开发?谁知道,但为什么要抓住机会?)

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

在没有详细看过任何一个协议的情况下,我认为认识到在两者中使用相同的密钥材料可能相当微不足道,因为公开密钥基本上是透明的。

只需生成一个新的PGP密钥。 如果你想要的话,那么把它设为RSA,并且和你的SSH密钥长度相同。 (无论如何,理智的人都不会仔细核实指纹。)然后将公钥分配给你想要对应的人,作为PGP密钥。 这对于每个人来说都会容易得多,而且很可能会更安全一些,这是以系统的随机熵池中的less量熵为代价的,而这个熵池应该很快得到补充。


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

您可以使用monkeysphere项目中的工具pem2openpgp将SSH密钥转换为OpenPGP密钥。 这个密钥可以通过gnupg作为普通的私钥/公钥对导入。 正如另一个答案所提到的,这通常不是一个好主意,因为ssh没有证书的概念,所以你有效地增加了一个以前没有的密钥的能力。 这在密码学中通常是不可行的。

我反正用我的一个SSH密钥,但我把密钥对添加到我的另一个OpenPGP密钥作为一个子密钥,只有一个能力标志:身份validation。 这个标志适用于这样的情况,你不想用密钥对(意思--encrypt为gnupgencryption和设置选项)签名或encryption任何东西,但是你希望在你的密钥箱中有OpenSSH和无论如何gnupg代理。

有关更多详细信息,请参阅monkeysphere文档。

将导入的常规PKCS格式密钥转换为gpg可能有很好的理由。

例如,如果你想把它放到智能卡上。 gpg提供的卡片信息和卡片编辑命令对于这个目的是非常有用的,所以为什么不把它当作工具来使用呢? 需要完成的唯一的障碍是…正好:将标准PKCS#8格式(或“原始”RSA PKCS#1格式)中的密钥导入到gpg密钥存储中,以供进一步处理。

所以 – 注意我的反对批准的答案! 🙂

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

在Ubuntu 16.04或Windows WSL上使用这个。

 sudo apt install -y monkeysphere cat key.pem | PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "Key <[email protected]>" > key.pgp 

导入卡。 可以在Windows或Linux上完成。

 gpg --import key.gpg 

移动到卡

find密钥签名标识符。

 gpg --list-key 

将身份validation密钥移到卡上

 gpg --edit-key FFFFFFFFFFF keytocard 

为authentication插槽select一个号码。

你在这里完成。

如果您使用的是卡片,请记得从gpg钥匙串中删除密钥。 使用上面的密钥标识符。

 gpg --delete-secret-key FFFFFFFFFFF 

杂项

不需要,但可能是有用的基于文本的pgp格式的钥匙。

 gpg -a --export FFFFFF > key.asc