Ir para o conteúdo
HexaTransfer
Voltar ao blog
Criptografia e seguranca

Guia de encriptação AES-256: proteção de nível militar para os seus ficheiros

Entenda a encriptação AES-256 e por que é o padrão de ouro. Saiba como esta cifra de nível militar mantém as suas transferências seguras.

O AES-256 é uma cifra de bloco simétrica aprovada pela NSA dos EUA para dados TOP SECRET ao abrigo da CNSSP-15. Encripta blocos de 128 bits com uma chave de 256 bits ao longo de 14 rondas de operações de substituição, permutação e mistura. Forçar uma única chave AES-256 exigiria aproximadamente 2^255 operações em média — um número tão grande que todos os computadores do mundo a funcionar durante a idade do universo não o conseguiriam quebrar. É por isso que todos os serviços sérios de transferência de ficheiros, do SwissTransfer ao Tresorit, usam o AES-256 como cifra principal. Eis como funciona de facto.

De onde vem o "256"

O AES existe em três tamanhos de chave: 128, 192 e 256 bits. O número refere-se apenas ao comprimento da chave, não ao tamanho do bloco (que é sempre 128 bits). O tamanho da chave determina quantas rondas a cifra executa: 10 para AES-128, 12 para AES-192, 14 para AES-256.

Mais rondas significam mais difusão — cada bit de saída depende de mais bits de entrada — e mais resistência a ataques criptanalíticos como o ataque de biclique publicado em 2011, que teoricamente reduziu a segurança efetiva do AES-256 de 256 para 254,4 bits. Ainda está muito além de qualquer ataque prático.

O Federal Information Processing Standard FIPS 197 define o AES, e o NIST SP 800-38A a 800-38G define os modos de operação.

Modos de operação: GCM vs CBC vs ECB

O AES é uma cifra de bloco, o que significa que apenas sabe encriptar um bloco de 128 bits. Para encriptar um ficheiro de tamanho arbitrário, precisa de um modo de operação. A escolha é muito importante:

  • ECB (Electronic Codebook): blocos de texto simples idênticos produzem texto cifrado idêntico. Nunca use isto. A famosa imagem do "pinguim ECB" mostra o contorno do Tux visível através de pixels encriptados em ECB.
  • CBC (Cipher Block Chaining): aplica XOR a cada bloco com o texto cifrado anterior. Seguro se combinado com HMAC para autenticação, mas o CBC sozinho é vulnerável a ataques de padding oracle (o POODLE afetou o SSL em 2014).
  • GCM (Galois/Counter Mode): encripta com um contador e produz uma tag de autenticação de 128 bits na mesma passagem. A adulteração do texto cifrado quebra a desencriptação de forma audível. É este o modo que os serviços modernos usam.

O AES-256-GCM é o padrão no TLS 1.3, no Signal, no WireGuard e em todos os serviços de transferência de ficheiros credíveis. Se um serviço menciona "AES-256" sem especificar o modo, assuma GCM e confirme.

O IV (nonce) que nunca deve ser reutilizado

O GCM requer um vetor de inicialização único de 96 bits por encriptação com uma dada chave. Reutilizar um IV com a mesma chave, mesmo uma vez, permite a um atacante fazer XOR de dois textos cifrados para recuperar o texto simples — uma falha catastrófica que foi explorada contra o WEP do Wi-Fi.

Boa prática: gere o IV com um RNG criptograficamente seguro (crypto.getRandomValues() nos navegadores, /dev/urandom no Linux) e anteceda-o ao texto cifrado. Um IV aleatório de 96 bits tem uma probabilidade de colisão de cerca de 2^-48 após encriptar 2^32 ficheiros — aceitável para um serviço de transferência. Para reutilização de chave em milhares de milhões de ficheiros, use um contador determinístico.

Derivação de chave: transformar palavras-passe em chaves

Os utilizadores querem palavras-passe como omeurao2024. O AES quer 256 bits de aleatoriedade uniforme. A ponte é uma função de derivação de chave (KDF). Três são de uso comum:

  • PBKDF2 com HMAC-SHA-256 e 600 000 iterações (recomendação OWASP de 2023). Amplamente suportada, disponível na Web Crypto API.
  • scrypt acrescenta dureza de memória, aumentando o custo dos ataques por GPU. O Bitcoin e o LastPass usam-no.
  • Argon2id é a melhor prática atual, vencedor da Password Hashing Competition de 2015. Parâmetros: memory=64 MB, iterations=3, parallelism=4.

Uma palavra-passe aleatória de 12 caracteres processada pelo Argon2id demora a uma GPU moderna aproximadamente mil milhões de anos a forçar. Uma palavra-passe fraca como password123 cede em milissegundos independentemente da KDF.

AES no navegador: a Web Crypto API

Os navegadores expõem o AES-256-GCM nativamente através de window.crypto.subtle. Um fluxo típico:

const key = await crypto.subtle.generateKey(
  { name: "AES-GCM", length: 256 },
  true,
  ["encrypt", "decrypt"]
);
const iv = crypto.getRandomValues(new Uint8Array(12));
const ciphertext = await crypto.subtle.encrypt(
  { name: "AES-GCM", iv },
  key,
  fileBytes
);

As CPUs modernas têm instruções AES-NI que aceleram isto para cerca de 3 a 5 GB/s por núcleo. Um ficheiro de 1 GB encripta em menos de um segundo num portátil de gama média. Em dispositivos móveis, os chips Apple série A e Qualcomm Snapdragon incluem ARMv8 Crypto Extensions para débito semelhante.

Contra o que o AES-256 protege (e contra o que não)

O AES-256 resolve um problema específico: confidencialidade dos dados em repouso ou em trânsito, dado que a chave é secreta. Não resolve:

  • Gestão de chaves. Se enviar a palavra-passe por e-mail juntamente com o ficheiro, o AES-256 não acrescenta nada.
  • Comprometimento do endpoint. Malware a ler o texto simples antes da encriptação ignora completamente a cifra.
  • Erros de implementação. Os ataques BEAST, CRIME e Lucky13 visaram implementações de TLS, não o AES em si.
  • Ataques de canal lateral. O cache timing e a análise de consumo de energia extraíram chaves AES de dispositivos com recursos limitados. O AES-NI mitiga isto amplamente nos computadores de secretária.

O AES-256 também não prova quem enviou o ficheiro. Para isso, combine-o com assinaturas digitais usando Ed25519 ou ECDSA.

Por que "nível militar" é sobretudo marketing

A expressão é usada porque a NSA CNSSP-15 aprovou o AES-256 para dados TOP SECRET em 2003. Isso é real, mas também tem 23 anos — o AES-128 é aprovado para SECRET e serve a maioria dos casos de uso civis de forma idêntica. O salto de 128 para 256 é uma precaução contra avanços futuros em computação quântica: o algoritmo de Grover reduz teoricamente a segurança de chaves simétricas a metade, diminuindo a força efetiva do AES-256 para 128 bits, o que ainda é seguro.

Na prática, o AES-256 custa talvez 40% mais de CPU do que o AES-128 com AES-NI e é universalmente suportado, pelo que se tornou o padrão mesmo quando 128 seria suficiente.

Como verificar se um serviço usa realmente AES-256-GCM

Três formas de verificar:

  1. Leia o whitepaper de segurança. Os serviços credíveis (Tresorit, Proton Drive, SwissTransfer, HexaTransfer) publicam o modo exato e o tratamento do IV.
  2. Inspecione o código do cliente. Abra o DevTools, pesquise no bundle JavaScript por AES-GCM ou aes-256-gcm. Deve aparecer explicitamente.
  3. Verifique as auditorias de terceiros. A Cure53, o NCC Group e o Trail of Bits publicam auditorias que nomeiam os algoritmos revistos.

Sinais de alerta: "encriptação de nível bancário" sem o modo especificado, "algoritmo proprietário" de qualquer tipo, ou referências a AES-128-ECB.

Colocar em prática

Para enviar um ficheiro sensível hoje: escolha um serviço que declare AES-256-GCM explicitamente, use um IV aleatório de 96 bits por ficheiro, e execute a encriptação no seu navegador (não nos servidores deles). Combine com uma frase-chave de 16 ou mais caracteres derivada através de Argon2id ou PBKDF2 com 600 000 ou mais iterações.

Experimente em hexatransfer.com — gratuito, sem conta, até 10 GB.

Envie arquivos grandes com segurança e criptografia de ponta a ponta

Transfira arquivos de até 10 GB gratuitamente com criptografia de ponta a ponta. Sem necessidade de conta. Seus arquivos são criptografados no navegador antes do envio — ninguém mais pode lê-los.

Enviar um arquivo