Saltar para o conteúdo

Advanced Encryption Standard

Origem: Wikipédia, a enciclopédia livre.
 Nota: Se procura pela empresa multinacional AES, veja AES Corporation.


Padrão de criptografia avançada

(AES)

(Rijndael)

Visualização da função de rodada AES
Geral
Designers Vincent Rijmen e Joan Daemen
Publicado pela primeira vez 1998
Derivado de Square
Sucessores Anubis, Grand Cru, Kalyna
Certificações Vencedor AES, CRYPTREC, NESSIE, NSA
Detalhe de cifra
Tamanhos das chaves 128, 192 ou 256 bits[nota 1]
Tamanho dos blocos 128 bits[nota 2]
Estrutura Rede de substituição-permutação
Rodadas 10, 12 ou 14 (dependendo do tamanho da chave)
Melhor criptoanálise pública
Foram publicados ataques que são computacionalmente mais rápidos do que um ataque de força bruta completo, embora nenhum deles, em 2013, 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. Para ataques biclique em AES-192 e AES-256, as complexidades computacionais são, respectivamente, de 2189,7 e 2254,4. Ataques de chaves relacionadas podem, respectivamente, "quebrar" o AES-256 e o AES-192 com complexidades de 299,5 e 2176 em tempo e dados.[2]

O padrão de criptografia avançada - advanced encryption standard (AES), também conhecido por seu nome original Rijndael,[3] é uma especificação para a criptografia de dados eletrônicos estabelecida pelo instituto nacional de padrões e tecnologia dos E.U.A. (NIST) em 2001.[4]

O AES é um subconjunto da cifra de bloco Rijndael[3] desenvolvida por dois criptógrafos belgas, Vincent Rijmen e Joan Daemen, que submeteram uma proposta[5] ​ao NIST durante o processo de seleção do AES.[6] A Rijndael é uma família de cifras com diferentes tamanhos de chave e bloco. 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 Estados Unidos da América. Ele substitui o padrão de criptografia de dados (DES),[7] que foi publicado em 1977. O algoritmo descrito pelo AES é um algoritmo de chave simétrica, o que significa que a mesma chave é usada para criptografar e descriptografar os dados.

Nos Estados Unidos da América, o AES foi anunciado pelo NIST como U.S. FIPS PUB 197 (FIPS 197) em 26 de novembro de 2001.[4] 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 de Rijndael fosse selecionada como a mais adequada (consulte o processo de padrão de criptografia avançada para obter mais detalhes).

O AES está incluído no padrão ISO/IEC 18033-3. O AES tornou-se efetivo como um padrão do governo federal dos E.U.A. em 26 de maio de 2002, após a aprovação do secretário de comércio dos E.U.A. O AES está disponível em muitos pacotes de criptografia diferentes e é a primeira (e única) cifra acessível publicamente aprovada pela agência de segurança nacional dos E.U.A. (NSA) para informações ultrassecretas quando usada em um módulo criptográfico aprovado pela NSA (consulte Segurança do AES, abaixo)

Padrões definitivos

[editar | editar código-fonte]

O advanced encryption standard (AES) é definido em cada um dos seguintes:

  • FIPS PUB 197: Padrão de criptografia avançado (advanced encryption standard - AES)[4]
  • ISO/IEC 18033-3: Cifras de bloco[8]

Descrição das cifras

[editar | editar código-fonte]

O AES é baseado em um princípio de design conhecido como rede de substituição-permutação, e é eficiente tanto em software quanto em hardware.[9] Ao contrário de seu predecessor, o DES, o AES não usa uma cifra Feistel. O AES é uma variante do Rijndael, com um tamanho de bloco fixo de 128 bits e um tamanho de chave de 128, 192 ou 256 bits. Em contraste, 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.

O AES opera em um arranjo de bytes de ordem principal de linha e de coluna 4 × 4, denominada estado.[nota 3] A maioria dos cálculos AES são feitos em um determinado campo finito.

Por exemplo, 16 bytes, são representados como este arranjo bidimensional:

O tamanho de chave usado para uma cifra AES especifica o número de rodadas de transformação que convertem a entrada, chamada de texto simples, na saída final, chamada de texto cifrado. 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 reversas é aplicado para transformar o texto cifrado de volta ao texto plano original usando a mesma chave de criptografia.

Descrição de alto nível do algoritmo

[editar | editar código-fonte]
  1. KeyExpansion  – as chaves das rodadas são derivadas da chave de cifragem usando o planejamento de chave AES. O AES requer uma rodada, de bloco, de chave de 128 bits separada para cada rodada mais um.
  2. Adição da chave da rodada inicial:
    1. AddRoundKey  – cada byte do estado é combinado com um byte da chave da rodada usando operações bit a bit xor.
  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 pesquisa.
    2. ShiftRows  – uma etapa de transposição em que as três últimas linhas do estado são deslocadas ciclicamente em um certo número de etapas.
    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 (fazendo 10, 12 ou 14 rodadas no total):
    1. SubBytes
    2. ShiftRows
    3. AddRoundKey

A etapa SubBytes

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

Na etapa SubBytes, cada byte no arranjo de estado é substituído por um SubByte usando uma caixa de substituição de 8 bits. Esta operação fornece a não linearidade na cifra. A caixa de substituição 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 caixa de substituição é construída combinando a função inversa com uma transformação afim invertível. A caixa de substituição também é escolhida para evitar quaisquer pontos fixos (e assim é um desarranjo), ou seja, , e também quaisquer pontos fixos opostos, ou seja, . Ao realizar a descriptografia, a etapa InvSubBytes (o inverso de SubBytes) é usada, o que requer primeiro pegar o inverso da transformação afim e então encontrar o inverso multiplicativo.

A etapa ShiftRows

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

A etapa ShiftRows opera nas filas de estado. Ela desloca ciclicamente os bytes em cada linha por um certo offset. 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 linha são deslocadas por deslocamentos de duas e três, respectivamente.[nota 4] Desta forma, cada coluna de saída de estado da etapa ShiftRows é composta de bytes de cada coluna de entrada de estado. A importância desta etapa é evitar que as colunas sejam criptografadas de forma independente, caso em que o AES degeneraria em quatro cifras de bloco independentes.

A etapa MixColumns

[editar | editar código-fonte]
Na etapa MixColumns, cada coluna de estado é multiplicada por um polinômio fixo .

Na etapa MixColumns, os quatro bytes de cada coluna de estado são combinados usando uma transformação linear invertível. A função MixColumns leva quatro bytes como entrada e produz quatro bytes, onde cada byte de entrada afeta todos os quatro bytes de saída. Junto com o ShiftRows, o MixColumns fornece difusão na cifra.

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

A multiplicação da matriz é 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 é um polinômio modulo irredutível . Se processado bit a bit, então, após o deslocamento, um condicional XOR com 1B16 deve ser executado 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 o módulo multiplicado com um polinômio fixo . Os coeficientes são exibidos em seus hexadecimais equivalentes da representação binária de polinômios de bits de . A etape MixColumns também pode ser vista como uma multiplicação pela matriz MDS particular mostrada no campo finito . Este processo é descrito mais detalhadamente no artigo Rijndael MixColumns.

A etapa AddRoundKey

[editar | editar código-fonte]
Na etapa AddRoundKey, cada byte de estado é combinado com um byte da subchave da 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 planejamento de chave AES e cada subchave tem o mesmo tamanho que o estado. A subchave é adicionada combinando cada byte de estado com o byte correspondente da subchave usando o XOR bit a bit.

Otimização da cifra

[editar | editar código-fonte]

Em sistemas com palavras de 32 bits ou mais, é 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 pesquisas de tabela. Isso requer quatro tabelas de 32 bits de 256 entradas (ocupando, juntas, 4096 bytes). Uma rodada pode então ser realizada com 16 operações de pesquisa de tabela e 12 operações XOR de 32 bits, seguidas por quatro operações XOR de 32 bits na etapa AddRoundKey.[10] Como alternativa, a operação de pesquisa de tabela pode ser realizada com uma única tabela de 32 bits de 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 operação de rodada única.[11]

A Agência de Segurança Nacional (National Security Agency - NSA) analisou todos os finalistas do AES, incluindo Rijndael, e afirmou que todos eles eram seguros o suficiente para dados não classificados do governo dos Estados Unidos da América. Em junho de 2003, o governo dos EUA anunciou que o AES poderia ser usado para proteger informações classificadas:

O projeto e a força de todos os comprimentos de chave do algoritmo AES (ou seja, 128, 192 e 256) são suficientes para proteger as informações classificadas até o nível secreto. As informações ultrassecretas exigirão o uso de chaves de comprimento 192 ou 256. A implementação de AES em produtos destinados à proteção de sistemas e/ou informações de segurança nacional deve ser revisada e certificada pela NSA antes de sua aquisição e uso.[12]

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

Em 2006, os ataques mais conhecidos foram em 7 rodadas para chaves de 128 bits, 8 rodadas para chaves de 192 bits e 9 rodadas para chaves de 256 bits.[13]

Validação NIST/CSEC

[editar | editar código-fonte]

O programa de validação de módulo criptográfico (CMVP) é operado, em conjunto, pela divisão de segurança informática do governo dos Estados Unidos instituto nacional de padrões e tecnologia (NIST) e o estabelecimento de segurança de comunicações (CSE) do governo do Canadá. O uso de módulos criptográficos validados para NIST FIPS 140-2 é exigido pelo governo dos Estados Unidos para a criptografia de todos os dados que tenham uma classificação de "sensível, mas não classificado (SBU) ou superior". Do NSTISSP #11, política nacional que rege a aquisição de garantia de informações: “Os produtos de criptografia para proteção de informações classificadas serão certificados pela NSA e os produtos de criptografia destinados à proteção de informações confidenciais serão certificados de acordo com o NIST FIPS 140-2.”[14]

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

Embora a publicação NIST 197 ("FIPS 197") seja o documento único que cobre o algoritmo AES, os fornecedores normalmente abordam o CMVP sob o FIPS 140 e pedem para ter vários algoritmos (como o DES triplo ou o SHA-1) 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 se preocupa em listar os módulos validados pelo FIPS 197 separadamente em seu site público. Em vez disso, a validação FIPS 197 é, normalmente, listada apenas como uma notação "FIPS aprovado: AES" (com um número de certificado FIPS 197 específico) na lista atual de módulos criptográficos validados FIPS 140.

O programa de validação de algoritmo criptográfico (CAVP)[15] permite a validação independente da implementação correta do algoritmo AES. A validação bem-sucedida resulta em ser listado na página de validações NIST.[16] Este teste é um pré-requisito para a validação do módulo FIPS 140-2 descrito abaixo. No entanto, a validação CAVP bem-sucedida não implica de forma alguma 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 da NSA não é considerado seguro pelo governo dos EUA e não pode ser usado para proteger dados governamentais.[14]

A validação do FIPS 140-2 é um desafio técnico e fiscal.[17] Existe uma bateria padronizada de testes, bem como um elemento de revisão do código-fonte que deve ser aprovado por 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)[17] e não inclui o tempo que leva 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 alguma forma. Isso pode variar de simples atualizações de papelada, se a funcionalidade de segurança não foi alterada, à um conjunto mais substancial de novos testes, se a funcionalidade de segurança foi afetada pela alteração.

Vetores de teste

[editar | editar código-fonte]

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 (known answer test - KAT) AES.[nota 5][18]

Os requisitos alta velocidade e baixo RAM foram os critérios do processo de seleção do AES. Como o algoritmo escolhido, o AES teve um bom desempenho em uma ampla variedade de hardware, desde smart cards de 8 bits à computadores de alto desempenho.

Em um Pentium Pro, a criptografia AES requer 18 ciclos de clock por byte,[19] equivalente à 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, a taxa de transferência pode ser de vários GB/s (mesmo acima de 10 GB/s).[20]

Onde o hardware da CPU não suporta aceleração AES, ChaCha é uma cifra alternativa com melhor desempenho e sem sacrificar a segurança.[21][22]


Notas

  1. Chaves de 128, 160, 192, 224 e 256 bits são suportadas pelo algoritmo Rijndael, mas apenas as chaves de 128, 192 e 256 bits são especificadas no padrão AES.
  2. Blocos de 128, 160, 192, 224 e 256 bits para cada chave são suportados pelo algoritmo Rijndael, mas apenas o bloco de 128 bits é especificado no padrão AES.
  3. As variantes Rijndael de bloco grande usam um arranjo com colunas adicionais, mas sempre com quatro linhas.
  4. As variantes de Rijndael com um tamanho de bloco maior têm deslocamentos ligeiramente diferentes. Para blocos de tamanhos 128 e 192 bits, o padrão de deslocamento é o mesmo. A linha é deslocada para a esquerda circular em bytes. Para um bloco de 256 bits, a primeira linha permanece inalterada e o deslocamento para a segunda, terceira e quarta linha é de 1, 3 e 4 bytes, respectivamente (esta alteração só se aplica à cifra de Rijndael quando usada com um bloco de 256 bits, já que o AES não usa blocos de 256 bits
  5. Os vetores de teste de resposta conhecida (KAT) AES estão disponíveis em formato Zip na página do NIST aqui

Referências

  1. «Biclique cryptanalysis of the full AES» [Criptoanálise biclique do AES completo] (PDF) (em inglês). Consultado em 3 de maio de 2021. Arquivado do original (PDF) em 6 de março de 2016 
  2. Biryukov, Alex; Khovratovich, Dmitry. «Related-key cryptanalysis of the full AES-192 and AES-256» [Criptoanálise de chaves relacionadas do AES-192 e AES-256 completo] (em inglês). Table 1. Consultado em 3 de maio de 2021. Cópia arquivada em 28 de setembro de 2009 
  3. a b Daemen, Joan; Rijmen, Vincent (9 de março de 2003). «AES Proposal: Rijndael» [Proposta AES: Rijndael] (PDF) (em inglês). Instituto nacional de padrões e tecnologia dos E.U.A. (NIST). p. 1. Consultado em 2 de maio de 2021. Cópia arquivada (PDF) em 5 de março de 2013 
  4. a b c «Announcing the advanced encryption standard (AES)» [Anunciando o padrão de criptografia avançada (AES)] (PDF). Federal information processing standards publication 197 (em inglês). Instituto nacional de padrões e tecnologia dos E.U.A. (NIST). 26 de novembro de 2001. Consultado em 3 de maio de 2021. Cópia arquivada (PDF) em 12 de março de 2017 
  5. Rijmen, Vincent; Daemen, Joan (3 de setembro de 1999). «AES Proposal: Rijndael» [Proposta AES: Rijndael] (PDF) (em inglês). Consultado em 3 de maio de 2021. Arquivado do original (PDF) em 3 de fevereiro de 2007 
  6. John Schwartz (3 de outubro de 2000). «U.S.A. selects a new encryption technique» [E.U.A. seleciona uma nova técnica de criptografia]. New York Times (em inglês). Consultado em 3 de maio de 2021. Cópia arquivada em 28 de março de 2017 
  7. Westlund, Harold B. (2002). «NIST reports measurable success of advanced encryption standard» [NIST relata sucesso mensurável de padrão de criptografia avançado]. Journal of Research of the National Institute of Standards and Technology (em inglês). Consultado em 3 de maio de 2021. Arquivado do original em 3 de novembro de 2007 
  8. «ISO/IEC 18033-3: Information technology – Security techniques – Encryption algorithms – Part 3: Block ciphers» [ISO/IEC 18033-3: Tecnologia da informação - Técnicas de segurança - Algoritmos de criptografia - Parte 3: Cifras de bloco] (em inglês). International organization for standardization. Consultado em 1 de maio de 2021. Cópia arquivada em 3 de dezembro de 2013 
  9. 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). Consultado em 3 de maio de 2021. Cópia arquivada (PDF) em 2 de janeiro de 2010 
  10. «Efficient software implementation of AES on 32-bit platforms» [Implementação de software AES eficiente em plataformas de 32 bits]. Lecture notes in computer science: 2523 (em inglês). 2003. Consultado em 1 de maio de 2021 
  11. «byte-oriented-aes – A public domain byte-oriented implementation of AES in C – Google Project Hosting» [AES orientado a bytes - Uma implementação AES em C orientada a bytes de domínio público - Google Project Hosting] (em inglês). Consultado em 1 de maio de 2021. Cópia arquivada em 20 de julho de 2013 
  12. 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» [Política nacional sobre o uso do padrão de criptografia avançado (AES) para proteger os sistemas de segurança nacional e as informações de segurança nacional] (PDF). Computer security resource center (CSRC) (em inglês). Instituto nacional de padrões e tecnologia (NIST). Consultado em 1 de maio de 2021. Cópia arquivada (PDF) em 6 de novembro de 2010 
  13. John Kelsey, Stefan Lucks, Bruce Schneier, Mike Stay, David Wagner e Doug Whiting, Improved cryptanalysis of Rijndael, Fast software encryption, 2000 páginas 213 à 230 «Academic: Improved cryptanalysis of Rijndael - Schneier on security» [Acadêmico: criptanálise aprimorada de Rijndael - Schneier sobre segurança] (em inglês). Consultado em 1 de maio de 2021. Cópia arquivada em 23 de fevereiro de 2007 
  14. a b «Archived copy» [Cópia arquivada] (PDF). Consultado em 3 de maio de 2021. Cópia arquivada (PDF) em 21 de abril de 2012 
  15. «NIST.gov – Computer security division – Computer security resource center» [NIST.gov - Divisão de segurança de computadores - Centro de recursos de segurança de computadores]. Csrc.nist.gov. Consultado em 3 de maio de 2021. Cópia arquivada em 2 de janeiro de 2013 
  16. «Validated FIPS 140-1 and FIPS 140-2 cryptographic modules» [Módulos criptográficos validados FIPS 140-1 e FIPS 140-2] (em inglês). Consultado em 3 de maio de 2021. Cópia arquivada em 26 de dezembro de 2014 
  17. a b OpenSSL, openssl@openssl.org. «OpenSSL's notes about FIPS certification» [Notas do OpenSSL sobre a certificação FIPS] (em inglês). Openssl.org. Consultado em 3 de maio de 2021. Cópia arquivada em 2 de janeiro de 2013 
  18. Arquivado em 2009-10-23 no Wayback Machine
  19. Schneier, Bruce; Kelsey, John; Whiting, Doug; Wagner, David; Hall, Chris; Ferguson, Niels (1 de fevereiro de 1999). «Performance comparisons of the AES submissions» [Comparações de desempenho das submissões do AES] (PDF) (em inglês). Consultado em 3 de maio de 2021. Cópia arquivada (PDF) em 22 de junho de 2011 
  20. «AMD Ryzen 7 1700X Review» [Análise do AMD Ryzen 7 1700X] (em inglês) 
  21. «So you want to use an alternative cipher...» [Então você deseja usar uma cifra alternativa...]. A few thoughts on cryptographic engineering (em inglês). 9 de outubro de 2012. Consultado em 3 de maio de 2021 
  22. Bernstein, Daniel. «Why switch from AES to a new stream cipher?» [Por que mudar de AES para uma nova cifra de fluxo?]. cr.yp.to (em inglês). Consultado em 3 de maio de 2021