A criptografia é uma das principais ferramentas para garantir a confidencialidade e integridade dos dados em sistemas de informação. Nesta aula, vamos explorar dois contextos fundamentais: a criptografia em trânsito, que protege os dados enquanto são transmitidos entre sistemas, e a criptografia em repouso, que protege os dados armazenados em dispositivos ou na nuvem. Também discutiremos o gerenciamento de chaves e segredos, que é essencial para a eficácia de qualquer sistema criptográfico.

Entender as diferenças e as melhores práticas para cada cenário é crucial para profissionais de segurança. Abordaremos protocolos como TLS e SSH, além de técnicas para proteger chaves e segredos, evitando vazamentos e acessos não autorizados.

TLS

O TLS (Transport Layer Security) é o protocolo padrão para criptografar comunicações na internet. Ele sucede o SSL (Secure Sockets Layer) e é usado para proteger conexões HTTP (HTTPS), e-mail, VoIP e outros protocolos. O TLS opera na camada de transporte, garantindo que os dados trocados entre cliente e servidor sejam confidenciais e íntegros.

O funcionamento do TLS envolve uma série de etapas: handshake, troca de chaves, autenticação e cifragem simétrica. Durante o handshake, o cliente e o servidor negociam a versão do TLS, escolhem algoritmos criptográficos e trocam certificados digitais para autenticação. Após o handshake, é estabelecida uma chave simétrica temporária (session key) para criptografar os dados da sessão.

Principais componentes do TLS:

  • Certificado digital: Emitido por uma Autoridade Certificadora (CA), contém a chave pública do servidor e informações de identidade.
  • Cipher suites: Conjuntos de algoritmos para troca de chaves, autenticação, cifragem e hash.
  • Handshake: Processo de negociação e estabelecimento de parâmetros de segurança.

Exemplo de handshake TLS simplificado:

Cliente: "Olá, quero me conectar com segurança. Suporto TLS 1.3, cipher suites X, Y, Z."
Servidor: "Olá, uso TLS 1.3, cipher suite X. Aqui está meu certificado."
Cliente: "Certificado verificado. Vou gerar uma chave pré-mestra e criptografá-la com sua chave pública."
Servidor: "Recebi. Agora temos uma chave simétrica compartilhada. Vamos começar a comunicação criptografada."

Boas práticas: usar TLS 1.3 ou superior, desabilitar versões antigas (SSLv3, TLS 1.0, 1.1), configurar cipher suites fortes e renovar certificados regularmente.

SSH

O SSH (Secure Shell) é um protocolo de rede que permite acessar e gerenciar sistemas remotos de forma segura, substituindo protocolos não criptografados como Telnet e FTP. Ele oferece autenticação forte, criptografia de sessão e integridade dos dados. O SSH é amplamente usado para administração de servidores, transferência de arquivos (SFTP, SCP) e tunelamento de conexões.

O SSH funciona com uma arquitetura cliente-servidor. O servidor SSH escuta na porta 22 (por padrão) e autentica os clientes usando senhas, chaves públicas ou outros métodos. Uma vez autenticado, o cliente pode executar comandos no servidor ou estabelecer túneis criptografados.

Principais componentes do SSH:

  • Chave de host: Chave pública do servidor, usada para verificar sua identidade.
  • Autenticação por chave pública: O cliente gera um par de chaves (pública e privada); a chave pública é instalada no servidor.
  • Túnel SSH: Redirecionamento de portas para criar conexões seguras entre máquinas.

Exemplo de conexão SSH com autenticação por chave:

$ ssh -i ~/.ssh/id_rsa usuario@servidor.com

Boas práticas: desabilitar login por senha, usar chaves com frase secreta (passphrase), limitar usuários autorizados e alterar a porta padrão (embora isso não substitua medidas de segurança mais fortes).

Chaves

As chaves criptográficas são os segredos usados para cifrar e decifrar dados. Elas podem ser simétricas (mesma chave para cifrar e decifrar) ou assimétricas (par de chaves: pública e privada). O gerenciamento adequado das chaves é crítico para a segurança: se uma chave for comprometida, todos os dados protegidos por ela podem ser expostos.

No contexto de criptografia em trânsito e repouso, as chaves são usadas de diferentes formas. No TLS, por exemplo, as chaves assimétricas são usadas durante o handshake para estabelecer uma chave simétrica temporária. Já na criptografia em repouso, como na criptografia de disco ou de arquivos, as chaves simétricas são frequentemente usadas para cifrar grandes volumes de dados, e as chaves assimétricas podem ser usadas para proteger essas chaves simétricas (envelope digital).

Tipos de chaves:

  • Chave simétrica: Única chave para cifrar e decifrar. Ex: AES, ChaCha20. Vantagem: rápida. Desvantagem: compartilhamento seguro da chave é um desafio.
  • Chave assimétrica: Par de chaves (pública e privada). Ex: RSA, ECC. Vantagem: não requer compartilhamento de segredo. Desvantagem: mais lenta.

Exemplo de geração de chave RSA com OpenSSL:

# Gerar chave privada
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

# Extrair chave pública
openssl rsa -pubout -in private_key.pem -out public_key.pem

Boas práticas: usar tamanhos de chave adequados (2048 bits para RSA, 256 bits para AES), armazenar chaves privadas em locais seguros (HSM, cofres de chaves), e realizar rotação periódica de chaves.

Gerenciamento de segredos

Gerenciamento de segredos refere-se ao processo de armazenar, acessar e rotacionar de forma segura informações sensíveis como senhas, chaves de API, tokens e certificados. Em ambientes modernos, com múltiplos serviços e microsserviços, o gerenciamento manual de segredos é inviável e inseguro. Ferramentas como HashiCorp Vault, AWS Secrets Manager e Kubernetes Secrets ajudam a automatizar esse processo.

Boas práticas de gerenciamento de segredos incluem:

  • Nunca armazenar segredos em código-fonte (evitar hardcoding).
  • Usar cofres de segredos (vaults) que fornecem criptografia, controle de acesso e auditoria.
  • Rotacionar segredos regularmente e revogar imediatamente se comprometidos.
  • Limitar o acesso ao menor privilégio necessário (princípio do menor privilégio).

Exemplo de configuração de segredo no HashiCorp Vault (CLI):

# Habilitar o secrets engine KV (versão 2)
vault secrets enable -version=2 kv

# Armazenar um segredo
vault kv put kv/meusegredo chave=valor123

# Ler o segredo
vault kv get kv/meusegredo

Boas práticas adicionais: criptografar segredos em repouso e em trânsito, usar autenticação forte para acessar o cofre (por exemplo, tokens temporários ou integração com IAM) e monitorar logs de acesso.

Referências

Exercícios

  1. Explique a diferença entre criptografia em trânsito e criptografia em repouso. Dê um exemplo de cada.

    ✓ Resposta: Criptografia em trânsito protege dados durante a transmissão entre sistemas, como o HTTPS (TLS) entre navegador e servidor. Criptografia em repouso protege dados armazenados, como a criptografia de disco inteiro (BitLocker) ou de banco de dados (AES).
  2. Quais são as principais etapas do handshake TLS? Descreva resumidamente.

    ✓ Resposta: O handshake TLS inclui: 1) Negociação de versão e cipher suites; 2) Troca de certificados (autenticação do servidor); 3) Geração e troca de chave pré-mestra; 4) Derivação de chave simétrica de sessão; 5) Confirmação e início da comunicação criptografada.
  3. Como funciona a autenticação por chave pública no SSH? Quais as vantagens em relação ao uso de senha?

    ✓ Resposta: O cliente gera um par de chaves (pública e privada). A chave pública é copiada para o servidor (arquivo authorized_keys). Ao conectar, o cliente prova posse da chave privada (assinando um desafio). Vantagens: não há senha a ser interceptada, é resistente a ataques de força bruta e permite automação segura.
  4. Cite três boas práticas para o gerenciamento de chaves criptográficas.

    ✓ Resposta: 1) Armazenar chaves privadas em hardware seguro (HSM) ou cofre de chaves; 2) Realizar rotação periódica de chaves; 3) Aplicar o princípio do menor privilégio, limitando o acesso apenas a quem precisa.
  5. O que é um cofre de segredos (secrets vault) e por que é importante? Dê um exemplo de ferramenta.

    ✓ Resposta: Um cofre de segredos é um sistema centralizado que armazena, gerencia e controla acesso a segredos (senhas, chaves, tokens) de forma segura. Ele oferece criptografia, auditoria e rotação automática. Exemplo: HashiCorp Vault. É importante porque evita a exposição de segredos em código e reduz o risco de vazamentos.