-
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 porssh-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).