秘密鍵をssh.com形式からPuTTY形式に変換する際に問題が発生します。秘密鍵をインポートすると、次のエラーが発生します。
秘密鍵を読み込めませんでした(鍵がマジックナンバーで始まっていません)。
キーのどこが悪いのかわかりません。以下の同じ問題で、パスフレーズなしで明らかに何にも使用されていない別のサンプルキーを生成しました。どなたかご協力いただければ幸いです。前もって感謝します。
---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----
Comment: "[2048-bit rsa, Fri May 16 2014]"
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDe7GR0INPoKwedwq8XjY
CRO/2Zwl9ssRj1vqiF4BtUdP9Dgz79gZIoaOHGKxtTj0cesBkdcrvbU5rGbqidOfn7RPjo
AeX8L817bRbk276PYh823pEnclPlTUBJDzfP5IK1u7Gbp35YlZnEcXFbaMF8vcBQ6tr+/i
R8Z2akeNmDYTW8U9Xi+MPYeXxwSoI9cQrPztqzlkCschhgM1GAthkEjBRGQi4T9DuzwGgF
R0hx+n5TqIHcoMyBZAP/Lq9wEZsmWO/rboqxDNhgaR3ID3zL7mqp7vN9hZ/q19wG4QAZbH
yEExMHkZmwTipk0gUQCPf5AJYAbPrGLuGWqICG+349AgMBAAECggEAIk0tEtpnSPLwD9Qg
VYcyOIbK2bE5NjQU82FUNI9cnTUIfzavh1n756hlzzScVpH2H1B4+NlJ8zBs4SovW0wLvW
BqTWbXYOPpIhwR2QLAEneGdo6uNqvmoWKu6N8E10Ih471fEaSm8hII8FuFVgurNBrNgBX3
PyPTcOoHNvkafRa7Uv89HgoENo1lQRD01bA6Rj7nTIV4L3gffZgHOoxMVmFprLY8GPbPrO
Y9/ecbbFdM5Xd5bN20swJ9ekXJIrhtQl7mgRdvk0tVVbpkb6uAxhPiw4k/+imrNJXk8goK
LJ9Km8DVfIacsqxGg/oQdtQT90Xi/2CE3wYWStUwwqCCoQKBgQD5yqZWe1lwPBj4Bp0Lxb
xXncazi+7tYHNrBaooYD5HEW5t1s5iU6nsd1UtXlOAccjvSAK1Ng7dr7JQz+zdmWFYHsfF
Qh+RwVPoaj4dnJ3EJt7wpcW4jt1B6FFxnXW5A58tRk78qFGTjIJH/DFfVUMsKkESljLjN9
JUkS+c9xVTXQKBgQDkdsnLQF89QbHt2UNm7XhybGV4oJE3FOysTqxzrXY+JAqNUahc2miX
dEU6lcNrM/6g0LrQxgumvhDcMg/bFDqvwDI+qNPiMOJyXLjd6Nhj+UF9xn9w7kXvliLwek
Nb4o37/iF6EsJbZFKAkg4/Qt93eovLgT0wbVQyeJrlybwIYQKBgHHcFqAbD7SiIDuGQDWq
h2RkrbsP0PPw4AtrhJls7VZVssFshZy6SB1ac7//XA6TTyUK7PkO0A3q1VwSuwRzsrSJK0
RWFK/KsOWi7/dteVh842hMF+k9bctqCx2/yXZxGTB4+O4gBzc7d/M6GIM9CSZriEfhoQaD
XmNf3pUs51KdAoGAOn/EKfwgpuHEep+wJ5HUzo+858dNh6oe8/vtIm2fIkg+P3NSRfxS3b
0S4O5qLHAS2gC4ZS7g2uA+FvPmpXUnlcsD0pGON5PG1/uwBnpRtj+jql4CUdthIvjxl1vn
FYcMTiMDVWuqQpaMnYlIhqBL8h753rEIBvdnoMjK+N3P/OECgYA2jMJaFtoKVjA6oUXj56
uDLe09I17VV5mq46HjjMUPlU9HuGF3d5U5a54NMq3beFLiVHdhC1M4s8UWv/vuXgmPrAmo
knD4thxCbu7iuBx5oI9C5zPvBT4hmH3LMVp/iEFO7nmBcSe3PjnaYCn8/LAs38F5oxaTLN
mHTVR7pcw89w==
---- END SSH2 ENCRYPTED PRIVATE KEY ----
私はついに何が悪いのかを理解しました。どうやら、キーはF-SecureFSCLM秘密キーフォーマットと呼ばれるフォーマットになっています。 keygenアプリケーションは、Puttygenが読み取ることができる正しい形式にキーを変換するために使用できるアプリケーションフォルダーに含まれていました。
秘密鍵はssh.com形式ではないようです–そのヘッダーは嘘です。
最初の数文字MII…
は、バイト30 82
にデコードされます。これは、DER形式のASN.1「シーケンス」の開始です。SSH.comは、キー形式でASN.1を使用しません。 ただし、OpenSSL/OpenSSHは行います暗号化されていないRSAキーの場合。
(ただし、キーにパスフレーズが含まれている場合、この方法では認識できません。最後の注も参照してください。)
比較すると、SSH.comキーはP2/56…
またはバイト3f 6f f9 eb …
で始まる可能性が最も高いです。この種のことは、「マジックナンバー」という言葉の意味です。多くのフォーマットは、最初の特定のバイトによって認識されます。フォーマット仕様で定義されることもあれば、データ構造の副作用にすぎないこともあります。
したがって、テキストヘッダーを無視して、データのメインBLOBをBase64でデコードしようとすると、OpenSSLが古い「ベアRSA」形式の秘密鍵に使用するのとまったく同じASN.1構造が見つかります。これは、OpenSSHがほとんどの秘密鍵タイプに使用するのと同じ形式です。
# cat key.txt | sed "/^---- /d; /^Comment:/d" | base64 -d > key.raw
# dumpasn1 key.raw
0 1212: SEQUENCE {
4 1: INTEGER 0
7 13: SEQUENCE {
9 9: OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1)
20 0: NULL
: }
22 1190: OCTET STRING, encapsulates {
26 1186: SEQUENCE {
30 1: INTEGER 0
33 257: INTEGER
: 00 DE EC 64 74 20 D3 E8 2B 07 9D C2 AF 17 8D 80
: 91 3B FD 99 C2 5F 6C B1 18 F5 BE A8 85 E0 1B 54
: 74 FF 43 83 3E FD 81 92 28 68 E1 C6 2B 1B 53 8F
: 47 1E B0 19 1D 72 BB DB 53 9A C6 6E A8 9D 39 F9
[etc.]
294 3: INTEGER 65537
[etc.]
# openssl rsa -in key.raw -inform DER -noout -text
Private-Key: (2048 bit)
modulus:
00:de:ec:64:74:20:d3:e8:2b:07:9d:c2:af:17:8d:
80:91:3b:fd:99:c2:5f:6c:b1:18:f5:be:a8:85:e0:
[etc.]
publicExponent: 65537 (0x10001)
privateExponent:
22:4d:2d:12:da:67:48:f2:f0:0f:d4:20:55:87:32:
38:86:ca:d9:b1:39:36:34:14:f3:61:54:34:8f:5c:
[etc.]
[etc.]
ご覧のとおり、OpenSSLは、暗号化されていないRSAパラメーターを含む独自の形式として認識します。
このキーは、次の方法で「回復」できます。
----
行とComment:
行の両方を削除します
上部に-----BEGIN RSA PRIVATE KEY-----
を追加
下部に-----END RSA PRIVATE KEY-----
を追加
puTTYgenにそれをOpenSSH秘密鍵としてインポートするように指示する
ただし、encryptedキーを使用すると、OpenSSLが期待するヘッダーは多少異なる –特にDEK-Info:
ヘッダーになります。暗号化アルゴリズムと、データの暗号化に使用されたソルト(またはIVですか?)が含まれています。これがないと、パスフレーズを知っていてもキーを復号化できません。
したがって、上記の手順は、キーのパスフレーズが事前に削除されている場合にのみ機能します。