mostra valores de uma chave privada ed22519 armazenada no formato OpenSSH

0

(note que esta questão usa 'openssh' e 'openssl' no texto, não estou confundindo os dois.)

Se eu usar openssh para um par de chaves RSA (ssh-keygen), então eu posso usar 'openssl rsa -in ...' para visualizar os parâmetros chave (módulo, expoentes, primos, etc.).

Se eu gerar uma chave RSA, mas armazená-la usando o formato openssh (usando a opção -o para ssh-keygen), não será possível ler diretamente esse arquivo pelo openssl. Primeiro uso ssh-keygen -p -f e removo a senha. O arquivo resultante é uma "chave privada RSA". Então eu posso prosseguir da maneira usual com o openssl para visualizar os parâmetros.

Usando os comandos 'ec' e 'ecparam' do openssl, posso gerar arquivos e visualizar os parâmetros que compõem as chaves EC.

Se eu gerar um par de chaves ed25519 usando ssh-keygen -t ed25519, recebo um arquivo com o formato "OPENSSH PRIVATE KEY".

Obviamente se eu usar 'ssh-keygen -p ...' como acima neste arquivo eu nunca irei obter uma saída 'RSA' porque ela não é uma chave RSA.

Então, como posso obter meu arquivo "OPENSSH PRIVATE KEY" gerado pelo ssh-keygen usando o ed25519 em um formato tal que eu possa ver os parâmetros?

openssl Os comandos EC produzem arquivos como "BEGIN EC PARAMETERS" e "BEGIN EC PRIVATE KEY".

Então, existe um método para ver os parâmetros ed25519 na chave privada OPENSSH? ou um método para transformar esse formato de arquivo em um dos formatos EC que o openssl entende?

    
por r.l. 01.09.2018 / 07:30

1 resposta

0

Você não pode converter uma chave OpenSSH ed25519 em um formulário suportado pelo OpenSSL, porque o OpenSSL não suporta (no dia em que escreve esta resposta) nenhuma forma armazenada da chave ed25519 nem os algoritmos Ed25519 (ou EdDSA). Ele suporta X25519 para troca de chaves TLS, mas usa apenas chaves transitórias, portanto não precisa de nenhum formato de armazenamento.

O Ed25519 não requer nenhum parâmetro, e o formato de arquivo-chave OpenSSH não armazena nenhum para ele; O Ed25519 é definido como EdDSA instanciado (parametrizado) para a curva 25519 de Bernstein (na forma Edwards), que define todos os parâmetros necessários. Veja RFCs 8032 e 7748 para detalhes.

Os paretros e estruturas chave EC utilizados pelo OpenSSL s os definidos por X9 e SECG (isto Certicom), que suportam apenas curvas elticas com equaes expressas na forma curta Weierstrass. Embora a curva 25519 possa ser expressa na forma Weierstrass, X25519 e Ed25519 não o fazem; eles usam formulários Montgomery e Edwards, por razões discutidas em alguma extensão nos documentos no site da Bernstein, e em qualquer caso o algoritmo EdDSA é diferente do algoritmo ECDSA, então mesmo se você usar o Weierstrass- curva de forma não é interoperável.

Se você não quiser usar a chave com o OpenSSL, mas apenas gostaria de saber o que é, ssh-keygen -y já gera a chave pública na forma preferida do OpenSSH, que é o nome de tipo em ASCII ssh-ed25519 mais o codificação base64 do formato do fio (SSH2), que por sua vez é de 4 bytes de comprimento + tamanho do bloco de notas + comprimento de 4 bytes + chave pública de 32 bytes. Se você realmente quer a chave privada, você pode primeiro descriptografar o arquivo com ssh-keygen -p (certificando-se de não colocar qualquer cópia onde um malfeitor possa obtê-la), e descartar com, por exemplo, %código%; o blob de chave pública começa no deslocamento 053 com comprimento 063 octal (veja acima para o conteúdo), e a parte normalmente, mas não agora criptografada começa no deslocamento 0142 com tamanho 0210 idem que é 8 bytes de verificação, então o 'blob' privado 'que tem 4 bytes de comprimento + 32 bytes de cópia da chave pública + 4 bytes de comprimento + 64 bytes API' secret 'chave dos quais apenas 32 bytes são realmente a chave privada e o resto é outra (!) cópia da chave pública, então 4 bytes length + comment.

    
por 01.09.2018 / 14:42