Protegendo Dados com Criptografia: Chaves SSH, GPG, openssl

Protegendo Dados com Criptografia: Chaves SSH, GPG, openssl

O Que Voce Vai Alcancar

  • Gerar pares de chaves RSA / ED25519 com ssh-keygen e explicar seus usos
  • Registrar uma chave publica em um host remoto com ssh-copy-id e 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 ~/.ssh como 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.

Proximas Leituras

Continue Sua Jornada LPIC-1

Hub LPIC-1

  • Hub de Aprendizado LPIC-1 -- Mapa completo de artigos LPIC-1, acompanhamento de progresso e cobertura dos objetivos do exame

Artigos LPIC-1 Relacionados

Pratica