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.