Ir para o conteúdo

Advanced Encryption Standard

Origem: Wikipédia, a enciclopédia livre.
Advanced Encryption Standard
(Rijndael)
Visualização da função de rodada do AES
Geral
DesignersJoan Daemen [en], Vincent Rijmen
Data da publicação1998
Derivado deSquare [en]
SucessoresAnubis [en], Grand Cru [en], Kalyna [en]
CertificaçõesVencedor do AES [en], CRYPTREC [en], NESSIE [en], NSA
Detalhes da cifra
Tamanhos das chaves128, 192 ou 256 bits[nota 1]
Tamanhos dos blocos [en]128 bits[nota 2]
EstruturaRede de substituição-permutação [en]
Rodadas [en]10, 12 ou 14 (dependendo do tamanho da chave)
Melhor criptoanálise pública
Foram publicados ataques que são computacionalmente mais rápidos que um ataque de força bruta completo, embora nenhum até 2023 seja computacionalmente viável.[1]

Para o AES-128, a chave pode ser recuperada com uma complexidade computacional de 2126,1 usando o ataque biclique [en]. Para ataques biclique no AES-192 e AES-256, aplicam-se complexidades computacionais de 2189,7 e 2254,4, respectivamente. Ataques de chaves relacionadas podem quebrar o AES-192 e AES-256 com complexidades de 299,5 e 2176 em tempo e dados, respectivamente.[2]

Outro ataque foi divulgado em blog[3] e lançado como uma preprint[4] em 2009. Este ataque é contra o AES-256 que usa apenas duas chaves relacionadas e tempo 239 para recuperar a chave completa de 256 bits de uma versão de 9 rodadas, ou tempo 245 para uma versão de 10 rodadas com um tipo mais forte de ataque de subchave relacionada, ou tempo 270 para uma versão de 11 rodadas.

O Padrão de Criptografia Avançada (em inglês: Advanced Encryption Standard - AES), também conhecido pelo seu nome original Rijndael}),[5] é uma especificação para a criptografia de dados eletrônicos estabelecida pelo National Institute of Standards and Technology (NIST) dos EUA em 2001.[6]

O AES é uma variante da cifra de bloco Rijndael[5] desenvolvida por dois criptógrafos belgas, Joan Daemen [en] e Vincent Rijmen, que enviaram uma proposta[7] ao NIST durante o processo de seleção do AES [en].[8] 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, mas 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),[9] 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.[6] 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)

Padrões definitivos

[editar | editar código]

O Padrão de Criptografia Avançada (AES) é definido em cada um dos seguintes documentos:

  • FIPS PUB 197: Advanced Encryption Standard (AES)[6]
  • ISO/IEC 18033-3: Cifras de bloco[10]

Descrição das cifras

[editar | editar código]

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.[11] 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):[nota 3]

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

[editar | editar código]
  1. 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.
  2. Adição inicial da chave de rodada:
    1. AddRoundKey – cada byte do estado é combinado com um byte da chave de rodada usando XOR bit a bit.
  3. 9, 11 ou 13 rodadas:
    1. SubBytes – uma etapa de substituição não linear onde cada byte é substituído por outro de acordo com uma tabela de consulta [en].
    2. ShiftRows – uma etapa de transposição onde as últimas três linhas do estado são deslocadas ciclicamente um certo número de passos.
    3. MixColumns – uma operação de mistura linear que opera nas colunas do estado, combinando os quatro bytes em cada coluna.
    4. AddRoundKey
  4. Rodada final (totalizando 10, 12 ou 14 rodadas):
    1. SubBytes
    2. ShiftRows
    3. AddRoundKey

A etapa SubBytes

[editar | editar código]
Na etapa SubBytes, cada byte no estado é substituído por sua entrada em uma tabela de consulta fixa de 8 bits, S; bij = S(aij).

Na etapa SubBytes, cada byte ai,j na matriz de estado é substituído por um SubByte S(ai,j) usando uma caixa de substituição [en] (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 GF(28), 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, S(ai,j) ≠ ai,j, e também quaisquer pontos fixos opostos, ou seja, S(ai,j) ⊕ ai,j ≠ FF16. Ao realizar a descriptografia, a etapa InvSubBytes (o inverso de SubBytes) é usada, o que requer primeiro tomar o inverso da transformação afim e depois encontrar o inverso multiplicativo.

A etapa ShiftRows

[editar | editar código]
Na etapa ShiftRows, os bytes em cada linha do estado são deslocados ciclicamente para a esquerda. O número de posições que cada byte é deslocado difere incrementalmente para cada linha.

A etapa ShiftRows 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.[nota 4] Dessa forma, cada coluna do estado de saída da etapa ShiftRows é 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 MixColumns

[editar | editar código]
Na etapa MixColumns, cada coluna do estado é multiplicada por um polinômio fixo c(x).

Na etapa MixColumns, os quatro bytes de cada coluna do estado são combinados usando uma transformação linear invertível. A função MixColumns recebe quatro bytes como entrada e gera quatro bytes, onde cada byte de entrada afeta todos os quatro bytes de saída. Juntamente com ShiftRows, MixColumns fornece difusão [en] 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 x7. A adição é simplesmente XOR. A multiplicação é módulo polinômio irredutível x8 + x4 + x3 + x + 1. 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 GF(28).

Em um sentido mais geral, cada coluna é tratada como um polinômio sobre GF(28) 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 GF(28)[x]. A etapa MixColumns também pode ser vista como uma multiplicação pela matriz MDS [en] particular mostrada no corpo finito GF(28). Esse processo é descrito mais detalhadamente no artigo MixColumns do Rijndael [en].

A etapa AddRoundKey

[editar | editar código]
Na etapa AddRoundKey, cada byte do estado é combinado com um byte da subchave de rodada usando a operação XOR (⊕).

Na etapa AddRoundKey, a subchave é combinada com o estado. Para cada rodada, uma subchave é derivada da chave principal usando o escalonamento de chaves do Rijndael [en]; 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

[editar | editar código]

Em sistemas com palavras de 32 bits ou maiores, é possível acelerar a execução desta cifra combinando as etapas SubBytes e ShiftRows com a etapa MixColumns, 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 AddRoundKey.[12] 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 SubBytes, ShiftRows e MixColumns em uma única operação de rodada.[13]

Segurança

[editar | editar código]

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 design e a força de todos os comprimentos de chave do algoritmo AES (ou seja, 128, 192 e 256) são suficientes para proteger informações classificadas até o nível SECRETO (SECRET). Informações ULTRASSECRETAS (TOP SECRET) exigirão o uso dos comprimentos de chave de 192 ou 256. A implementação do AES em produtos destinados a proteger sistemas de segurança nacional e/ou informações deve ser revisada e certificada pela NSA antes de sua aquisição e uso.[14]

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.

Ataques conhecidos

[editar | editar código]

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 (ver Criptoanálise § Recursos computacionais necessários). 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.[15]

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.[16] Em 2002, um ataque teórico, denominado "ataque XSL [en]", foi anunciado por Nicolas Courtois [en] e Josef Pieprzyk [en], pretendendo mostrar uma fraqueza no algoritmo AES, parcialmente devido à baixa complexidade de seus componentes não lineares.[17] Desde então, outros artigos mostraram que o ataque, como apresentado originalmente, é inviável; veja Ataque XSL em cifras de bloco [en].

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."[18] 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."[19]

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.[20]

Até maio de 2009, os únicos ataques bem-sucedidos publicados contra o AES completo eram ataques de canal lateral em algumas implementações específicas. Em 2009, um novo ataque de chaves relacionadas foi descoberto, explorando a simplicidade do escalonamento de chaves do AES e apresentando uma complexidade de 2119. Em dezembro de 2009, foi melhorado para 299,5.[2] Este é um seguimento de um ataque descoberto anteriormente em 2009 por Alex Biryukov [en], Dmitry Khovratovich [en] e Ivica Nikolić, com uma complexidade de 296 para uma em cada 235 chaves.[21] No entanto, ataques de chaves relacionadas não são uma preocupação em qualquer protocolo criptográfico projetado adequadamente, pois um protocolo bem projetado (ou seja, o software de implementação) cuidará para não permitir chaves relacionadas, essencialmente restringindo os meios de um invasor selecionar chaves pela relação.

Outro ataque foi divulgado em blog por Bruce Schneier[3] em 30 de julho de 2009, e lançado como uma preprint[22] em 3 de agosto de 2009. Este novo ataque, por Alex Biryukov, Orr Dunkelman [en], Nathan Keller, Dmitry Khovratovich e Adi Shamir, é contra o AES-256 que usa apenas duas chaves relacionadas e tempo 239 para recuperar a chave completa de 256 bits de uma versão de 9 rodadas, ou tempo 245 para uma versão de 10 rodadas com um tipo mais forte de ataque de subchave relacionada, ou tempo 270 para uma versão de 11 rodadas. O AES de 256 bits usa 14 rodadas, portanto, esses ataques não são eficazes contra o AES completo.

A praticidade desses ataques com chaves relacionadas mais fortes foi criticada,[23] por exemplo, pelo artigo sobre ataques de "chosen-key-relations-in-the-middle" no AES-128, de autoria de Vincent Rijmen em 2010.[24]

Em novembro de 2009, o primeiro ataque de distinção de chave conhecida [en] contra uma versão reduzida de 8 rodadas do AES-128 foi lançado como uma preprint.[25] Este ataque de distinção de chave conhecida é uma melhoria do ataque de rebote (rebound), ou ataque de início pelo meio, contra permutações semelhantes ao AES, que visualizam duas rodadas consecutivas de permutação como a aplicação de uma chamada Super-S-box. Ele funciona na versão de 8 rodadas do AES-128, com uma complexidade de tempo de 248 e uma complexidade de memória de 232. O AES de 128 bits usa 10 rodadas, portanto, este ataque não é eficaz contra o AES-128 completo.

Os primeiros ataques de recuperação de chave [en] no AES completo foram feitos por Andrey Bogdanov, Dmitry Khovratovich e Christian Rechberger, e foram publicados em 2011.[26] O ataque é um ataque biclique [en] e é mais rápido que a força bruta por um fator de cerca de quatro. Requer 2126,2 operações para recuperar uma chave AES-128. Para AES-192 e AES-256, são necessárias 2190,2 e 2254,6 operações, respectivamente. Este resultado foi melhorado para 2126,0 para AES-128, 2189,9 para AES-192 e 2254,3 para AES-256 por Biaoshuai Tao e Hongjun Wu em um artigo de 2015,[27] que são os melhores resultados atuais em ataques de recuperação de chave contra o AES.

Este é um ganho muito pequeno, pois uma chave de 126 bits (em vez de 128 bits) ainda levaria bilhões de anos para ser quebrada por força bruta no hardware atual e previsível. Além disso, os autores calculam que o melhor ataque usando sua técnica no AES com uma chave de 128 bits requer o armazenamento de 288 bits de dados. Isso equivale a cerca de 38 trilhões de terabytes de dados, o que era mais do que todos os dados armazenados em todos os computadores do planeta em 2016.[28] Um artigo em 2015 melhorou posteriormente a complexidade de espaço para 256 bits,[27] o que é 9007 terabytes (mantendo uma complexidade de tempo de aproximadamente 2126).

De acordo com os documentos de Snowden, a NSA está pesquisando se um ataque criptográfico baseado na estatística tau pode ajudar a quebrar o AES.[29]

Atualmente, não há nenhum ataque prático conhecido que permita a alguém sem conhecimento da chave ler dados criptografados pelo AES quando implementado corretamente.

Ataques de canal lateral

[editar | editar código]

Ataques de canal lateral não atacam a cifra como uma caixa preta, e, portanto, não estão relacionados à segurança da cifra conforme definida no contexto clássico, mas são importantes na prática. Eles atacam implementações da cifra em sistemas de hardware ou software que inadvertidamente vazam dados. Existem vários ataques conhecidos desse tipo em várias implementações do AES.

Em abril de 2005, D. J. Bernstein anunciou um ataque de temporização de cache que ele usou para quebrar um servidor personalizado que usava a criptografia AES do OpenSSL.[30] O ataque exigiu mais de 200 milhões de textos simples escolhidos.[31] O servidor personalizado foi projetado para fornecer o máximo de informações de temporização possível (o servidor relata o número de ciclos de máquina levados pela operação de criptografia). No entanto, como Bernstein apontou, "reduzir a precisão dos registros de data e hora do servidor, ou eliminá-los das respostas do servidor, não impede o ataque: o cliente simplesmente usa temporizações de ida e volta com base em seu relógio local e compensa o aumento do ruído calculando a média sobre um número maior de amostras."[30]

Em outubro de 2005, Dag Arne Osvik, Adi Shamir e Eran Tromer [en] apresentaram um artigo demonstrando vários ataques de temporização de cache contra as implementações no AES encontradas no OpenSSL e na função de criptografia de partição dm-crypt do Linux.[32] Um ataque foi capaz de obter uma chave AES inteira após apenas 800 operações acionando criptografias, em um total de 65 milissegundos. Este ataque requer que o invasor seja capaz de executar programas no mesmo sistema ou plataforma que está realizando o AES.

Em dezembro de 2009, foi publicado um ataque a algumas implementações de hardware que usava análise diferencial de falhas [en] e permite a recuperação de uma chave com complexidade de 232.[33]

Em novembro de 2010, Endre Bangerter, David Gullasch e Stephan Krenn publicaram um artigo que descrevia uma abordagem prática para uma recuperação "quase em tempo real" de chaves secretas do AES-128 sem a necessidade de texto cifrado ou texto simples. A abordagem também funciona em implementações AES-128 que usam tabelas de compressão, como OpenSSL.[34] Como alguns ataques anteriores, este requer a capacidade de executar código sem privilégios no sistema que executa a criptografia AES, o que pode ser alcançado por infecção de malware muito mais facilmente do que comandar a conta root.[35]

Em março de 2016, C. Ashokkumar, Ravi Prakash Giri e Bernard Menezes apresentaram um ataque de canal lateral em implementações AES que pode recuperar a chave AES completa de 128 bits em apenas 6 a 7 blocos de texto simples/texto cifrado, o que é uma melhoria substancial em relação a trabalhos anteriores que exigem entre 100 e um milhão de criptografias.[36] O ataque proposto requer privilégio de usuário padrão e algoritmos de recuperação de chave executados em menos de um minuto.

Muitas CPUs modernas têm instruções de hardware integradas para AES (AES-NI [en]), que protegem contra ataques de canal lateral relacionados à temporização.[37][38]

Ataques quânticos

[editar | editar código]

O AES-256 é considerado resistente a ataques quânticos, pois tem resistência quântica semelhante à resistência do AES-128 contra ataques tradicionais, não quânticos, em 128 bits de segurança [en]. O AES-192 e o AES-128 não são considerados resistentes a ataques quânticos devido aos seus tamanhos de chave menores. O AES-192 tem uma força de 96 bits contra ataques quânticos e o AES-128 tem 64 bits de força contra ataques quânticos, tornando ambos inseguros.[39][40]

Validação NIST/CSEC

[editar | editar código]

O Programa de Validação de Módulo Criptográfico [en] (CMVP) é operado em conjunto pela Divisão de Segurança de Computadores do National Institute of Standards and Technology (NIST) do governo dos Estados Unidos e pelo Communications Security Establishment (CSE) do governo do Canadá. O uso de módulos criptográficos validados pelo NIST FIPS 140-2 [en] é exigido pelo governo dos Estados Unidos para criptografia de todos os dados que tenham uma classificação de Sensível nas não classificado [en] (SBU) ou superior. Do NSTISSP #11, Política Nacional que Rege a Aquisição de Garantia da Informação: "Produtos de criptografia para proteção de informações classificadas serão certificados pela NSA, e produtos de criptografia destinados a proteger informações sensíveis serão certificados de acordo com o NIST FIPS 140-2."[41]

O governo do Canadá também recomenda o uso de módulos criptográficos validados pelo FIPS 140 [en] em aplicações não classificadas de seus departamentos.

Embora a publicação 197 do NIST ("FIPS 197") seja o documento único que cobre o algoritmo AES, os fornecedores geralmente abordam o CMVP sob o FIPS 140 e pedem para ter vários algoritmos (como 3DES ou SHA1) validados ao mesmo tempo. Portanto, é raro encontrar módulos criptográficos que sejam validados exclusivamente pelo FIPS 197 e o próprio NIST geralmente não dedica tempo para listar módulos validados pelo FIPS 197 separadamente em seu site público. Em vez disso, a validação FIPS 197 é tipicamente listada apenas como uma notação "FIPS approved: AES" (com um número de certificado FIPS 197 específico) na lista atual de módulos criptográficos validados pelo FIPS 140.

O Programa de Validação de Algoritmo Criptográfico (CAVP)[42] permite a validação independente da implementação correta do algoritmo AES. A validação bem-sucedida resulta na listagem na página de validações do NIST.[43] Este teste é um pré-requisito para a validação do módulo FIPS 140-2. No entanto, a validação CAVP bem-sucedida de forma alguma implica que o módulo criptográfico que implementa o algoritmo seja seguro. Um módulo criptográfico sem validação FIPS 140-2 ou aprovação específica pela NSA não é considerado seguro pelo governo dos EUA e não pode ser usado para proteger dados governamentais.[41]

A validação FIPS 140-2 é desafiadora de alcançar tanto técnica quanto fiscalmente.[44] Há uma bateria padronizada de testes, bem como um elemento de revisão de código-fonte que deve ser aprovado durante um período de algumas semanas. O custo para realizar esses testes por meio de um laboratório aprovado pode ser significativo (por exemplo, bem mais de US$30 000)[44] e não inclui o tempo necessário para escrever, testar, documentar e preparar um módulo para validação. Após a validação, os módulos devem ser reenviados e reavaliados se forem alterados de qualquer forma. Isso pode variar de simples atualizações de papelada, se a funcionalidade de segurança não tiver mudado, a um conjunto mais substancial de novos testes, se a funcionalidade de segurança tiver sido impactada pela mudança.

Vetores de teste

[editar | editar código]

Os vetores de teste são um conjunto de cifras conhecidas para uma determinada entrada e chave. O NIST distribui a referência de vetores de teste AES como Vetores de Teste de Resposta Conhecida (KAT) AES.[nota 5]

Desempenho

[editar | editar código]

Alta velocidade e baixos requisitos de RAM foram alguns dos critérios do processo de seleção do AES. Como o algoritmo escolhido, o AES teve bom desempenho em uma ampla variedade de hardware, de cartões inteligentes (smart cards) de 8 bits a computadores de alto desempenho.

Em um Pentium Pro, a criptografia AES requer 18 ciclos de clock por byte (cpb),[45] equivalente a uma taxa de transferência de cerca de 11 MiB/s para um processador de 200 MHz.

Em CPUs Intel Core e AMD Ryzen que suportam extensões do conjunto de instruções AES-NI [en], a taxa de transferência pode ser de múltiplos GiB/s.[46] Em uma CPU Intel Westmere [en], a criptografia AES usando AES-NI leva cerca de 1,3 cpb para AES-128 e 1,8 cpb para AES-256.[47]

Implementações

[editar | editar código]

Ver também

[editar | editar código]
  1. Tamanhos de chave de 128, 160, 192, 224 e 256 bits são suportados pelo algoritmo Rijndael, mas apenas os tamanhos de chave de 128, 192 e 256 bits são especificados no padrão AES.
  2. Tamanhos de bloco de 128, 160, 192, 224 e 256 bits são suportados pelo algoritmo Rijndael para cada tamanho de chave, mas apenas o tamanho de bloco de 128 bits é especificado no padrão AES.
  3. Variantes de bloco grande do Rijndael usam uma matriz com colunas adicionais, mas sempre quatro linhas.
  4. 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 n é deslocada circularmente à esquerda por n−1 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.
  5. Os Vetores de Teste de Resposta Conhecida (KAT) do AES estão disponíveis no formato Zip no site do NIST aqui Arquivado em 2009-10-23 no Wayback Machine

Referências

[editar | editar código]
  1. «Biclique Cryptanalysis of the Full AES» (PDF). Consultado em 1 de maio de 2019. Arquivado do original (PDF) em 6 de março de 2016 
  2. a b Alex Biryukov e Dmitry Khovratovich, Related-key Cryptanalysis of the Full AES-192 and AES-256, «Related-key Cryptanalysis of the Full AES-192 and AES-256». Table 1. Consultado em 16 de fevereiro de 2010. Cópia arquivada em 28 de setembro de 2009 
  3. a b Bruce Schneier (30 de julho de 2009). «Another New AES Attack». Schneier on Security, A blog covering security and security technology. Consultado em 11 de março de 2010. Cópia arquivada em 5 de outubro de 2009 
  4. Alex Biryukov; Orr Dunkelman; Nathan Keller; Dmitry Khovratovich; Adi Shamir (19 de agosto de 2009). «Key Recovery Attacks of Practical Complexity on AES Variants With Up To 10 Rounds». Consultado em 11 de março de 2010. Cópia arquivada em 28 de janeiro de 2010 
  5. a b Daemen, Joan; Rijmen, Vincent (9 de março de 2003). «AES Proposal: Rijndael» (PDF). National Institute of Standards and Technology. p. 1. Consultado em 21 de fevereiro de 2013. Cópia arquivada (PDF) em 5 de março de 2013 
  6. a b c «Announcing the ADVANCED ENCRYPTION STANDARD (AES)» (PDF). Federal Information Processing Standards Publication 197. United States National Institute of Standards and Technology (NIST). 26 de novembro de 2001. Consultado em 26 de agosto de 2024. Cópia arquivada (PDF) em 23 de agosto de 2024 
  7. Joan Daemen e Vincent Rijmen (Setembro de 1999). «AES Proposal: Rijndael» (PDF). Arquivado do original (PDF) em 3 de fevereiro de 2007 
  8. Schwartz, John (3 de outubro de 2000). «U.S. Selects a New Encryption Technique». The New York Times. Cópia arquivada em 28 de março de 2017 
  9. Westlund, Harold B. (2002). «NIST reports measurable success of Advanced Encryption Standard». Journal of Research of the National Institute of Standards and Technology. Arquivado do original em 3 de novembro de 2007 
  10. «ISO/IEC 18033-3: Information technology – Security techniques – Encryption algorithms – Part 3: Block ciphers». Cópia arquivada em 3 de dezembro de 2013 
  11. Bruce Schneier; John Kelsey; Doug Whiting; David Wagner; Chris Hall; Niels Ferguson; Tadayoshi Kohno; et al. (Maio de 2000). «The Twofish Team's Final Comments on AES Selection» (PDF). Cópia arquivada (PDF) em 2 de janeiro de 2010 
  12. Bertoni, Guido; Breveglieri, Luca; Fragneto, Pasqualina; MacChetti, Marco; Marchesin, Stefano (2003). «Efficient Software Implementation of AES on 32-Bit Platforms». Cryptographic Hardware and Embedded Systems - CHES 2002. Col: Lecture Notes in Computer Science. 2523. [S.l.: s.n.] pp. 159–171. ISBN 978-3-540-00409-7. doi:10.1007/3-540-36400-5_13 
  13. «byte-oriented-aes – A public domain byte-oriented implementation of AES in C – Google Project Hosting». Consultado em 23 de dezembro de 2012. Cópia arquivada em 20 de julho de 2013 
  14. Lynn Hathaway (Junho de 2003). «National Policy on the Use of the Advanced Encryption Standard (AES) to Protect National Security Systems and National Security Information» (PDF). Consultado em 15 de fevereiro de 2011. Cópia arquivada (PDF) em 6 de novembro de 2010 
  15. Ou, George (30 de abril de 2006). «Is encryption really crackable?». Ziff-Davis. Consultado em 7 de agosto de 2010. Cópia arquivada em 8 de agosto de 2010 
  16. «Sean Murphy». University of London. Consultado em 2 de novembro de 2008. Cópia arquivada em 31 de janeiro de 2009 
  17. Bruce Schneier. «AES News, Crypto-Gram Newsletter, September 15, 2002». Consultado em 27 de julho de 2007. Cópia arquivada em 7 de julho de 2007 
  18. Niels Ferguson; Richard Schroeppel; Doug Whiting (2001). «A simple algebraic representation of Rijndael» (PDF/PostScript). Proceedings of Selected Areas in Cryptography, 2001, Lecture Notes in Computer Science. Springer-Verlag. pp. 103–111. CiteSeerX 10.1.1.28.4921Acessível livremente. Consultado em 6 de outubro de 2006. Cópia arquivada em 4 de novembro de 2006 
  19. Bruce Schneier, AES Announced Arquivado em 2009-02-01 no Wayback Machine, 15 de outubro de 2000
  20. John Kelsey, Stefan Lucks, Bruce Schneier, Mike Stay, David Wagner e Doug Whiting, Improved Cryptanalysis of Rijndael, Fast Software Encryption, 2000 pp213–230 «Academic: Improved Cryptanalysis of Rijndael - Schneier on Security». Consultado em 6 de março de 2007. Cópia arquivada em 23 de fevereiro de 2007 
  21. Nikolić, Ivica (2009). «Distinguisher and Related-Key Attack on the Full AES-256». Advances in Cryptology - CRYPTO 2009. Col: Lecture Notes in Computer Science. 5677. [S.l.]: Springer Berlin / Heidelberg. pp. 231–249. ISBN 978-3-642-03355-1. doi:10.1007/978-3-642-03356-8_14 
  22. Alex Biryukov; Orr Dunkelman; Nathan Keller; Dmitry Khovratovich; Adi Shamir (19 de agosto de 2009). «Key Recovery Attacks of Practical Complexity on AES Variants With Up To 10 Rounds». Consultado em 11 de março de 2010. Cópia arquivada em 28 de janeiro de 2010 
  23. Agren, Martin (2012). On Some Symmetric Lightweight Cryptographic Designs. [S.l.]: Dissertação, Lund University. pp. 38–39 
  24. Vincent Rijmen (2010). «Practical-Titled Attack on AES-128 Using Chosen-Text Relations» (PDF). IACR Cryptology ePrint Archive. Cópia arquivada (PDF) em 2 de julho de 2010 
  25. Henri Gilbert; Thomas Peyrin (9 de novembro de 2009). «Super-Sbox Cryptanalysis: Improved Attacks for AES-like permutations». IACR Cryptology ePrint Archive. Consultado em 11 de março de 2010. Cópia arquivada em 4 de junho de 2010 
  26. Bogdanov, Andrey; Khovratovich, Dmitry; Rechberger, Christian (2011). «Biclique Cryptanalysis of the Full AES». In: Lee, Dong Hoon; Wang, Xiaoyun. Advances in Cryptology – ASIACRYPT 2011. Col: Lecture Notes in Computer Science. 7073. [S.l.: s.n.] pp. 344–371. ISBN 978-3-642-25385-0. doi:10.1007/978-3-642-25385-0_19 
  27. a b Tao, Biaoshuai; Wu, Hongjun (2015). «Improving the Biclique Cryptanalysis of AES». In: Foo, Ernest; Stebila, Douglas. Information Security and Privacy. Col: Lecture Notes in Computer Science. 9144. [S.l.: s.n.] pp. 39–56. ISBN 978-3-319-19962-7. doi:10.1007/978-3-319-19962-7_3 
  28. Jeffrey Goldberg (18 de agosto de 2011). «AES Encryption isn't Cracked». Consultado em 30 de dezembro de 2014. Arquivado do original em 8 de janeiro de 2015 
  29. «Prying Eyes: Inside the NSA's War on Internet Security». Spiegel Online. Hamburgo, Alemanha. 28 de dezembro de 2014. Consultado em 4 de setembro de 2015. Cópia arquivada em 24 de janeiro de 2015 
  30. a b «Index of formal scientific papers». Cr.yp.to. Consultado em 2 de novembro de 2008. Cópia arquivada em 17 de setembro de 2008 
  31. Bruce Schneier (17 de maio de 2005). «AES Timing Attack». Consultado em 17 de março de 2007. Cópia arquivada em 12 de fevereiro de 2007 
  32. Dag Arne Osvik; Adi Shamir; Eran Tromer (20 de novembro de 2005). «Cache Attacks and Countermeasures: the Case of AES» (PDF). The Cryptographer's Track at RSA Conference 2006. Col: Lecture Notes in Computer Science. 3860. [S.l.: s.n.] pp. 1–20. ISBN 978-3-540-31033-4. doi:10.1007/11605805_1. Consultado em 2 de novembro de 2008. Cópia arquivada (PDF) em 19 de junho de 2006 
  33. Dhiman Saha; Debdeep Mukhopadhyay; Dipanwita RoyChowdhury. «A Diagonal Fault Attack on the Advanced Encryption Standard» (PDF). IACR Cryptology ePrint Archive. Consultado em 8 de dezembro de 2009. Cópia arquivada (PDF) em 22 de dezembro de 2009 
  34. Endre Bangerter; David Gullasch; Stephan Krenn (2010). «Cache Games – Bringing Access-Based Cache Attacks on AES to Practice» (PDF). IACR Cryptology ePrint Archive. Cópia arquivada (PDF) em 14 de dezembro de 2010  Verifique o valor de |name-list-format=amp (ajuda)
  35. «Breaking AES-128 in realtime, no ciphertext required». Hacker News. Consultado em 23 de dezembro de 2012. Cópia arquivada em 3 de outubro de 2011 
  36. Ashokkumar, C.; Giri, Ravi Prakash; Menezes, Bernard (12 de maio de 2016). Highly Efficient Algorithms for AES Key Retrieval in Cache Access Attacks. 2016 IEEE European Symposium on Security and Privacy (EuroS&P). Saarbruecken, Alemanha. pp. 261–275. doi:10.1109/EuroSP.2016.29 
  37. Mowery, Keaton; Keelveedhi, Sriram; Shacham, Hovav (19 de outubro de 2012). Are AES x86 cache timing attacks still feasible? (PDF). CCS'12: the ACM Conference on Computer and Communications Security. Raleigh, Carolina do Norte, EUA. pp. 19–24. doi:10.1145/2381913.2381917. Cópia arquivada (PDF) em 9 de agosto de 2017 
  38. «Securing the Enterprise with Intel AES-NI» (PDF). Intel Corporation. Consultado em 26 de julho de 2017. Cópia arquivada (PDF) em 31 de março de 2013 
  39. Bonnetain, Xavier; Naya-Plasencia, María; Schrottenloher, André (11 de junho de 2019). «Quantum Security Analysis of AES». IACR Transactions on Symmetric Cryptology. 2019 (2): 55–93. doi:10.13154/tosc.v2019.i2.55-93Acessível livremente 
  40. O'Shea, Dan (26 de abril de 2022). «AES-256 joins the quantum resistance». Fierce Electronics. Consultado em 26 de setembro de 2023 
  41. a b «NSTISSP No. 11, Revised Fact Sheet, National Information Assurance Acquisition Policy» (PDF). Consultado em 29 de maio de 2012. Arquivado do original (PDF) em 21 de abril de 2012 
  42. «NIST.gov – Computer Security Division – Computer Security Resource Center». Csrc.nist.gov. Consultado em 23 de dezembro de 2012. Cópia arquivada em 2 de janeiro de 2013 
  43. «Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules». Consultado em 26 de junho de 2014. Arquivado do original em 26 de dezembro de 2014 
  44. a b OpenSSL, openssl@openssl.org. «OpenSSL's Notes about FIPS certification». Openssl.org. Consultado em 23 de dezembro de 2012. Arquivado do original em 2 de janeiro de 2013 
  45. Schneier, Bruce; Kelsey, John; Whiting, Doug; Wagner, David; Hall, Chris; Ferguson, Niels (1 de fevereiro de 1999). «Performance Comparisons of the AES submissions» (PDF). Consultado em 28 de dezembro de 2010. Cópia arquivada (PDF) em 22 de junho de 2011 
  46. «AMD Ryzen 7 1700X Review» 
  47. «Intel Advanced Encryption Standard (AES) New Instructions Set» (PDF). Maio de 2010