O Padrão de Criptografia Avançada (em inglês: Advanced Encryption Standard - AES), também conhecido pelo seu nome original Rijndael}), é uma especificação para a criptografia de dados eletrônicos estabelecida pelo National Institute of Standards and Technology (NIST) dos EUA em 2001.
O AES é uma variante da cifra de bloco Rijndael desenvolvida por dois criptógrafos belgas, Joan Daemen [en] e Vincent Rijmen, que enviaram uma proposta ao NIST durante o processo de seleção do AES [en]. Rijndael é uma família de cifras com diferentes tamanhos de chave e tamanhos de bloco [en]. Para o AES, o NIST selecionou três membros da família Rijndael, cada um com um tamanho de bloco de 128 bits, com três comprimentos de chave diferentes: 128, 192 e 256 bits.
O AES foi adotado pelo governo dos EUA. Ele substitui o Data Encryption Standard (DES), que foi publicado em 1977. O algoritmo descrito pelo AES é um algoritmo de chave simétrica, o que significa que a mesma chave é usada tanto para criptografar quanto para descriptografar os dados.
Nos Estados Unidos, o AES foi anunciado pelo NIST como o FIPS PUB 197 (FIPS 197) em 26 de novembro de 2001. Este anúncio seguiu um processo de padronização de cinco anos, no qual quinze designs concorrentes foram apresentados e avaliados, antes que a cifra Rijndael fosse selecionada como a mais adequada.
O AES está incluído no padrão ISO/IEC 18033-3 [en]. O AES entrou em vigor como padrão do governo federal dos EUA em 26 de maio de 2002, após aprovação pelo Secretário de Comércio dos EUA, Donald Evans [en]. O AES está disponível em muitos pacotes de criptografia diferentes e é a primeira (e única) cifra publicamente acessível aprovada pela National Security Agency (NSA) dos EUA para informações ultrassecretas (top secret) quando usada em um módulo criptográfico aprovado pela NSA. (ver § Segurança abaixo)
O Padrão de Criptografia Avançada (AES) é definido em cada um dos seguintes documentos:
FIPS PUB 197: Advanced Encryption Standard (AES)
ISO/IEC 18033-3: Cifras de bloco
O AES baseia-se em um princípio de design conhecido como rede de substituição-permutação [en] e é eficiente tanto em software quanto em hardware. Ao contrário de seu predecessor DES, o AES não usa uma rede de Feistel. O AES é uma variante do Rijndael, com um tamanho de bloco [en] fixo de 128 bits e um tamanho da chave de 128, 192 ou 256 bits. Em contraste, o Rijndael per se é especificado com tamanhos de bloco e chave que podem ser qualquer múltiplo de 32 bits, com um mínimo de 128 e um máximo de 256 bits. A maioria dos cálculos do AES é feita em um corpo finito [en] específico.
O AES opera em uma matriz de 4 × 4 em ordem de coluna de 16 bytes b0, b1, ..., b15 denominada estado (state):
{\displaystyle {\begin{bmatrix}b_{0}&b_{4}&b_{8}&b_{12}\\b_{1}&b_{5}&b_{9}&b_{13}\\b_{2}&b_{6}&b_{10}&b_{14}\\b_{3}&b_{7}&b_{11}&b_{15}\end{bmatrix}}}
O tamanho da chave usado para uma cifra AES especifica o número de rodadas de transformação que convertem a entrada, chamada de texto simples (plaintext), na saída final, chamada de texto cifrado [en] (ciphertext). O número de rodadas é o seguinte:
10 rodadas para chaves de 128 bits;
12 rodadas para chaves de 192 bits;
14 rodadas para chaves de 256 bits.
Cada rodada consiste em várias etapas de processamento, incluindo uma que depende da própria chave de criptografia. Um conjunto de rodadas inversas é aplicado para transformar o texto cifrado de volta no texto simples original usando a mesma chave de criptografia.
Descrição de alto nível do algoritmo
KeyExpansion – chaves de rodada são derivadas da chave da cifra usando o escalonamento de chaves AES [en]. O AES requer um bloco de chave de rodada de 128 bits separado para cada rodada mais um.