web-dev-qa-db-ja.com

ed25519秘密鍵をPuTTY ppkに変換する方法は?

Ed25519プライベートキー(ssh-keygenコマンド)をppkファイルに。しかし、エラーが発生しました。

秘密鍵をロードできませんでした(認識できない暗号名)

誰かが私を助けることができますか?

  • テスト済みのopensshバージョン:OpenSSH_7.6p1, OpenSSL 1.1.0g 2 Nov 2017およびOpenSSH_7.6p1, OpenSSL 1.0.2n 7 Dec 2017(CoreOSおよびArchLinuxドッカーコンテナ上)

  • テスト済みのPuTTYバージョン:0.70 64bit0.70 32bitおよびsnapshot(Windows 10の場合)

私の手順は次のとおりです。

1. ed25519秘密鍵を生成します

# ssh-keygen -t ed25519 -a 100
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:2HfORujStwmC9c91rmDxMbaV9kVMT70gWxnRXAvNrNU root@f46f23bbad55
The key's randomart image is:
+--[ED25519 256]--+
|             +X B|
|           . +.@E|
|            + +.=|
|       o   o . o.|
|      . S o + +oo|
|       o = = +.=o|
|      . o = B + o|
|         o B = o |
|            = ...|
+----[SHA256]-----+

# cat .ssh/id_ed25519
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABClhk1367
G8CQYpo/0c7UShAAAAZAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIIJiwIymcly4s66p
za/IL3ZNyT5CiMPj0R+/LnMDmABUAAAAoMJIakdbIL7TOAmX8n4xGSrtp8mc/Mr6qimZAZ
zGB7iRhNUXT+isPdf0YuC9mh5NbX43ZYFl+/sWdi2hVmJxbGTwrjaSdNzF3ZnSpi/aVlzF
t3bUCtdwhHLaLqy9unw0zPHlfcQsB700GS/bf4VKRmm1+imj3cAldUm2RF3VdI0U9/04yX
Mj+VBOmevM0i7R/0d6xUFTH3zj99xxeLI2J6A=
-----END OPENSSH PRIVATE KEY-----

# cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIJiwIymcly4s66pza/IL3ZNyT5CiMPj0R+/LnMDmABU root@f46f23bbad55

2. puttygen.exe Windowsでed25519秘密鍵(.ssh/id_ed25519

秘密鍵をロードできませんでした(認識できない暗号名)

14
takaomag

2019-03-20の更新:https://www.chiark.greenend.org.uk/~sgtatham/PuTTY/releases/ 0.71.html これらのキーをサポート

ssh-keygen -t ed25519 -f test-key-for-stackoverflow

puttygen 0.71 importing an ed25519 key successfully

これを書いている時点では、 https://www.chiark.greenend.org.uk/~sgtatham/PuTTY/snapshot.html のputtygenスナップショットは、0.70ではサポートされていなかったこれらのキーをサポートしているようです。変更ログには明示的に記載されていません。

テストしたDevelopment snapshot 2019-01-17.53747ad

8
Adam Baxter

上記の答えのコマンドは、RFC4716形式で公開キー部分を印刷するだけです。

ある時点で、ssh-keygenは、puttygenがサポートする暗号を使用しないopenssh秘密鍵を生成します。

ssh-keygenは、結果のopenssh秘密鍵を暗号化する暗号名を指定するオプションを提供しません。

回避策があります。puttygenにインポートする前に、キーからパスフレーズを削除してください。

$ cp ~/.ssh/id_ed25519 ~/.ssh/id_ed25519-for-PuTTY

$ ssh-keygen -p -f ~/.ssh/id_ed25519-for-PuTTY
Enter old passphrase: <your passphrase>
Enter new passphrase (empty for no passphrase): <press Enter>
Enter same passphrase again: <press Enter>

次に、puttygenを使用して〜/ .ssh/id_ed25519-for-PuTTYを.ppkに変換し、puttygenからパスフレーズを設定します。

明確な理由で、後で〜/ .ssh_id_ed25519-for-PuTTYを細断して削除することを忘れないでください。

14
mydeardiary

キーをputtygenにインポートする前に、キーをRFC4716形式にエクスポートする必要があります

$ ssh-keygen -e -m RFC4716 -f ~/.ssh/id_ed25519 > ~/.ssh/exported_id_ed25519

次に、結果のエクスポートされたid_ed25519をputtygenにインポートし、キーを.ppkに変換します

6
mydeardiary

実際、この問題はEd25519自体を扱っていません。新しいopenssh形式が原因で発生します。以下はman ssh-keygenは、-oオプションについて示しています。

-o ssh-keygenは、より互換性のあるPEM形式ではなく、新しいOpenSSH形式を使用して秘密鍵を保存します。新しい形式は、ブルートフォースパスワードクラッキングに対する耐性を高めていますが、6.5より前のOpenSSHのバージョンではサポートされていません。 Ed25519鍵は常に新しい秘密鍵形式を使用します。

新しい形式では、秘密キーファイルを数回(通常は約100回)暗号化して、キー派生関数(KDF)を使用して、復号化を遅くします。 bcrypt KDFを使用した新しい形式に関する詳細の検索は、次のリンクから開始できます。 https://pthree.org/2014/12/08/super-size-the-strength-of-your-openssh-private-キー/

rsaまたはdsaタイプの秘密鍵に-oオプションを付けてssh-keygenを試してみると、puttygenもこれらを解析できないことがわかります。そして、manページで見ることができるように、Ed25519ではputtygenを選択する選択肢はありません。

いくつかの苦労の末、今ではputtygenで作成されたキーを使用していますが、KDFのメリットを得ることができないのではないかと心配しています。

4
Jang Whe-moon