Não é possível converter a chave ssh.com para o formato ppk usando Puttygen

3

Estou tendo problemas ao converter uma chave privada do formato ssh.com para o formato de massa de modelar. Após a importação da chave privada, recebo o seguinte erro.

Couldn't load private key (key does not begin with magic number).

Não consigo descobrir o que há de errado com a chave. Eu criei outra chave de amostra com o mesmo problema abaixo que não é usado para qualquer coisa obviamente e sem passphrase. Eu apreciaria qualquer ajuda de qualquer um. Agradecemos antecipadamente.

---- 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 ----
    
por wakaka 16.05.2014 / 07:29

2 respostas

1

Eu finalmente descobri o que está errado. Aparentemente, as chaves estão no formato chamado F-Secure FSCLM Private Key Format. Um aplicativo keygen foi incluído na pasta de aplicativos que pode ser usada para converter a chave no formato correto que pode ser lido por Puttygen.

    
por 19.05.2014 / 07:25
3

A chave privada não parece estar no formato ssh.com - seus cabeçalhos são mentirosos.

As primeiras letras, MII… , decodificam para bytes 30 82 , que é o início de um formato DER ASN.1 "sequence" - e o SSH.com não usa ASN.1 em seu formato de chave, < strong> mas o OpenSSL / OpenSSH faz, para chaves RSA não criptografadas.

(No entanto, se a chave tiver uma frase secreta, ela não será reconhecida dessa maneira. Veja também a nota no final.)

Em comparação, as chaves SSH.com provavelmente começarão com P2/56… , ou bytes 3f 6f f9 eb … . Esse tipo de coisa é o que as palavras "números mágicos" significam: muitos formatos são reconhecíveis por bytes específicos no início - às vezes definidos na especificação de formato, às vezes apenas um efeito colateral das estruturas de dados.

Portanto, se você ignorar os cabeçalhos de texto e tentar decodificar o principal blob dos dados, você encontrará uma estrutura ASN.1 exatamente como o OpenSSL usa para suas antigas chaves privadas no formato "bare RSA". Este é o mesmo formato que o OpenSSH usa para a maioria dos tipos de chaves privadas.

# 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.]

Como você pode ver, o OpenSSL o reconhece como seu próprio formato, contendo parâmetros RSA não criptografados.

Você pode "recuperar" essa chave:

  1. removendo as duas linhas ---- e a linha Comment:

  2. adicionando -----BEGIN RSA PRIVATE KEY----- no topo

  3. adicionando -----END RSA PRIVATE KEY----- na parte inferior

  4. dizendo ao PuTTYgen para importá-lo como uma chave privada OpenSSH

No entanto, com as chaves criptografadas , os cabeçalhos que o OpenSSL espera são um pouco diferentes - em particular, o cabeçalho DEK-Info: contém o algoritmo de criptografia e o sal (ou é o IV?) que foi usado para criptografar os dados. Sem isso, você não pode descriptografar a chave, mesmo que você saiba a frase secreta.

Assim, os passos acima só funcionarão se a frase secreta da chave for removida previamente.

    
por 16.05.2014 / 16:02