AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1470852
Accepted
Vicfred
Vicfred
Asked: 2019-08-14 04:34:12 +0800 CST2019-08-14 04:34:12 +0800 CST 2019-08-14 04:34:12 +0800 CST

Diferenças entre chaves privadas ssh-keygen e libressl?

  • 772

Gerei uma chave privada usando libressl 3.0 usando curve secp521r1.

openssl genpkey -aes128 -algorithm EC -pkeyopt ec_paramgen_curve:secp521r1 -pkeyopt ec_param_enc:named_curve

Tanto quanto eu sei, esta curva é a mesma que o ssh-keygen usa com ssh-keygen -t ecdsa -b 521e da documentação que eu sei que o ssh-keygen agora usa aes128 para criptografar a chave privada.

O tamanho da chave privada libressl é 534e o tamanho da chave ssh-keygen é 736.

Minha pergunta é: o que o ssh-keygen faz extra que incrementa o tamanho da chave?

Além disso: ambos são permutáveis? uma chave privada gerada em um pode ser convertida para o outro?

openssl public-key
  • 1 1 respostas
  • 945 Views

1 respostas

  • Voted
  1. Best Answer
    dave_thompson_085
    2019-08-15T06:54:53+08:002019-08-15T06:54:53+08:00

    TLDR: existem muitos formatos diferentes para arquivos de chave privada

    E depende em parte da versão do OpenSSH, que você não forneceu.

    Historicamente, exceto para o protocolo obsoleto versão 1 (e tipo de chave 'rsa1'), OpenSSH usado (a parte libcrypto de) OpenSSL para fazer a maioria de suas operações criptográficas - incluindo armazenar chaves privadas (ou pares de chaves em vigor) em arquivos, usando os formatos 'tradicionais' ou 'legados' definidos por SSLeay/OpenSSL . OpenSSL também suporta 'novos' (desde cerca de 1998!) Formatos PKCS8, que são (um pouco) mais seguros. Existem, portanto, 4 formatos PEM suportados pelo OpenSSL para "ECDSA" (mais exatamente estilo Weierstrass EC X9 que abrange X9.62 ECDSA e X9.63 ECDH) dos quais o OpenSSH gera apenas 2, mas (usando libcrypto) pode ler todos. Quando ssh-keygencriptografa arquivos no formato OpenSSL , as versões recentes usam AES-128-CBC, mas isso nem sempre foi verdade.

    A partir da versão 6.5 em 2014-01, o OpenSSH adicionou seu próprio 'novo' formato de arquivo , em parte para fornecer melhor segurança do que os formatos legados do OpenSSL (quando criptografados) e em parte para oferecer suporte ao novo algoritmo Ed25519, que o OpenSSL não suportava. de forma alguma. ssh-keygentinha a opção -ode solicitar um novo formato para qualquer tipo de chave diferente de ed25519 (ou rsa1), e você encontrará muitos Stack Qs e As dos últimos anos fazendo referência e geralmente recomendando essa opção. Arquivos de formato 'novo' são criptografados com AES256-CBC por padrão, que pode ser substituído por -Z ciphername, mas a página do manual aparentemente não foi atualizada para nenhum deles. A partir da versão 7.8 em 2018-08, o OpenSSH agora tem como padrão o formato 'novo' para todos os tipos de chave, embora você possa usar-m pempara solicitar o formato OpenSSL para qualquer coisa diferente de ed25519. Se você verificar man ssh-keygenseu sistema (a menos que seja Windows), ele deve descrever um desses casos, provavelmente o último.

    (Também existe o formato PKCS12, também conhecido como PFX, que o OpenSSL pode usar para uma chave privada, mas normalmente é usado apenas para combinar uma chave privada (ou várias) com um ou mais certificados X.509 para essa(s) chave(s) , que é uma situação diferente e não aplicável ao SSH, que nunca usa certificados X.509. Outros programas ou sistemas usam outros formatos: 'comercial'/Tectia SSH tem formato próprio e PuTTY tem formato próprio PPK = PuTTY Private Key . Et cetera, et cetera, Yul Brynner. Todos estes são semanticamente equivalentes e, dadas as ferramentas adequadas, podem ser interconvertidas.)

    Todos os formatos de chave privada usados ​​pelo OpenSSH são do estilo PEM ; os dados binários são codificados em texto como base64 com linhas de cabeçalho e trailer no formato

    -----BEGIN (something)-----
    (sometimes some headers here)
    (data encoded in base64, broken into lines of 64 characters)
    -----END (something)-----
    

    então você pode dizer qual formato você tem apenas olhando para aquela linha de traços-BEGIN. Consulte near-crossdupes https://security.stackexchange.com/questions/39279/stronger-encryption-for-ssh-keys ou mais brevemente https://security.stackexchange.com/questions/129724/how-to-check- if-an-ssh-private-key-has-passphrase-or-not e https://security.stackexchange.com/questions/200935/how-do-i-determine-if-an-existing-ssh-private- chave-está-segura (minha).

    As diferenças: o tamanho de 736 caracteres para uma chave ecdsa-p521 corresponde ao novo formato OpenSSH não criptografado - você tem certeza de que forneceu uma frase secreta? -- e 534 corresponde ao formato criptografado PKCS8 criado pelo OpenSSL 1.0.2, que é o IIRC quando o LibreSSL bifurcou. (OpenSSL 1.1.0 up altera a criptografia PKCS8 para usar HMAC-SHA256 em PBKDF2, o que torna o arquivo um pouco maior. OpenSSL 1.1.0 up também torna param_enc=named o padrão, então você não precisa mais especificá-lo.) O novo OpenSSH formato é maior que o formato PKCS8-enc principalmente porque, sem nenhuma razão óbvia, ele armazena o valor da chave pública (para ECDSA, um ponto de curva no formato X9.62) duas vezes -- uma vez na seção do arquivo especificada para chave pública e novamentena seção especificada para privatekey. Além disso, o formato OpenSSH tem a maioria de seus metadados como strings de texto e todos os campos de comprimento de 4 bytes, enquanto o PKCS8 (como os formatos legados do OpenSSL) usa ASN.1 com campos de comprimento variável na maioria apenas 1 byte e metadados principalmente binários, especialmente 'OIDs' para os algoritmos usados.)

    Além disso: ambos são permutáveis? uma chave privada gerada em um pode ser convertida para o outro?

    Sim e não. Como observado, o OpenSSH usando OpenSSL pode ler (mas não gravar) PKCS8, portanto, ssh-keygenpode convertê-lo em OpenSSH-novo fazendo uma alteração nula, ou seja, 'alterando' a senha para o valor existente; de 6,5 a 7,7 você deve especificar -oe de 7,8 em diante é o padrão. Indo para o outro lado, ssh-keygenpode converter para OpenSSL legado, mas não diretamente para PKCS8, você precisa usar opensslpara fazer isso, explicitamente com pkcs8 -topk8ou em 1.0.0 acima (que agora deve ser todo mundo e definitivamente todo LibreSSL) apenas pkey. (O primeiro padrão é criptografado e o segundo não criptografado, mas ambos podem ser substituídos.)

    • 4

relate perguntas

  • Como resolver: AVISO: derivação de chave obsoleta usada. Usar -iter ou -pbkdf2 seria melhor

  • Suporte OpenSSL para ed25519, criptografando conteúdo?

  • Como posso verificar se um arquivo de certificado SSL corresponde ao arquivo de chave?

  • Gerando assinatura JWT RS256 com openssl

  • Carregar chave “ec256.pem”: formato inválido é lançado ao tentar gerar chave pública a partir de chave privada

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    Serviço do Windows 10 chamado AarSvc_70f961. O que é e como posso desativá-lo?

    • 2 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Marko Smith

    ssl.SSLCertVerificationError: falha na verificação do certificado [SSL: CERTIFICATE_VERIFY_FAILED]: não foi possível obter o certificado do emissor local (_ssl.c:1056)

    • 4 respostas
  • Marko Smith

    Como posso saber em qual unidade o Windows está instalado?

    • 6 respostas
  • Martin Hope
    Albin Como faço para ativar o WindowsXP agora que o suporte acabou? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch O Windows 10 exclui muitos arquivos minúsculos muito lentamente. Algo pode ser feito para agilizar? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Como Ctrl+C e Ctrl+V funcionam? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve