(この質問はテキストで「openssh」と「openssl」の両方を使用しているため、両方を混同しません。)
通常のRSAキーペア(ssh-keygen)にopensshを使用している場合は、「openssl rsa -in ...」を使用してキーパラメータ(モジュラス、指数、小数など)を表示できます。
RSAキーを生成しましたが、openssh形式(ssh-keygenの-oオプションを使用)を使用して保存すると、opensslを介して直接ファイルを読み取ることはできません。まず、ssh-keygen -p -fを使用してパスワードを削除しました。生成されたファイルは「RSA秘密鍵」です。その後、通常の方法でopensslを使用してパラメータを表示できます。
opensslの「ec」および「ecparam」コマンドを使用してファイルを生成し、ECキーを構成するパラメータを表示できます。
ssh-keygen -t ed25519を使用してed25519キーペアを生成すると、「OPENSSH PRIVATE KEY」形式のファイルが生成されます。
明らかに、このファイルに上記の「ssh-keygen -p ...」を使用すると、RSAキーではないため、「RSA」出力を取得できません。
それでは、ed25519を使用してssh-keygenで作成された「OPENSSH PRIVATE KEY」ファイルをパラメータを表示できる形式に変換する方法は?
openssl EC コマンドは、「BEGIN EC PARAMETERS」や「BEGIN EC PRIVATE KEY」などのファイルを生成します。
それでは、OPENSSH PRIVATE KEYでed25519パラメータを表示する方法はありますか?または、このファイル形式をopensslが理解しているEC形式の1つに変換する方法は?
ベストアンサー1
簡単に言うと:あなたできないOpenSSLに変換
2021年2月更新:OpenSSH ed25519キーをOpenSSLでサポートされている形式に変換できません。 Q とソース A の日付に基づいて、OpenSSL は ed25519 キーの保存形式をサポートせず、Ed25519 (またはその他の EdDSA) アルゴリズムもサポートしません。 TLSキー交換のためにX25519をサポートしますが、一時キーのみを使用し、保存形式は必要ありません。 OpenSSL 1.1.1は同月末の2018年9月にリリースされ、PKCS8形式の秘密鍵を使用してEd25519およびEd448(X25519およびX448も含む)をサポートします。しかし、ssh-keygen
(OpenSSH)はできません。書くこのOpenSSL互換フォーマットのEd25519キーは、それに使用されるOpenSSH独自のフォーマットをOpenSSL 6.5から読み取ることはできません(他のタイプも7.8以降のデフォルトです)。
Ed25519にはパラメータは必要なく、OpenSSHキーファイル形式はそのパラメータを保存しません。 Ed25519は、すべての必須パラメータを定義するBernstein curve25519(Edwards形式)のEdDSAインスタンス化(パラメータ化)として定義されています。詳細については、RFC 8032および7748を参照してください。
X9およびSECGによって定義されたECアルゴリズムの場合標準はECDSAとECDHと呼ばれ、OpenSSLは短いWeierstrass形式の方程式を含む楕円曲線のみをサポートするこれらの規格で定義されたパラメータを使用します。 Bernsteinのcurve25519(およびcurve448)は、MontgomeryおよびEdwards形式を代わりに使用します。その理由は、彼のウェブサイトの論文と、いずれにせよ、EdDSAで詳細に議論された理由による。演算ECDSAアルゴリズムとは異なります。しかし、それはもはや重要ではありません。
OpenSSLでキーを使用したくなく、キーが何であるかを知りたい場合は、公開ssh-keygen -y
キーはすでにOpenSSHが好む形式で出力されています。これはASCIIの型名ssh-ed25519
と(SSH2)ワイヤ形式のbase64エンコーディングです。順番に4単語です。セクションの長さ+タイプ名+ 4バイトの長さ+ 32バイトの公開鍵(RFC8032で定義されているエンコードを使用)本当に秘密鍵が必要な場合は、まず次のコマンドを使用してファイルを復号化しssh-keygen -p
(悪い行為者がそれを取得できる場所にコピーします)を置かないように注意してください)以下を使用してファイルをダンプできますod -tx1
。オフセット053で始まる公開鍵blob、長さは次のとおりです。 063(両方とも8進数)、通常は暗号化されていない部分はオフセット0142で始まり、上記のように長さ0210です(つまり、8バイトチェック、次にプライベート「blob」、つまり4バイト長+ 32バイト公開鍵のコピー+ 4バイト長)。 + 64バイトAPI "秘密"キー、そのうち32バイトだけが実際の秘密鍵で、残りは公開鍵の別の(!)コピーで、長さは4バイト+コメントです。