01 - PUBLIC KEY
video: https://youtu.be/... no frontmatter da nota.No sistema de criptografia assimétrica utilizado pelo SSH, a Public Key (Chave Pública) é o componente do par de chaves destinado a ser distribuído e armazenado nos sistemas remotos. Tecnicamente, ela funciona como uma "fechadura digital" ou um "selo de verificação": qualquer entidade que possua a sua chave pública pode verificar uma assinatura digital criada pela sua chave privada correspondente, mas ninguém pode usar a chave pública para fingir ser você.
1. Natureza e Composição Técnica
Uma chave pública SSH não é um segredo. Ela é uma string de texto codificada (geralmente em Base64) que contém informações matemáticas específicas sobre o algoritmo utilizado. Sua estrutura segue o formato definido na RFC 4253, seção 6.6, e é composta por três partes principais.
- Identificador de Algoritmo: Indica se a chave é
ssh-rsa,ecdsa-sha2-nistp256oussh-ed25519. Este prefixo é obrigatório e determina como os dados seguintes serão interpretados. - O Expoente e o Módulo (No caso do RSA): Valores numéricos derivados de números primos gigantescos que permitem a operação matemática de verificação. Para Ed25519, o conteúdo é um ponto na curva Curve25519 com 256 bits.
- Comentário: Um rótulo opcional ao final (ex:
usuario@notebook-pessoal) para ajudar o administrador a identificar a quem pertence a chave. Não tem valor criptográfico, mas é vital para governança.
A decodificação interna de uma chave pública é feita através da leitura de blocos de comprimento variável codificados em formato big-endian (4 bytes de comprimento seguidos pelo dado binário), todos convertidos para Base64 no arquivo final.
2. O Papel na Autenticação (A "Fechadura")
O armazenamento da chave pública no servidor (no arquivo ~/.ssh/authorized_keys) é o que permite o login sem senha. O processo técnico segue a lógica do Desafio-Resposta definida na RFC 4252:
- O servidor recebe um pedido de conexão e localiza a Public Key do usuário no arquivo
authorized_keys. - O servidor "desafia" o cliente a provar que possui a chave privada associada a essa chave pública, enviando um nonce criptográfico (session ID + identificadores de sessão).
- O cliente assina o desafio com sua chave privada e devolve a assinatura.
- O servidor usa a chave pública para validar a assinatura enviada pelo cliente. Se a assinatura for matematicamente consistente com a chave pública armazenada, o servidor tem a certeza de que o cliente é legítimo.
Caso nenhuma chave pública cadastrada corresponda à identidade oferecida pelo cliente, o servidor rejeita a tentativa de autenticação por chave e tenta o próximo método disponível (senha, keyboard-interactive, etc.).
3. Distribuição e Segurança
Diferente da chave privada, a perda ou exposição da Public Key não compromete a sua conta por si só. A assimetria matemática garante que derivar a chave privada a partir da pública é computacionalmente intratável para algoritmos modernos.
- Disseminação: Você pode enviar sua chave pública por e-mail, colá-la em chats ou publicá-la no seu perfil do GitHub, GitLab ou em diretórios LDAP corporativos.
- Integridade no Servidor: O único risco real é se um atacante conseguir substituir a sua chave pública no servidor pela dele. Por isso, o arquivo
authorized_keysdeve ter permissões rígidas (600ou644) e pertencer apenas ao usuário dono da conta. O diretório~/.ssh/também deve ter700. - Ataque de Injeção: Se um atacante obtiver acesso de escrita ao
authorized_keys(através de exploração de outro serviço), ele pode injetar sua própria chave pública e ganhar acesso persistente. Por isso, ferramentas de monitoramento de integridade comoauditdeAIDEdevem vigiar mudanças neste arquivo.
4. Formatos e Padrões
Existem diferentes formatos de representação para chaves públicas:
- OpenSSH (RFC 4253): O formato mais comum, onde a chave ocupa uma única linha começando com o tipo do algoritmo. Este é o formato esperado pelo arquivo
authorized_keys. - PKCS#8 / PEM: Formatos mais genéricos usados por outros sistemas criptográficos (como SSL/TLS), geralmente delimitados por
-----BEGIN PUBLIC KEY-----. Conversão é feita comssh-keygen -e -m PKCS8. - SSHFP (DNS Record): Registros DNS especiais (RFC 4255) que publicam o fingerprint da chave pública do servidor, permitindo que clientes validem a Host Key consultando o DNS protegido por DNSSEC.
- PPK (PuTTY): Formato binário específico do PuTTY no Windows, contendo tanto a parte pública quanto comentários.
5. Revogação e Gestão
Gerenciar chaves públicas é uma tarefa crítica de administração. Em ambientes corporativos com centenas de servidores, a gestão manual torna-se insustentável e abre brechas de compliance.
- Rodízio de Chaves: É uma boa prática trocar as chaves públicas periodicamente, especialmente em ambientes regulados (PCI-DSS, SOX, HIPAA).
- Revogação: Para impedir o acesso de um funcionário que saiu da empresa, basta remover a Public Key dele do arquivo
authorized_keysde todos os servidores. O acesso é cortado instantaneamente, pois o servidor não terá mais a "fechadura" para validar as assinaturas do ex-funcionário. - Certificados SSH (RFC 6187): Em vez de copiar chaves públicas manualmente, uma CA (Certificate Authority) interna assina certificados SSH com prazo de validade. O servidor confia na CA, e a revogação é feita por expiração do certificado, simplificando a gestão.
- Key Revocation List (KRL): Lista compacta de chaves revogadas que o servidor consulta em cada login.
6. Exemplo de uma Chave Pública (Ed25519)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMpjSpxGZ5Q9p... usuario@host
Neste exemplo, ssh-ed25519 identifica o algoritmo moderno e seguro, seguido pela massa de dados que compõe a chave propriamente dita. Para RSA, a mesma estrutura teria o prefixo ssh-rsa e uma string Base64 consideravelmente maior (300+ caracteres para RSA-2048).
7. Geração e Operações Comuns
# Geração de par de chaves Ed25519 (recomendado)
ssh-keygen -t ed25519 -C "admin@empresa.com"
# Geração de RSA-4096 (compatibilidade legada)
ssh-keygen -t rsa -b 4096
# Exibição do fingerprint da chave pública
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# Conversão para formato PKCS8
ssh-keygen -e -m PKCS8 -f ~/.ssh/id_ed25519.pub
# Distribuição automática para servidor
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor
8. Resumo Técnico
| Atributo | Valor |
|---|---|
| Sigilo | Não requerido, distribuição livre |
| Localização típica | ~/.ssh/id_ed25519.pub |
| Permissão | 644 ou 600 |
| Mecanismo de uso | Verificação de assinatura |
| RFC de referência | RFC 4253, RFC 8709 (Ed25519), RFC 4255 (SSHFP) |
| Algoritmo recomendado | Ed25519 |
9. Conclusão
A Public Key é o componente público da identidade SSH, projetada para disseminação segura sem perda de confidencialidade. Compreender o seu papel como "fechadura" validadora de assinaturas é essencial para administradores que precisam gerenciar acessos remotos em escala. A adoção de práticas como certificados SSH, registros SSHFP e monitoramento de integridade transforma a gestão de chaves públicas de uma tarefa operacional morosa em um processo automatizado e auditável.
10. Modelo de Confiança em Camadas
A arquitetura de confiança baseada em chaves públicas SSH opera em três camadas distintas:
- Confiança Tofu (Trust On First Use): O cliente aceita a Host Key na primeira conexão e a armazena em
known_hosts. Conexões subsequentes apenas verificam consistência. - Confiança por Certificados (CA-signed): Uma CA interna assina chaves públicas de host. O cliente confia na CA, eliminando a necessidade de validação manual em cada novo servidor.
- Confiança por DNSSEC (SSHFP): O fingerprint da chave pública é publicado como registro SSHFP na zona DNS protegida por DNSSEC. O cliente consulta o DNS e valida a chave do servidor sem prompts interativos.
A combinação destas três camadas cria um ecossistema robusto onde a gestão de identidade escala para milhares de servidores sem sacrificar a segurança criptográfica. Em ambientes corporativos modernos, a adoção de certificados SSH assinados por uma CA interna tornou-se o padrão recomendado por publicações como o NIST SP 800-63B e o CIS Benchmark para SSH.