Como as chaves SSH diferem das chaves assimétricas usadas para outros fins?


13

Como as chaves SSH diferem das chaves assimétricas usadas para outros fins, por exemplo, assinatura de email?

Sou solicitado a perguntar isso, em parte, porque no OS X há aplicativos disponíveis para gerenciar chaves SSH (ssh-agent, SSHKeychain, etc), bem como aplicativos projetados para gerenciar chaves GPG (GPG Keychain Access, etc), e aparentemente os dois não se conhecem. No entanto, não acredito que esse seja um problema específico do OS X.

Essa separação de preocupações ocorre porque as chaves são de tipos bastante diferentes, ou porque são armazenadas em locais diferentes, ou por alguma outra razão ou combinação de razões, por exemplo, razões históricas?

Respostas:


14
  • As chaves SSH são apenas pares simples de chaves assimétricas RSA, DSA ou ECDSA. Esse par de chaves gerado pelo OpenSSH já pode ser usado pelo OpenSSL e pela maioria dos outros programas.

    (O .pubarquivo gerado por ssh-keygenestá no formato específico do OpenSSH, mas isso é irrelevante, pois o arquivo "privado" já contém chaves públicas e privadas.)

    Outros softwares SSH podem ter seus próprios formatos de armazenamento, como o RFC 4716 ou o PPK do PuTTY , mas armazenam as mesmas informações RSA / DSA / ECDSA.

  • X.509 (usado por SSL, S / MIME) é um pouco mais complicado: a chave "privada" ainda é a mesma, mas, em vez de um arquivo de chave pública, você tem um "certificado" - uma estrutura ASN.1 que contém o chave pública, nomes de assunto e emissor, datas de validade. Nos certificados X.509 v3, extensões como "uso de chave" e "nome de assunto alternativo" estarão presentes. O certificado inteiro é assinado pela chave do emissor (ou autoassinado se não houver um emissor separado).

    Você pode usar facilmente um arquivo "chave privada" X.509 para SSH - o OpenSSH ainda usa o mesmo formato.

    Você pode criar um certificado X.509 a partir de um simples par de chaves e, em seguida, autoassiná-lo ou criar uma "solicitação de certificado" e enviá-lo para ser assinado por uma CA (autoridade de certificação).

    Para exibir as informações em um certificado X.509, use:

    certtool -i < foo.pem
    certtool -i --inder < foo.crt
    
    openssl x509 -noout -text < foo.pem
    openssl x509 -noout -text -inform der < foo.crt
    

    ( certtoolfaz parte do GnuTLS.)

  • As teclas OpenPGP (usadas pelo GPG) são as mais complicadas. O que você chama de "chave PGP" ou "par de chaves PGP" é uma estrutura complexa chamada "certificado OpenPGP", que contém:

    • uma "chave primária" - um par de chaves assimétrico, geralmente usado para assinar
    • um ou mais "IDs do usuário" - rótulos textuais, geralmente na forma de "Nome <endereço @ email>"
      • pelo menos um deles está marcado como "ID principal do usuário"
      • para cada ID de usuário, uma "autoassinatura" - assinatura por sua própria chave primária
      • para cada ID de usuário, zero ou mais "assinaturas" de outros usuários
      • os pacotes de autoassinatura também contêm seus algoritmos preferidos (SHA-1, AES etc.)
    • uma ou mais "subchaves" - pares de chaves adicionais, o primeiro geralmente é para criptografia
      • para cada subchave, uma assinatura pela chave primária
    • zero ou mais "IDs com foto" - anexos JPEG ou PNG que contêm seu rosto
      • assinado da mesma maneira que os IDs de usuário
    • zero ou mais certificados X.509

    Todos os pares de chaves têm datas de validade e bits de uso: assinar dados, certificar (assinar) chaves, criptografar, autenticar nos serviços. A chave primária, por padrão, possui bits "sign" e "certify" e a primeira subchave é "criptografar". Se você adicionar uma subchave "autenticação", poderá usá-la gpg-agentpara autenticação SSH.

    Para ver o que o seu certificado contém:

    gpg --export joe@example.com | gpg -vv
    
    gpg --export joe@example.com | certtool --pgp-certificate-info
    

    ( certtoolfaz parte do GnuTLS.)


Os certificados X.509 e suas chaves privadas associadas vêm em vários formatos:

  • DER é uma codificação binária de uma estrutura ASN.1 do certificado. Esses arquivos geralmente têm extensões de nome .crtou .cerarquivo ( .deré menos comum, mas não é invisível).

  • Os arquivos no formato "PEM" contêm os mesmos dados codificados em DER, mas adicionalmente codificados usando o Base64 e entre os cabeçalhos "BEGIN THIS" e "END THAT". Uma extensão de nome de arquivo comum é .pem, embora ambos .crte .ceràs vezes também sejam usados ​​aqui (mas nunca .der).

  • Para chaves privadas pertencentes aos certificados, geralmente é usado o formato "PEM" - Base64 entre os cabeçalhos "BEGIN PRIVATE KEY" (chave em uma estrutura PKCS # 7) ou "BEGIN RSA (ou DSA) PRIVATE KEY" (chave simples, OpenSSL formato). Às vezes, a chave está em um .keyarquivo separado , às vezes é fornecida com o certificado.

  • O PKCS # 12 e o PFX um pouco mais antigo são contêineres criptografados que armazenam o certificado e a chave privada (geralmente também o certificado do emissor). Esse formato é usado pela maioria dos softwares ao exportar ou "fazer backup" de certificados com chaves privadas.

Uma situação menos confusa está no OpenPGP: todos os dados seguem o mesmo formato binário e, opcionalmente, são "blindados" (codificados com Radix64 e entre cabeçalhos do tipo PEM).


2

Armazenados em locais diferentes e em formatos diferentes (os formatos usados ​​pelo PGP, GnuPG sshe vários formatos X.509 diferentes, entre outros, são bem diferentes). É possível transcodificar entre eles, em certa medida, misturando e combinando as opções certas para ssh-keygen, pgp, gpg/ gpg2, openssletc .; mas em geral não vale a pena o esforço. Além disso, diferentes formatos de chave suportam diferentes quantidades de informações, comsshcarregando o mínimo de informações extras e os formatos X.509 PEM e DER com o máximo. Além disso, o OSX Keychain é simplesmente armazenamento de chave / valor criptografado, portanto, geralmente é necessário um mecanismo diferente para cada aplicativo para converter entre o formato de chave nativa do programa + metadados e algo que pode ser armazenado no Keychain. (Preocupações semelhantes se aplicam à carteira do KDE e ao chaveiro GNOME.)


É importante observar que o padrão de criptografia subjacente também é diferente. O gpg usa principalmente o DSA, enquanto o SSH usa principalmente o RSA. Há um número limitado de padrões assimétricos padrão, e a maioria dos aplicativos suporta vários padrões, mas os padrões 'normais' para diferentes aplicativos variam.
Jcrawfordor
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.