web-dev-qa-db-ja.com

Puttygenを使用してssh.comキーをppk形式に変換できません

秘密鍵を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 ----
5
wakaka

私はついに何が悪いのかを理解しました。どうやら、キーはF-SecureFSCLM秘密キーフォーマットと呼ばれるフォーマットになっています。 keygenアプリケーションは、Puttygenが読み取ることができる正しい形式にキーを変換するために使用できるアプリケーションフォルダーに含まれていました。

2
wakaka

秘密鍵は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パラメーターを含む独自の形式として認識します。

このキーは、次の方法で「回復」できます。

  1. ----行とComment:行の両方を削除します

  2. 上部に-----BEGIN RSA PRIVATE KEY-----を追加

  3. 下部に-----END RSA PRIVATE KEY-----を追加

  4. puTTYgenにそれをOpenSSH秘密鍵としてインポートするように指示する

ただし、encryptedキーを使用すると、OpenSSLが期待するヘッダーは多少異なる –特にDEK-Info:ヘッダーになります。暗号化アルゴリズムと、データの暗号化に使用されたソルト(またはIVですか?)が含まれています。これがないと、パスフレーズを知っていてもキーを復号化できません。

したがって、上記の手順は、キーのパスフレーズが事前に削除されている場合にのみ機能します。

3
user1686