aes security cryptography encryption

Guia Completo sobre Modos de Criptografia AES e Cifras Simétricas

Uma análise profunda dos modos de criptografia AES (ECB, CBC, CTR, GCM, CCM) e uma comparação com outras cifras simétricas como Blowfish, SM4 e RC4. Saiba por que o GCM é o padrão da indústria.

2026-04-11

Guia Completo sobre Modos de Criptografia AES e Cifras Simétricas

A criptografia é o alicerce da segurança digital moderna. Quer esteja a aceder à sua conta bancária, a enviar uma mensagem segura ou a armazenar dados sensíveis na nuvem, os algoritmos de criptografia trabalham incansavelmente nos bastidores para proteger a sua informação. Entre estes, o Advanced Encryption Standard (AES) destaca-se como a cifra de chave simétrica mais utilizada e confiável do mundo.

No entanto, o AES não é apenas uma "caixa preta". A forma como o utiliza — especificamente, qual modo de criptografia escolhe — é tão crítica quanto o próprio algoritmo. Neste guia abrangente, vamos mergulhar nos modos de criptografia AES, compará-los, explorar outras cifras simétricas e fornecer recomendações de segurança para o seu próximo projeto.


O que é Criptografia Simétrica?

Antes de mergulharmos nos detalhes do AES, é importante entender o conceito de criptografia simétrica. Num algoritmo de chave simétrica, a mesma chave é usada tanto para a criptografia (transformar texto simples em texto cifrado) quanto para a descriptografia (transformar texto cifrado de volta em texto simples).

Isto é diferente da criptografia assimétrica (como RSA ou ECC), que utiliza uma chave pública para criptografia e uma chave privada para descriptografia. A criptografia simétrica é significativamente mais rápida e eficiente, tornando-a ideal para criptografar grandes quantidades de dados.


Entendendo o AES (Advanced Encryption Standard)

O AES foi estabelecido pelo Instituto Nacional de Padrões e Tecnologia dos EUA (NIST) em 2001, após uma competição de cinco anos. Foi projetado para substituir o antigo Data Encryption Standard (DES).

O AES é uma cifra de bloco, o que significa que processa dados em blocos de tamanho fixo (128 bits). Suporta comprimentos de chave de 128, 192 e 256 bits. Embora o algoritmo em si seja extremamente seguro, a forma como lida com múltiplos blocos de dados — o modo de operação — é onde muitas vulnerabilidades de segurança podem surgir.


Análise Detalhada dos Modos de Criptografia AES

1. Electronic Codebook (ECB)

O ECB é o modo de operação mais simples. Cada bloco de 128 bits de texto simples é criptografado de forma independente usando a mesma chave.

  • Prós: Simples, rápido e suporta processamento paralelo.
  • Contras: Extremamente inseguro para a maioria dos casos de uso. Como o mesmo bloco de texto simples resulta sempre no mesmo bloco de texto cifrado, os padrões nos dados são preservados.
  • O Problema do "Pinguim": O exemplo clássico da falha do ECB é a criptografia de uma imagem de um pinguim; mesmo depois de criptografada, o contorno do pinguim permanece visível no texto cifrado.
  • Veredito: Nunca use ECB para nada que não seja criptografar um único bloco de dados.

2. Cipher Block Chaining (CBC)

O CBC melhora o ECB "encadeando" os blocos. Cada bloco de texto simples é combinado (XOR) com o bloco de texto cifrado anterior antes de ser criptografado. Um Vetor de Inicialização (IV) é usado para o primeiro bloco.

  • Prós: Os padrões no texto simples são ocultados. Foi o padrão da indústria durante muitos anos.
  • Contras: Apenas processamento sequencial (não pode ser paralelizado). É vulnerável a Ataques de Oráculo de Preenchimento (Padding Oracle) se não for implementado com um Código de Autenticação de Mensagem (MAC) adequado.
  • Veredito: Seguro se usado corretamente com um IV único e imprevisível e um MAC (Encrypt-then-MAC), mas geralmente foi superado pelo GCM.

3. Counter (CTR)

O modo CTR transforma uma cifra de bloco numa cifra de fluxo. Gera um fluxo de chaves criptografando uma sequência de contadores e, em seguida, combina esse fluxo com o texto simples via XOR.

  • Prós: Altamente eficiente, suporta paralelização total e não requer preenchimento (já que atua como uma cifra de fluxo).
  • Contras: Se o mesmo (Nonce + Contador) for reutilizado com a mesma chave, a segurança é completamente comprometida (ataque de "Two-Time Pad"). Fornece confidencialidade, mas não integridade.
  • Veredito: Excelente para aplicações de alta velocidade, mas deve ser combinado com um mecanismo de autenticação (como HMAC).

4. Galois/Counter Mode (GCM)

O GCM é um modo de Criptografia Autenticada com Dados Associados (AEAD). Combina o modo CTR para criptografia com uma multiplicação de campo de Galois para autenticação.

  • Prós: Fornece tanto confidencialidade quanto integridade (autenticação). É altamente eficiente, suporta paralelização e é resistente a muitos ataques comuns. Também permite autenticar "dados associados" não criptografados juntamente com o texto cifrado.
  • Contras: Complexo de implementar do zero. Tal como no CTR, a reutilização do nonce é catastrófica.
  • Veredito: O padrão de ouro moderno. Altamente recomendado para quase todas as aplicações (TLS 1.2+, SSH, etc.).

5. Counter with CBC-MAC (CCM)

O CCM é outro modo AEAD que combina criptografia CTR com um CBC-MAC para autenticação.

  • Prós: Fornece tanto criptografia quanto autenticação. Muito utilizado na segurança Wi-Fi WPA2 e em Bluetooth Low Energy (BLE).
  • Contras: Mais lento que o GCM porque requer duas passagens da cifra de bloco para cada bloco de dados. Não é paralelizável.
  • Veredito: Bom para ambientes com recursos limitados onde o GCM pode ser muito pesado, mas o GCM é geralmente preferido pelo desempenho.

Tabela Comparativa: Modos AES

Modo Tipo Paralelizável? Autenticado? Requer Preenchimento? Melhor Caso de Uso
ECB Bloco Sim Não Sim Apenas blocos individuais
CBC Bloco Não (Enc) / Sim (Dec) Não Sim Sistemas legados
CTR Fluxo Sim Não Não Streaming de alta velocidade
GCM AEAD Sim Sim No Segurança Web/API Moderna
CCM AEAD Não Sim No IoT / Bluetooth / Wi-Fi

Outras Cifras Simétricas Notáveis

Embora o AES seja a força dominante, vale a pena mencionar outras cifras simétricas:

  • Blowfish: Uma cifra de bloco rápida e de domínio público projetada por Bruce Schneier em 1993. Embora segura, foi amplamente substituída pela sua sucessora, Twofish, e pelo AES.
  • Camellia: Uma cifra de bloco desenvolvida no Japão (NTT e Mitsubishi). É comparável ao AES em segurança e desempenho e é um padrão ISO/IEC.
  • SM4: O padrão nacional chinês para redes sem fios. É uma cifra de bloco com um tamanho de bloco de 128 bits e uma chave de 128 bits.
  • 3DES (Triple DES): Um algoritmo legado que aplica o DES três vezes. Atualmente é considerado lento e está a ser descontinuado a favor do AES.
  • RC4: Uma cifra de fluxo outrora muito utilizada em SSL/TLS e WEP. Atualmente é considerada vulnerável e não deve ser usada em nenhuma aplicação moderna.

Recomendações de Segurança: Por que o GCM é Preferido

No cenário moderno, a Criptografia Autenticada (AEAD) é um requisito, não uma opção. Muitos desenvolvedores cometem o erro de usar CBC ou CTR e esquecer de adicionar um Código de Autenticação de Mensagem (MAC). Isto deixa os dados vulneráveis a ataques de inversão de bits ou a oráculos de preenchimento.

O GCM (Galois/Counter Mode) é preferido porque:

  1. Eficiência: É extremamente rápido e pode ser acelerado por hardware (Intel AES-NI).
  2. Autenticação: Deteta se o texto cifrado foi adulterado.
  3. Sem Preenchimento: Evitar o preenchimento simplifica a implementação e previne vulnerabilidades relacionadas com o mesmo.
  4. Padronização: É a escolha por defeito para o TLS 1.3, a espinha dorsal da comunicação segura na Internet.

Exemplos de Código

Node.js (usando o módulo interno crypto)

Aqui está como implementar AES-256-GCM em Node.js:

const crypto = require('crypto');

function encrypt(text, key) {
    const iv = crypto.randomBytes(12); // O tamanho padrão de IV para GCM é 12 bytes
    const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
    
    let encrypted = cipher.update(text, 'utf8', 'hex');
    encrypted += cipher.final('hex');
    
    const authTag = cipher.getAuthTag().toString('hex');
    
    return {
        iv: iv.toString('hex'),
        content: encrypted,
        tag: authTag
    };
}

function decrypt(encryptedObj, key) {
    const decipher = crypto.createDecipheriv(
        'aes-256-gcm', 
        key, 
        Buffer.from(encryptedObj.iv, 'hex')
    );
    
    decipher.setAuthTag(Buffer.from(encryptedObj.tag, 'hex'));
    
    let decrypted = decipher.update(encryptedObj.content, 'hex', 'utf8');
    decrypted += decipher.final('utf8');
    
    return decrypted;
}

// Exemplo de uso
const key = crypto.randomBytes(32); // Chave de 256 bits
const data = encrypt("Olá Mundo Seguro!", key);
console.log("Cifrado:", data.content);
console.log("Decifrado:", decrypt(data, key));

FAQ: Erros Comuns e Armadilhas

1. Posso reutilizar um Vetor de Inicialização (IV)?

Não. Reutilizar um IV com la mesma chave em modo CTR ou GCM permite que um atacante aplique XOR a dois textos cifrados e potencialmente recupere o texto simples. Em CBC, pode vazar informações sobre o início da mensagem. Use sempre um gerador de números aleatórios criptograficamente seguro para criar um IV único para cada criptografia.

2. O AES-256 é muito mais seguro que o AES-128?

Ambos são extremamente seguros. O AES-128 é praticamente inquebrável por força bruta hoje em dia. O AES-256 oferece uma margem de segurança maior contra ameaças futuras, como a computação quântica (via Algoritmo de Grover), mas é ligeiramente mais lento. A maioria dos especialistas concorda que o AES-128 é suficiente para a maioria das necessidades comerciais.

3. Por que o meu texto "cifrado" é sempre o mesmo para a mesma entrada?

Provavelmente está a utilizar o modo ECB ou um IV fixo. Ambos são riscos de segurança significativos. Certifique-se de que utiliza um modo como GCM ou CBC e de que gera um novo IV aleatório para cada operação.

4. O que acontece se eu perder a tag de autenticação (Auth Tag) no GCM?

A descriptografia falhará. A tag de autenticação garante que os dados não foram modificados. Sem ela, não pode verificar a integridade dos dados, e a maioria das bibliotecas lançará um erro durante a chamada a final().


Conclusão

Escolher o modo AES adequado é um equilíbrio entre segurança, desempenho e compatibilidade. Para aplicações web modernas, o AES-GCM é quase sempre a escolha certa. Fornece a "santíssima trindade" da criptografia: Confidencialidade, Integridade e Autenticidade.

Ao evitar modos legados como o ECB e estar atento à gestão do IV, pode garantir que os dados dos seus utilizadores permanecem a salvo de olhares indiscretos e manipulações maliciosas.