Answers:
简单的答案是:您没有。
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}
指令。
您可以pem2openpgp
使用monkeysphere项目中的工具将SSH密钥转换为OpenPGP密钥。然后,gnupg可以将其导入为常规的私钥/公钥对。正如另一个答案提到的那样,这通常不是一个好主意,因为ssh没有证书的概念,因此您正在有效地向现有密钥添加一项以前无法拥有的功能。这在密码学中通常是不行的。
无论如何,我都是使用我的ssh密钥之一完成的,但是我将密钥对添加为另一个OpenPGP密钥,作为一个只有一个功能标志的子密钥:身份验证。此标志适用于此类情况,在这种情况下,您不想使用密钥对(gnupg的含义--encrypt
和--sign
选项)对任何事物进行签名或加密,但是无论如何都希望将其放在密钥箱中以便通过OpenSSH和gnupg-agent进行身份验证。
有关更多详细信息,请参见Monkeysphere文档。
有充分的理由将常规的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
在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