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 .pub
arquivo gerado por ssh-keygen
está 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
( certtool
faz 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-agent
para 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
( certtool
faz parte do GnuTLS.)
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).