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 (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).
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.
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.
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.
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 chave | Número de rodadas | Nível de segurança | Aplicação |
|---|---|---|---|
| AES-128 | 10 | 128 bits | Aplicações comerciais, TLS |
| AES-192 | 12 | 192 bits | Sistemas governamentais (SECRET) |
| AES-256 | 14 | 256 bits | TOP 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.
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.
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.
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).
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.
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
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.
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.
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.
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.
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
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.
Leia também