Como, se de fato, as chaves SSH diferem das chaves assimétricas usadas para outras finalidades?

13

Como, se de fato, as chaves SSH diferem das chaves assimétricas usadas para outras finalidades, por exemplo, assinatura de e-mail?

Eu 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 nunca os dois se encontram. No entanto, não acredito que seja um problema específico do OS X.

É essa separação de interesses porque as chaves são de tipos bem diferentes, ou porque são armazenadas em lugares diferentes, ou por alguma outra razão ou combinação de razões, por exemplo? razões históricas?

    
por sampablokuper 22.04.2011 / 06:13

2 respostas

14
  • As chaves SSH são simplesmente pares 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 arquivo .pub produzido por ssh-keygen está no formato específico do OpenSSH, mas isso é irrelevante, pois o arquivo "privado" já contém chaves privadas e públicas.)

    Outro software de SSH pode ter seus próprios formatos de armazenamento, como RFC 4716 ou o PuTTY PPK , mas eles 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 simples você tem um "certificado" - um ASN.1 estrutura contendo a chave pública, nomes de entidade e emitente, datas de validade. Nos certificados X.509 v3, extensões como "uso de chave" e "nome de assunto alternativo" estarão presentes. Todo o certificado é assinado pela chave do emissor (ou auto-assinado se não houver um emissor separado).

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

    Você pode criar um certificado X.509 a partir de um par de chaves simples e assiná-lo automaticamente, ou pode 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
    

    ( certtool faz parte do GnuTLS.)

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

    • uma "chave primária" - um par de chaves assimétricas, geralmente usado para assinar
    • um ou mais "IDs de usuário" - rótulos textuais, geralmente na forma de "Nome < email @ address >"
      • pelo menos um deles está marcado como "ID do usuário principal"
      • para cada ID de usuário, uma "assinatura própria" - assinatura por sua própria chave primária
      • para cada ID de usuário, zero ou mais "assinaturas" por outros usuários
      • os pacotes de assinatura própria 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 principal
    • zero ou mais "IDs de foto" - anexos em JPEG ou PNG contendo seu rosto
      • assinado da mesma forma que os IDs de usuário
    • zero ou mais certificados X.509

    Todos os keypairs têm datas de expiração e bits de uso: assinam dados, certificam (assinam) chaves, criptografam, autenticam para serviços. Por padrão, a chave primária tem bits "assinar" e "certificar" e a primeira subchave é "criptografar". Se você adicionar uma subchave "autenticação", poderá usá-la por meio de gpg-agent para autenticação SSH.

    Para ver o que seu certificado contém:

    gpg --export [email protected] | gpg -vv
    
    gpg --export [email protected] | certtool --pgp-certificate-info
    

    ( certtool faz 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 .crt ou .cer extensões de nome de arquivo ( .der é menos comum, mas não é invisível).

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

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

  • PKCS # 12 e o mais antigo PFX 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 são opcionalmente "blindados" (codificados com Radix64 e entre cabeçalhos semelhantes a PEM).

    
por 22.04.2011 / 10:54
2

Armazenados em locais diferentes e em formatos diferentes (os formatos usados pelo PGP, GnuPG, ssh e diversos formatos X.509, entre outros, são bem diferentes). É possível transcodificar entre eles até certo ponto, misturando e combinando as opções certas com ssh-keygen , pgp , gpg / gpg2 , openssl , etc .; mas em geral não vale o esforço. Além disso, diferentes formatos de chave suportam diferentes quantidades de informação, com ssh carregando a menor informação extra e X.509 PEM e DER. Além disso, o OSX Keychain é simplesmente armazenamento de chave / valor criptografado, portanto, um mecanismo diferente é geralmente necessário para cada aplicativo converter entre o formato nativo de chave + metadados do programa e algo que pode ser armazenado no Keychain. (Preocupações semelhantes se aplicam à carteira do KDE e às chaves do GNOME.)

    
por 22.04.2011 / 06:16