web-dev-qa-db-ja.com

ECDSAキーの変換(PEM、OpenSSH)

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
766F6964

そのライブラリで使用しようとしているキー(プライベートまたはパブリック、そのライブラリが署名と検証を呼び出しているキー)、またはその両方ですか?

_ssh-keygen -t ecdsa -b $n -m pem_(OpenSSH 7.8以降)空のパスワードを使用は、OpenSSL互換の暗号化されていない形式で秘密鍵ファイルを生成します(ヘッダー_-----BEGIN EC PRIVATE KEY-----_付き)ライブラリが必要とするもの。 public OpenSSH独自の形式でキーファイルを生成します。これは、OpenSSLがライブラリで必要とするorとはまったく異なります。 OpenSSHの「新しい」形式で秘密鍵ファイルを(誤って?)生成(または変換)した場合(デフォルトは7.8以降、その_-o_、ヘッダー_-----BEGIN OPENSSH PRIVATE KEY----_付き)、OpenSSL形式に変換できます。 _ssh-keygen -p -m pem [-f file]_(ただし_-e_ではない)を使用してパスワードを(おそらく空から、間違いなく空に)変更する。パスワードの入力を求められないようにする場合は、コマンドラインで_-P old_および_-N new_を使用できます。

_ssh-keygen -e [-m various]_は、OpenSSH形式またはseveral他の形式の公開鍵で動作します。特に、公開鍵の_-m pem_は、PKCS1によって定義され、OpenSSLがずっと昔に使用したRSAのみの形式を意味します。今世紀のOpenSSLは、X.509 "SubjectPublicKeyInfo"によって定義された一般的な形式を使用します。これは rfc 528 およびECDSAの場合は特に便利です rfc 548 、現在RSA DSAで機能しますそして、ECDSAはEd25519ではありませんが、PKCS8は実際にはまったく異なる標準ですが、_ssh-keygen_が_-m pkcs8_を奇妙に呼び出します- privateキー。 (OpenSSHの最近のバージョンでは、SSHでのDSAのseを推奨していませんが、現在のところ_ssh-keygen_は引き続きそのキーをサポートしています。)

相互類似 https://superuser.com/questions/1470852/differences-between-ssh-keygen-private-keys-and-libressls および https://stackoverflow.com/質問/ 55733451/what-is-the-difference-between-rsa-private-key-with-headers-and-openssh-private など

2

OpenSSH秘密鍵はPEM形式で保存されます。

OpenSSH公開鍵にはPEM形式の鍵が含まれていますが、----- Begin EC Public Key -----ヘッダーとフッターはありません。

OpenSSHキー形式の説明については、この質問を参照してください。 https://superuser.com/questions/1477472/openssh-public-key-file-format

0
ztk