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, e Vincent Rijmen, que enviaram uma proposta ao NIST durante o . Rijndael é uma família de cifras com diferentes tamanhos de chave e . 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 . 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, . 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.

Padrões definitivos 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

Descrição das cifras O AES baseia-se em um princípio de design conhecido como 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 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 específico.

O AES opera em uma matriz de 4 × 4 em ordem de coluna de 16 bytes denominada estado (state):Variantes de bloco grande do Rijndael usam uma matriz com colunas adicionais, mas sempre quatro linhas.

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 (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 chaves de rodada são derivadas da chave da cifra usando o . O AES requer um bloco de chave de rodada de 128 bits separado para cada rodada mais um. Adição inicial da chave de rodada: cada byte do estado é combinado com um byte da chave de rodada usando XOR bit a bit. 9, 11 ou 13 rodadas: uma etapa de substituição não linear onde cada byte é substituído por outro de acordo com uma . uma etapa de transposição onde as últimas três linhas do estado são deslocadas ciclicamente um certo número de passos. uma operação de mistura linear que opera nas colunas do estado, combinando os quatro bytes em cada coluna.

Rodada final (totalizando 10, 12 ou 14 rodadas):

A etapa

Na etapa , cada byte na matriz de estado é substituído por um usando uma (S-box) de 8 bits. Antes da rodada 0, a matriz de estado é simplesmente o texto simples/entrada. Esta operação fornece a não linearidade na cifra. A S-box usada é derivada do inverso multiplicativo sobre , conhecido por ter boas propriedades de não linearidade. Para evitar ataques baseados em propriedades algébricas simples, a S-box é construída combinando a função inversa com uma transformação afim invertível. A S-box também é escolhida para evitar quaisquer pontos fixos (e, portanto, é um desarranjo), ou seja, , e também quaisquer pontos fixos opostos, ou seja, . Ao realizar a descriptografia, a etapa (o inverso de ) é usada, o que requer primeiro tomar o inverso da transformação afim e depois encontrar o inverso multiplicativo.

A etapa

A etapa opera nas linhas do estado; ela desloca ciclicamente os bytes em cada linha por um certo deslocamento. Para o AES, a primeira linha permanece inalterada. Cada byte da segunda linha é deslocado um para a esquerda. Da mesma forma, a terceira e a quarta linhas são deslocadas por deslocamentos de dois e três, respectivamente.As variantes do Rijndael com um tamanho de bloco maior têm deslocamentos ligeiramente diferentes. Para blocos de tamanhos 128 bits e 192 bits, o padrão de deslocamento é o mesmo. A linha é deslocada circularmente à esquerda por bytes. Para um bloco de 256 bits, a primeira linha permanece inalterada e o deslocamento para a segunda, terceira e quarta linha é de 1 byte, 3 bytes e 4 bytes, respectivamente—essa mudança se aplica apenas à cifra Rijndael quando usada com um bloco de 256 bits, pois o AES não usa blocos de 256 bits. Dessa forma, cada coluna do estado de saída da etapa é composta por bytes de cada coluna do estado de entrada. A importância desta etapa é evitar que as colunas sejam criptografadas independentemente, caso em que o AES degeneraria em quatro cifras de bloco independentes.

A etapa

Na etapa , os quatro bytes de cada coluna do estado são combinados usando uma transformação linear invertível. A função recebe quatro bytes como entrada e gera quatro bytes, onde cada byte de entrada afeta todos os quatro bytes de saída. Juntamente com , fornece na cifra.

Durante esta operação, cada coluna é transformada usando uma matriz fixa (matriz multiplicada à esquerda pela coluna dá o novo valor da coluna no estado):

A multiplicação matricial é composta pela multiplicação e adição das entradas. As entradas são bytes tratados como coeficientes de polinômio de ordem . A adição é simplesmente XOR. A multiplicação é módulo polinômio irredutível . Se processado bit a bit, então, após o deslocamento, um XOR condicional com 1B16 deve ser realizado se o valor deslocado for maior que FF16 (o estouro deve ser corrigido pela subtração do polinômio gerador). Estes são casos especiais da multiplicação usual em .

Em um sentido mais geral, cada coluna é tratada como um polinômio sobre e é então multiplicada módulo com um polinômio fixo Os coeficientes são exibidos em seu equivalente hexadecimal da representação binária de polinômios de bits de . A etapa também pode ser vista como uma multiplicação pela particular mostrada no corpo finito . Esse processo é descrito mais detalhadamente no artigo .

A etapa

Na etapa , a subchave é combinada com o estado. Para cada rodada, uma subchave é derivada da chave principal usando o ; cada subchave tem o mesmo tamanho que o estado. A subchave é adicionada combinando o estado com o byte correspondente da subchave usando XOR bit a bit.

Otimização da cifra Em sistemas com palavras de 32 bits ou maiores, é possível acelerar a execução desta cifra combinando as etapas e com a etapa , transformando-as em uma sequência de consultas de tabela. Isso requer quatro tabelas de 32 bits com 256 entradas (ocupando juntas 4096 bytes). Uma rodada pode então ser realizada com 16 operações de consulta de tabela e 12 operações de ou-exclusivo (XOR) de 32 bits, seguidas por quatro operações de ou-exclusivo de 32 bits na etapa . Alternativamente, a operação de consulta de tabela pode ser realizada com uma única tabela de 32 bits com 256 entradas (ocupando 1024 bytes) seguida por operações de rotação circular.

Usando uma abordagem orientada a bytes, é possível combinar as etapas , e em uma única operação de rodada.

Segurança A National Security Agency (NSA) revisou todos os finalistas do AES, incluindo o Rijndael, e declarou que todos eles eram seguros o suficiente para dados não classificados do governo dos EUA. Em junho de 2003, o governo dos EUA anunciou que o AES poderia ser usado para proteger informações classificadas:

O AES possui 10 rodadas para chaves de 128 bits, 12 rodadas para chaves de 192 bits e 14 rodadas para chaves de 256 bits.

Orientações mais recentes da NSA, no entanto, permitem que informações classificadas sejam criptografadas apenas com chaves de 256 bits. Chaves de 128 e 192 bits não são mais suficientes para a criptografia de informações classificadas.

Ataques conhecidos Para criptógrafos, uma "quebra" criptográfica é qualquer coisa mais rápida que um ataque de força bruta ou seja, realizar uma tentativa de descriptografia para cada chave possível em sequência . Uma quebra pode, portanto, incluir resultados que são inviáveis com a tecnologia atual. Apesar de serem impraticáveis, quebras teóricas podem, às vezes, fornecer insights sobre padrões de vulnerabilidade. O maior ataque de força bruta bem-sucedido publicamente conhecido contra um algoritmo de criptografia de cifra de bloco amplamente implementado foi contra uma chave RC5 de 64 bits pelo distributed.net em 2006.

O espaço de chaves aumenta por um fator de 2 para cada bit adicional de comprimento da chave, e se cada valor possível da chave for equiprovável, isso se traduz em uma duplicação do tempo médio de busca de chave por força bruta a cada bit adicional de comprimento da chave. Isso implica que o esforço de uma busca por força bruta aumenta exponencialmente com o comprimento da chave. O comprimento da chave por si só não implica segurança contra ataques, uma vez que existem cifras com chaves muito longas que foram consideradas vulneráveis.

O AES possui uma estrutura algébrica bastante simples. Em 2002, um ataque teórico, denominado "", foi anunciado por e , pretendendo mostrar uma fraqueza no algoritmo AES, parcialmente devido à baixa complexidade de seus componentes não lineares. Desde então, outros artigos mostraram que o ataque, como apresentado originalmente, é inviável; veja .

Durante o processo de seleção do AES, desenvolvedores de algoritmos concorrentes escreveram sobre o algoritmo Rijndael: "estamos preocupados com o [seu] uso... em aplicações críticas de segurança." Em outubro de 2000, no entanto, ao final do processo de seleção do AES, Bruce Schneier, um desenvolvedor do algoritmo concorrente Twofish, escreveu que, embora pensasse que ataques acadêmicos bem-sucedidos ao Rijndael seriam desenvolvidos algum dia, ele "não acreditava que alguém jamais descobriria um ataque que permitisse ler o tráfego Rijndael."Bruce Schneier, AES Announced , 15 de outubro de 2000

Até 2006, os melhores ataques conhecidos eram em 7 rodadas para chaves de 128 bits, 8 rodadas para chaves de 192 bits e 9 rodadas para chaves de 256 bits.John Kelsey, Stefan Lucks, Bruce Schneier, Mike Stay, David Wagner e Doug Whiting, Improved Cryptanalysis of Rijndael, Fast Software Encryption, 2000 pp213–230