转换 ECDSA 密钥(PEM、OpenSSH)

信息安全 密码学 打开sh ecdsa
2021-08-15 23:01:52

要使用 ECDSA 密钥,我使用的是python-ecdsa库。不幸的是,如果密钥文件以 OpenSSH 格式提供,则此库无法正确处理它们。相反,我使用以下命令以库可以处理的 PEM 格式生成它们:

ssh-keygen -t ecdsa -b 256 -f /home/user/Documents/ECDSA/key -m pem

然而,虽然我能够很好地使用 PEM 中的密钥文件,但我最终确实需要 OpenSSH 格式的它们。想到以下想法:

  1. 以 OpenSSH 格式生成它们并将它们转换为 PEM 格式。
  2. 以 PEM 格式生成它们并将它们转换为 OpenSSH 格式。
  3. 一次性以两种格式生成它们?

这些选项中的任何一个都可能吗?我知道当类型是 RSA 时可以转换格式,如下所示:

ssh-keygen -f id_rsa.pub -m 'PEM' -e > public.pem

然而,对于 ECDSA,这是不可能的:

do_convert_to_pem: unsupported key type ECDSA

我有什么选择?

2个回答

您尝试将哪个密钥用于该库 - 私有或公共,该库称为签名和验证 - 或两者兼而有之?

ssh-keygen -t ecdsa -b $n -m pem(在 OpenSSH 7.8 以上)使用空密码生成该库想要的 OpenSSL 兼容的未加密格式(带有 header )的私钥文件;-----BEGIN EC PRIVATE KEY-----它以 OpenSSH 自己的格式生成公钥文件,这完全不同于 OpenSSL 使用的任何东西该库想要的任何东西。如果您(错误地?)生成(或转换)OpenSSH 'new' 格式的私钥文件(默认自 7.8 及之前-o,带有 header -----BEGIN OPENSSH PRIVATE KEY----),您可以通过“更改”密码(可能从空,一定要清空)与ssh-keygen -p -m pem [-f file](但不是-e)。如果您不想被提示输入密码,您可以在命令行上使用-P old和。-N new

ssh-keygen -e [-m various]以 OpenSSH 格式或其他几种格式public key 进行操作特别是对于公钥意味着由 PKCS1 定义并在很久以前被 OpenSSL 使用过的仅 RSA 格式。本世纪的 OpenSSL 使用 X.509 "SubjectPublicKeyInfo" 定义的通用格式,更方便地在rfc 5280和 ECDSA 中使用,特别是rfc 5480,目前它适用于 RSA DSA 和 ECDSA,虽然不是 Ed25519,即使 PKCS8 是奇怪的调用实际上,私钥的标准完全不同(最近版本的 OpenSSH 不鼓励在 SSH 中使用DSA,但目前仍支持它的密钥。)-m pemssh-keygen-m pkcs8ssh-keygen

交叉相似https://superuser.com/questions/1470852/differences-between-ssh-keygen-private-keys-and-libresslshttps://stackoverflow.com/questions/55733451/what-is-the-difference -between-rsa-private-key-with-headers-and-openssh-private

OpenSSH 私钥以 PEM 格式存储。

OpenSSH 公钥包含 PEM 格式的密钥,但没有 -----Begin EC Public Key----- 页眉和页脚。

有关 OpenSSH 密钥格式的说明,请参阅此问题:https : //superuser.com/questions/1477472/openssh-public-key-file-format