Usuário:Josepaulolima/Advanced Encryption Standard: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Linha 15:
}}
 
O '''Advanced Encryption Standard''' ( '''AES''' ), também conhecido pelo seu nome original '''Rijndael''' ({{IPAc-nl|ˈrɛindaːl}}), <ref name="Rijndael-ammended.pdf">{{Citar web|url=http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=1|titulo=AES Proposal: Rijndael|urlmorta=no}}</ref> é umaum especificaçãopadrão para a [[Encriptação|criptografia]] de dados eletrônicos estabelecida pelo [[National Institute of Standards and Technology|Instituto Nacional de Padrões e Tecnologia dos]] EUA (NIST) em 2001. <ref name="fips-197">{{Citar web|url=http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf|titulo=Announcing the ADVANCED ENCRYPTION STANDARD (AES)|obra=Federal Information Processing Standards Publication 197|urlmorta=no}}</ref>
 
O AES é um subconjunto da [[cifra de bloco]] Rijndael <ref name="Rijndael-ammended.pdf">{{Citar web|url=http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=1|titulo=AES Proposal: Rijndael|urlmorta=no}}</ref> desenvolvidadesenvolvido por dois criptógrafos [[Bélgica|belgas]] , [[Vincent Rijmen]] e Joan Daemen , que submeteram uma proposta <ref name="Rijndaelv2">{{Citar web|url=http://csrc.nist.gov/CryptoToolkit/aes/rijndael/Rijndael.pdf|titulo=AES Proposal: Rijndael|urlmorta=yes}}</ref> ao NIST durante o processo[[Processo de seleçãoSeleção dado AES ]]. <ref>{{Citar jornal|url=https://www.nytimes.com/2000/10/03/business/technology-us-selects-a-new-encryption-technique.html|titulo=U.S. Selects a New Encryption Technique|urlmorta=no}}</ref> Rijndael é uma família de cifras com diferentes tamanhos de chaves e blocos.
 
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|governo]] dos [[Governo dos Estados Unidos|EUA]] e agora é usado em todo o mundo. Ele substituisubstituiu o [[Data Encryption Standard]] (DES), <ref>{{Citar jornal|url=http://www.findarticles.com/p/articles/mi_m0IKZ/is_3_107?pnum=2&opg=90984479|titulo=NIST reports measurable success of Advanced Encryption Standard|urlmorta=yes}}</ref> 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, ao AES foi anunciadaanunciado pelo NIST como US [[Federal Information Processing Standard|FIPS]] PUB 197 (FIPS 197) em 26 de novembro de 2001. <ref name="fips-197">{{Citar web|url=http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf|titulo=Announcing the ADVANCED ENCRYPTION STANDARD (AES)|obra=Federal Information Processing Standards Publication 197|urlmorta=no}}</ref> Este anúncio seguiu um processo de padronização de cinco anos no qual quinze projetos concorrentes foram apresentados e avaliados, antes que a cifra Rijndael fosse selecionada como a mais adequada (veja o processo Advanced Encryption Standard para mais detalhes).
 
O AES tornou-se tornou eficaz como um padrão do governo federal em 26 de maio de 2002, após a aprovação da [[Secretário do Comércio dos Estados Unidos|Secretaria de Comércio]] . AESEle está incluído na norma ISO / IEC 18033-3. AESTambém está disponível em muitos pacotes de criptografia diferentes, e é o primeiro (e único) demétodo acessocriptográfico públicode [[cifra]] pública aprovado pela [[Agência de Segurança Nacional]] (NSA) para [[Informaçãoinformação confidencial|top secret]] informação quando usado em uma ANS módulo criptográfico (ver aprovado [[Advanced Encryption Standard|Segurança da AES]] , abaixo).
 
== Padrões definitivos ==
O Advanced Encryption Standard (AES) é definido em cada umuma dosdas seguintes especificações :
 
* FIPS PUB 197: Advanced Encryption Standard (AES) <ref name="fips-197">{{Citar web|url=http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf|titulo=Announcing the ADVANCED ENCRYPTION STANDARD (AES)|obra=Federal Information Processing Standards Publication 197|urlmorta=no}}</ref>
* ISO / IEC 18033-3 :: Cifras de bloco <ref name="ISO_IEC_AES">{{Citar web|url=http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=54531|titulo=ISO/IEC 18033-3: Information technology – Security techniques – Encryption algorithms – Part 3: Block ciphers|urlmorta=no}}</ref>
 
== Descrição da cifra ==
O AES é baseado em um princípio de designprojeto conhecido como uma rede de substituição-permutação e é eficiente tanto em software quanto em hardware. <ref>{{Citar web|url=http://www.schneier.com/paper-twofish-final.pdf|titulo=The Twofish Team's Final Comments on AES Selection|urlmorta=no|ultimo7=Tadayoshi Kohno|numero-autores=7}}</ref> Ao contrário de seu predecessor DES, o AES não usa uma [[Cifra Feistel|rede Feistel]] . O AES é uma variante do Rijndael que tem um tamanho de bloco fixo de 128 [[Bit|bits]] e um [[Tamanho da chave|tamanho]] de [[Tamanho da chave|chave]] de 128, 192 ou 256 bits. Por outro lado, 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.
 
O AES opera em uma matriz de bytes de ordem de colunas 4 × 4, denominada ''estado'' . <ref group="notenota"><div> As variantes de bloco grande do Rijndael usam um array com colunas adicionais, mas sempre quatro linhas. </div></ref> A maioria dos cálculos AES é feita em um campo finito particular.
 
Por exemplo, se houver 16 bytes, <math>b_0, b_1, ..., b_{15}</math>, esses bytes são representados como essauma matriz bidimensional:
 
::<math>
Linha 49:
</math>
 
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 puro (criptografia)|texto simples]] , na saída final, chamada de texto cifrado . O número de rodadas é o seguinte:
 
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 puro (criptografia)|texto simples]] , na saída final, chamada de texto cifrado . O número de rodadas é o seguinte:
 
* 10 rodadas para chaves de 128 bits.
Linha 56 ⟶ 55:
* 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 no texto original usando a mesma chave de criptografia.
 
=== Descrição de alto nível do algoritmo ===
 
# <tt>KeyExpansion - as</tt> chaves de <tt>tom</tt> são derivadas da chave de cifra usando a programação chave de Rijndael . O AES requer um bloco de chave redonda de 128 bits separado para cada rodada mais mais umuma.
# Adição de chave redonda inicial:
## <tt>AddRoundKey</tt> - cada byte do estado é combinado com um bloco da chave redonda usando [[Lógica binária|xor bit a bit]] .
# 9, 11 ou 13 rodadas:
## <tt>SubBytes</tt> - [[Transformação linear|uma]] etapa de substituição [[Transformação linear|não linear em]] em que cada byte é substituído por outro de acordo com uma tabela de consulta .
## <tt>ShiftRows</tt> - uma etapa de transposição em que as últimas três linhas do estado são deslocadas ciclicamente para um determinado número de etapas.
## <tt>MixColumns</tt> - uma operação de mistura linear que opera nas colunas do estado, combinando os quatro bytes em cada coluna.
Linha 77 ⟶ 76:
{{Principal|Caixa S Rijndael}}
 
Na etapa <tt>SubBytes</tt> , cada byte <math>a_{i,j}</math> na matriz de ''estado'' é substituído por um <tt>SubByte</tt> <math>S(a_{i,j})</math> usando uma caixa de substituição de 8 bits. Esta operação fornece a não linearidade na [[cifra]] . OA caixa S-box usadousada é derivadoderivada do [[inverso multiplicativo]] sobre {{Math|[[Finite field|GF]](2<sup>8</sup>)}} , conhecido por ter boas propriedades de não linearidade. Para evitar ataques baseados em propriedades algébricas simples, a caixa S é construída pela combinação da função inversa com uma [[transformação afim]] inversível. A caixa S também é escolhida para evitar quaisquer pontos fixos (e assim é um [[desarranjo]] ), ie, <math> S(a_{i,j}) \neq a_{i,j} </math>, e também quaisquer pontos fixos opostos, ou seja, <math> S(a_{i,j}) \oplus a_{i,j} \neq \text{FF}_{16} </math>. Ao executar a descriptografia, a etapa <tt>InvSubBytes</tt> (o inverso de <tt>SubBytes</tt> ) é usado, o que requer primeiro tomar o inverso da transformação afim e, em seguida, encontrar o inverso multiplicativo.
 
=== O passo <tt>ShiftRows</tt> ===
[[Ficheiro:AES-ShiftRows.svg|direita|miniaturadaimagem|320x320px| Na etapa <tt>ShiftRows</tt> , os bytes em cada linha do estado são deslocados ciclicamente para a esquerda. O número de lugares que cada byte é deslocado difere para cada linha. ]]
A etapa <tt>ShiftRows</tt> opera nas linhas do estado; ele desloca ciclicamente os bytes em cada linha por um determinado [[Offset (ciência da computação)|deslocamento]] . Para o AES, a primeira linha é deixada inalterada. Cada byte da segunda linha é deslocado um para a esquerda. Da mesma forma, a terceira e quarta linhas são deslocadas por ''offsets'' de dois e três, respectivamente. <ref group="notenota"><div> As variantes de Rijndael com um tamanho de bloco maior têm compensações ligeiramente diferentes. </div></ref> Dessa forma, cada coluna do estado de saída da etapa <tt>ShiftRows</tt> é composta de bytes de cada coluna do estado de entrada. A importância desta etapa é evitar que as colunas sejam criptografadas independentemente, nesse caso, o AES degenera em quatro cifras de bloco independentes.
 
=== O passo <tt>MixColumns</tt> ===
Linha 88 ⟶ 87:
[[Ficheiro:AES-MixColumns.svg|direita|miniaturadaimagem|320x320px| Na etapa <tt>MixColumns</tt> , cada coluna do estado é multiplicada por um polinômio fixo <math>c(x)</math>.]]
 
Na etapa <tt>MixColumns</tt> , os quatro bytes de cada coluna do estado são combinados usando uma [[transformação linear]] invertívelinversível. A função <tt>MixColumns</tt> usa quatro bytes como entrada e gera quatro bytes, ondena qual cada byte de entrada afeta todos os quatro bytes de saída. Juntamente com <tt>ShiftRows</tt> , <tt>MixColumns</tt> fornece a difusão na cifra.
 
Durante esta operação, cada coluna é transformada usando uma matriz fixa (a matriz da esquerda multiplicada pela coluna fornece o novo valor da coluna no estado):
Linha 106 ⟶ 105:
</math>
 
A multiplicação de matrizes é composta de multiplicação e adição das entradas. Entradas são bytes de 8 bits tratados como coeficientes de polinômio de ordem <math>x^7</math>. A adição é simplesmente XOR. A multiplicação é um polinômio modular irredutível <math>x^8+x^4+x^3+x+1</math>. Se processado pouco a pouco, então, após a mudança, um [[Porta XOR|XOR]] condicional com 1B <sub>16</sub> deve ser executado se o valor deslocado for maior que FF <sub>16</sub> (o transbordamento deve ser corrigido pela subtração do polinômio gerador). Estes são casos especiais da multiplicação usual em <math>\operatorname{GF}(2^8)</math>.
 
Em um sentido mais geral, cada coluna é tratada como um polinômio <math>\operatorname{GF}(2^8)</math> e é então multiplicado o módulo <math>{01}_{16} \cdot z^4+{01}_{16}</math> com um polinômio fixo <math>c(z) = {03}_{16} \cdot z^3 + {01}_{16} \cdot z^2 +{01}_{16} \cdot z + {02}_{16}</math>. Os coeficientes são exibidos em seu equivalente [[Sistema de numeração hexadecimal|hexadecimal]] da representação binária de polinômios de bit de <math>\operatorname{GF}(2)[x]</math>. O passo <tt>MixColumns</tt> também pode ser visto como uma multiplicação pela matriz MDS particular mostrada no [[Corpo finito|campo finito]] <math>\operatorname{GF}(2^8)</math>. Este processo é descrito mais adiante no artigo Rijndael MixColumns .
 
=== O passo <tt>AddRoundKey</tt> ===
[[Ficheiro:AES-AddRoundKey.svg|direita|miniaturadaimagem|320x320px| Na etapa <tt>AddRoundKey</tt> , cada byte do estado é combinado com um byte da subchave redonda usando a operação [[Porta XOR|XOR]] (⊕). ]]
Na etapa <tt>AddRoundKey</tt> , a subchave é combinada com o estado. Para cada rodada, uma subchave é derivada da [[Chave (criptografia)|chave]] principal usando a programação de chaves de Rijndael ; cada subchave é do mesmo tamanho que o estado. A subchave é adicionada combinando cada byte do estado com o byte correspondente da subchave usando [[Porta XOR|XOR]] bit a bit.
 
=== Otimização da cifra ===
Em sistemas com 32 bits ou palavras maiores, é possível acelerar a execução de esta cifra combinando os passos <tt>SubBytes</tt> e <tt>ShiftRows</tt> passos com o passo <tt>MixColumns</tt> transformando-os em uma sequência de pesquisas de tabela. Isso requer quatro tabelas de 32 bits de 256 entradas (juntas ocupando 4096 bytes). Uma rodada pode ser executada com 16 operações de pesquisa de tabela e 12 operações exclusivas ou de 32 bits, seguidas por quatro operações exclusivas ou de 32 bits na etapa <tt>AddRoundKey</tt> . <ref><div> [http://www.springerlink.com/index/UVX5NQGNN55VK199.pdf "Implementação eficiente de software do AES em plataformas de 32 bits".] Notas de aula em Ciência da Computação: 2523. 2003 </div></ref> Como alternativa, a operação de pesquisa de tabela pode ser executada 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 byte, é possível combinar as <tt>etapas SubBytes</tt> , <tt>ShiftRows</tt> e <tt>MixColumns</tt> em uma única operação de rodada. <ref>{{Citar web|url=https://code.google.com/p/byte-oriented-aes|titulo=byte-oriented-aes – A public domain byte-oriented implementation of AES in C – Google Project Hosting|urlmorta=no}}</ref>