Pular para conteúdo

Criptografia Moderna e Infraestrutura de Chaves Públicas (PKI)

Esta seção aborda técnicas criptográficas modernas que formam a base da segurança na internet, incluindo criptografia assimétrica, assinaturas digitais, protocolos de troca de chaves e infraestrutura de chaves públicas. Estes conceitos são essenciais para entender como as comunicações seguras funcionam na web.

Visão Geral

A criptografia moderna aborda limitações dos métodos clássicos resolvendo o problema fundamental: como comunicar-se com segurança quando não há um segredo pré-compartilhado. Isso é alcançado através de problemas matemáticos que são fáceis de calcular em uma direção, mas computacionalmente inviáveis de reverter.

Conceitos Principais Abordados

  1. Criptografia Assimétrica: Uso de pares de chaves (pública/privada) para comunicação segura
  2. Assinaturas Digitais: Garantia de autenticidade e não-repúdio
  3. Protocolos de Troca de Chaves: Estabelecimento seguro de segredos compartilhados em canais inseguros
  4. Infraestrutura de Chaves Públicas (PKI): Gerenciamento de certificados digitais e confiança

Fundamentos Matemáticos

O Problema do Logaritmo Discreto

Dado um primo $p$, um gerador $g$ e o valor $y = g^x \mod p$, encontrar $x$ dado $(p, g, y)$ é computacionalmente difícil. Isso forma a base de: - Troca de Chaves Diffie-Hellman - Criptografia ElGamal

O Problema da Fatoração de Inteiros

Dado um número composto grande $n = p \times q$ (onde $p, q$ são primos), encontrar $p$ e $q$ é difícil. Isso forma a base de: - Criptografia RSA

O Problema do Logaritmo Discreto em Curvas Elípticas

Encontrar $k$ dado os pontos $P$ e $Q = kP$ em uma curva elíptica é computacionalmente difícil, mesmo para tamanhos de chave relativamente pequenos. Isso permite: - ECC (Criptografia de Curva Elíptica) - chaves menores com segurança equivalente ao RSA

Criptografia Assimétrica (RSA, ECC)

A criptografia assimétrica usa um par de chaves matematicamente relacionadas: - Chave Pública: Pode ser compartilhada abertamente, usada para criptografia ou verificação de assinaturas - Chave Privada: Deve permanecer secreta, usada para descriptografia ou assinatura

RSA (Rivest-Shamir-Adleman)

O RSA é baseado na dificuldade de fatorar inteiros grandes.

Fundamento Matemático

Dado: 1. Dois números primos grandes $p$ e $q$ (tipicamente 1024 bits cada para uma chave de 2048 bits) 2. Módulo $n = p \times q$ 3. Função totiente de Euler $\phi(n) = (p-1)(q-1)$ 4. Expoente público $e$ (tipicamente 65537, coprimo com $\phi(n)$) 5. Expoente privado $d$ tal que $ed \equiv 1 \mod \phi(n)$

Criptografia: $C = M^e \mod n$
Descriptografia: $M = C^d \mod n$

Criptografia de Curva Elíptica (ECC)

A ECC fornece segurança equivalente ao RSA com chaves muito menores, tornando-a ideal para ambientes com limitação de largura de banda.

Nível de Segurança Tamanho da Chave RSA Tamanho da Chave ECC
128-bit 3072 bits 256 bits
192-bit 7680 bits 384 bits
256-bit 15360 bits 512 bits

Assinaturas Digitais (ECDSA, RSA-PSS)

Assinaturas digitais fornecem três garantias de segurança: 1. Autenticidade: A mensagem foi assinada pelo remetente alegado 2. Integridade: A mensagem não foi modificada 3. Não-repúdio: O signatário não pode negar ter assinado

Protocolos de Troca de Chaves (Diffie-Hellman, ECDH)

Protocolos de troca de chaves permitem que duas partes estabeleçam um segredo compartilhado em um canal inseguro sem terem trocado nenhuma informação secreta anteriormente.

Diffie-Hellman Key Exchange

O Diffie-Hellman permite que duas partes estabeleçam um segredo compartilhado através de um canal inseguro: - Alice: Escolhe chave privada $a$, calcula pública $A = g^a \mod p$ - Bob: Escolhe chave privada $b$, calcula pública $B = g^b \mod p$ - Segredo Compartilhado: Ambos calculam $s = B^a \mod p = A^b \mod p$

Secreto Efêmero (Forward Secrecy)

Implementações modernas usam chaves efêmeras para sigilo futuro: - DHE: Usa chaves temporárias Diffie-Hellman descartadas após a troca - ECDHE: Usa variantes de curva elíptica, fornecendo melhor desempenho

Infraestrutura de Chaves Públicas (PKI)

Certificados Digitais

Um certificado digital vincula uma chave pública a uma identidade e é assinado por uma Autoridade Certificadora (CA).

Estrutura do Certificado (X.509)

Certificate ::= SEQUENCE {
    tbsCertificate       TBSCertificate,
    signatureAlgorithm   AlgorithmIdentifier,
    signatureValue       BIT STRING
}

Java PKI Implementation

import java.security.*;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;

public class SSLClient {

    public static void main(String[] args) throws Exception {
        // Carrega o truststore (contém certificados de CAs confiáveis)
        KeyStore trustStore = KeyStore.getInstance("JKS");

        // Inicializa TrustManagerFactory
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(
            TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(trustStore);

        // Cria SSLContext
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, tmf.getTrustManagers(), null);
    }
}

Hierarquia de Autoridades Certificadoras (CA)

A PKI usa um modelo de confiança hierárquica:

Root CA (Auto-assinada, confiável por navegadores/SO)
    └── Intermediate CA 1 (Assinada pela Root CA)
        ├── Intermediate CA 2 (Assinada pelo IC1)
        │   └── Certificado do Servidor (Assinado pelo IC2)
        └── Certificado do Servidor (Assinado pelo IC1)
    └── Certificado do Servidor (Assinado pela Root CA)

Protocolo TLS/SSL

TLS (Transport Layer Security) é o protocolo que segura comunicações web. Ele combina:

  1. Troca de Chaves: ECDHE para sigilo futuro
  2. Autenticação: Verificação do certificado do servidor
  3. Criptografia: AES-GCM ou ChaCha20-Poly1305
  4. Integridade: AEAD (Authenticated Encryption with Associated Data)

Handshake TLS Resumido

Client Hello: Cliente propõe suites de criptografia, métodos de compressão
Server Hello: Servidor seleciona suite de criptografia, envia certificado
Certificate Verify: Cliente verifica certificado do servidor
Key Exchange: Ambas as partes calculam segredo compartilhado usando ECDHE
Finished Messages: Ambas as partes verificam que o handshake foi bem-sucedido
Application Data: Comunicação criptografada começa

Considerações de Segurança

Melhores Práticas

  1. Use algoritmos fortes: AES-256-GCM, RSA 4096+, ECC P-384 ou superior
  2. Evite algoritmos obsoletos: MD5, SHA-1, RC4, DES, 3DES
  3. Ative sigilo futuro: Use ECDHE em vez de troca RSA
  4. Use TLS 1.3: Fornece melhor segurança e desempenho que TLS 1.2
  5. Implemente pinning de certificados para aplicações móveis

Vulnerabilidades Comuns

Vulnerabilidade Descrição Mitigação
Heartbleed Divulgação de memória no OpenSSL Atualizar bibliotecas, regenerar chaves
POODLE Padding oracle attack em SSL 3.0 Desabilitar SSL 3.0, usar TLS
BEAST Browser security update attack Usar AES-GCM ou ChaCha20

Referências

  1. RFC 6478: Elliptic Curve Diffie-Hellman (ECDH) Key Agreement Protocol
  2. RFC 5280: Internet X.509 Public Key Infrastructure Certificate Profile
  3. RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3
  4. Menezes, A. J., van Oorschot, P. C., & Vanstone, S. A. (1996). Handbook of Applied Cryptography. CRC Press.
  5. Bernstein, D. J., Lange, T., & Schwabe, P. (2017). "Post-Quantum Cryptography".