例如,当创建 ECC SSH 密钥时,可以使用以下命令:
ssh-keygen -o -a 100 -t ed25519
据我了解,该-o
参数用于生成:
使用与更普遍接受的 PEM 相对的较新格式的私钥
这些“新格式”是 DSA/RSA/ECC 还是 PPK 与 PEM?抱歉,如果我将 SSH密钥格式与私有 SSH 密钥的文件扩展名混淆了;我想问一下 PEM 与报价中提到的“较新格式”之间的主要区别。
例如,当创建 ECC SSH 密钥时,可以使用以下命令:
ssh-keygen -o -a 100 -t ed25519
据我了解,该-o
参数用于生成:
使用与更普遍接受的 PEM 相对的较新格式的私钥
这些“新格式”是 DSA/RSA/ECC 还是 PPK 与 PEM?抱歉,如果我将 SSH密钥格式与私有 SSH 密钥的文件扩展名混淆了;我想问一下 PEM 与报价中提到的“较新格式”之间的主要区别。
首先,这是我机器的完整man page
条目(似乎没有版本标志,但来自 2016 年 2 月 17 日)ssh-keygen -o
ssh-keygen
man page
-o 使 ssh-keygen使用新的 OpenSSH 格式而不是更兼容的 PEM 格式保存私钥。新格式增强了对暴力破解密码的抵抗力,但不支持 6.5 之前的 OpenSSH 版本。 Ed25519 密钥始终使用新的私钥格式。
似乎很清楚,这只是关于正在生成的文件的格式。另请注意ssh-keygen
,无论您传入什么标志,都只会以新格式存储 Ed25519 密钥。
由于您今天的两个问题都有相同的潜在问题,让我们处理它。
...这些“新格式”DSA/RSA/ECC ...
好的,所以 DSA、RSA 和 ECC 不是不同的格式,它们是完全不同的算法,彼此完全不相关。
我希望我能找到一种更好的方法来解释这一点,但我不确定我是否能做到技术性太强。让我们试试这个:这是一个有点像说,http
和ftp
只是不同的格式传输文件,或.docx
与.pptx
不同格式的Office文档。称这些“只是格式差异”从根本上是错误的,软件在这两种情况下做了非常不同的事情(尽管产生相同的最终结果;传输文件或制作漂亮的文档)。
现在让我们谈谈格式。
所以你想将私钥保存在文件中?PEM是一种用于存储一般加密信息的文件格式,但也存在其他文件格式。PEM 可用于许多方面:私钥、证书或您要加密或签名的电子邮件文本。它只是一个容器“加密的东西”。
类比时间:保存一个Word文档。您可以将其保存.doc
为所有版本的 Office 和开源程序普遍接受的旧格式(PEM 也是较旧且普遍接受的),或者您可以使用较新的.docx
格式(-o
OpenSSH 格式)。有时新功能不向后兼容,只能以新格式保存(如 ed25519)。
(非常感谢@GordonDavisson 的类比)
除了向后兼容之外,您选择的格式实际上与文件的内容无关。
请注意,消息以 开头-----BEGIN RSA PRIVATE KEY-----
,这是标准的行业 PEM 格式 - 任何可以读取 PEM 的软件都可以读取:
$ ssh-keygen -a 100 -t rsa
$ cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwTLkTDZUisg0M/3BDBOjrmBvJXb8cdfveGG1KQhAhFDLMp5w
XKgGFMy339m3TGB1+ekKoXnX3dcRQtpQbuFeDB59cmKpDGZz7BzfetpjeIOGCzG+
Vt2BnDf2OlKb6EE7tC3PSmFgL0nQPSyz8x7rE7CMOQEnz1tKkK9Gpttcku8ifwmd
LAHlVaTV3BIiFJN23fwe7l0czFaV98iy8YRgk/Av3gRlsBABGT5qD8wPiI4Ygpxv
UuT2kq53lhBTWO9hIth5tUU0N7x7QN6/rRSi2uHcmJYXFkpsLie697G17TN5ln3E
X5frsrjVyu0JhjvC5mlRBudSJWcWm/KrcTQxdQIDAQABAoIBAFR6nWtZ4nPhATqu
veg6+jq4vkEim1ZodrUr/FxZ2GRDM+cJctaBPk+ACPMgL099ankB1v0u2x6M+WZD
MiKZ91bTSkVnMMZUUmIvaeU9c3tx/34LnVA8gX0+1zM/hh7zz1iFI3xBwh5LZ3wo
fPNVVLOCYn5WrAK2x48mpX02tG8m0OY5kdCdFW1f6UbCGk3K9ov82yQ+JbjWydOS
ZaS7bnJCRsjDhPm/Ooe2DZ8CKHRO3DOiZAAFYqsosxM2C12+alC+hdKHoJ0pWZWe
eckZiALTENi+PzgSq4ykdBaoreeI84lpIzYQO06rrjM2/fw1x/SQsDYhCsQnNRib
sipl2mECgYEA74rBQDIEWaIVVZ72foeZYOMmAUKCLQtNxVuGl/XoMZO3evN2vbOv
Nw/nn5lVt6PRykVUUl6yb5gHvRSGtGJSB1q6pBVN1EF2sfvUep6mmpEwbSbENiAX
IftE0ap7PKT1aLKbLllwdsJlLCRMJIk07AvsulbkhSC+UmJVkfjblgkCgYEAznkE
fzmWS358MLxb0JM+4v1DO/1ne8z29ddHNppxSNj2Xjf+MMvOY4KaRQa8dMwc3Eqa
1EvPqnK6ila4L08Ai4CyWoGkkkIQBO9jO3mLp24xk6TRo002DbfJRnu4qW4zeryp
gYeFfBzwhc/IQKjXhv8AAfEUFCSYiFaWBsENuw0CgYEAwmyDyCAQqdPFrzYT6cUT
t7EGYtVhpT/cgshz6Rk9uiekL9Y2VWjnWTC+liq1iRUdLSiydRzJhYwHE+/6GaUH
4VJB1PY5soLj3TiCUHg+z4vym1VwwmGvhPRV+jt+RU26ppz5GVic0LeduINJjgoT
e1d+cAwg9PELqQCJZa5wREkCgYBPEuPZAaoAsalIVOro32uHLS1xrSPTsvSlxFO+
orleB9Ga1eDguT0KuTrx0pmcNYucBmpzgbE/ev7b+khBvgTcaGZl6R6o8OoHqdKc
NXl5nucXv1iWLPzVlhxchQd8w/qtN9HHDKrflIm9BY2Qzdj1F3XeSIDDEhzkohyE
66yhhQKBgGh9knh8SxnVxaPk0Rk/bQope9AwIDuIpfsf4KC/EPSZmMNHP8xBh8al
eymUot7Pj6dck31V4C3q74NKobY3p6fZ5t7tP9K6Br+J/FQFhvAdFAwpTD2Bks5H
fhZO5cniPpydb0YvOnoaVnb0nzXVsf1jIgPKfsCsZxoyE0jLb9oV
-----END RSA PRIVATE KEY-----
除了它是更短(因为ECC密钥仅仅是短得多)的通知,与消息开始----BEGIN OPENSSH PRIVATE KEY-----
,这是OpenSSH的特定的格式,其他软件可能会或可能无法阅读:
$ ssh-keygen -o -a 100 -t ed25519
$ cat .ssh/id_ed25519.o
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACC7gIlwBMp+H6VVNZSHI0in2iCU/yi67WfeFPfuyAdkBAAAAJh7nk7je55O
4wAAAAtzc2gtZWQyNTUxOQAAACC7gIlwBMp+H6VVNZSHI0in2iCU/yi67WfeFPfuyAdkBA
AAAEBHl+qBAosBAUIGuvdDR8gJN/PEhempLe4NtyKiO7hCPLuAiXAEyn4fpVU1lIcjSKfa
IJT/KLrtZ94U9+7IB2QEAAAAEm1pa2VATWlrZS1zYW1zdW5nMQECAw==
-----END OPENSSH PRIVATE KEY-----
以下内容来自 OpenSSH 7.8 发行说明,2018-08-24。( http://www.openssh.com/txt/release-7.8 )
此版本包含许多可能影响现有配置的更改:
ssh-keygen(1):默认编写 OpenSSH 格式的私钥,而不是使用 OpenSSL 的 PEM 格式。OpenSSH 格式自 2014 年以来在 OpenSSH 版本中得到支持,并在源代码分发中的 PROTOCOL.key 文件中进行了描述,提供了更好的离线密码猜测保护,并支持私钥中的密钥注释。如有必要,可以通过在生成或更新密钥时将“-m PEM”添加到 ssh-keygen 的参数来编写旧的 PEM 样式的密钥。
这些“新格式”是 DSA/RSA/ECC 还是 PPK 与 PEM?
DSA/RSA/ECC 是与公钥加密而非格式一起使用的算法。用于这些算法的密钥可以以不同的格式存储,即实际密钥的二进制数据的不同包装和编码。
该-o
开关用于强制使用与以前使用的 PEM 不同的私钥的新格式。这种新格式在新的 openssh 密钥格式和 bcrypt pbkdf中进行了描述。但总而言之:如果攻击者能够访问受密码短语保护的私钥,它会提供更好的保护,因为它现在在密码短语上使用正确的密钥派生函数而不是 MD5。
一个更简单的答案是 PEM 是加密信息的元包装器,以帮助应用程序解析它。
原始问题中所述的那些三个字母的首字母缩写词用于创建密码信息。