AES: o que é, algoritmo de criptografia simétrica e onde é usado

Autor: IT Sectr Publicado: 2026-04-02 Tempo de leitura: 9 min

AES (Advanced Encryption Standard) é um algoritmo de criptografia simétrica por blocos adotado em 2001 pelo Instituto Nacional de Padrões e Tecnologia dos EUA (NIST) como padrão oficial. O AES substituiu o obsoleto DES e desde então se tornou o algoritmo de criptografia mais difundido no mundo, usado desde sistemas bancários até aplicativos móveis. De acordo com o NIST (2023), o AES fornece segurança equivalente a 2^256 operações para uma chave de 256 bits, tornando-o invulnerável a ataques modernos de força bruta. NIST FIPS 197, 2023

Pontos principais

  • AES é uma cifra simétrica por blocos com tamanho de bloco fixo de 128 bits e chaves de 128, 192 ou 256 bits.
  • Modo GCM é o modo de operação AES recomendado para aplicativos móveis, fornecendo criptografia autenticada.
  • AES-256 é a versão com nível máximo de segurança, recomendada para proteger dados altamente sensíveis.
  • Aceleração por hardware — as instruções AES-NI do processador permitem criptografia em velocidades de até 10 GB/s em dispositivos modernos.
  • Android e iOS fornecem APIs integradas para AES: Android Keystore e iOS CryptoKit com suporte a aceleração por hardware.

O que é AES?

AES (Advanced Encryption Standard) é uma cifra simétrica por blocos desenvolvida pelos criptógrafos belgas Joan Daemen e Vincent Rijmen sob o nome Rijndael. Em 2001, o NIST selecionou o Rijndael como vencedor da competição para um novo padrão de criptografia dos EUA após cinco anos de testes públicos e análise. O AES opera em blocos de dados de tamanho fixo (128 bits) e suporta três comprimentos de chave: 128, 192 e 256 bits. O número de rodadas de transformação depende do comprimento da chave: 10 rodadas para 128 bits, 12 para 192 bits e 14 para 256 bits. Cada rodada inclui quatro operações: SubBytes (substituição não linear de bytes via S-box), ShiftRows (deslocamento cíclico de linhas), MixColumns (mistura de colunas) e AddRoundKey (XOR com a chave da rodada).

História do padrão AES

O desenvolvimento do AES começou em 1997 quando o NIST anunciou uma competição para substituir o DES, cuja chave de 56 bits foi quebrada em 22 horas em 1998 no dispositivo especializado Deep Crack. Quinze algoritmos de vários países participaram, incluindo Serpent (Reino Unido), Twofish (EUA) e RC6 (EUA). Para a final de 1999, restaram 5 candidatos. O Rijndael venceu devido à sua combinação de alta velocidade em todas as plataformas (de microcontroladores de 8 bits a servidores de 64 bits), resistência à criptoanálise e implementação compacta em hardware. Desde 2006, o AES é usado para criptografar dados classificados como SECRET e TOP SECRET em sistemas governamentais dos EUA. Hoje, o AES está incorporado em todos os principais protocolos: TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 e Bluetooth BR/EDR.

Como funciona a criptografia AES

AES processa dados em blocos de 128 bits (16 bytes), organizados como uma matriz 4x4 bytes chamada state. Cada rodada de criptografia realiza uma sequência de transformações determinísticas que criam coletivamente um efeito avalanche: alterar um bit dos dados de entrada altera cerca de 50% dos bits de saída. Esse efeito torna o AES resistente à criptoanálise diferencial e linear — os principais métodos para quebrar cifras de bloco.

O processo começa com AddRoundKey — aplicação de XOR da chave inicial com o state. Em seguida, as rodadas são executadas: SubBytes substitui cada byte do state por um valor da S-box (tabela de substituição). ShiftRows desloca ciclicamente a segunda linha em 1 posição, a terceira em 2, a quarta em 3 — garantindo a mistura entre colunas. MixColumns multiplica cada coluna do state por uma matriz fixa no campo de Galois GF(2^8), criando dependência de cada byte de saída em todos os quatro bytes de entrada da coluna. AddRoundKey aplica XOR com a próxima chave de rodada, derivada da chave original através de Key Expansion. A última rodada omite MixColumns. A descriptografia usa as operações inversas InvSubBytes, InvShiftRows, InvMixColumns e AddRoundKey em ordem reversa. Para desenvolvedores móveis, não é necessário entender a estrutura interna do AES — basta saber como chamar corretamente as APIs integradas da plataforma com parâmetros adequados.

Efeito avalanche e força criptográfica do AES

A principal característica do AES que garante sua força criptográfica é o efeito avalanche. Alterar um bit no texto simples ou na chave resulta na alteração de aproximadamente 50% dos bits do texto cifrado, tornando o AES extremamente resistente à criptoanálise diferencial e linear. A combinação de SubBytes (não linearidade via S-box) e MixColumns (difusão via multiplicação em campo de Galois) cria uma complexidade matemática tal que mesmo conhecendo parte do texto cifrado não permite recuperar a chave mais rápido que por força bruta. De acordo com a análise do NIST (2018), o melhor ataque conhecido ao AES-128 — o ataque biclique — reduz o comprimento efetivo da chave em apenas 2 bits (para 126.2 bits), sem fornecer vantagem prática ao atacante. Para AES-256, não existem ataques praticamente viáveis que superem a força bruta.

Tamanhos de chave AES e níveis de segurança

AES suporta três tamanhos de chave, cada um correspondendo a um nível específico de força criptográfica. A escolha do tamanho da chave afeta a segurança, o desempenho e os requisitos de recursos do dispositivo.

Tamanho da chaveNúmero de rodadasNível de segurançaAplicação
AES-12810128 bitsAplicações comerciais, TLS
AES-19212192 bitsSistemas governamentais (SECRET)
AES-25614256 bitsTOP SECRET, setor financeiro

Regra prática: para aplicativos móveis use AES-256 por padrão. A diferença de desempenho entre AES-128 e AES-256 em dispositivos modernos com suporte AES-NI não é superior a 10–15%, mas o nível de segurança dobra. De acordo com a análise quântica (Grassl et al., 2016), quebrar o AES-128 exigiria 2^77 operações quânticas através do algoritmo de Grover, enquanto o AES-256 exigiria 2^149, tornando o AES-256 resistente a ataques quânticos pelos próximos 20–30 anos. Mesmo o AES-128 fornece proteção suficiente para a grande maioria dos cenários comerciais: a força bruta de uma chave de 128 bits exigiria mais energia do que existe no universo de acordo com a estimativa de Bruce Schneier. No entanto, os padrões de segurança (GDPR, HIPAA, PCI DSS) frequentemente exigem explicitamente AES-256, portanto, projetos em produção devem usar o comprimento máximo de chave.

Modos de operação AES

AES como cifra de bloco criptografa blocos de tamanho fixo (128 bits). Para criptografar dados de comprimento arbitrário, são usados modos de operação. A seleção do modo afeta criticamente a segurança: o modo errado pode anular a força do AES.

  • ECB (Electronic Codebook) — o modo mais simples e mais inseguro. Cada bloco é criptografado independentemente com a mesma chave. Blocos de texto simples idênticos produzem blocos de texto cifrado idênticos, permitindo recuperar a estrutura dos dados. Proibido em todos os padrões de segurança modernos. NUNCA use ECB em aplicativos móveis.
  • CBC (Cipher Block Chaining) — cada bloco de texto cifrado anterior é usado como vetor de inicialização (IV) para o próximo. Requer um IV aleatório para cada mensagem. Vulnerável a ataques de padding oracle quando implementado incorretamente. Adequado para criptografia de arquivos, mas requer MAC (HMAC) para integridade dos dados.
  • GCM (Galois/Counter Mode) — o modo recomendado para aplicativos móveis. Fornece criptografia autenticada (AEAD): criptografia + verificação de integridade em uma única operação. Usa um contador para geração de fluxo de chave e multiplicação em campo de Galois para autenticação. GCM requer um nonce único (12 bytes) para cada mensagem. Recomendado pelo NIST, usado em TLS 1.2/1.3 e Android Keystore.
  • CCM (Counter with CBC-MAC) — um modo AEAD alternativo baseado em CTR + CBC-MAC. Mais lento que GCM e não suporta processamento paralelo. Usado em protocolos ZigBee e 802.11 (Wi-Fi). Para aplicativos móveis, GCM é preferível.

Para projetos móveis use AES-256-GCM com um nonce de 12 bytes. GCM resolve dois problemas simultaneamente: criptografia de dados e autenticação, prevenindo ataques de padding oracle e chosen ciphertext. Android Keystore e iOS CryptoKit suportam AES-GCM nativamente sem necessidade de primitivas criptográficas adicionais. Ao trabalhar com GCM, é crítico nunca reutilizar o nonce com a mesma chave — isso destrói completamente a segurança da criptografia. Gere um novo nonce aleatório para cada criptografia e armazene-o junto com o texto cifrado.

Implementação de AES em aplicativos móveis

Vamos ver um exemplo de implementação segura de AES-256-GCM no Android usando Jetpack Security. O código abaixo demonstra o ciclo completo: criação de uma chave AES-256 via MasterKey, criptografia e descriptografia de uma string com dados autenticados adicionais (AAD).

kotlin
import androidx.security.crypto.MasterKey
import androidx.security.crypto.EncryptedSharedPreferences

val masterKey = MasterKey.Builder(context)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

val securePrefs = EncryptedSharedPreferences.create(
    context,
    "secure_prefs",
    masterKey,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)

fun storeSecureData(key: String, value: String) {
    securePrefs.edit().putString(key, value).apply()
}

fun readSecureData(key: String): String? {
    return securePrefs.getString(key, null)
}

A principal característica desta solução é que o AES-256-GCM é usado em dois níveis: para criptografar pares chave-valor (PrefValueEncryptionScheme) e para proteger os nomes das chaves (PrefKeyEncryptionScheme usa AES-256-SIV, resistente à reutilização de nonce). O MasterKey é gerado usando o algoritmo AES-256-GCM e armazenado no Android Keystore, protegido por hardware em dispositivos com Trusted Execution Environment. Em dispositivos sem suporte de hardware (TEE), a chave é criptografada via Bouncy Castle, o que ainda é mais seguro que armazenar em SharedPreferences.

Para criptografia direta de grandes volumes de dados (por exemplo, imagens ou arquivos), use AES-256-GCM via EncryptedFile do AndroidX Security. Para exportação de chaves (por exemplo, para backup), use criptografia adicional com uma senha de usuário via PBKDF2 com 100000+ iterações.

AES no iOS via CryptoKit

No iOS, as operações AES são organizadas através do framework CryptoKit (Swift 5.0+). Uma chave AES-256 é criada via SymmetricKey(size: .bits256) e armazenada no Secure Enclave — um criptoprocessador de hardware isolado da CPU principal e do sistema operacional. O CryptoKit fornece duas implementações de AES: AES.GCM (recomendado) e AES.CBC (para compatibilidade com formatos legados). A criptografia é realizada através do método seal(), que recebe dados, chave e nonce (12 bytes), e retorna AES.GCM.SealedBox — uma estrutura contendo o texto cifrado e o tag de autenticação. A descriptografia é feita através de open(). A Apple recomenda fortemente não usar CommonCrypto diretamente: o CryptoKit seleciona automaticamente os parâmetros ideais, protege contra ataques de canal lateral e utiliza a aceleração de hardware AES-NI em processadores Apple Silicon. Em dispositivos com Secure Enclave, as chaves nunca saem do módulo de hardware, impedindo o roubo mesmo com comprometimento total do aplicativo. Para serialização de chaves, use o método withUnsafeBytes seguido de armazenamento no Keychain via SecItemAdd com o atributo kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.

Perguntas frequentes

O que é AES em termos simples?

AES é um algoritmo que converte dados legíveis em um conjunto ilegível de bytes usando uma chave secreta. A mesma chave é necessária para retornar os dados à sua forma original. O AES é tão confiável que é usado para criptografar documentos secretos do governo dos EUA.

Qual a diferença entre AES-128 e AES-256?

AES-128 usa uma chave de 128 bits e realiza 10 rodadas de criptografia. AES-256 usa uma chave de 256 bits e 14 rodadas, tornando-o 2^128 vezes mais difícil de quebrar. Para aplicativos móveis, o AES-256 é recomendado devido à diferença mínima de desempenho.

Qual modo AES é o mais seguro?

AES-256-GCM é o modo mais seguro e recomendado. GCM fornece criptografia autenticada (criptografia + verificação de integridade). O modo ECB é proibido, CBC requer um MAC separado. GCM é o padrão de fato para aplicativos móveis.

O AES pode ser quebrado?

Teoricamente, o AES pode ser quebrado por força bruta, mas para AES-256 seriam necessárias 2^256 tentativas — mais que o número de átomos no universo observável. Não existem ataques práticos ao AES-256. Ataques de canal lateral (Spectre, Meltdown) não quebram o AES, mas roubam chaves da memória, portanto o armazenamento de chaves em hardware é crítico.

Como usar AES em um aplicativo móvel no Android?

Use a biblioteca AndroidX Security: MasterKey.Builder com KeyScheme.AES256_GCM cria uma chave protegida no Android Keystore, e EncryptedSharedPreferences criptografa automaticamente todos os dados via AES-256-GCM. Sem criptografia manual — a API é segura por padrão, sem risco de erros do desenvolvedor.

Resumo

  • AES é o algoritmo de criptografia simétrica mais difundido e testado, padronizado pelo NIST em 2001.
  • AES-256 fornece o máximo nível de segurança com margem contra ataques quânticos pelos próximos 20–30 anos.
  • Modo GCM é o único modo recomendado para aplicativos móveis: criptografia + autenticação em uma única operação.
  • Android Keystore e iOS Secure Enclave — armazenamentos de hardware que isolam as chaves AES do aplicativo.
  • Jetpack Security (Android) e CryptoKit (iOS) fornecem implementações seguras de AES-256-GCM sem criptografia manual.
  • Nonce (IV) para GCM deve ser único para cada criptografia — a reutilização destrói completamente a segurança.
  • Recomendação: use AES-256-GCM via EncryptedSharedPreferences no Android e CryptoKit no iOS para todos os dados sensíveis.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também