Desejo criar pares de chaves pública e privada a serem usados para autenticação SSH.
Não consigo entender a diferença entre isso:
openssl genrsa -out MyPrivateKey 4096
openssl rsa -in MyPrivateKey -pubout -out MyPublicKey
que primeiro cria uma chave RSA privada e então deriva a chave pública dela, ou:
ssh-keygen -b 4096 -t rsa -f MyFancyKey
que cria uma chave RSA privada no arquivo 'MyFancyKey' e a chave pública correspondente em 'MyFancyKey.pub'.
A estrutura das chaves privadas parece um pouco semelhante, embora a criada com openssl
comece com:
-----BEGIN RSA PRIVATE KEY-----
E o de ssh-keygen
começa com:
-----BEGIN OPENSSH PRIVATE KEY-----
Existe uma diferença fundamental entre esses dois tipos de chaves?
Em seguida, as chaves públicas correspondentes, a de openssl
contém:
-----BEGIN PUBLIC KEY-----
...base64 encoded...
-----BEGIN PUBLIC KEY-----
Enquanto o de ssh-keygen
contém apenas uma linha:
ssh-rsa XXXXXX...base64 encoded...XXXXX [email protected]
Esses são essencialmente os mesmos tipos de dados, mas formatados de maneira diferente? Ou são realmente incompatíveis?
Estou tentando entender completamente como tudo isso funciona em relação ao SSH. Por exemplo, por que meu nome de usuário, meu nome de computador e meu nome de rede local estão nessa chave, normalmente não deveria ser usado para acessar o SSH em outros computadores? Com meu nome de usuário naquele computador, não meu.
chaves privadas
Não, são essencialmente os mesmos dados.
BEGIN RSA PRIVATE KEY
indica o formato de chave "PKCS#1" ou "PEM", que é a codificação Base64 de uma estrutura serializada ASN.1 DER. É uma sequência ASN.1 básica contendo os parâmetros RSA ( n , e , d , p , q , etc).Na verdade, o OpenSSH também usa tradicionalmente esse formato - porque ele já usa o código criptográfico do OpenSSL, portanto, as funções "chave de carregamento" e "chave de gravação" também estavam convenientemente disponíveis.
Isso significa que você pode usar
ssh-keygen -m PEM
para gerar ou converter essas chaves.BEGIN PRIVATE KEY
indica o formato de chave "PKCS#8" (não criptografado); o conteúdo é muito semelhante ao formato acima, com os mesmos parâmetros RSA aninhados dentro de outra estrutura que indica que é de fato uma chave RSA.Comparado ao PEM, o formato PKCS#8 separa de forma mais clara a "carga útil" (algoritmo de chave, criptografia) do invólucro Base64 externo. No entanto, isso não altera o significado dos dados.
O OpenSSH também reconhecerá esse formato (devido ao uso do OpenSSL para carregamento de chaves).
BEGIN OPENSSH PRIVATE KEY
é um formato inventado por OpenSSH para OpenSSH. Desta vez, ele usa a serialização de pacotes SSHv2 em vez de DER.O OpenSSH agora usa esse formato para evitar depender totalmente do OpenSSL e/ou para adicionar novos algoritmos de chave sem esperar que o PKIX padronize um formato de serialização ASN.1 (que de outra forma não tem absolutamente nada a ver com SSH) e esperando que o OpenSSL o implemente.
PuTTY tem seu próprio formato .ppk. Você pode usar /usr/bin/puttygen para converter entre todos eles.
Veja também: Formato de arquivo de chave pública OpenSSH?
chaves públicas
Sim, são essencialmente os mesmos dados.
BEGIN PUBLIC KEY
é, acredito, também PKCS # 8 - então dentro de Base64 há uma estrutura ASN.1 serializada por DER que a identifica como uma chave RSA, seguida por parâmetros de chave ( n , e )O formato de uma linha é parcialmente específico do OpenSSH, embora os dados centrais codificados em Base64 estejam exatamente no mesmo formato usado no próprio protocolo SSHv2 ("on the wire"). Como você pode imaginar, os dados codificados usam a serialização de pacotes SSHv2 – mas ainda mantêm os mesmos valores RSA n e e .
Veja também: Formato de arquivo de chave pública OpenSSH?
É um comentário para ajudá-lo a distinguir esta chave pública de outras chaves públicas quando você tiver um
authorized_keys
arquivo longo.