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:
- Eficiência: É extremamente rápido e pode ser acelerado por hardware (Intel AES-NI).
- Autenticação: Deteta se o texto cifrado foi adulterado.
- Sem Preenchimento: Evitar o preenchimento simplifica a implementação e previne vulnerabilidades relacionadas com o mesmo.
- 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.