4

У меня проблемы с преобразованием закрытого ключа из формата ssh.com в формат замазки. При импорте закрытого ключа я столкнулся со следующей ошибкой.

Не удалось загрузить закрытый ключ (ключ не начинается с магического номера).

Я не могу понять, что не так с ключом. Я сгенерировал другой пример ключа с той же проблемой ниже, который явно не используется ни для чего и без ключевой фразы. Я был бы признателен за любую помощь от кого-либо. Заранее спасибо.

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

2 ответа2

4

Закрытый ключ, похоже, не в формате ssh.com - его заголовки - ложь.

Первые несколько букв, MII… , декодируются в байты 30 82 , что является началом "последовательности" в формате DER формата ASN.1 - и SSH.com не использует ASN.1 в своем формате ключей, а OpenSSL/OpenSSH - для незашифрованных ключей RSA.

(Однако, если бы у ключа была фраза-пароль, его нельзя было бы узнать таким образом. Смотрите также примечание в конце.)

Для сравнения, ключи SSH.com, скорее всего, начинаются с P2/56… или байтов 3f 6f f9 eb … . Это то, что означают слова "магические числа": многие форматы распознаются по определенным байтам в начале - иногда определяются в спецификации формата, иногда просто как побочный эффект структур данных.

Поэтому, если вы проигнорируете заголовки текста и попытаетесь декодировать основной блок данных с помощью Base64, вы обнаружите структуру ASN.1, точно такую же, как в OpenSSL для своих старых закрытых ключей в формате "голого RSA". Это тот же формат, который 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

Однако с зашифрованными ключами заголовки, которых ожидает OpenSSL, несколько отличаются - в частности, заголовок DEK-Info: содержит алгоритм шифрования и соль (или это IV?) это было использовано для шифрования данных. Без него вы не сможете расшифровать ключ, даже если знаете пароль.

Таким образом, описанные выше шаги будут работать только в том случае, если ключевая фраза ключа будет удалена заранее.

1

Я наконец понял, что не так. Видимо, ключи имеют формат F-Secure FSCLM Private Key Format. Приложение keygen было включено в папку приложения, которое можно использовать для преобразования ключа в правильный формат, который может быть прочитан Puttygen.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .