Protegendo Dados com Criptografia: Chaves SSH, GPG, openssl
O Que Voce Vai Alcancar
- Gerar pares de chaves RSA / ED25519 com
ssh-keygene explicar seus usos - Registrar uma chave publica em um host remoto com
ssh-copy-ide conectar via autenticacao por chave publica - Inserir a passphrase apenas uma vez usando
ssh-agent/ssh-add - Distinguir os usos do encaminhamento de porta SSH (
-L/-R/-D) - Criptografar, descriptografar, assinar e verificar arquivos com
gpg - Computar hashes e executar criptografia simetrica basica com
openssl - Explicar como as permissoes de arquivos de chave (600 / 700) se relacionam com falhas de autenticacao
Este e o nucleo do objetivo 110.3 do LPIC-1 "Proteger dados com criptografia". A chave para domina-lo e separar a protecao do canal (SSH) da protecao dos dados em si (GPG / openssl).
Como Funciona a Autenticacao por Chave Publica SSH?
A autenticacao por chave publica prova a "posse da chave privada". A chave publica do cliente e registrada no ~/.ssh/authorized_keys do servidor, enquanto a chave privada nunca sai da sua maquina. Como nenhuma senha e enviada pela rede, e altamente seguro.
| Arquivo / Diretorio | Funcao | Permissao recomendada |
|---|---|---|
~/.ssh/ |
Armazena arquivos relacionados ao SSH | 700 |
~/.ssh/id_ed25519 |
Chave privada (somente sua) | 600 |
~/.ssh/id_ed25519.pub |
Chave publica (para distribuir) | 644 |
~/.ssh/authorized_keys |
Chaves permitidas no servidor | 600 |
~/.ssh/known_hosts |
Chaves publicas gravadas dos servidores conectados | 644 |
O fluxo e um desafio-resposta: o servidor criptografa um valor aleatorio com a chave publica do cliente, o cliente descriptografa com a chave privada e responde, provando a posse da chave privada. A chave privada nunca trafega pela rede.
Passos para Gerar Chaves e Conectar
Passo 1: Gerar um par de chaves com ssh-keygen
ssh-keygen -t ed25519 -C "user@example.com"
Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_ed25519 Your public key has been saved in /home/user/.ssh/id_ed25519.pub
-t especifica o tipo de chave. Conforme man ssh-keygen, os valores para -t sao dsa / ecdsa / ecdsa-sk / ed25519 / ed25519-sk / rsa. ED25519 e o recomendado atualmente; para RSA, especifique um comprimento de chave como -b 4096. -C e um comentario (um rotulo de identificacao anexado a chave publica). A passphrase e uma protecao extra da chave privada; pode ser vazia, mas defini-la e mais seguro.
ssh-keygen -t rsa -b 4096
Voce normalmente escolhe RSA somente quando precisa se conectar a um servidor mais antigo que nao consegue interpretar ED25519.
Passo 2: Registrar a chave publica no host remoto
ssh-copy-id user@server.example.com
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'user@server.example.com'" and check to make sure that only the key(s) you wanted were added.
ssh-copy-id adiciona sua chave publica ao ~/.ssh/authorized_keys remoto e ajusta as permissoes. Para fazer manualmente, adicione o conteudo da chave publica como uma linha em authorized_keys. Nunca envie a chave privada (o arquivo sem .pub).
Passo 3: Conectar com autenticacao por chave publica
ssh user@server.example.com
Enter passphrase for key '/home/user/.ssh/id_ed25519': Last login: Fri May 30 10:00:00 2026 from 203.0.113.10 user@server:~$
Se a chave publica esta registrada, voce faz login apenas com a passphrase da chave privada, nao com uma senha. Quando algo falha, verifique o log detalhado com ssh -v user@host.
Passo 4: Armazenar a chave em cache com ssh-agent
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 ssh-add -l
Agent pid 4521 Enter passphrase for /home/user/.ssh/id_ed25519: Identity added: /home/user/.ssh/id_ed25519 (user@example.com) 256 SHA256:abc...xyz user@example.com (ED25519)
ssh-agent e um agente de autenticacao que mantem chaves privadas na memoria. Uma vez que voce registre uma chave com ssh-add, conexoes posteriores nao pedem mais a passphrase. ssh-add -l lista chaves registradas e ssh-add -D remove todas.
Passo 5: Corrigir as permissoes
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 chmod 644 ~/.ssh/id_ed25519.pub
O OpenSSH se recusa a usar uma chave privada que outros possam ler. Definir ~/.ssh como 700 e a chave privada como 600 e a linha de base. Pular isso e a causa classica de "a chave existe mas a autenticacao falha".
Qual e a Diferenca Entre os Tres Modos de Encaminhamento de Porta?
-L e encaminhamento local (atraves de uma porta local para um servico no lado remoto), -R e encaminhamento remoto (uma porta remota para um servico na sua maquina), e -D e encaminhamento dinamico (um proxy SOCKS). Escolha pela direcao e finalidade.
| Opcao | Nome | Uso tipico |
|---|---|---|
-L local:host:hostport |
Encaminhamento local | Acessar um DB interno atraves de um bastion a partir da sua maquina |
-R remote:host:hostport |
Encaminhamento remoto | Permitir que um host remoto acesse um servico na sua maquina |
-D port |
Encaminhamento dinamico (SOCKS) | Rotear trafego do navegador pelo SSH |
ssh -L 8080:internal-db:5432 user@gateway ssh -R 9000:localhost:3000 user@remote ssh -D 1080 user@gateway
Conforme definido para -L / -R / -D em man ssh, isso transporta trafego de aplicacao pelo canal criptografado do SSH. Com um tunel estabelecido, mesmo um protocolo em texto plano pode ser transportado com seguranca.
Como Criptografar e Assinar Dados com GPG?
GPG (GnuPG) e uma implementacao do padrao OpenPGP que criptografa e assina arquivos. Enquanto o SSH protege o canal, o GPG protege dados que voce armazena ou distribui. Voce criptografa com uma chave publica, e somente a chave privada correspondente pode descriptografar.
Gerar um par de chaves
gpg --gen-key gpg --list-keys
pub ed25519 2026-05-30 [SC]
ABCDEF0123456789ABCDEF0123456789ABCDEF01
uid [ultimate] User Name <user@example.com>
sub cv25519 2026-05-30 [E]
gpg --gen-key solicita nome e email interativamente e cria um par de chaves. --list-keys lista chaves publicas e --list-secret-keys lista chaves privadas.
Distribuir e importar chaves publicas
gpg --export -a user@example.com > mypubkey.asc gpg --import friend_pubkey.asc
--export -a grava uma chave publica em formato ASCII (armored). A outra parte a importa com --import. Para criptografar para alguem, voce precisa da chave publica dessa pessoa em maos.
O que voce distribui e a chave publica. Nunca entregue a chave privada produzida por --export-secret-keys. Se a chave privada vazar, todo texto cifrado enderecado a essa chave pode ser descriptografado e assinaturas podem ser forjadas.
Criptografar e descriptografar um arquivo
gpg -e -r user@example.com secret.txt gpg -d secret.txt.gpg > secret.txt
gpg: encrypted with cv25519 key, ID 0123456789ABCDEF, created 2026-05-30
"User Name <user@example.com>"
Criptografar com -e (--encrypt) e -r (destinatario) produz secret.txt.gpg. Descriptografe com -d (--decrypt). Somente alguem que possua a chave privada do destinatario especificado pode descriptografar.
Assinar e verificar
gpg --sign document.txt gpg --verify document.txt.gpg
gpg: Signature made Fri 30 May 2026 10:00:00 JST gpg: using EDDSA key ABCDEF0123456789ABCDEF0123456789ABCDEF01 gpg: Good signature from "User Name <user@example.com>"
--sign assina com a chave privada, garantindo o autor e detectando adulteracao. --verify verifica com a chave publica do assinante. Criptografia (confidencialidade) e assinatura (autenticidade) servem a propositos diferentes; nao os confunda.
O Que Voce Pode Fazer com openssl?
openssl e um toolkit que fornece funcoes de TLS e criptografia. Ele lida com hashing, criptografia simetrica, geracao de chaves e certificados, e mais. Para o LPIC-1, foque em hashing e criptografia basicos.
openssl dgst -sha256 file.txt openssl enc -aes-256-cbc -pbkdf2 -in file.txt -out file.enc openssl enc -d -aes-256-cbc -pbkdf2 -in file.enc -out file.txt
SHA256(file.txt)= 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 enter AES-256-CBC encryption password:
openssl dgst -sha256 computa um hash (uma impressao digital do arquivo). openssl enc e criptografia simetrica que usa a mesma senha para criptografar e descriptografar. Adicione -pbkdf2 para derivacao de chave. A diferenca do GPG e que enc e compartilhamento de senha, enquanto o GPG protege dados com criptografia de chave publica.
Erros Comuns e Correcoes
Erro 1: Permissoes frouxas na chave privada ou ~/.ssh
Se ~/.ssh esta com 777 ou a chave privada esta com 644 para que outros possam le-la, o OpenSSH ignora a chave por razoes de seguranca e volta para autenticacao por senha ou recusa a conexao. Corrija com chmod 700 ~/.ssh e chmod 600 ~/.ssh/id_*.
Erro 2: Ignorar o aviso de mudanca de chave do host no known_hosts
Reconstruir um servidor muda sua chave publica, produzindo o aviso REMOTE HOST IDENTIFICATION HAS CHANGED! ao conectar. Este e um aviso importante que tambem pode indicar um ataque man-in-the-middle. Apos confirmar que a mudanca e legitima, remova a linha correspondente do known_hosts com ssh-keygen -R hostname e reconecte.
Erro 3: Confundir chaves publica e privada no GPG
Use a chave publica do destinatario para criptografar e sua propria chave privada para descriptografar. Distribua apenas a chave publica. Confundir --export (chave publica) com --export-secret-keys (chave privada) e compartilhar a chave privada anula o proposito da criptografia.
Erro 4: Nao definir ou gerenciar uma passphrase
Se a chave privada nao tem passphrase, qualquer pessoa que roube o arquivo de chave pode se passar por voce. Defina uma passphrase e use ssh-agent para reduzir quantas vezes voce a digita. Gerencie a passphrase da chave privada GPG da mesma forma.
Erro 5: Enviar a chave privada em vez da publica para o servidor
O que voce registra em authorized_keys e a chave publica terminando em .pub. Usar ssh-copy-id registra corretamente e automaticamente. Ao copiar manualmente, tenha cuidado para nao enviar a chave privada (id_ed25519).
Solucao de Problemas
Sintoma: Uma senha e solicitada mesmo com a chave publica registrada
Causa: Permissoes excessivas na chave privada ou ~/.ssh, ou uma entrada com defeito em authorized_keys
Verificacao:
ssh -v user@host ls -ld ~/.ssh ls -l ~/.ssh/authorized_keys
Correcao: Defina chmod 700 ~/.ssh e chmod 600 ~/.ssh/authorized_keys. Na saida de ssh -v, encontre onde a chave e oferecida ou rejeitada.
Sintoma: Conexao para com um aviso de mudanca de chave do host
Causa: A chave do host do servidor mudou e nao corresponde mais ao registro em known_hosts
Verificacao:
ssh-keygen -l -F hostname
Correcao: Apos confirmar que a mudanca e legitima, exclua o registro antigo com ssh-keygen -R hostname e reconecte. Se voce nao consegue explicar a mudanca, aborte a conexao e investigue.
Sintoma: gpg --decrypt nao consegue descriptografar
Causa: A chave privada correspondente nao esta no seu chaveiro, ou voce criptografou com o destinatario errado
Verificacao:
gpg --list-secret-keys
Correcao: Confirme que voce tem sua chave privada. Sem ela, aquele texto cifrado nao pode ser descriptografado. Ao criptografar, especifique o destinatario correto com -r (voce mesmo, se for descriptografar).
Lista de Verificacao de Conclusao
- [ ] Gerou um par de chaves com
ssh-keygen -t ed25519 - [ ] Registrou a chave publica em um host remoto com
ssh-copy-id - [ ] Conectou via autenticacao por chave publica
- [ ] Adicionou a chave privada ao ssh-agent com
ssh-add - [ ] Definiu
~/.sshcomo 700 e a chave privada como 600 - [ ] Verificou criptografia e descriptografia de arquivo com
gpg - [ ] Computou um hash com
openssl dgst
Resumo
| Finalidade | Comando | Protege |
|---|---|---|
| Gerar chave | ssh-keygen -t ed25519 |
Autenticacao de conexao SSH |
| Registrar chave publica | ssh-copy-id user@host |
O authorized_keys remoto |
| Armazenar chave em cache | ssh-add |
Quantidade de insercoes de passphrase |
| Criptografar dados | gpg -e -r user file |
Dados armazenados / distribuidos |
| Assinar / verificar | gpg --sign / --verify |
Autenticidade |
| Hash / simetrico | openssl dgst / openssl enc |
Integridade / criptografia com senha compartilhada |
O SSH protege o canal; GPG e openssl protegem os dados em si. Domine essa divisao de papeis e a disciplina de permissoes de arquivos de chave, e o 110.3 se torna uma fonte confiavel de pontos.