Luckas Andre Farias - uel.br · estar a em foco apenas no uso da matriz S-Box que e apresentada na...
Transcript of Luckas Andre Farias - uel.br · estar a em foco apenas no uso da matriz S-Box que e apresentada na...
Luckas Andre Farias Criptografia em hardware usando VHDL aplicado
a VOIP
Trabalho de Conclusao de curso apresentado a Uni-versidade Estadual de Londrina como parte dos re-quisitos para obtencao do tıtulo de bacharel emCiencia da Computacao.
Orientador: Prof Dr Wesley Attrot.
Londrina
2013
Luckas Andre Farias
Criptografia em hardware usando VHDL aplicado a VOIP
Trabalho de Conclusao de Curso apresentadoa Universidade Estadual de Londrina como partedos requisitos para obtencao do tıtulo bacharel emCiencia da Computacao.
Orientador(a): Prof Dr Wesley Attrot.
COMISSAO EXAMINADORA
Prof Dr Wesley Attrot
Universidade Estadual de Londrina - UEL
segundo membro da banca
Universidade Estadual de Londrina - UEL
terceiro membro da banca
Universidade Estadual de Londrina - UEL
Londrina, data da publicacao do TCC.
Farias, Luckas Criptografia em hardware usando VHDL aplicado a VOIP. 2013. TCC -Universidade Estadual de Londrina, Londrina. 2013.
RESUMO
O trabalho tem como objetivo desenvolver um chip de descriptografa usando-se o algoritmode descriptografia do AES(ADVANCED. . . , 2001), o qual sera testado usando-se um servicode rede VoIP. Este processo vem a agregar nos conhecimentos de arquitetura de computadorese no processo de criptografia, visando unir estas duas areas de conhecimento. Tem-se comointuito possibilitar que a comunicacao e troca de arquivos pela rede sejam feitas de forma maissegura, possibilitando por exemplo um canal seguro de comunicacao em redes VoIP. Para asociedade tem-se como benefıcio a privacidade e a seguranca que isso proporcionaria as suasintercomunicacoes com as demais pessoas atraves da Internet.
Palavras-Chave: palavra-chave1, palavra-chave2...palavra-chaven.
Lista de Figuras
1.1 Fluxo de dados e sequencia de procedimentos no AES . . . . . . . . . . . . p. 10
Lista de Tabelas
1.1 Realizacao de XOR entre 2 bits . . . . . . . . . . . . . . . . . . . . . . . . p. 11
1.2 S-Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 12
1.3 Tabela Inverse S-Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 13
1.4 MixColuns na forma matricial . . . . . . . . . . . . . . . . . . . . . . . . . p. 14
1.5 Tabela de valores Mul02 (multiplicados por 2) . . . . . . . . . . . . . . . . p. 15
1.6 Tabela de valores Mul03 (multiplicados por 3) . . . . . . . . . . . . . . . . p. 16
1.7 Inverse Mix Coluns na forma matricial . . . . . . . . . . . . . . . . . . . . . p. 16
1.8 Tabela de valores Mul09 (multiplicados por 9) . . . . . . . . . . . . . . . . p. 18
1.9 Tabela de valores Mul11 (multiplicados por 0xB) . . . . . . . . . . . . . . . p. 18
1.10 Tabela de valores Mul13 (multiplicados por 0xC) . . . . . . . . . . . . . . . p. 19
1.11 Tabela de valores Mul14 (multiplicados por 0xD) . . . . . . . . . . . . . . . p. 19
Sumario
1 Fundamentacao Teorico Metodologica e Estado da Arte p. 9
1.1 AES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 9
1.1.1 Nocoes e Funcoes Matematicas aplicadas ao algoritmo AES . . . . . p. 9
1.1.2 Expansao da Chave . . . . . . . . . . . . . . . . . . . . . . . . . . p. 17
1.1.3 Criptografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 34
1.1.4 Descriptografador . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 66
Referencias Bibliograficas p. 97
9
1 Fundamentacao Teorico Metodologica eEstado da Arte
1.1 AES
O AES pode ser dividido em tres processos (STALLINGS, ), a criptografia, a
decriptografia e a expansao da chave, sendo que o enfoque deste trabalho e a decriptografia. O
AES e baseado em blocos de informacao (plaintext) de 128 bits e chaves que podem varia entre
128, 192 e 256 bits, chamados de AES-128, AES-192 e AES-256 respectivamente. Conforme
pode ser visto na Tabela 1.1 para cada tamanho de chave existe uma certa quantidade de
rounds1 que e diretamente relacionado ao tamanho da chave, entretanto em todos os casos o
palintext e sempre de 128 bits.
Tamanho da chave round
128 10
192 12
256 14
1.1.1 Nocoes e Funcoes Matematicas aplicadas ao algoritmo AES
Para os processo que serao descritos a seguir e preciso se ter algumas nocoes
usadas no algoritmo:
Notacao Polinomial GF(28)
Considerando que b7,b6,b5,b4,b3,b2,b1,b0 sao os bits de um byte B qualquer
tem-se b7x7 +b6x6 +b5x5 +b4x4 +b3x3 +b2x2 +b1x1 +b0.
1Sequencia de passos pre-definidos onde dentro deste intervalo nomeado de round serao executadas astarefas. Os rounds sao semelhantes entre si, sendo que tambem ha a possibilidade de serem nomeados comorodadas, pois cada round sera uma rodada.
1.1 AES 10
Figura 1.1: Fluxo de dados e sequencia de procedimentos no AES
Porta logica XOR
A porta logica XOR consiste em receber N entradas e transforma-las em 1
saıda, sendo que esta e ’0‘ caso a quantidade de bits ’1‘ no conjunto N seja par e ’1‘ caso o
conjunto de bits ’1‘ no conjunto N seja impar.
Para N = 2 ten-se a Tabela 1.1.
Soma
E nomeada como soma, mas na realidade aplica-se o XOR bit a bit (sem a
passagem do excedente ao bit subsequente: nao possui o “vai 1”). Sendo assim sua funcao e
1.1 AES 11
Bit[0] Bit [1] Saıda0 0 00 1 11 0 11 1 0
Tabela 1.1: Realizacao de XOR entre 2 bits
A XOR B = C, sendo no algoritmo A, B e C informacoes na memoria de 128 bits.
Multiplicacao
A multiplicacao ocorre entre 2 bytes (considerando-se eles em notacao poli-
nomial). Ao resultado da multiplicacao e aplicado o modulo, usando-se o polinomio x8 +x4 +
x3 +x+1 (11Bh = 100011011). Faz-se necessario observar que a soma e constituıda como a
soma descrita anteriormente, onde xn + xn = 0.
Tabela SBox
E usada na funcao Substitute bytes, sendo que existem dois meios de se
obter o mesmo resultado neste passo, um deles e calculando-se a S-Box e o outro e usando
os valores ja armazenados em memoria (a tabela resultante sera a mesma). Nesta descricao
estara em foco apenas no uso da matriz S-Box que e apresentada na Tabela 1.2, sem ter a
preocupacao de como ela foi obtida.
Como se observa a S-Box e organizada de maneira a possuir 16 colunas e
16 linhas, onde o elemento de entrada (em hexadecimal) e usado e substituıdo pelo elemento
equivalente a seu valor na tabela (a linha representada pelo valor mais significativo e a coluna
definida pelo valor menos significativo).
Portanto a tabela SBox faz a transformacao de valores, esta transformacao
e simples usando a forma matricial, mas para facilitar mais o entendimento e calculos futuros,
considere-a como um vetor de 128 posicoes, Sendo assim o seu funcionamento e uso se da
de maneira em que acessa-se ela na posicao X e pega-se o elemento Y que esta armazenado
nesta posicao, evitando o calculo de linha e coluna na matriz. Por exemplo:
SBox [ 0x00 ] = 0x63
Sbox [ 0x01 ] = 0x7c
Sbox [ 0x52 ] = 0x00
Isto ocorre para todos os valores pertencentes a [0x00 , 0xFF], e cada valor
possui um representante unico. Portanto nao ha duplicidades nesta tabela (o que garante o
funcionamento correto do algoritmo).
1.1 AES 12
– 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f00 63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 7610 ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c020 b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 1530 04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 7540 09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 8450 53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf60 d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a870 51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d280 cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 7390 60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b dba0 e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79b0 e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08c0 ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8ad0 70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9ee0 e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 dff0 8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16
Tabela 1.2: S-Box
Tabela InverseSBox
E usada na funcao Inverse Substitute bytes, sendo que existem dois meios
de se obter o mesmo resultado neste passo, um deles e calculando-se a InverseSBox e o outro
e usando os valores ja armazenados em memoria (a tabela resultante sera a mesma). Nesta
descricao estara em foco apenas no uso da matriz InverseS-Box que e apresentada na Tabela
1.3, sem ter a preocupacao de como ela foi obtida.
Como se observa a InverseSBox e organizada de maneira a possuir 16 co-
lunas e 16 linhas, onde o elemento de entrada (em hexadecimal) e usado e substituıdo pelo
elemento equivalente a seu valor na tabela (a linha representada pelo valor mais significativo
e a coluna definida pelo valor menos significativo).
Portanto a tabela InverseSBox faz a transformacao de valores, esta transfor-
macao e simples usando a forma matricial, mas para facilitar mais o entendimento e calculos
futuros, considere-a como um vetor de 128 posicoes, Sendo assim o seu funcionamento ocorre
usando-se o parametro de entrada X como endereco na memoria conseguindo assim o valor
representado na Inverse-SBox e recebe-se o elemento Y que esta armazenado nesta posicao,
evitando o calculo de linha e coluna na matriz. Por exemplo:
InverseSBox [ 0x00 ] = 0x52
InverseSbox [ 0x01 ] = 0x09
InverseSbox [ 0x52 ] = 0x48
Isto ocorre para todos os valores pertencentes a [0x00 , 0xFF], e cada valor
possui um representante unico. Portanto nao ha duplicidades nesta tabela (o que garante o
1.1 AES 13
– 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f00 52 09 6a d5 30 36 a5 38 bf 40 a3 9e 81 f3 d7 fb10 7c e3 39 82 9b 2f ff 87 34 8e 43 44 c4 de e9 cb20 54 7b 94 32 a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e30 08 2e a1 66 28 d9 24 b2 76 5b a2 49 6d 8b d1 2540 72 f8 f6 64 86 68 98 16 d4 a4 5c cc 5d 65 b6 9250 6c 70 48 50 fd ed b9 da 5e 15 46 57 a7 8d 9d 8460 90 d8 ab 00 8c bc d3 0a f7 e4 58 05 b8 b3 45 0670 d0 2c 1e 8f ca 3f 0f 02 c1 af bd 03 01 13 8a 6b80 3a 91 11 41 4f 67 dc ea 97 f2 cf ce f0 b4 e6 7390 96 ac 74 22 e7 ad 35 85 e2 f9 37 e8 1c 75 df 6ea0 47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aa 18 be 1bb0 fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 cd 5a f4c0 1f dd a8 33 88 07 c7 31 b1 12 10 59 27 80 ec 5fd0 60 51 7f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c efe0 a0 e0 3b 4d ae 2a f5 b0 c8 eb bb 3c 83 53 99 61f0 17 2b 04 7e ba 77 d6 26 e1 69 14 63 55 21 0c 7d
Tabela 1.3: Tabela Inverse S-Box
funcionamento correto do algoritmo).
Funcao Shift rows
Esta funcao tem como entrada a matriz de 128 bits (4 linhas e 4 colunas,
sendo cada elemento composto por 4 bytes (palavra do algoritmo)) e realizar a funcao shift-left
(do tamanho de bytes, ou seja considerando que cada linha possui 4 elementos), sendo que a
primeira linha e deslocada em 0 posicoes, a segunda linha em 1 posicao, a terceira linha em 2
posicoes e a quarta linha em 3 posicoes. Exemplificando:
S0,0 S0,1 S0,2 S0,3 S0,0 S0,1 S0,2 S0,3
S1,0 S1,1 S1,2 S1,3 ← S1,1 S1,2 S1,3 S1,0
S2,0 S2,1 S2,2 S2,3 ←← S2,2 S2,3 S2,0 S2,1
S3,0 S3,1 S3,2 S3,3 ←←←← S3,3 S3,0 S3,1 S3,2
Funcao Inverse Shift rows
Esta funcao tem como entrada a matriz de 128 bits (4 linhas e 4 colunas,
sendo cada elemento composto por 4 bytes (palavra do algoritmo)) e realizar a funcao shift-
right (do tamanho de bytes, ou seja considerando que cada linha possui 4 elementos). Este
processo que reverte o shift rows, realizando-se o shift-right de 0 posicoes na primeira linha,
1.1 AES 14
de 1 posicao na segunda linha, de 2 posicoes na terceira linha e 3 posicoes na quarta linha.
Exemplificando:
S0,0 S0,1 S0,2 S0,3 S0,0 S0,1 S0,2 S0,3
S1,0 S1,1 S1,2 S1,3 → S1,3 S1,0 S1,1 S1,2
S2,0 S2,1 S2,2 S2,3 →→ S2,2 S2,3 S2,0 S2,1
S3,0 S3,1 S3,2 S3,3 →→→ S3,1 S3,2 S3,3 S3,0
Funcao Mix coluns
Sua funcao assim como diz o nome e embaralhar as colunas desta matriz de
informacao, preparando-a assim para a proxima etapa. Este processo consiste em multiplicar
cada coluna da matriz intermediaria por um polinomio constante: p(x) = 03hx3 + 01hx2 +
01hx+02h.
Esta funcao tambem pode ser representada na forma de uma multiplicacao
matricial 1.4:
S’0,c 02 03 01 01 S0,cS’1,c = 01 02 03 01 * S1,cS’2,c 01 01 02 03 S2,cS’3,c 03 01 01 02 S3,c
Tabela 1.4: MixColuns na forma matricial
Mas em nossos exemplos a fim de facilitar o entendimento estaremos usando
a soma de valores armazenados em tabelas: Mul02 (Tabela 1.5) e Mul03 (Tabela 1.6), repre-
sentando o valor multiplicado por 0x2 e 0x3 respectivamente. Portanto nossa funcao MixColuns
realiza o seguinte calculo por coluna da matriz informacao:
Dado’[0x0] = Mul02[dado[0x0]] + Mul03[dado[0x1]] + dado[0x2] + dado[0x3]
Dado’[0x1] = dado[0x0] + Mul02[dado[0x1]] + Mul03[dado[0x2]] + dado[0x3]
Dado’[0x2] = dado[0x0] + dado[0x1] + Mul02[dado[0x2]] + Mul03[dado[0x3]]
Dado’[0x3] = Mul03[dado[0x0]] + dado[0x1] + dado[0x2] + Mul02[dado[0x3]]
Dado’[0x4] = Mul02[dado[0x4]] + Mul03[dado[0x5]] + dado[0x6] + dado[0x7]
Dado’[0x5] = dado[0x4] + Mul02[dado[0x5]] + Mul03[dado[0x6]] + dado[0x7]
Dado’[0x6] = dado[0x4] + dado[0x5] + Mul02[dado[0x6]] + Mul03[dado[0x7]]
Dado’[0x7] = Mul03[dado[0x4]] + dado[0x5] + dado[0x6] + Mul02[dado[0x7]]
1.1 AES 15
00 02 04 06 08 0a 0c 0e 10 12 14 16 18 1a 1c 1e20 22 24 26 28 2a 2c 2e 30 32 34 36 38 3a 3c 3e40 42 44 46 48 4a 4c 4e 50 52 54 56 58 5a 5c 5e60 62 64 66 68 6a 6c 6e 70 72 74 76 78 7a 7c 7e80 82 84 86 88 8a 8c 8e 90 92 94 96 98 9a 9c 9ea0 a2 a4 a6 a8 aa ac ae b0 b2 b4 b6 b8 ba bc bec0 c2 c4 c6 c8 ca cc ce d0 d2 d4 d6 d8 da dc dee0 e2 e4 e6 e8 ea ec ee f0 f2 f4 f6 f8 fa fc fe1b 19 1f 1d 13 11 17 15 0b 09 0f 0d 03 01 07 053b 39 3f 3d 33 31 37 35 2b 29 2f 2d 23 21 27 255b 59 5f 5d 53 51 57 55 4b 49 4f 4d 43 41 47 457b 79 7f 7d 73 71 77 75 6b 69 6f 6d 63 61 67 659b 99 9f 9d 93 91 97 95 8b 89 8f 8d 83 81 87 85bb b9 bf bd b3 b1 b7 b5 ab a9 af ad a3 a1 a7 a5db d9 df dd d3 d1 d7 d5 cb c9 cf cd c3 c1 c7 c5fb f9 ff fd f3 f1 f7 f5 eb e9 ef ed e3 e1 e7 e5
Tabela 1.5: Tabela de valores Mul02 (multiplicados por 2)
Dado’[0x8] = Mul02[dado[0x8]] + Mul03[dado[0x9]] + dado[0xA] + dado[0xB]
Dado’[0x9] = dado[0x8] + Mul02[dado[0x9]] + Mul03[dado[0xA]] + dado[0xB]
Dado’[0xA] = dado[0x8] + dado[0x9] + Mul02[dado[0xA]] + Mul03[dado[0xB]]
Dado’[0xB] = Mul03[dado[0x8]] + dado[0x9] + dado[0xA] + Mul02[dado[0xB]]
Dado’[0xC] = Mul02[dado[0xC]] + Mul03[dado[0xD]] + dado[0xE] + dado[0xF]
Dado’[0xD] = dado[0xC] + Mul02[dado[0xD]] + Mul03[dado[0xE]] + dado[0xF]
Dado’[0xE] = dado[0xC] + dado[0xD] + Mul02[dado[0xE]] + Mul03[dado[0xF]]
Dado’[0xF] = Mul03[dado[0xC]] + dado[0xD] + dado[0xE] + Mul02[dado[0xF]]
dado = Dado’
Funcao Inverse Mix coluns
Sua funcao assim como diz o nome, e desembaralhar as colunas da matriz de
informacao que ja foram embaralhadas, preparando-a assim para a proxima etapa. Este pro-
cesso consiste em multiplicar cada coluna da matriz intermediaria por um polinomio constante,
mas esta funcao tambem pode ser representada na forma de uma multiplicacao matricial assim
como esta na Tabela 1.7.
Mas no exemplo a fim de facilitar o entendimento estara sendo usado a
soma de valores armazenados em tabelas: Mul09 (Tabela 1.8), Mul11 (Tabela 1.9), Mul13
1.1 AES 16
00 03 06 05 0c 0f 0a 09 18 1b 1e 1d 14 17 12 1130 33 36 35 3c 3f 3a 39 28 2b 2e 2d 24 27 22 2160 63 66 65 6c 6f 6a 69 78 7b 7e 7d 74 77 72 7150 53 56 55 5c 5f 5a 59 48 4b 4e 4d 44 47 42 41c0 c3 c6 c5 cc cf ca c9 d8 db de dd d4 d7 d2 d1f0 f3 f6 f5 fc ff fa f9 e8 eb ee ed e4 e7 e2 e1a0 a3 a6 a5 ac af aa a9 b8 bb be bd b4 b7 b2 b190 93 96 95 9c 9f 9a 99 88 8b 8e 8d 84 87 82 819b 98 9d 9e 97 94 91 92 83 80 85 86 8f 8c 89 8aab a8 ad ae a7 a4 a1 a2 b3 b0 b5 b6 bf bc b9 bafb f8 fd fe f7 f4 f1 f2 e3 e0 e5 e6 ef ec e9 eacb c8 cd ce c7 c4 c1 c2 d3 d0 d5 d6 df dc d9 da5b 58 5d 5e 57 54 51 52 43 40 45 46 4f 4c 49 4a6b 68 6d 6e 67 64 61 62 73 70 75 76 7f 7c 79 7a3b 38 3d 3e 37 34 31 32 23 20 25 26 2f 2c 29 2a0b 08 0d 0e 07 04 01 02 13 10 15 16 1f 1c 19 1a
Tabela 1.6: Tabela de valores Mul03 (multiplicados por 3)
S’(0,c) 14 11 13 09 S(0,c)S’(1,c) = 09 14 11 13 * S(1,c)S’(2,c) 13 09 14 11 S(2,c)S’(3,c) 11 13 09 14 S(3,c)
Tabela 1.7: Inverse Mix Coluns na forma matricial
(Tabela 1.10) e Mul14 (Tabela 1.11), representando o valor multiplicado por 0x9, 0xB, 0xD,
0xE respectivamente.
Portanto a funcao InverseMixColuns realiza o seguinte calculo por coluna da
matriz informacao:
Dado’[0x0] = Mul14[dado[0x0]] + Mul11[dado[0x1]]
+ Mul13[dado[0x2]] + Mul09[dado[0x3]]
Dado’[0x1] = Mul09[dado[0x0]] + Mul14[dado[0x1]]
+ Mul11[dado[0x2]] + Mul13[dado[0x3]]
Dado’[0x2] = Mul13[dado[0x0]] + Mul09[dado[0x1]]
+ Mul14[dado[0x2]] + Mul11[dado[0x3]]
Dado’[0x3] = Mul11[dado[0x0]] + Mul13[dado[0x1]]
+ Mul09[dado[0x2]] + Mul14[dado[0x3]]
Dado’[0x4] = Mul14[dado[0x4]] + Mul11[dado[0x5]]
+ Mul13[dado[0x6]] + Mul09[dado[0x7]]
Dado’[0x5] = Mul09[dado[0x4]] + Mul14[dado[0x5]]
1.1 AES 17
+ Mul11[dado[0x6]] + Mul13[dado[0x7]]
Dado’[0x6] = Mul13[dado[0x4]] + Mul09[dado[0x5]]
+ Mul14[dado[0x6]] + Mul11[dado[0x7]]
Dado’[0x7] = Mul11[dado[0x4]] + Mul13[dado[0x5]]
+ Mul09[dado[0x6]] + Mul14[dado[0x7]]
Dado’[0x8] = Mul14[dado[0x8]] + Mul11[dado[0x9]]
+ Mul13[dado[0xA]] + Mul09[dado[0xB]]
Dado’[0x9] = Mul09[dado[0x8]] + Mul14[dado[0x9]]
+ Mul11[dado[0xA]] + Mul13[dado[0xB]]
Dado’[0xA] = Mul13[dado[0x8]] + Mul09[dado[0x9]]
+ Mul14[dado[0xA]] + Mul11[dado[0xB]]
Dado’[0xB] = Mul11[dado[0x8]] + Mul13[dado[0x9]]
+ Mul09[dado[0xA]] + Mul14[dado[0xB]]
Dado’[0xC] = Mul14[dado[0xC]] + Mul11[dado[0xD]]
+ Mul13[dado[0xE]] + Mul09[dado[0xF]]
Dado’[0xD] = Mul09[dado[0xC]] + Mul14[dado[0xD]]
+ Mul11[dado[0xE]] + Mul13[dado[0xF]]
Dado’[0xE] = Mul13[dado[0xC]] + Mul09[dado[0xD]]
+ Mul14[dado[0xE]] + Mul11[dado[0xF]]
Dado’[0xF] = Mul11[dado[0xC]] + Mul13[dado[0xD]]
+ Mul09[dado[0xE]] + Mul14[dado[0xF]]
dado = Dado’
1.1.2 Expansao da Chave
Este processo recebe como entrada uma chave de 128 bits que sera usada
para expandir e criar outras 10 novas chaves (totalizando 11 chaves), as quais serao usadas
uma a uma no round onde lhe cabe. Na criptografia sao usadas as chaves de forma crescente
iniciando-se na chave 0 e terminando-se na chave 10, mas no processo descriptografia sao
usadas de forma decrescente iniciando-se pela chave 10 e terminando com o uso da chave 0.
Para a expansao da chave sao usados alguns valores pre-definidos, um em
cada round, no algoritmo definidos como o algoritmo Rc = [ 0x01 , 0x02 , 0x04 , 0x08 , 0x10
, 0x20 , 0x40 , 0x80 , 0x1B , 0x36 ]
A expansao da chave consiste em produzir 11 chaves, as quais sao conside-
1.1 AES 18
00 09 12 1b 24 2d 36 3f 48 41 5a 53 6c 65 7e 7790 99 82 8b b4 bd a6 af d8 d1 ca c3 fc f5 ee e73b 32 29 20 1f 16 0d 04 73 7a 61 68 57 5e 45 4cab a2 b9 b0 8f 86 9d 94 e3 ea f1 f8 c7 ce d5 dc76 7f 64 6d 52 5b 40 49 3e 37 2c 25 1a 13 08 01e6 ef f4 fd c2 cb d0 d9 ae a7 bc b5 8a 83 98 914d 44 5f 56 69 60 7b 72 05 0c 17 1e 21 28 33 3add d4 cf c6 f9 f0 eb e2 95 9c 87 8e b1 b8 a3 aaec e5 fe f7 c8 c1 da d3 a4 ad b6 bf 80 89 92 9b7c 75 6e 67 58 51 4a 43 34 3d 26 2f 10 19 02 0bd7 de c5 cc f3 fa e1 e8 9f 96 8d 84 bb b2 a9 a047 4e 55 5c 63 6a 71 78 0f 06 1d 14 2b 22 39 309a 93 88 81 be b7 ac a5 d2 db c0 c9 f6 ff e4 ed0a 03 18 11 2e 27 3c 35 42 4b 50 59 66 6f 74 7da1 a8 b3 ba 85 8c 97 9e e9 e0 fb f2 cd c4 df d631 38 23 2a 15 1c 07 0e 79 70 6b 62 5d 54 4f 46
Tabela 1.8: Tabela de valores Mul09 (multiplicados por 9)
00 0b 16 1d 2c 27 3a 31 58 53 4e 45 74 7f 62 69b0 bb a6 ad 9c 97 8a 81 e8 e3 fe f5 c4 cf d2 d97b 70 6d 66 57 5c 41 4a 23 28 35 3e 0f 04 19 12cb c0 dd d6 e7 ec f1 fa 93 98 85 8e bf b4 a9 a2f6 fd e0 eb da d1 cc c7 ae a5 b8 b3 82 89 94 9f46 4d 50 5b 6a 61 7c 77 1e 15 08 03 32 39 24 2f8d 86 9b 90 a1 aa b7 bc d5 de c3 c8 f9 f2 ef e43d 36 2b 20 11 1a 07 0c 65 6e 73 78 49 42 5f 54f7 fc e1 ea db d0 cd c6 af a4 b9 b2 83 88 95 9e47 4c 51 5a 6b 60 7d 76 1f 14 09 02 33 38 25 2e8c 87 9a 91 a0 ab b6 bd d4 df c2 c9 f8 f3 ee e53c 37 2a 21 10 1b 06 0d 64 6f 72 79 48 43 5e 5501 0a 17 1c 2d 26 3b 30 59 52 4f 44 75 7e 63 68b1 ba a7 ac 9d 96 8b 80 e9 e2 ff f4 c5 ce d3 d87a 71 6c 67 56 5d 40 4b 22 29 34 3f 0e 05 18 13ca c1 dc d7 e6 ed f0 fb 92 99 84 8f be b5 a8 a3
Tabela 1.9: Tabela de valores Mul11 (multiplicados por 0xB)
1.1 AES 19
00 0d 1a 17 34 39 2e 23 68 65 72 7f 5c 51 46 4bd0 dd ca c7 e4 e9 fe f3 b8 b5 a2 af 8c 81 96 9bbb b6 a1 ac 8f 82 95 98 d3 de c9 c4 e7 ea fd f06b 66 71 7c 5f 52 45 48 03 0e 19 14 37 3a 2d 206d 60 77 7a 59 54 43 4e 05 08 1f 12 31 3c 2b 26bd b0 a7 aa 89 84 93 9e d5 d8 cf c2 e1 ec fb f6d6 db cc c1 e2 ef f8 f5 be b3 a4 a9 8a 87 90 9d06 0b 1c 11 32 3f 28 25 6e 63 74 79 5a 57 40 4dda d7 c0 cd ee e3 f4 f9 b2 bf a8 a5 86 8b 9c 910a 07 10 1d 3e 33 24 29 62 6f 78 75 56 5b 4c 4161 6c 7b 76 55 58 4f 42 09 04 13 1e 3d 30 27 2ab1 bc ab a6 85 88 9f 92 d9 d4 c3 ce ed e0 f7 fab7 ba ad a0 83 8e 99 94 df d2 c5 c8 eb e6 f1 fc67 6a 7d 70 53 5e 49 44 0f 02 15 18 3b 36 21 2c0c 01 16 1b 38 35 22 2f 64 69 7e 73 50 5d 4a 47dc d1 c6 cb e8 e5 f2 ff b4 b9 ae a3 80 8d 9a 97
Tabela 1.10: Tabela de valores Mul13 (multiplicados por 0xC)
00 0e 1c 12 38 36 24 2a 70 7e 6c 62 48 46 54 5ae0 ee fc f2 d8 d6 c4 ca 90 9e 8c 82 a8 a6 b4 badb d5 c7 c9 e3 ed ff f1 ab a5 b7 b9 93 9d 8f 813b 35 27 29 03 0d 1f 11 4b 45 57 59 73 7d 6f 61ad a3 b1 bf 95 9b 89 87 dd d3 c1 cf e5 eb f9 f74d 43 51 5f 75 7b 69 67 3d 33 21 2f 05 0b 19 1776 78 6a 64 4e 40 52 5c 06 08 1a 14 3e 30 22 2c96 98 8a 84 ae a0 b2 bc e6 e8 fa f4 de d0 c2 cc41 4f 5d 53 79 77 65 6b 31 3f 2d 23 09 07 15 1ba1 af bd b3 99 97 85 8b d1 df cd c3 e9 e7 f5 fb9a 94 86 88 a2 ac be b0 ea e4 f6 f8 d2 dc ce c07a 74 66 68 42 4c 5e 50 0a 04 16 18 32 3c 2e 20ec e2 f0 fe d4 da c8 c6 9c 92 80 8e a4 aa b8 b60c 02 10 1e 34 3a 28 26 7c 72 60 6e 44 4a 58 5637 39 2b 25 0f 01 13 1d 47 49 5b 55 7f 71 63 6dd7 d9 cb c5 ef e1 f3 fd a7 a9 bb b5 9f 91 83 8d
Tabela 1.11: Tabela de valores Mul14 (multiplicados por 0xD)
1.1 AES 20
radas pelo algoritmo como 44 palavras (4 palavras por chave, sendo que cada palavra tem 4
letras de 16 bits, com valores de 0x00 a 0xFF), no caso desta exemplificacao pertencentes a
um vetor denominado de “Word”.
A primeira chave consiste nos valores que foram fornecidos na entrada como
Key. Todas as demais consistem em uma conta ultilizando as chaves anteriores. Para melhor
entendimento observe o pseudo codigo a seguir:
• Chave 0: Chave inicial que foi fornecida, considerando o algoritmo, tem-se que:
– Word[0] = [ Key[0x0], Key[0x1], Key[0x2], Key[0x3] ]
– Word[1] = [ Key[0x4], Key[0x5], Key[0x6], Key[0x7] ]
– Word[2] = [ Key[0x8], Key[0x9], Key[0xA], Key[0xB] ]
– Word[3] = [ Key[0xC], Key[0xD], Key[0xE], Key[0xF] ]
• Chave 1-10:
Considerando a K-esima palavra em Word, tem-se que:
Se K e divisıvel por 4:
– Word[k][0] = (SubBites[ Word[k-1][1] ] ) XOR ( Rc[chao((k/4)-1)] ) XOR ( Word[k-
4][0] )
– Word[k][1] = (SubBites[ Word[k-1][2] ] ) XOR ( Word[k-4][1] )
– Word[k][2] = (SubBites[ Word[k-1][3] ] ) XOR ( Word[k-4][2] )
– Word[k][3] = (SubBites[ Word[k-1][0] ] ) XOR ( Word[k-4][3] )
Caso contrario:
– Word[k][0] = (Word[k-1][0] ) XOR ( Word[k-4][0] )
– Word[k][1] = (Word[k-1][1] ) XOR ( Word[k-4][1] )
– Word[k][2] = (Word[k-1][2] ) XOR ( Word[k-4][2] )
– Word[k][3] = (Word[k-1][3] ) XOR ( Word[k-4][3] )
Feitas estas consideracoes tambem e importante definir os valores iniciais das
variaveis em nosso exemplo. Portanto considerando inicialmente:
• Key = [ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB ,
0xCC, 0xDD, 0xEE, 0xFF]
Sendo assim e considerando o valor de Key dado como exemplo, o processo
gera:
1.1 AES 21
• Chave 0:
0x00 0x11 0x22 0x33
0x44 0x55 0x66 0x77
0x88 0x99 0xAA 0xBB
0xCC 0xDD 0xEE 0xFF
E o processo de obtencao e geracao de palavras:
Word[0][0] = 0x00 Word[0][1] = 0x11
Word[0][2] = 0x22 Word[0][3] = 0x33
Word[1][0] = 0x44 Word[1][1] = 0x55
Word[1][2] = 0x66 Word[1][3] = 0x77
Word[2][0] = 0x88 Word[2][1] = 0x99
Word[2][2] = 0xAA Word[2][3] = 0xBB
Word[3][0] = 0xCC Word[3][1] = 0xDD
Word[3][2] = 0xEE Word[3][3] = 0xFF
• Chave 1:
0xC0 0x39 0x34 0x78
0x84 0x6C 0x52 0x0F
0x0C 0xF5 0xF8 0xB4
0xC0 0x28 0x16 0x4B
– Word[4][0] = (SubBites[ Word[3][1] ]) XOR ( Rc[0] ) XOR (Word[0][0])
= (SubBites[ 0xDD ] ) XOR ( Rc[0] ) XOR ( Word[0][0] )
= 0xC1 XOR 0x01 XOR 0x00
0xC1 = 1101 0001 e 0x01 = 0000 0001, realizando bit a bit tem-se:
∗ 1 XOR 0 = 1
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 1 XOR 1 = 0
O que resulta em 0xC0. E realizando o XOR com 0x00 que e 0000 0000
∗ 1 XOR 0 = 1
1.1 AES 22
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
O que resulta em 0110 0010 = 0xC0
– Word[4][1] = (SubBites[ Word[3][2] ] ) XOR ( Word[ 0 ][1] )
= (SubBites[ 0xEE ] ) XOR ( Word[ 0 ][1] ) = 0x28 XOR 0x11
0x28 = 0010 1000 e 0x11 = 0001 0001, realizando bit a bit tem-se:
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 1 XOR 0 = 1
∗ 0 XOR 1 = 1
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 1 = 1
O que resulta em 0011 1001 = 0x39.
– Word[4][2] = (SubBites[ Word[3][3] ] ) XOR ( Word[ 0 ][2] )
(SubBites[ 0xFF ] ) XOR ( Word[ 0 ][2] ) = 0x16 XOR 0x22
0x16 = 0001 0110 e 0x22 = 0010 0010, realizando bit a bit tem-se:
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 1 = 1
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 1 XOR 0 = 1
∗ 1 XOR 1 = 0
∗ 0 XOR 0 = 0
O que resulta em 0011 0100 = 0x34.
– Word[4][3] = (SubBites[ Word[3][0] ] ) XOR ( Word[ 0 ][3] )
(SubBites[ 0xCC ] ) XOR ( Word[ 0 ][3] ) = 0x4B XOR 0x33
0x4B = 0100 1011 e 0x33 = 0011 0011, realizando bit a bit tem-se:
1.1 AES 23
∗ 0 XOR 0 = 0
∗ 1 XOR 0 = 1
∗ 0 XOR 1 = 1
∗ 0 XOR 1 = 1
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 1 XOR 1 = 0
∗ 1 XOR 1 = 0
O que resulta em 0111 1000 = 0x78.
– Word[5][0] = (Word[4][0] ) XOR ( Word[1][0] ) = 0xC0 XOR 0x44
0xC0 = 1100 0000 e 0x44 = 0100 0100, realizando bit a bit tem-se:
∗ 1 XOR 0 = 1
∗ 1 XOR 1 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 1 = 1
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
O que resulta em 1000 0100 = 0x84.
– Word[5][1] = (Word[4][1] ) XOR ( Word[1][1] ) = 0x39 XOR 0x55
0x39 = 0011 1001 e 0x55 = 0101 0101, realizando bit a bit tem-se:
∗ 0 XOR 0 = 0
∗ 0 XOR 1 = 1
∗ 1 XOR 0 = 1
∗ 1 XOR 1 = 0
∗ 1 XOR 0 = 1
∗ 0 XOR 1 = 1
∗ 0 XOR 0 = 0
∗ 1 XOR 1 = 0
O que resulta em 0110 1100 = 0x6C.
– Word[5][2] = (Word[4][2] ) XOR ( Word[1][2] ) = 0x34 XOR 0x66
0x34 = 0011 0100 e 0x66 = 0110 0110, realizando bit a bit tem-se:
∗ 0 XOR 0 = 0
1.1 AES 24
∗ 0 XOR 1 = 1
∗ 1 XOR 1 = 0
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 1 XOR 1 = 0
∗ 0 XOR 1 = 1
∗ 0 XOR 0 = 0
O que resulta em 0101 0010 = 0x52.
– Word[5][3] = (Word[4][3] ) XOR ( Word[1][3] ) = 0x78 XOR 0x77
0x78 = 0111 1000 e 0x77 = 0111 0111, realizando bit a bit tem-se:
∗ 0 XOR 0 = 0
∗ 1 XOR 1 = 0
∗ 1 XOR 1 = 0
∗ 1 XOR 1 = 0
∗ 1 XOR 0 = 1
∗ 0 XOR 1 = 1
∗ 0 XOR 1 = 1
∗ 0 XOR 1 = 1
O que resulta em 0000 1111 = 0x0F.
– Word[6][0] = (Word[5][0] ) XOR ( Word[2][0] ) = 0x84 XOR 0x88
0x84 = 1000 0100 e 0x88 = 1000 1000 , realizando bit a bit tem-se:
∗ 1 XOR 1 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 1 = 1
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
O que resulta em 0000 1100= 0x0C
– Word[6][1] = (Word[5][1] ) XOR ( Word[2][1] ) = 0x6C XOR 0x99
0x6C = 0110 1100 e 0x99 = 1001 1001 , realizando bit a bit tem-se:
∗ 0 XOR 1 = 1
∗ 1 XOR 0 = 1
1.1 AES 25
∗ 1 XOR 0 = 1
∗ 0 XOR 1 = 1
∗ 1 XOR 1 = 0
∗ 1 XOR 0 = 1
∗ 0 XOR 0 = 0
∗ 0 XOR 1 = 1
O que resulta em 1111 0101= 0xF5
– Word[6][2] = (Word[5][2] ) XOR ( Word[2][2] ) = 0x52 XOR 0xAA
0x52 = 0101 0010 e 0xAA = 1010 1010, realizando bit a bit tem-se:
∗ 0 XOR 1 = 1
∗ 1 XOR 0 = 1
∗ 0 XOR 1 = 1
∗ 1 XOR 0 = 1
∗ 0 XOR 1 = 1
∗ 0 XOR 0 = 0
∗ 1 XOR 1 = 0
∗ 0 XOR 0 = 0
O que resulta em 1111 1000 = 0xF8
– Word[6][3] = (Word[5][3] ) XOR ( Word[2][3] ) = 0x0F XOR 0xBB
0x0F = 0000 1111 e 0xBB = 1011 1011, realizando bit a bit tem-se:
∗ 0 XOR 1 = 1
∗ 0 XOR 0 = 0
∗ 0 XOR 1 = 1
∗ 0 XOR 1 = 1
∗ 1 XOR 1 = 0
∗ 1 XOR 0 = 1
∗ 1 XOR 1 = 0
∗ 1 XOR 1 = 0
O que resulta em 1011 0100 = 0xB4
– Word[7][0] = (Word[6][0] ) XOR ( Word[3][0] ) = 0x0C XOR 0xCC
0x = 0000 1100 e 0x = 1100 1100 , realizando bit a bit tem-se:
∗ 0 XOR 1 = 1
∗ 0 XOR 1 = 1
∗ 0 XOR 0 = 0
1.1 AES 26
∗ 0 XOR 0 = 0
∗ 1 XOR 1 = 0
∗ 1 XOR 1 = 0
∗ 0 XOR 0 = 0
∗ 0 XOR 0 = 0
O que resulta em 1100 0000 = 0xC0
– Word[7][1] = (Word[6][1] ) XOR ( Word[3][1] ) = 0xF5 XOR 0xDD
0xF5 = 1111 0101 e 0x = 1101 1101 , realizando bit a bit tem-se:
∗ 1 XOR 1 = 0
∗ 1 XOR 1 = 0
∗ 1 XOR 0 = 1
∗ 1 XOR 1 = 0
∗ 0 XOR 1 = 1
∗ 1 XOR 1 = 0
∗ 0 XOR 0 = 0
∗ 1 XOR 1 = 0
O que resulta em 0010 1000 = 0x28
– Word[7][2] = (Word[6][2] ) XOR ( Word[3][2] ) = 0xF8 XOR 0xEE
0xF8 = 1111 1000 e 0xEE = 1110 1110 , realizando bit a bit tem-se:
∗ 1 XOR 1 = 0
∗ 1 XOR 1 = 0
∗ 1 XOR 1 = 0
∗ 1 XOR 0 = 1
∗ 1 XOR 1 = 0
∗ 0 XOR 1 = 1
∗ 0 XOR 1 = 1
∗ 0 XOR 0 = 0
O que resulta em 0001 0110= 0x16
– Word[7][3] = (Word[6][3] ) XOR ( Word[3][3] ) = 0xB4 XOR 0xFF
0xB4 = 1011 0100 e 0xFF = 1111 1111, realizando bit a bit tem-se:
∗ 1 XOR 1 = 0
∗ 0 XOR 1 = 1
∗ 1 XOR 1 = 0
∗ 1 XOR 1 = 0
1.1 AES 27
∗ 0 XOR 1 = 1
∗ 1 XOR 1 = 0
∗ 0 XOR 1 = 1
∗ 0 XOR 1 = 1
O que resulta em 0100 1101 = 0x4B
Continuando este procedimento para as demais palavras de Word ten-se:
Word[8][0] = SubBites[ Word[7][1] ] XOR Rc[1] XOR Word[4][0]
= 0x34 XOR 0x2 XOR 0xc0 = 0xf6
Word[8][1] = SubBites[ Word[7][2] ] XOR Word[4][1]
= 0x47 XOR 0x39 = 0x7e
Word[8][2] = SubBites[ Word[7][3] ] XOR Word[4][2]
= 0xb3 XOR 0x34 = 0x87
Word[8][3] = SubBites[ Word[7][0] ] XOR Word[4][3]
= 0xba XOR 0x78 = 0xc2
Word[9][0] = Word[8][0] XOR Word[5][0] = 0xf6 XOR 0x84 = 0x72
Word[9][1] = Word[8][1] XOR Word[5][1] = 0x7e XOR 0x6c = 0x12
Word[9][2] = Word[8][2] XOR Word[5][2] = 0x87 XOR 0x52 = 0xd5
Word[9][3] = Word[8][3] XOR Word[5][3] = 0xc2 XOR 0xf = 0xcd
Word[10][0] = Word[9][0] XOR Word[6][0] = 0x72 XOR 0xc = 0x7e
Word[10][1] = Word[9][1] XOR Word[6][1] = 0x12 XOR 0xf5 = 0xe7
Word[10][2] = Word[9][2] XOR Word[6][2] = 0xd5 XOR 0xf8 = 0x2d
Word[10][3] = Word[9][3] XOR Word[6][3] = 0xcd XOR 0xb4 = 0x79
Word[11][0] = Word[10][0] XOR Word[7][0] = 0x7e XOR 0xc0 = 0xbe
Word[11][1] = Word[10][1] XOR Word[7][1] = 0xe7 XOR 0x28 = 0xcf
Word[11][2] = Word[10][2] XOR Word[7][2] = 0x2d XOR 0x16 = 0x3b
Word[11][3] = Word[10][3] XOR Word[7][3] = 0x79 XOR 0x4b = 0x32
Word[12][0] = SubBites[ Word[11][1] ] XOR Rc[2] XOR Word[8][0]
= 0x8a XOR 0x4 XOR 0xf6 = 0x78
Word[12][1] = SubBites[ Word[11][2] ] XOR Word[8][1]
= 0xe2 XOR 0x7e = 0x9c
Word[12][2] = SubBites[ Word[11][3] ] XOR Word[8][2]
= 0x23 XOR 0x87 = 0xa4
1.1 AES 28
Word[12][3] = SubBites[ Word[11][0] ] XOR Word[8][3]
= 0xae XOR 0xc2 = 0x6c
Word[13][0] = Word[12][0] XOR Word[9][0] = 0x78 XOR 0x72 = 0xa
Word[13][1] = Word[12][1] XOR Word[9][1] = 0x9c XOR 0x12 = 0x8e
Word[13][2] = Word[12][2] XOR Word[9][2] = 0xa4 XOR 0xd5 = 0x71
Word[13][3] = Word[12][3] XOR Word[9][3] = 0x6c XOR 0xcd = 0xa1
Word[14][0] = Word[13][0] XOR Word[10][0] = 0xa XOR 0x7e = 0x74
Word[14][1] = Word[13][1] XOR Word[10][1] = 0x8e XOR 0xe7 = 0x69
Word[14][2] = Word[13][2] XOR Word[10][2] = 0x71 XOR 0x2d = 0x5c
Word[14][3] = Word[13][3] XOR Word[10][3] = 0xa1 XOR 0x79 = 0xd8
Word[15][0] = Word[14][0] XOR Word[11][0] = 0x74 XOR 0xbe = 0xca
Word[15][1] = Word[14][1] XOR Word[11][1] = 0x69 XOR 0xcf = 0xa6
Word[15][2] = Word[14][2] XOR Word[11][2] = 0x5c XOR 0x3b = 0x67
Word[15][3] = Word[14][3] XOR Word[11][3] = 0xd8 XOR 0x32 = 0xea
Word[16][0] = SubBites[ Word[15][1] ] XOR Rc[3] XOR Word[12][0]
= 0x24 XOR 0x8 XOR 0x78 = 0x54
Word[16][1] = SubBites[ Word[15][2] ] XOR Word[12][1]
= 0x85 XOR 0x9c = 0x19
Word[16][2] = SubBites[ Word[15][3] ] XOR Word[12][2]
= 0x87 XOR 0xa4 = 0x23
Word[16][3] = SubBites[ Word[15][0] ] XOR Word[12][3]
= 0x74 XOR 0x6c = 0x18
Word[17][0] = Word[16][0] XOR Word[13][0] = 0x54 XOR 0xa = 0x5e
Word[17][1] = Word[16][1] XOR Word[13][1] = 0x19 XOR 0x8e = 0x97
Word[17][2] = Word[16][2] XOR Word[13][2] = 0x23 XOR 0x71 = 0x52
Word[17][3] = Word[16][3] XOR Word[13][3] = 0x18 XOR 0xa1 = 0xb9
Word[18][0] = Word[17][0] XOR Word[14][0] = 0x5e XOR 0x74 = 0x2a
Word[18][1] = Word[17][1] XOR Word[14][1] = 0x97 XOR 0x69 = 0xfe
Word[18][2] = Word[17][2] XOR Word[14][2] = 0x52 XOR 0x5c = 0xe
Word[18][3] = Word[17][3] XOR Word[14][3] = 0xb9 XOR 0xd8 = 0x61
Word[19][0] = Word[18][0] XOR Word[15][0] = 0x2a XOR 0xca = 0xe0
Word[19][1] = Word[18][1] XOR Word[15][1] = 0xfe XOR 0xa6 = 0x58
1.1 AES 29
Word[19][2] = Word[18][2] XOR Word[15][2] = 0xe XOR 0x67 = 0x69
Word[19][3] = Word[18][3] XOR Word[15][3] = 0x61 XOR 0xea = 0x8b
Word[20][0] = SubBites[ Word[19][1] ] XOR Rc[4] XOR Word[16][0]
= 0x6a XOR 0x10 XOR 0x54 = 0x2e
Word[20][1] = SubBites[ Word[19][2] ] XOR Word[16][1]
= 0xf9 XOR 0x19 = 0xe0
Word[20][2] = SubBites[ Word[19][3] ] XOR Word[16][2]
= 0x3d XOR 0x23 = 0x1e
Word[20][3] = SubBites[ Word[19][0] ] XOR Word[16][3]
= 0xe1 XOR 0x18 = 0xf9
Word[21][0] = Word[20][0] XOR Word[17][0] = 0x2e XOR 0x5e = 0x70
Word[21][1] = Word[20][1] XOR Word[17][1] = 0xe0 XOR 0x97 = 0x77
Word[21][2] = Word[20][2] XOR Word[17][2] = 0x1e XOR 0x52 = 0x4c
Word[21][3] = Word[20][3] XOR Word[17][3] = 0xf9 XOR 0xb9 = 0x40
Word[22][0] = Word[21][0] XOR Word[18][0] = 0x70 XOR 0x2a = 0x5a
Word[22][1] = Word[21][1] XOR Word[18][1] = 0x77 XOR 0xfe = 0x89
Word[22][2] = Word[21][2] XOR Word[18][2] = 0x4c XOR 0xe = 0x42
Word[22][3] = Word[21][3] XOR Word[18][3] = 0x40 XOR 0x61 = 0x21
Word[23][0] = Word[22][0] XOR Word[19][0] = 0x5a XOR 0xe0 = 0xba
Word[23][1] = Word[22][1] XOR Word[19][1] = 0x89 XOR 0x58 = 0xd1
Word[23][2] = Word[22][2] XOR Word[19][2] = 0x42 XOR 0x69 = 0x2b
Word[23][3] = Word[22][3] XOR Word[19][3] = 0x21 XOR 0x8b = 0xaa
Word[24][0] = SubBites[ Word[23][1] ] XOR Rc[5] XOR Word[20][0]
= 0x3e XOR 0x20 XOR 0x2e = 0x30
Word[24][1] = SubBites[ Word[23][2] ] XOR Word[20][1]
= 0xf1 XOR 0xe0 = 0x11
Word[24][2] = SubBites[ Word[23][3] ] XOR Word[20][2]
= 0xac XOR 0x1e = 0xb2
Word[24][3] = SubBites[ Word[23][0] ] XOR Word[20][3]
= 0xf4 XOR 0xf9 = 0xd
Word[25][0] = Word[24][0] XOR Word[21][0] = 0x30 XOR 0x70 = 0x40
Word[25][1] = Word[24][1] XOR Word[21][1] = 0x11 XOR 0x77 = 0x66
Word[25][2] = Word[24][2] XOR Word[21][2] = 0xb2 XOR 0x4c = 0xfe
1.1 AES 30
Word[25][3] = Word[24][3] XOR Word[21][3] = 0xd XOR 0x40 = 0x4d
Word[26][0] = Word[25][0] XOR Word[22][0] = 0x40 XOR 0x5a = 0x1a
Word[26][1] = Word[25][1] XOR Word[22][1] = 0x66 XOR 0x89 = 0xef
Word[26][2] = Word[25][2] XOR Word[22][2] = 0xfe XOR 0x42 = 0xbc
Word[26][3] = Word[25][3] XOR Word[22][3] = 0x4d XOR 0x21 = 0x6c
Word[27][0] = Word[26][0] XOR Word[23][0] = 0x1a XOR 0xba = 0xa0
Word[27][1] = Word[26][1] XOR Word[23][1] = 0xef XOR 0xd1 = 0x3e
Word[27][2] = Word[26][2] XOR Word[23][2] = 0xbc XOR 0x2b = 0x97
Word[27][3] = Word[26][3] XOR Word[23][3] = 0x6c XOR 0xaa = 0xc6
Word[28][0] = SubBites[ Word[27][1] ] XOR Rc[6] XOR Word[24][0]
= 0xb2 XOR 0x40 XOR 0x30 = 0xc2
Word[28][1] = SubBites[ Word[27][2] ] XOR Word[24][1]
= 0x88 XOR 0x11 = 0x99
Word[28][2] = SubBites[ Word[27][3] ] XOR Word[24][2]
= 0xb4 XOR 0xb2 = 0x6
Word[28][3] = SubBites[ Word[27][0] ] XOR Word[24][3]
= 0xe0 XOR 0xd = 0xed
Word[29][0] = Word[28][0] XOR Word[25][0] = 0xc2 XOR 0x40 = 0x82
Word[29][1] = Word[28][1] XOR Word[25][1] = 0x99 XOR 0x66 = 0xff
Word[29][2] = Word[28][2] XOR Word[25][2] = 0x6 XOR 0xfe = 0xf8
Word[29][3] = Word[28][3] XOR Word[25][3] = 0xed XOR 0x4d = 0xa0
Word[30][0] = Word[29][0] XOR Word[26][0] = 0x82 XOR 0x1a = 0x98
Word[30][1] = Word[29][1] XOR Word[26][1] = 0xff XOR 0xef = 0x10
Word[30][2] = Word[29][2] XOR Word[26][2] = 0xf8 XOR 0xbc = 0x44
Word[30][3] = Word[29][3] XOR Word[26][3] = 0xa0 XOR 0x6c = 0xcc
Word[31][0] = Word[30][0] XOR Word[27][0] = 0x98 XOR 0xa0 = 0x38
Word[31][1] = Word[30][1] XOR Word[27][1] = 0x10 XOR 0x3e = 0x2e
Word[31][2] = Word[30][2] XOR Word[27][2] = 0x44 XOR 0x97 = 0xd3
Word[31][3] = Word[30][3] XOR Word[27][3] = 0xcc XOR 0xc6 = 0xa
Word[32][0] = SubBites[ Word[31][1] ] XOR Rc[7] XOR Word[28][0]
= 0x31 XOR 0x80 XOR 0xc2 = 0x73
Word[32][1] = SubBites[ Word[31][2] ] XOR Word[28][1]
1.1 AES 31
= 0x66 XOR 0x99 = 0xff
Word[32][2] = SubBites[ Word[31][3] ] XOR Word[28][2]
= 0x67 XOR 0x6 = 0x61
Word[32][3] = SubBites[ Word[31][0] ] XOR Word[28][3]
= 0x7 XOR 0xed = 0xea
Word[33][0] = Word[32][0] XOR Word[29][0] = 0x73 XOR 0x82 = 0xf1
Word[33][1] = Word[32][1] XOR Word[29][1] = 0xff XOR 0xff = 0x0
Word[33][2] = Word[32][2] XOR Word[29][2] = 0x61 XOR 0xf8 = 0x99
Word[33][3] = Word[32][3] XOR Word[29][3] = 0xea XOR 0xa0 = 0x4a
Word[34][0] = Word[33][0] XOR Word[30][0] = 0xf1 XOR 0x98 = 0x69
Word[34][1] = Word[33][1] XOR Word[30][1] = 0x0 XOR 0x10 = 0x10
Word[34][2] = Word[33][2] XOR Word[30][2] = 0x99 XOR 0x44 = 0xdd
Word[34][3] = Word[33][3] XOR Word[30][3] = 0x4a XOR 0xcc = 0x86
Word[35][0] = Word[34][0] XOR Word[31][0] = 0x69 XOR 0x38 = 0x51
Word[35][1] = Word[34][1] XOR Word[31][1] = 0x10 XOR 0x2e = 0x3e
Word[35][2] = Word[34][2] XOR Word[31][2] = 0xdd XOR 0xd3 = 0xe
Word[35][3] = Word[34][3] XOR Word[31][3] = 0x86 XOR 0xa = 0x8c
Word[36][0] = SubBites[ Word[35][1] ] XOR Rc[8] XOR Word[32][0]
= 0xb2 XOR 0x1b XOR 0x73 = 0xda
Word[36][1] = SubBites[ Word[35][2] ] XOR Word[32][1]
= 0xab XOR 0xff = 0x54
Word[36][2] = SubBites[ Word[35][3] ] XOR Word[32][2]
= 0x64 XOR 0x61 = 0x5
Word[36][3] = SubBites[ Word[35][0] ] XOR Word[32][3]
= 0xd1 XOR 0xea = 0x3b
Word[37][0] = Word[36][0] XOR Word[33][0] = 0xda XOR 0xf1 = 0x2b
Word[37][1] = Word[36][1] XOR Word[33][1] = 0x54 XOR 0x0 = 0x54
Word[37][2] = Word[36][2] XOR Word[33][2] = 0x5 XOR 0x99 = 0x9c
Word[37][3] = Word[36][3] XOR Word[33][3] = 0x3b XOR 0x4a = 0x71
Word[38][0] = Word[37][0] XOR Word[34][0] = 0x2b XOR 0x69 = 0x42
Word[38][1] = Word[37][1] XOR Word[34][1] = 0x54 XOR 0x10 = 0x44
Word[38][2] = Word[37][2] XOR Word[34][2] = 0x9c XOR 0xdd = 0x41
Word[38][3] = Word[37][3] XOR Word[34][3] = 0x71 XOR 0x86 = 0xf7
1.1 AES 32
Word[39][0] = Word[38][0] XOR Word[35][0] = 0x42 XOR 0x51 = 0x13
Word[39][1] = Word[38][1] XOR Word[35][1] = 0x44 XOR 0x3e = 0x7a
Word[39][2] = Word[38][2] XOR Word[35][2] = 0x41 XOR 0xe = 0x4f
Word[39][3] = Word[38][3] XOR Word[35][3] = 0xf7 XOR 0x8c = 0x7b
Word[40][0] = SubBites[ Word[39][1] ] XOR Rc[9] XOR Word[36][0]
= 0xda XOR 0x36 XOR 0xda = 0x36
Word[40][1] = SubBites[ Word[39][2] ] XOR Word[36][1]
= 0x84 XOR 0x54 = 0xd0
Word[40][2] = SubBites[ Word[39][3] ] XOR Word[36][2]
= 0x21 XOR 0x5 = 0x24
Word[40][3] = SubBites[ Word[39][0] ] XOR Word[36][3]
= 0x7d XOR 0x3b = 0x46
Word[41][0] = Word[40][0] XOR Word[37][0] = 0x36 XOR 0x2b = 0x1d
Word[41][1] = Word[40][1] XOR Word[37][1] = 0xd0 XOR 0x54 = 0x84
Word[41][2] = Word[40][2] XOR Word[37][2] = 0x24 XOR 0x9c = 0xb8
Word[41][3] = Word[40][3] XOR Word[37][3] = 0x46 XOR 0x71 = 0x37
Word[42][0] = Word[41][0] XOR Word[38][0] = 0x1d XOR 0x42 = 0x5f
Word[42][1] = Word[41][1] XOR Word[38][1] = 0x84 XOR 0x44 = 0xc0
Word[42][2] = Word[41][2] XOR Word[38][2] = 0xb8 XOR 0x41 = 0xf9
Word[42][3] = Word[41][3] XOR Word[38][3] = 0x37 XOR 0xf7 = 0xc0
Word[43][0] = Word[42][0] XOR Word[39][0] = 0x5f XOR 0x13 = 0x4c
Word[43][1] = Word[42][1] XOR Word[39][1] = 0xc0 XOR 0x7a = 0xba
Word[43][2] = Word[42][2] XOR Word[39][2] = 0xf9 XOR 0x4f = 0xb6
Word[43][3] = Word[42][3] XOR Word[39][3] = 0xc0 XOR 0x7b = 0xbb
Do qual pode-se obter as chaves 2 a 10 que seguem:
• Chave 2:
0xF6 0x7E 0x87 0xC2
0x72 0x12 0xD5 0xCD
0x7E 0xE7 0x2D 0x79
0xBE 0xCF 0x3B 0x32
1.1 AES 33
• Chave 3:
0x78 0x9C 0xA4 0x6C
0x0A 0x8E 0x71 0xA1
0x74 0x69 0x5C 0xD8
0xCA 0xA6 0x67 0xEA
• Chave 4:
0x54 0x19 0x23 0x18
0x5E 0x97 0x52 0xB9
0x2A 0xFE 0x0E 0x61
0xE0 0x58 0x69 0x8B
• Chave 5:
0x2E 0xE0 0x1E 0xF9
0x70 0x77 0x4C 0x40
0x5A 0x89 0x42 0x21
0xBA 0xD1 0x2B 0xAA
• Chave 6:
0x30 0x11 0xB2 0x0D
0x40 0x66 0xFE 0x4D
0x1A 0xEF 0xBC 0x6C
0xA0 0x3E 0x97 0xC6
• Chave 7:
0xC2 0x99 0x06 0xED
0x82 0xFF 0xF8 0xA0
0x98 0x10 0x44 0xCC
0x38 0x2E 0xD3 0x0A
• Chave 8:
1.1 AES 34
0x73 0xFF 0x61 0xEA
0xF1 0x00 0x99 0x4A
0x69 0x10 0xDD 0x86
0x51 0x3E 0x0E 0x8C
• Chave 9:
0xDA 0x54 0x05 0x3B
0x2B 0x54 0x9C 0x71
0x42 0x44 0x41 0xF7
0x13 0x7A 0x4F 0x7B
• Chave 10:
0x36 0xD0 0x24 0x46
0x1D 0x84 0xB8 0x37
0x5F 0xC0 0xF9 0xC0
0x4C 0xBA 0xB6 0xBB
1.1.3 Criptografia
Para a realizacao da criptografia e necessario que a informacao de 128 bits
passe por 11 passos, sendo 1 pre processamento, 9 rounds intermediarios e 1 pos processa-
mento:
• Pre-processamento:
– ADD: Realiza a soma (descrita nas nocoes do algoritmo) entre a informacao original
e a a Key[0] da expansao de chave, gerando um dado intermediario.
• Passos intermediarios de 9 rounds:
– Substitute bytes: Faz a conversao dos valores do dado intermediario usando a
tabela SBox conforme descrito na secao 1.1.1.
– Funcao shift-right: Realiza a funcao de deslocamento de dados, sem alterar os
valores dos bytes, apenas descolando-os conforme descrito na secao 1.1.1.
1.1 AES 35
– MixColuns: Confirme visto na secao 1.1.1, o procedimento da MixColuns ocorre
com a substituicao dos valores conforme sua posicao na matriz. Sendo substituıdos
pelos valores nas tabelas Mul02 e Mul03.
– ADD: Realiza a soma entre o dado intermediario e a a Key[round+1]. Esta soma
e a descrita na secao 1.1.1
• Passo final (Round com alteracao):
– Substitute bytes: Faz a conversao dos valores do dado intermediario usando a
tabela SBox conforme descrito na secao 1.1.1.
– Funcao shift-right: Realiza a funcao de deslocamento de dados, sem alterar os
valores dos bytes, apenas descolando-os conforme descrito na secao 1.1.1.
– ADD: Realiza a soma entre o dado intermediario e a a Key[round+1]. Esta soma
e a descrita na secao 1.1.1
Para exemplificar este processo (usando a Key dada como exemplo na ex-
pansao de chave) acompanhe o passo a passo a seguir:
• Dado: [ 0x01 0x23 0x45 0x67 0x89 0xAB 0xCD 0xEF 0xFE 0xDC 0xBA 0x98 0x76 0x54
0x32 0x10 ]
• Pre-processamento ADD:
0x01 XOR 0x00 = 0x01
0x23 XOR 0x11 = 0x32
0x45 XOR 0x22 = 0x67
0x67 XOR 0x33 = 0x54
0x89 XOR 0x44 = 0xCD
0xAB XOR 0x55 = 0xFE
0xCD XOR 0x66 = 0xAB
0xEF XOR 0x77 = 0x98
0xFE XOR 0x88 = 0x76
0xDC XOR 0x99 = 0x45
0xBA XOR 0xAA = 0x10
0x98 XOR 0xBB = 0x23
0x76 XOR 0xCC = 0xBA
0x54 XOR 0xDD = 0x89
0x32 XOR 0xEE = 0xDC
0x10 XOR 0xFF = 0xEF
Dado intermediario:
1.1 AES 36
0x01 0xCD 0x76 0xBA
0x32 0xFE 0x45 0x89
0x67 0xAB 0x10 0xDC
0x54 0x98 0x23 0xEF
• Round 0:
– SBox:
SBox[0x01] = 0x7C
SBox[0x32] = 0x23
SBox[0x67] = 0x85
SBox[0x54] = 0x20
SBox[0xCD] = 0xBD
SBox[0xFE] = 0xBB
SBox[0xAB] = 0x62
SBox[0x98] = 0x46
SBox[0x76] = 0x38
SBox[0x45] = 0x6E
SBox[0x10] = 0xCA
SBox[0x23] = 0x26
SBox[0xBA] = 0xF4
SBox[0x89] = 0xA7
SBox[0xDC] = 0x86
SBox[0xEF] = 0xDF
– Shift:
Entrada:
0x7C 0xBD 0x38 0xF4
0x23 0xBB 0x6E 0xA7
0x85 0x62 0xCA 0x86
0x20 0x46 0x26 0xDF
Saıda:
0x7C 0xBD 0x38 0xF4
0xBB 0x6E 0xA7 0x23
0xCA 0x86 0x85 0x62
0xDF 0x20 0x46 0x26
– MixColuns:
∗ Dado’[0x0]
= Mul02[dado[0x0]] XOR Mul03[dado[0x1]] XOR dado[0x2] XOR dado[0x3]
= Mul02[0x7C] XOR Mul03[ 0xBB ] XOR 0xCA XOR 0xDF
= 0xF8 XOR 0xD6 XOR 0xCA XOR 0xDF = 0x3B
∗ Dado’[0x1]
= dado[0x0] XOR Mul02[dado[0x1]] XOR Mul03[dado[0x2]] XOR dado[0x3]
1.1 AES 37
= 0x7C XOR Mul02[ 0xBB ] XOR Mul03[ 0xCA ] XOR 0xDF
= 0x7C XOR 0x6D XOR 0x8F XOR 0xDF = 0x8B
∗ Dado’[0x2]
= dado[0x0] XOR dado[0x1] XOR Mul02[dado[0x2]] XOR Mul03[dado[0x3]]
= 0x7C XOR 0xBB XOR Mul02[0xCA] XOR Mul03[ 0xDF ]
= 0x7C XOR 0xBB XOR 0x8F XOR 0x7A = 0x32
∗ Dado’[0x3]
= Mul03[dado[0x0]] XOR dado[0x1] XOR dado[0x2] XOR Mul02[dado[0x3]]
= Mul03[ 0x7C ] XOR 0xBB XOR 0xCA XOR Mul02[ 0xDF ]
= 0x7C XOR 0xBB XOR 0xCA XOR 0xA5 = 0x50
∗ Dado’[0x4]
= Mul02[dado[0x4]] XOR Mul03[dado[0x5]] XOR dado[0x6] XOR dado[0x7]
= Mul02[0xBD] XOR Mul03[ 0x6E ] XOR 0x86 XOR 0x20
= 0x61 XOR 0xB2 XOR 0x86 XOR 0x20 = 0x75
∗ Dado’[0x5]
= dado[0x4] XOR Mul02[dado[0x5]] XOR Mul03[dado[0x6]] XOR dado[0x7]
= 0xBD XOR Mul02[ 0x6E ] XOR Mul03[ 0x86 ] XOR 0x20
= 0xBD XOR 0xDC XOR 0x17 XOR 0x20 = 0x75
∗ Dado’[0x6]
= dado[0x4] XOR dado[0x5] XOR Mul02[dado[0x6]] XOR Mul03[dado[0x7]]
= 0xBD XOR 0x6E XOR Mul02[0x86] XOR Mul03[ 0x20 ]
= 0xBD XOR 0x6E XOR 0x17 XOR 0x60 = 0xA4
∗ Dado’[0x7]
= Mul03[dado[0x4]] XOR dado[0x5] XOR dado[0x6] XOR Mul02[dado[0x7]]
= Mul03[ 0xBD ] XOR 0x6E XOR 0x86 XOR Mul02[ 0x20 ]
= 0xBD XOR 0x6E XOR 0x86 XOR 0x40 = 0x74
∗ Dado’[0x8]
= Mul02[dado[0x8]] XOR Mul03[dado[0x9]] XOR dado[0xA] XOR dado[0xB]
= Mul02[0x38] XOR Mul03[ 0xA7 ] XOR 0x85 XOR 0x46
= 0x70 XOR 0xF2 XOR 0x85 XOR 0x46 = 0x41
∗ Dado’[0x9]
= dado[0x8] XOR Mul02[dado[0x9]] XOR Mul03[dado[0xA]] XOR dado[0xB]
= 0x38 XOR Mul02[ 0xA7 ] XOR Mul03[ 0x85 ] XOR 0x46
= 0x38 XOR 0x55 XOR 0x11 XOR 0x46 = 0xBF
∗ Dado’[0xA]
= dado[0x8] XOR dado[0x9] XOR Mul02[dado[0xA]] XOR Mul03[dado[0xB]]
= 0x38 XOR 0xA7 XOR Mul02[0x85] XOR Mul03[ 0x46 ]
= 0x38 XOR 0xA7 XOR 0x11 XOR 0xCA = 0x44
1.1 AES 38
∗ Dado’[0xB]
= Mul03[dado[0x8]] XOR dado[0x9] XOR dado[0xA] XOR Mul02[dado[0xB]]
= Mul03[ 0x38 ] XOR 0xA7 XOR 0x85 XOR Mul02[ 0x46 ]
= 0x38 XOR 0xA7 XOR 0x85 XOR 0x8C = 0xE6
∗ Dado’[0xC]
= Mul02[dado[0xC]] XOR Mul03[dado[0xD]] XOR dado[0xE] XOR dado[0xF]
= Mul02[0xF4] XOR Mul03[ 0x23 ] XOR 0x62 XOR 0x26
= 0xF3 XOR 0x65 XOR 0x62 XOR 0x26 = 0xD2
∗ Dado’[0xD]
= dado[0xC] XOR Mul02[dado[0xD]] XOR Mul03[dado[0xE]] XOR dado[0xF]
= 0xF4 XOR Mul02[ 0x23 ] XOR Mul03[ 0x62 ] XOR 0x26
= 0xF4 XOR 0x46 XOR 0xC4 XOR 0x26 = 0x32
∗ Dado’[0xE]
= dado[0xC] XOR dado[0xD] XOR Mul02[dado[0xE]] XOR Mul03[dado[0xF]]
= 0xF4 XOR 0x23 XOR Mul02[0x62] XOR Mul03[ 0x26 ]
= 0xF4 XOR 0x23 XOR 0xC4 XOR 0x6A = 0x79
∗ Dado’[0xF]
= Mul03[dado[0xC]] XOR dado[0xD] XOR dado[0xE] XOR Mul02[dado[0xF]]
= Mul03[ 0xF4 ] XOR 0x23 XOR 0x62 XOR Mul02[ 0x26 ]
= 0xF4 XOR 0x23 XOR 0x62 XOR 0x4C = 0x0A
dado = Dado’
– ADD:
0x3B XOR 0xC0 = 0xFB
0x8B XOR 0x39 = 0xB2
0x32 XOR 0x34 = 0x06
0x50 XOR 0x78 = 0x28
0x75 XOR 0x84 = 0xF1
0xD0 XOR 0x6C = 0xBC
0xA4 XOR 0x52 = 0xF6
0x74 XOR 0x0F = 0x7B
0x41 XOR 0x0C = 0x4D
0xBF XOR 0xF5 = 0x4A
0x44 XOR 0xF8 = 0xBC
0xE6 XOR 0xB4 = 0x52
0xD2 XOR 0xC0 = 0x12
0x32 XOR 0x28 = 0x1A
0x79 XOR 0x16 = 0x6F
0x0A XOR 0x4B = 0x41
1.1 AES 39
– Dado intermediario ao final do Round:
0xFB 0xF1 0x4D 0x12
0xB2 0xBC 0x4A 0x1A
0x06 0xF6 0xBC 0x6F
0x28 0x7B 0x52 0x41
• Round 1:
– SBox:
SBox[0xFB] = 0x0F
SBox[0xB2] = 0x37
SBox[0x06] = 0x6F
SBox[0x28] = 0x34
SBox[0xF1] = 0xA1
SBox[0xBC] = 0x65
SBox[0xF6] = 0x42
SBox[0x7B] = 0x21
SBox[0x4D] = 0xE3
SBox[0x4A] = 0xD6
SBox[0xBC] = 0x65
SBox[0x52] = 0x00
SBox[0x12] = 0xC9
SBox[0x1A] = 0xA2
SBox[0x6F] = 0xA8
SBox[0x41] = 0x83
– Shift:
Entrada:
0x0F 0xA1 0xE3 0xC9
0x37 0x65 0xD6 0xA2
0x6F 0x42 0x65 0xA8
0x34 0x21 0x00 0x83
Saıda:
0x0F 0xA1 0xE3 0xC9
0x65 0xD6 0xA2 0x37
0x65 0xA8 0x6F 0x42
0x83 0x34 0x21 0x00
– MixColuns:
∗ Dado’[0x0]
= Mul02[dado[0x0]] XOR Mul03[dado[0x1]] XOR dado[0x2] XOR dado[0x3]
= Mul02[0x0F] XOR Mul03[ 0x65 ] XOR 0x65 XOR 0x83
= 0x1E XOR 0xAF XOR 0x65 XOR 0x83 = 0x57
1.1 AES 40
∗ Dado’[0x1]
= dado[0x0] XOR Mul02[dado[0x1]] XOR Mul03[dado[0x2]] XOR dado[0x3]
= 0x0F XOR Mul02[ 0x65 ] XOR Mul03[ 0x65 ] XOR 0x83
= 0x0F XOR 0xCA XOR 0xCA XOR 0x83 = 0xE9
∗ Dado’[0x2]
= dado[0x0] XOR dado[0x1] XOR Mul02[dado[0x2]] XOR Mul03[dado[0x3]]
= 0x0F XOR 0x65 XOR Mul02[0x65] XOR Mul03[ 0x83 ]
= 0x0F XOR 0x65 XOR 0xCA XOR 0x9E = 0x3E
∗ Dado’[0x3]
= Mul03[dado[0x0]] XOR dado[0x1] XOR dado[0x2] XOR Mul02[dado[0x3]]
= Mul03[ 0x0F ] XOR 0x65 XOR 0x65 XOR Mul02[ 0x83 ]
= 0x0F XOR 0x65 XOR 0x65 XOR 0x1D = 0x0C
∗ Dado’[0x4]
= Mul02[dado[0x4]] XOR Mul03[dado[0x5]] XOR dado[0x6] XOR dado[0x7]
= Mul02[0xA1] XOR Mul03[ 0xD6 ] XOR 0xA8 XOR 0x34
= 0x59 XOR 0x61 XOR 0xA8 XOR 0x34 = 0xA4
∗ Dado’[0x5]
= dado[0x4] XOR Mul02[dado[0x5]] XOR Mul03[dado[0x6]] XOR dado[0x7]
= 0xA1 XOR Mul02[ 0xD6 ] XOR Mul03[ 0xA8 ] XOR 0x34
= 0xA1 XOR 0xB7 XOR 0x4B XOR 0x34 = 0xA4
∗ Dado’[0x6]
= dado[0x4] XOR dado[0x5] XOR Mul02[dado[0x6]] XOR Mul03[dado[0x7]]
= 0xA1 XOR 0xD6 XOR Mul02[0xA8] XOR Mul03[ 0x34 ]
= 0xA1 XOR 0xD6 XOR 0x4B XOR 0x5C = 0x60
∗ Dado’[0x7]
= Mul03[dado[0x4]] XOR dado[0x5] XOR dado[0x6] XOR Mul02[dado[0x7]]
= Mul03[ 0xA1 ] XOR 0xD6 XOR 0xA8 XOR Mul02[ 0x34 ]
= 0xA1 XOR 0xD6 XOR 0xA8 XOR 0x68 = 0xEE
∗ Dado’[0x8]
= Mul02[dado[0x8]] XOR Mul03[dado[0x9]] XOR dado[0xA] XOR dado[0xB]
= Mul02[0xE3] XOR Mul03[ 0xA2 ] XOR 0x6F XOR 0x21
= 0xDD XOR 0xFD XOR 0x6F XOR 0x21 = 0x6E
∗ Dado’[0x9]
= dado[0x8] XOR Mul02[dado[0x9]] XOR Mul03[dado[0xA]] XOR dado[0xB]
= 0xE3 XOR Mul02[ 0xA2 ] XOR Mul03[ 0x6F ] XOR 0x21
= 0xE3 XOR 0x5F XOR 0xDE XOR 0x21 = 0x2C
∗ Dado’[0xA]
= dado[0x8] XOR dado[0x9] XOR Mul02[dado[0xA]] XOR Mul03[dado[0xB]]
1.1 AES 41
= 0xE3 XOR 0xA2 XOR Mul02[0x6F] XOR Mul03[ 0x21 ]
= 0xE3 XOR 0xA2 XOR 0xDE XOR 0x63 = 0xFC
∗ Dado’[0xB]
= Mul03[dado[0x8]] XOR dado[0x9] XOR dado[0xA] XOR Mul02[dado[0xB]]
= Mul03[ 0xE3 ] XOR 0xA2 XOR 0x6F XOR Mul02[ 0x21 ]
= 0xE3 XOR 0xA2 XOR 0x6F XOR 0x42 = 0xB1
∗ Dado’[0xC]
= Mul02[dado[0xC]] XOR Mul03[dado[0xD]] XOR dado[0xE] XOR dado[0xF]
= Mul02[0xC9] XOR Mul03[ 0x37 ] XOR 0x42 XOR 0x00
= 0x89 XOR 0x59 XOR 0x42 XOR 0x00 = 0x92
∗ Dado’[0xD]
= dado[0xC] XOR Mul02[dado[0xD]] XOR Mul03[dado[0xE]] XOR dado[0xF]
= 0xC9 XOR Mul02[ 0x37 ] XOR Mul03[ 0x42 ] XOR 0x00
= 0xC9 XOR 0x6E XOR 0x84 XOR 0x00 = 0x61
∗ Dado’[0xE]
= dado[0xC] XOR dado[0xD] XOR Mul02[dado[0xE]] XOR Mul03[dado[0xF]]
= 0xC9 XOR 0x37 XOR Mul02[0x42] XOR Mul03[ 0x00 ]
= 0xC9 XOR 0x37 XOR 0x84 XOR 0x00 = 0x7A
∗ Dado’[0xF]
= Mul03[dado[0xC]] XOR dado[0xD] XOR dado[0xE] XOR Mul02[dado[0xF]]
= Mul03[ 0xC9 ] XOR 0x37 XOR 0x42 XOR Mul02[ 0x00 ]
= 0xC9 XOR 0x37 XOR 0x42 XOR 0x00 = 0x35
dado = Dado’
– ADD:
1.1 AES 42
0x57 XOR 0xF6 = 0xA1
0xE9 XOR 0x7E = 0x97
0x3E XOR 0x87 = 0xB9
0x0C XOR 0xC2 = 0xCE
0xA4 XOR 0x72 = 0xD6
0xC1 XOR 0x12 = 0xD3
0x60 XOR 0xD5 = 0xB5
0xEE XOR 0xCD = 0x23
0x6E XOR 0x7E = 0x10
0x2C XOR 0xE7 = 0xCB
0xFC XOR 0x2D = 0xD1
0xB1 XOR 0x79 = 0xC8
0x92 XOR 0xBE = 0x2C
0x61 XOR 0xCF = 0xAE
0x7A XOR 0x3B = 0x41
0x35 XOR 0x32 = 0x07
– Dado intermediario ao final do Round:
0xA1 0xD6 0x10 0x2C
0x97 0xD3 0xCB 0xAE
0xB9 0xB5 0xD1 0x41
0xCE 0x23 0xC8 0x07
• Round 2:
– SBox:
1.1 AES 43
SBox[0xA1] = 0x32
SBox[0x97] = 0x88
SBox[0xB9] = 0x56
SBox[0xCE] = 0x8B
SBox[0xD6] = 0xF6
SBox[0xD3] = 0x66
SBox[0xB5] = 0xD5
SBox[0x23] = 0x26
SBox[0x10] = 0xCA
SBox[0xCB] = 0x1F
SBox[0xD1] = 0x3E
SBox[0xC8] = 0xE8
SBox[0x2C] = 0x71
SBox[0xAE] = 0xE4
SBox[0x41] = 0x83
SBox[0x07] = 0xC5
– Shift:
Entrada:
0x32 0xF6 0xCA 0x71
0x88 0x66 0x1F 0xE4
0x56 0xD5 0x3E 0x83
0x8B 0x26 0xE8 0xC5
Saıda:
0x32 0xF6 0xCA 0x71
0x66 0x1F 0xE4 0x88
0x3E 0x83 0x56 0xD5
0xC5 0x8B 0x26 0xE8
– MixColuns:
∗ Dado’[0x0]
= Mul02[dado[0x0]] XOR Mul03[dado[0x1]] XOR dado[0x2] XOR dado[0x3]
= Mul02[0x32] XOR Mul03[ 0x66 ] XOR 0x3E XOR 0xC5
= 0x64 XOR 0xAA XOR 0x3E XOR 0xC5 = 0x35
∗ Dado’[0x1]
= dado[0x0] XOR Mul02[dado[0x1]] XOR Mul03[dado[0x2]] XOR dado[0x3]
= 0x32 XOR Mul02[ 0x66 ] XOR Mul03[ 0x3E ] XOR 0xC5
= 0x32 XOR 0xCC XOR 0x7C XOR 0xC5 = 0x79
∗ Dado’[0x2]
= dado[0x0] XOR dado[0x1] XOR Mul02[dado[0x2]] XOR Mul03[dado[0x3]]
= 0x32 XOR 0x66 XOR Mul02[0x3E] XOR Mul03[ 0xC5 ]
= 0x32 XOR 0x66 XOR 0x7C XOR 0x54 = 0x7C
∗ Dado’[0x3]
= Mul03[dado[0x0]] XOR dado[0x1] XOR dado[0x2] XOR Mul02[dado[0x3]]
1.1 AES 44
= Mul03[ 0x32 ] XOR 0x66 XOR 0x3E XOR Mul02[ 0xC5 ]
= 0x32 XOR 0x66 XOR 0x3E XOR 0x91 = 0x9F
∗ Dado’[0x4]
= Mul02[dado[0x4]] XOR Mul03[dado[0x5]] XOR dado[0x6] XOR dado[0x7]
= Mul02[0xF6] XOR Mul03[ 0x1F ] XOR 0x83 XOR 0x8B
= 0xF7 XOR 0x21 XOR 0x83 XOR 0x8B = 0xDE
∗ Dado’[0x5]
= dado[0x4] XOR Mul02[dado[0x5]] XOR Mul03[dado[0x6]] XOR dado[0x7]
= 0xF6 XOR Mul02[ 0x1F ] XOR Mul03[ 0x83 ] XOR 0x8B
= 0xF6 XOR 0x3E XOR 0x1D XOR 0x8B = 0xDE
∗ Dado’[0x6]
= dado[0x4] XOR dado[0x5] XOR Mul02[dado[0x6]] XOR Mul03[dado[0x7]]
= 0xF6 XOR 0x1F XOR Mul02[0x83] XOR Mul03[ 0x8B ]
= 0xF6 XOR 0x1F XOR 0x1D XOR 0x86 = 0x72
∗ Dado’[0x7]
= Mul03[dado[0x4]] XOR dado[0x5] XOR dado[0x6] XOR Mul02[dado[0x7]]
= Mul03[ 0xF6 ] XOR 0x1F XOR 0x83 XOR Mul02[ 0x8B ]
= 0xF6 XOR 0x1F XOR 0x83 XOR 0x0D = 0x90
∗ Dado’[0x8]
= Mul02[dado[0x8]] XOR Mul03[dado[0x9]] XOR dado[0xA] XOR dado[0xB]
= Mul02[0xCA] XOR Mul03[ 0xE4 ] XOR 0x56 XOR 0x26
= 0x8F XOR 0x37 XOR 0x56 XOR 0x26 = 0xC8
∗ Dado’[0x9]
= dado[0x8] XOR Mul02[dado[0x9]] XOR Mul03[dado[0xA]] XOR dado[0xB]
= 0xCA XOR Mul02[ 0xE4 ] XOR Mul03[ 0x56 ] XOR 0x26
= 0xCA XOR 0xD3 XOR 0xAC XOR 0x26 = 0xC5
∗ Dado’[0xA]
= dado[0x8] XOR dado[0x9] XOR Mul02[dado[0xA]] XOR Mul03[dado[0xB]]
= 0xCA XOR 0xE4 XOR Mul02[0x56] XOR Mul03[ 0x26 ]
= 0xCA XOR 0xE4 XOR 0xAC XOR 0x6A = 0xE8
∗ Dado’[0xB]
= Mul03[dado[0x8]] XOR dado[0x9] XOR dado[0xA] XOR Mul02[dado[0xB]]
= Mul03[ 0xCA ] XOR 0xE4 XOR 0x56 XOR Mul02[ 0x26 ]
= 0xCA XOR 0xE4 XOR 0x56 XOR 0x4C = 0xBB
∗ Dado’[0xC]
= Mul02[dado[0xC]] XOR Mul03[dado[0xD]] XOR dado[0xE] XOR dado[0xF]
= Mul02[0x71] XOR Mul03[ 0x88 ] XOR 0xD5 XOR 0xE8
= 0xE2 XOR 0x83 XOR 0xD5 XOR 0xE8 = 0x5C
1.1 AES 45
∗ Dado’[0xD]
= dado[0xC] XOR Mul02[dado[0xD]] XOR Mul03[dado[0xE]] XOR dado[0xF]
= 0x71 XOR Mul02[ 0x88 ] XOR Mul03[ 0xD5 ] XOR 0xE8
= 0x71 XOR 0x0B XOR 0xB1 XOR 0xE8 = 0xF6
∗ Dado’[0xE]
= dado[0xC] XOR dado[0xD] XOR Mul02[dado[0xE]] XOR Mul03[dado[0xF]]
= 0x71 XOR 0x88 XOR Mul02[0xD5] XOR Mul03[ 0xE8 ]
= 0x71 XOR 0x88 XOR 0xB1 XOR 0x23 = 0x6B
∗ Dado’[0xF]
= Mul03[dado[0xC]] XOR dado[0xD] XOR dado[0xE] XOR Mul02[dado[0xF]]
= Mul03[ 0x71 ] XOR 0x88 XOR 0xD5 XOR Mul02[ 0xE8 ]
= 0x71 XOR 0x88 XOR 0xD5 XOR 0xCB = 0x05
dado = Dado’
– ADD:
0x35 XOR 0x78 = 0x4D
0x79 XOR 0x9C = 0xE5
0x7C XOR 0xA4 = 0xD8
0x9F XOR 0x6C = 0xF3
0xDE XOR 0x0A = 0xD4
0xDD XOR 0x8E = 0x53
0x72 XOR 0x71 = 0x03
0x90 XOR 0xA1 = 0x31
0xC8 XOR 0x74 = 0xBC
0xC5 XOR 0x69 = 0xAC
0xE8 XOR 0x5C = 0xB4
0xBB XOR 0xD8 = 0x63
0x5C XOR 0xCA = 0x96
0xF6 XOR 0xA6 = 0x50
0x6B XOR 0x67 = 0x0C
0x05 XOR 0xEA = 0xEF
– Dado intermediario ao final do Round:
0x4D 0xD4 0xBC 0x96
0xE5 0x53 0xAC 0x50
0xD8 0x03 0xB4 0x0C
0xF3 0x31 0x63 0xEF
• Round 3:
– SBox:
1.1 AES 46
SBox[0x4D] = 0xE3
SBox[0xE5] = 0xD9
SBox[0xD8] = 0x61
SBox[0xF3] = 0x0D
SBox[0xD4] = 0x48
SBox[0x53] = 0xED
SBox[0x03] = 0x7B
SBox[0x31] = 0xC7
SBox[0xBC] = 0x65
SBox[0xAC] = 0x91
SBox[0xB4] = 0x8D
SBox[0x63] = 0xFB
SBox[0x96] = 0x90
SBox[0x50] = 0x53
SBox[0x0C] = 0xFE
SBox[0xEF] = 0xDF
– Shift:
Entrada:
0xE3 0x48 0x65 0x90
0xD9 0xED 0x91 0x53
0x61 0x7B 0x8D 0xFE
0x0D 0xC7 0xFB 0xDF
Saıda:
0xE3 0x48 0x65 0x90
0xED 0x91 0x53 0xD9
0x8D 0xFE 0x61 0x7B
0xDF 0x0D 0xC7 0xFB
– MixColuns:
∗ Dado’[0x0]
= Mul02[dado[0x0]] XOR Mul03[dado[0x1]] XOR dado[0x2] XOR dado[0x3]
= Mul02[0xE3] XOR Mul03[ 0xED ] XOR 0x8D XOR 0xDF
= 0xDD XOR 0x2C XOR 0x8D XOR 0xDF = 0xA3
∗ Dado’[0x1]
= dado[0x0] XOR Mul02[dado[0x1]] XOR Mul03[dado[0x2]] XOR dado[0x3]
= 0xE3 XOR Mul02[ 0xED ] XOR Mul03[ 0x8D ] XOR 0xDF
= 0xE3 XOR 0xC1 XOR 0x01 XOR 0xDF = 0x71
∗ Dado’[0x2]
= dado[0x0] XOR dado[0x1] XOR Mul02[dado[0x2]] XOR Mul03[dado[0x3]]
= 0xE3 XOR 0xED XOR Mul02[0x8D] XOR Mul03[ 0xDF ]
= 0xE3 XOR 0xED XOR 0x01 XOR 0x7A = 0x75
∗ Dado’[0x3]
= Mul03[dado[0x0]] XOR dado[0x1] XOR dado[0x2] XOR Mul02[dado[0x3]]
1.1 AES 47
= Mul03[ 0xE3 ] XOR 0xED XOR 0x8D XOR Mul02[ 0xDF ]
= 0xE3 XOR 0xED XOR 0x8D XOR 0xA5 = 0xFB
∗ Dado’[0x4]
= Mul02[dado[0x4]] XOR Mul03[dado[0x5]] XOR dado[0x6] XOR dado[0x7]
= Mul02[0x48] XOR Mul03[ 0x91 ] XOR 0xFE XOR 0x0D
= 0x90 XOR 0xA8 XOR 0xFE XOR 0x0D = 0xCB
∗ Dado’[0x5]
= dado[0x4] XOR Mul02[dado[0x5]] XOR Mul03[dado[0x6]] XOR dado[0x7]
= 0x48 XOR Mul02[ 0x91 ] XOR Mul03[ 0xFE ] XOR 0x0D
= 0x48 XOR 0x39 XOR 0xE7 XOR 0x0D = 0xCB
∗ Dado’[0x6]
= dado[0x4] XOR dado[0x5] XOR Mul02[dado[0x6]] XOR Mul03[dado[0x7]]
= 0x48 XOR 0x91 XOR Mul02[0xFE] XOR Mul03[ 0x0D ]
= 0x48 XOR 0x91 XOR 0xE7 XOR 0x17 = 0x29
∗ Dado’[0x7]
= Mul03[dado[0x4]] XOR dado[0x5] XOR dado[0x6] XOR Mul02[dado[0x7]]
= Mul03[ 0x48 ] XOR 0x91 XOR 0xFE XOR Mul02[ 0x0D ]
= 0x48 XOR 0x91 XOR 0xFE XOR 0x1A = 0xAD
∗ Dado’[0x8]
= Mul02[dado[0x8]] XOR Mul03[dado[0x9]] XOR dado[0xA] XOR dado[0xB]
= Mul02[0x65] XOR Mul03[ 0x53 ] XOR 0x61 XOR 0xC7
= 0xCA XOR 0xF5 XOR 0x61 XOR 0xC7 = 0x99
∗ Dado’[0x9]
= dado[0x8] XOR Mul02[dado[0x9]] XOR Mul03[dado[0xA]] XOR dado[0xB]
= 0x65 XOR Mul02[ 0x53 ] XOR Mul03[ 0x61 ] XOR 0xC7
= 0x65 XOR 0xA6 XOR 0xC2 XOR 0xC7 = 0xA7
∗ Dado’[0xA]
= dado[0x8] XOR dado[0x9] XOR Mul02[dado[0xA]] XOR Mul03[dado[0xB]]
= 0x65 XOR 0x53 XOR Mul02[0x61] XOR Mul03[ 0xC7 ]
= 0x65 XOR 0x53 XOR 0xC2 XOR 0x52 = 0xA6
∗ Dado’[0xB]
= Mul03[dado[0x8]] XOR dado[0x9] XOR dado[0xA] XOR Mul02[dado[0xB]]
= Mul03[ 0x65 ] XOR 0x53 XOR 0x61 XOR Mul02[ 0xC7 ]
= 0x65 XOR 0x53 XOR 0x61 XOR 0x95 = 0x08
∗ Dado’[0xC]
= Mul02[dado[0xC]] XOR Mul03[dado[0xD]] XOR dado[0xE] XOR dado[0xF]
= Mul02[0x90] XOR Mul03[ 0xD9 ] XOR 0x7B XOR 0xFB
= 0x3B XOR 0x70 XOR 0x7B XOR 0xFB = 0xCB
1.1 AES 48
∗ Dado’[0xD]
= dado[0xC] XOR Mul02[dado[0xD]] XOR Mul03[dado[0xE]] XOR dado[0xF]
= 0x90 XOR Mul02[ 0xD9 ] XOR Mul03[ 0x7B ] XOR 0xFB
= 0x90 XOR 0xA9 XOR 0xF6 XOR 0xFB = 0x4F
∗ Dado’[0xE]
= dado[0xC] XOR dado[0xD] XOR Mul02[dado[0xE]] XOR Mul03[dado[0xF]]
= 0x90 XOR 0xD9 XOR Mul02[0x7B] XOR Mul03[ 0xFB ]
= 0x90 XOR 0xD9 XOR 0xF6 XOR 0x16 = 0xA9
∗ Dado’[0xF]
= Mul03[dado[0xC]] XOR dado[0xD] XOR dado[0xE] XOR Mul02[dado[0xF]]
= Mul03[ 0x90 ] XOR 0xD9 XOR 0x7B XOR Mul02[ 0xFB ]
= 0x90 XOR 0xD9 XOR 0x7B XOR 0xED = 0xE4
dado = Dado’
– ADD:
0xA3 XOR 0x54 = 0xF7
0x71 XOR 0x19 = 0x68
0x75 XOR 0x23 = 0x56
0xFB XOR 0x18 = 0xE3
0xCB XOR 0x5E = 0x95
0x65 XOR 0x97 = 0xF2
0x29 XOR 0x52 = 0x7B
0xAD XOR 0xB9 = 0x14
0x99 XOR 0x2A = 0xB3
0xA7 XOR 0xFE = 0x59
0xA6 XOR 0x0E = 0xA8
0x08 XOR 0x61 = 0x69
0xCB XOR 0xE0 = 0x2B
0x4F XOR 0x58 = 0x17
0xA9 XOR 0x69 = 0xC0
0xE4 XOR 0x8B = 0x6F
– Dado intermediario ao final do Round:
0xF7 0x95 0xB3 0x2B
0x68 0xF2 0x59 0x17
0x56 0x7B 0xA8 0xC0
0xE3 0x14 0x69 0x6F
• Round 4:
– SBox:
1.1 AES 49
SBox[0xF7] = 0x68
SBox[0x68] = 0x45
SBox[0x56] = 0xB1
SBox[0xE3] = 0x11
SBox[0x95] = 0x2A
SBox[0xF2] = 0x89
SBox[0x7B] = 0x21
SBox[0x14] = 0xFA
SBox[0xB3] = 0x6D
SBox[0x59] = 0xCB
SBox[0xA8] = 0xC2
SBox[0x69] = 0xF9
SBox[0x2B] = 0xF1
SBox[0x17] = 0xF0
SBox[0xC0] = 0xBA
SBox[0x6F] = 0xA8
– Shift:
Entrada:
0x68 0x2A 0x6D 0xF1
0x45 0x89 0xCB 0xF0
0xB1 0x21 0xC2 0xBA
0x11 0xFA 0xF9 0xA8
Saıda:
0x68 0x2A 0x6D 0xF1
0x89 0xCB 0xF0 0x45
0xC2 0xBA 0xB1 0x21
0xA8 0x11 0xFA 0xF9
– MixColuns:
∗ Dado’[0x0]
= Mul02[dado[0x0]] XOR Mul03[dado[0x1]] XOR dado[0x2] XOR dado[0x3]
= Mul02[0x68] XOR Mul03[ 0x89 ] XOR 0xC2 XOR 0xA8
= 0xD0 XOR 0x80 XOR 0xC2 XOR 0xA8 = 0x3A
∗ Dado’[0x1]
= dado[0x0] XOR Mul02[dado[0x1]] XOR Mul03[dado[0x2]] XOR dado[0x3]
= 0x68 XOR Mul02[ 0x89 ] XOR Mul03[ 0xC2 ] XOR 0xA8
= 0x68 XOR 0x09 XOR 0x9F XOR 0xA8 = 0x94
∗ Dado’[0x2]
= dado[0x0] XOR dado[0x1] XOR Mul02[dado[0x2]] XOR Mul03[dado[0x3]]
= 0x68 XOR 0x89 XOR Mul02[0xC2] XOR Mul03[ 0xA8 ]
= 0x68 XOR 0x89 XOR 0x9F XOR 0xE3 = 0x9D
∗ Dado’[0x3]
= Mul03[dado[0x0]] XOR dado[0x1] XOR dado[0x2] XOR Mul02[dado[0x3]]
1.1 AES 50
= Mul03[ 0x68 ] XOR 0x89 XOR 0xC2 XOR Mul02[ 0xA8 ]
= 0x68 XOR 0x89 XOR 0xC2 XOR 0x4B = 0xB8
∗ Dado’[0x4]
= Mul02[dado[0x4]] XOR Mul03[dado[0x5]] XOR dado[0x6] XOR dado[0x7]
= Mul02[0x2A] XOR Mul03[ 0xCB ] XOR 0xBA XOR 0x11
= 0x54 XOR 0x46 XOR 0xBA XOR 0x11 = 0xB9
∗ Dado’[0x5]
= dado[0x4] XOR Mul02[dado[0x5]] XOR Mul03[dado[0x6]] XOR dado[0x7]
= 0x2A XOR Mul02[ 0xCB ] XOR Mul03[ 0xBA ] XOR 0x11
= 0x2A XOR 0x8D XOR 0x6F XOR 0x11 = 0xB9
∗ Dado’[0x6]
= dado[0x4] XOR dado[0x5] XOR Mul02[dado[0x6]] XOR Mul03[dado[0x7]]
= 0x2A XOR 0xCB XOR Mul02[0xBA] XOR Mul03[ 0x11 ]
= 0x2A XOR 0xCB XOR 0x6F XOR 0x33 = 0xBD
∗ Dado’[0x7]
= Mul03[dado[0x4]] XOR dado[0x5] XOR dado[0x6] XOR Mul02[dado[0x7]]
= Mul03[ 0x2A ] XOR 0xCB XOR 0xBA XOR Mul02[ 0x11 ]
= 0x2A XOR 0xCB XOR 0xBA XOR 0x22 = 0x2D
∗ Dado’[0x8]
= Mul02[dado[0x8]] XOR Mul03[dado[0x9]] XOR dado[0xA] XOR dado[0xB]
= Mul02[0x6D] XOR Mul03[ 0xF0 ] XOR 0xB1 XOR 0xFA
= 0xDA XOR 0x0B XOR 0xB1 XOR 0xFA = 0x9A
∗ Dado’[0x9]
= dado[0x8] XOR Mul02[dado[0x9]] XOR Mul03[dado[0xA]] XOR dado[0xB]
= 0x6D XOR Mul02[ 0xF0 ] XOR Mul03[ 0xB1 ] XOR 0xFA
= 0x6D XOR 0xFB XOR 0x79 XOR 0xFA = 0xA4
∗ Dado’[0xA]
= dado[0x8] XOR dado[0x9] XOR Mul02[dado[0xA]] XOR Mul03[dado[0xB]]
= 0x6D XOR 0xF0 XOR Mul02[0xB1] XOR Mul03[ 0xFA ]
= 0x6D XOR 0xF0 XOR 0x79 XOR 0x15 = 0xF1
∗ Dado’[0xB]
= Mul03[dado[0x8]] XOR dado[0x9] XOR dado[0xA] XOR Mul02[dado[0xB]]
= Mul03[ 0x6D ] XOR 0xF0 XOR 0xB1 XOR Mul02[ 0xFA ]
= 0x6D XOR 0xF0 XOR 0xB1 XOR 0xEF = 0x19
∗ Dado’[0xC]
= Mul02[dado[0xC]] XOR Mul03[dado[0xD]] XOR dado[0xE] XOR dado[0xF]
= Mul02[0xF1] XOR Mul03[ 0x45 ] XOR 0x21 XOR 0xF9
= 0xF9 XOR 0xCF XOR 0x21 XOR 0xF9 = 0xEE
1.1 AES 51
∗ Dado’[0xD]
= dado[0xC] XOR Mul02[dado[0xD]] XOR Mul03[dado[0xE]] XOR dado[0xF]
= 0xF1 XOR Mul02[ 0x45 ] XOR Mul03[ 0x21 ] XOR 0xF9
= 0xF1 XOR 0x8A XOR 0x42 XOR 0xF9 = 0xE1
∗ Dado’[0xE]
= dado[0xC] XOR dado[0xD] XOR Mul02[dado[0xE]] XOR Mul03[dado[0xF]]
= 0xF1 XOR 0x45 XOR Mul02[0x21] XOR Mul03[ 0xF9 ]
= 0xF1 XOR 0x45 XOR 0x42 XOR 0x10 = 0xE6
∗ Dado’[0xF]
= Mul03[dado[0xC]] XOR dado[0xD] XOR dado[0xE] XOR Mul02[dado[0xF]]
= Mul03[ 0xF1 ] XOR 0x45 XOR 0x21 XOR Mul02[ 0xF9 ]
= 0xF1 XOR 0x45 XOR 0x21 XOR 0xE9 = 0x85
dado = Dado’
– ADD:
0x3A XOR 0x2E = 0x14
0x94 XOR 0xE0 = 0x74
0x9D XOR 0x1E = 0x83
0xB8 XOR 0xF9 = 0x41
0xB9 XOR 0x70 = 0xC9
0x63 XOR 0x77 = 0x14
0xBD XOR 0x4C = 0xF1
0x2D XOR 0x40 = 0x6D
0x9A XOR 0x5A = 0xC0
0xA4 XOR 0x89 = 0x2D
0xF1 XOR 0x42 = 0xB3
0x19 XOR 0x21 = 0x38
0xEE XOR 0xBA = 0x54
0xE1 XOR 0xD1 = 0x30
0xE6 XOR 0x2B = 0xCD
0x85 XOR 0xAA = 0x2F
– Dado intermediario ao final do Round:
0x14 0xC9 0xC0 0x54
0x74 0x14 0x2D 0x30
0x83 0xF1 0xB3 0xCD
0x41 0x6D 0x38 0x2F
• Round 5:
– SBox:
1.1 AES 52
SBox[0x14] = 0xFA
SBox[0x74] = 0x92
SBox[0x83] = 0xEC
SBox[0x41] = 0x83
SBox[0xC9] = 0xDD
SBox[0x14] = 0xFA
SBox[0xF1] = 0xA1
SBox[0x6D] = 0x3C
SBox[0xC0] = 0xBA
SBox[0x2D] = 0xD8
SBox[0xB3] = 0x6D
SBox[0x38] = 0x07
SBox[0x54] = 0x20
SBox[0x30] = 0x04
SBox[0xCD] = 0xBD
SBox[0x2F] = 0x15
– Shift:
Entrada:
0xFA 0xDD 0xBA 0x20
0x92 0xFA 0xD8 0x04
0xEC 0xA1 0x6D 0xBD
0x83 0x3C 0x07 0x15
Saıda:
0xFA 0xDD 0xBA 0x20
0xFA 0xD8 0x04 0x92
0x6D 0xBD 0xEC 0xA1
0x15 0x83 0x3C 0x07
– MixColuns:
∗ Dado’[0x0]
= Mul02[dado[0x0]] XOR Mul03[dado[0x1]] XOR dado[0x2] XOR dado[0x3]
= Mul02[0xFA] XOR Mul03[ 0xFA ] XOR 0x6D XOR 0x15
= 0xEF XOR 0x15 XOR 0x6D XOR 0x15 = 0x82
∗ Dado’[0x1]
= dado[0x0] XOR Mul02[dado[0x1]] XOR Mul03[dado[0x2]] XOR dado[0x3]
= 0xFA XOR Mul02[ 0xFA ] XOR Mul03[ 0x6D ] XOR 0x15
= 0xFA XOR 0xEF XOR 0xDA XOR 0x15 = 0xB7
∗ Dado’[0x2]
= dado[0x0] XOR dado[0x1] XOR Mul02[dado[0x2]] XOR Mul03[dado[0x3]]
= 0xFA XOR 0xFA XOR Mul02[0x6D] XOR Mul03[ 0x15 ]
= 0xFA XOR 0xFA XOR 0xDA XOR 0x3F = 0xE5
∗ Dado’[0x3]
= Mul03[dado[0x0]] XOR dado[0x1] XOR dado[0x2] XOR Mul02[dado[0x3]]
1.1 AES 53
= Mul03[ 0xFA ] XOR 0xFA XOR 0x6D XOR Mul02[ 0x15 ]
= 0xFA XOR 0xFA XOR 0x6D XOR 0x2A = 0xA8
∗ Dado’[0x4]
= Mul02[dado[0x4]] XOR Mul03[dado[0x5]] XOR dado[0x6] XOR dado[0x7]
= Mul02[0xDD] XOR Mul03[ 0xD8 ] XOR 0xBD XOR 0x83
= 0xA1 XOR 0x73 XOR 0xBD XOR 0x83 = 0xEC
∗ Dado’[0x5]
= dado[0x4] XOR Mul02[dado[0x5]] XOR Mul03[dado[0x6]] XOR dado[0x7]
= 0xDD XOR Mul02[ 0xD8 ] XOR Mul03[ 0xBD ] XOR 0x83
= 0xDD XOR 0xAB XOR 0x61 XOR 0x83 = 0xEC
∗ Dado’[0x6]
= dado[0x4] XOR dado[0x5] XOR Mul02[dado[0x6]] XOR Mul03[dado[0x7]]
= 0xDD XOR 0xD8 XOR Mul02[0xBD] XOR Mul03[ 0x83 ]
= 0xDD XOR 0xD8 XOR 0x61 XOR 0x9E = 0xFA
∗ Dado’[0x7]
= Mul03[dado[0x4]] XOR dado[0x5] XOR dado[0x6] XOR Mul02[dado[0x7]]
= Mul03[ 0xDD ] XOR 0xD8 XOR 0xBD XOR Mul02[ 0x83 ]
= 0xDD XOR 0xD8 XOR 0xBD XOR 0x1D = 0x04
∗ Dado’[0x8]
= Mul02[dado[0x8]] XOR Mul03[dado[0x9]] XOR dado[0xA] XOR dado[0xB]
= Mul02[0xBA] XOR Mul03[ 0x04 ] XOR 0xEC XOR 0x3C
= 0x6F XOR 0x0C XOR 0xEC XOR 0x3C = 0xB3
∗ Dado’[0x9]
= dado[0x8] XOR Mul02[dado[0x9]] XOR Mul03[dado[0xA]] XOR dado[0xB]
= 0xBA XOR Mul02[ 0x04 ] XOR Mul03[ 0xEC ] XOR 0x3C
= 0xBA XOR 0x08 XOR 0xC3 XOR 0x3C = 0xA1
∗ Dado’[0xA]
= dado[0x8] XOR dado[0x9] XOR Mul02[dado[0xA]] XOR Mul03[dado[0xB]]
= 0xBA XOR 0x04 XOR Mul02[0xEC] XOR Mul03[ 0x3C ]
= 0xBA XOR 0x04 XOR 0xC3 XOR 0x44 = 0x39
∗ Dado’[0xB]
= Mul03[dado[0x8]] XOR dado[0x9] XOR dado[0xA] XOR Mul02[dado[0xB]]
= Mul03[ 0xBA ] XOR 0x04 XOR 0xEC XOR Mul02[ 0x3C ]
= 0xBA XOR 0x04 XOR 0xEC XOR 0x78 = 0x45
∗ Dado’[0xC]
= Mul02[dado[0xC]] XOR Mul03[dado[0xD]] XOR dado[0xE] XOR dado[0xF]
= Mul02[0x20] XOR Mul03[ 0x92 ] XOR 0xA1 XOR 0x07
= 0x40 XOR 0xAD XOR 0xA1 XOR 0x07 = 0x4B
1.1 AES 54
∗ Dado’[0xD]
= dado[0xC] XOR Mul02[dado[0xD]] XOR Mul03[dado[0xE]] XOR dado[0xF]
= 0x20 XOR Mul02[ 0x92 ] XOR Mul03[ 0xA1 ] XOR 0x07
= 0x20 XOR 0x3F XOR 0x59 XOR 0x07 = 0xE0
∗ Dado’[0xE]
= dado[0xC] XOR dado[0xD] XOR Mul02[dado[0xE]] XOR Mul03[dado[0xF]]
= 0x20 XOR 0x92 XOR Mul02[0xA1] XOR Mul03[ 0x07 ]
= 0x20 XOR 0x92 XOR 0x59 XOR 0x09 = 0xE2
∗ Dado’[0xF]
= Mul03[dado[0xC]] XOR dado[0xD] XOR dado[0xE] XOR Mul02[dado[0xF]]
= Mul03[ 0x20 ] XOR 0x92 XOR 0xA1 XOR Mul02[ 0x07 ]
= 0x20 XOR 0x92 XOR 0xA1 XOR 0x0E = 0x5D
dado = Dado’
– ADD:
0x82 XOR 0x30 = 0xB2
0xB7 XOR 0x11 = 0xA6
0xE5 XOR 0xB2 = 0x57
0xA8 XOR 0x0D = 0xA5
0xEC XOR 0x40 = 0xAC
0x29 XOR 0x66 = 0x4F
0xFA XOR 0xFE = 0x04
0x04 XOR 0x4D = 0x49
0xB3 XOR 0x1A = 0xA9
0xA1 XOR 0xEF = 0x4E
0x39 XOR 0xBC = 0x85
0x45 XOR 0x6C = 0x29
0x4B XOR 0xA0 = 0xEB
0xE0 XOR 0x3E = 0xDE
0xE2 XOR 0x97 = 0x75
0x5D XOR 0xC6 = 0x9B
– Dado intermediario ao final do Round:
0xB2 0xAC 0xA9 0xEB
0xA6 0x4F 0x4E 0xDE
0x57 0x04 0x85 0x75
0xA5 0x49 0x29 0x9B
• Round 6:
– SBox:
1.1 AES 55
SBox[0xB2] = 0x37
SBox[0xA6] = 0x24
SBox[0x57] = 0x5B
SBox[0xA5] = 0x06
SBox[0xAC] = 0x91
SBox[0x4F] = 0x84
SBox[0x04] = 0xF2
SBox[0x49] = 0x3B
SBox[0xA9] = 0xD3
SBox[0x4E] = 0x2F
SBox[0x85] = 0x97
SBox[0x29] = 0xA5
SBox[0xEB] = 0xE9
SBox[0xDE] = 0x1D
SBox[0x75] = 0x9D
SBox[0x9B] = 0x14
– Shift:
Entrada:
0x37 0x91 0xD3 0xE9
0x24 0x84 0x2F 0x1D
0x5B 0xF2 0x97 0x9D
0x06 0x3B 0xA5 0x14
Saıda:
0x37 0x91 0xD3 0xE9
0x84 0x2F 0x1D 0x24
0x97 0x9D 0x5B 0xF2
0x14 0x06 0x3B 0xA5
– MixColuns:
∗ Dado’[0x0]
= Mul02[dado[0x0]] XOR Mul03[dado[0x1]] XOR dado[0x2] XOR dado[0x3]
= Mul02[0x37] XOR Mul03[ 0x84 ] XOR 0x97 XOR 0x14
= 0x6E XOR 0x97 XOR 0x97 XOR 0x14 = 0x7A
∗ Dado’[0x1]
= dado[0x0] XOR Mul02[dado[0x1]] XOR Mul03[dado[0x2]] XOR dado[0x3]
= 0x37 XOR Mul02[ 0x84 ] XOR Mul03[ 0x97 ] XOR 0x14
= 0x37 XOR 0x13 XOR 0x35 XOR 0x14 = 0x92
∗ Dado’[0x2]
= dado[0x0] XOR dado[0x1] XOR Mul02[dado[0x2]] XOR Mul03[dado[0x3]]
= 0x37 XOR 0x84 XOR Mul02[0x97] XOR Mul03[ 0x14 ]
= 0x37 XOR 0x84 XOR 0x35 XOR 0x3C = 0xBA
∗ Dado’[0x3]
= Mul03[dado[0x0]] XOR dado[0x1] XOR dado[0x2] XOR Mul02[dado[0x3]]
1.1 AES 56
= Mul03[ 0x37 ] XOR 0x84 XOR 0x97 XOR Mul02[ 0x14 ]
= 0x37 XOR 0x84 XOR 0x97 XOR 0x28 = 0x62
∗ Dado’[0x4]
= Mul02[dado[0x4]] XOR Mul03[dado[0x5]] XOR dado[0x6] XOR dado[0x7]
= Mul02[0x91] XOR Mul03[ 0x2F ] XOR 0x9D XOR 0x06
= 0x39 XOR 0x71 XOR 0x9D XOR 0x06 = 0xD3
∗ Dado’[0x5]
= dado[0x4] XOR Mul02[dado[0x5]] XOR Mul03[dado[0x6]] XOR dado[0x7]
= 0x91 XOR Mul02[ 0x2F ] XOR Mul03[ 0x9D ] XOR 0x06
= 0x91 XOR 0x5E XOR 0x21 XOR 0x06 = 0xD3
∗ Dado’[0x6]
= dado[0x4] XOR dado[0x5] XOR Mul02[dado[0x6]] XOR Mul03[dado[0x7]]
= 0x91 XOR 0x2F XOR Mul02[0x9D] XOR Mul03[ 0x06 ]
= 0x91 XOR 0x2F XOR 0x21 XOR 0x0A = 0x95
∗ Dado’[0x7]
= Mul03[dado[0x4]] XOR dado[0x5] XOR dado[0x6] XOR Mul02[dado[0x7]]
= Mul03[ 0x91 ] XOR 0x2F XOR 0x9D XOR Mul02[ 0x06 ]
= 0x91 XOR 0x2F XOR 0x9D XOR 0x0C = 0x16
∗ Dado’[0x8]
= Mul02[dado[0x8]] XOR Mul03[dado[0x9]] XOR dado[0xA] XOR dado[0xB]
= Mul02[0xD3] XOR Mul03[ 0x1D ] XOR 0x5B XOR 0x3B
= 0xBD XOR 0x27 XOR 0x5B XOR 0x3B = 0xFA
∗ Dado’[0x9]
= dado[0x8] XOR Mul02[dado[0x9]] XOR Mul03[dado[0xA]] XOR dado[0xB]
= 0xD3 XOR Mul02[ 0x1D ] XOR Mul03[ 0x5B ] XOR 0x3B
= 0xD3 XOR 0x3A XOR 0xB6 XOR 0x3B = 0x3F
∗ Dado’[0xA]
= dado[0x8] XOR dado[0x9] XOR Mul02[dado[0xA]] XOR Mul03[dado[0xB]]
= 0xD3 XOR 0x1D XOR Mul02[0x5B] XOR Mul03[ 0x3B ]
= 0xD3 XOR 0x1D XOR 0xB6 XOR 0x4D = 0x35
∗ Dado’[0xB]
= Mul03[dado[0x8]] XOR dado[0x9] XOR dado[0xA] XOR Mul02[dado[0xB]]
= Mul03[ 0xD3 ] XOR 0x1D XOR 0x5B XOR Mul02[ 0x3B ]
= 0xD3 XOR 0x1D XOR 0x5B XOR 0x76 = 0x5E
∗ Dado’[0xC]
= Mul02[dado[0xC]] XOR Mul03[dado[0xD]] XOR dado[0xE] XOR dado[0xF]
= Mul02[0xE9] XOR Mul03[ 0x24 ] XOR 0xF2 XOR 0xA5
= 0xC9 XOR 0x6C XOR 0xF2 XOR 0xA5 = 0xF2
1.1 AES 57
∗ Dado’[0xD]
= dado[0xC] XOR Mul02[dado[0xD]] XOR Mul03[dado[0xE]] XOR dado[0xF]
= 0xE9 XOR Mul02[ 0x24 ] XOR Mul03[ 0xF2 ] XOR 0xA5
= 0xE9 XOR 0x48 XOR 0xFF XOR 0xA5 = 0x09
∗ Dado’[0xE]
= dado[0xC] XOR dado[0xD] XOR Mul02[dado[0xE]] XOR Mul03[dado[0xF]]
= 0xE9 XOR 0x24 XOR Mul02[0xF2] XOR Mul03[ 0xA5 ]
= 0xE9 XOR 0x24 XOR 0xFF XOR 0xF4 = 0xC6
∗ Dado’[0xF]
= Mul03[dado[0xC]] XOR dado[0xD] XOR dado[0xE] XOR Mul02[dado[0xF]]
= Mul03[ 0xE9 ] XOR 0x24 XOR 0xF2 XOR Mul02[ 0xA5 ]
= 0xE9 XOR 0x24 XOR 0xF2 XOR 0x51 = 0xA7
dado = Dado’
– ADD:
0x7A XOR 0xC2 = 0xB8
0x92 XOR 0x99 = 0x0B
0xBA XOR 0x06 = 0xBC
0x62 XOR 0xED = 0x8F
0xD3 XOR 0x82 = 0x51
0x75 XOR 0xFF = 0x8A
0x95 XOR 0xF8 = 0x6D
0x16 XOR 0xA0 = 0xB6
0xFA XOR 0x98 = 0x62
0x3F XOR 0x10 = 0x2F
0x35 XOR 0x44 = 0x71
0x5E XOR 0xCC = 0x92
0xF2 XOR 0x38 = 0xCA
0x09 XOR 0x2E = 0x27
0xC6 XOR 0xD3 = 0x15
0xA7 XOR 0x0A = 0xAD
– Dado intermediario ao final do Round:
0xB8 0x51 0x62 0xCA
0x0B 0x8A 0x2F 0x27
0xBC 0x6D 0x71 0x15
0x8F 0xB6 0x92 0xAD
• Round 7:
– SBox:
1.1 AES 58
SBox[0xB8] = 0x6C
SBox[0x0B] = 0x2B
SBox[0xBC] = 0x65
SBox[0x8F] = 0x73
SBox[0x51] = 0xD1
SBox[0x8A] = 0x7E
SBox[0x6D] = 0x3C
SBox[0xB6] = 0x4E
SBox[0x62] = 0xAA
SBox[0x2F] = 0x15
SBox[0x71] = 0xA3
SBox[0x92] = 0x4F
SBox[0xCA] = 0x74
SBox[0x27] = 0xCC
SBox[0x15] = 0x59
SBox[0xAD] = 0x95
– Shift:
Entrada:
0x6C 0xD1 0xAA 0x74
0x2B 0x7E 0x15 0xCC
0x65 0x3C 0xA3 0x59
0x73 0x4E 0x4F 0x95
Saıda:
0x6C 0xD1 0xAA 0x74
0x7E 0x15 0xCC 0x2B
0xA3 0x59 0x65 0x3C
0x95 0x73 0x4E 0x4F
– MixColuns:
∗ Dado’[0x0]
= Mul02[dado[0x0]] XOR Mul03[dado[0x1]] XOR dado[0x2] XOR dado[0x3]
= Mul02[0x6C] XOR Mul03[ 0x7E ] XOR 0xA3 XOR 0x95
= 0xD8 XOR 0x82 XOR 0xA3 XOR 0x95 = 0x6C
∗ Dado’[0x1]
= dado[0x0] XOR Mul02[dado[0x1]] XOR Mul03[dado[0x2]] XOR dado[0x3]
= 0x6C XOR Mul02[ 0x7E ] XOR Mul03[ 0xA3 ] XOR 0x95
= 0x6C XOR 0xFC XOR 0x5D XOR 0x95 = 0xFB
∗ Dado’[0x2]
= dado[0x0] XOR dado[0x1] XOR Mul02[dado[0x2]] XOR Mul03[dado[0x3]]
= 0x6C XOR 0x7E XOR Mul02[0xA3] XOR Mul03[ 0x95 ]
= 0x6C XOR 0x7E XOR 0x5D XOR 0xA4 = 0xEB
∗ Dado’[0x3]
= Mul03[dado[0x0]] XOR dado[0x1] XOR dado[0x2] XOR Mul02[dado[0x3]]
1.1 AES 59
= Mul03[ 0x6C ] XOR 0x7E XOR 0xA3 XOR Mul02[ 0x95 ]
= 0x6C XOR 0x7E XOR 0xA3 XOR 0x31 = 0x58
∗ Dado’[0x4]
= Mul02[dado[0x4]] XOR Mul03[dado[0x5]] XOR dado[0x6] XOR dado[0x7]
= Mul02[0xD1] XOR Mul03[ 0x15 ] XOR 0x59 XOR 0x73
= 0xB9 XOR 0x3F XOR 0x59 XOR 0x73 = 0xAC
∗ Dado’[0x5]
= dado[0x4] XOR Mul02[dado[0x5]] XOR Mul03[dado[0x6]] XOR dado[0x7]
= 0xD1 XOR Mul02[ 0x15 ] XOR Mul03[ 0x59 ] XOR 0x73
= 0xD1 XOR 0x2A XOR 0xB2 XOR 0x73 = 0xAC
∗ Dado’[0x6]
= dado[0x4] XOR dado[0x5] XOR Mul02[dado[0x6]] XOR Mul03[dado[0x7]]
= 0xD1 XOR 0x15 XOR Mul02[0x59] XOR Mul03[ 0x73 ]
= 0xD1 XOR 0x15 XOR 0xB2 XOR 0x95 = 0xE3
∗ Dado’[0x7]
= Mul03[dado[0x4]] XOR dado[0x5] XOR dado[0x6] XOR Mul02[dado[0x7]]
= Mul03[ 0xD1 ] XOR 0x15 XOR 0x59 XOR Mul02[ 0x73 ]
= 0xD1 XOR 0x15 XOR 0x59 XOR 0xE6 = 0xC2
∗ Dado’[0x8]
= Mul02[dado[0x8]] XOR Mul03[dado[0x9]] XOR dado[0xA] XOR dado[0xB]
= Mul02[0xAA] XOR Mul03[ 0xCC ] XOR 0x65 XOR 0x4E
= 0x4F XOR 0x4F XOR 0x65 XOR 0x4E = 0x2B
∗ Dado’[0x9]
= dado[0x8] XOR Mul02[dado[0x9]] XOR Mul03[dado[0xA]] XOR dado[0xB]
= 0xAA XOR Mul02[ 0xCC ] XOR Mul03[ 0x65 ] XOR 0x4E
= 0xAA XOR 0x83 XOR 0xCA XOR 0x4E = 0xC8
∗ Dado’[0xA]
= dado[0x8] XOR dado[0x9] XOR Mul02[dado[0xA]] XOR Mul03[dado[0xB]]
= 0xAA XOR 0xCC XOR Mul02[0x65] XOR Mul03[ 0x4E ]
= 0xAA XOR 0xCC XOR 0xCA XOR 0xD2 = 0x7E
∗ Dado’[0xB]
= Mul03[dado[0x8]] XOR dado[0x9] XOR dado[0xA] XOR Mul02[dado[0xB]]
= Mul03[ 0xAA ] XOR 0xCC XOR 0x65 XOR Mul02[ 0x4E ]
= 0xAA XOR 0xCC XOR 0x65 XOR 0x9C = 0xD0
∗ Dado’[0xC]
= Mul02[dado[0xC]] XOR Mul03[dado[0xD]] XOR dado[0xE] XOR dado[0xF]
= Mul02[0x74] XOR Mul03[ 0x2B ] XOR 0x3C XOR 0x4F
= 0xE8 XOR 0x7D XOR 0x3C XOR 0x4F = 0xE6
1.1 AES 60
∗ Dado’[0xD]
= dado[0xC] XOR Mul02[dado[0xD]] XOR Mul03[dado[0xE]] XOR dado[0xF]
= 0x74 XOR Mul02[ 0x2B ] XOR Mul03[ 0x3C ] XOR 0x4F
= 0x74 XOR 0x56 XOR 0x78 XOR 0x4F = 0x29
∗ Dado’[0xE]
= dado[0xC] XOR dado[0xD] XOR Mul02[dado[0xE]] XOR Mul03[dado[0xF]]
= 0x74 XOR 0x2B XOR Mul02[0x3C] XOR Mul03[ 0x4F ]
= 0x74 XOR 0x2B XOR 0x78 XOR 0xD1 = 0xF6
∗ Dado’[0xF]
= Mul03[dado[0xC]] XOR dado[0xD] XOR dado[0xE] XOR Mul02[dado[0xF]]
= Mul03[ 0x74 ] XOR 0x2B XOR 0x3C XOR Mul02[ 0x4F ]
= 0x74 XOR 0x2B XOR 0x3C XOR 0x9E = 0x15
dado = Dado’
– ADD:
0x6C XOR 0x73 = 0x1F
0xFB XOR 0xFF = 0x04
0xEB XOR 0x61 = 0x8A
0x58 XOR 0xEA = 0xB2
0xAC XOR 0xF1 = 0x5D
0x63 XOR 0x00 = 0x63
0xE3 XOR 0x99 = 0x7A
0xC2 XOR 0x4A = 0x88
0x2B XOR 0x69 = 0x42
0xC8 XOR 0x10 = 0xD8
0x7E XOR 0xDD = 0xA3
0xD0 XOR 0x86 = 0x56
0xE6 XOR 0x51 = 0xB7
0x29 XOR 0x3E = 0x17
0xF6 XOR 0x0E = 0xF8
0x15 XOR 0x8C = 0x99
– Dado intermediario ao final do Round:
0x1F 0x5D 0x42 0xB7
0x04 0x63 0xD8 0x17
0x8A 0x7A 0xA3 0xF8
0xB2 0x88 0x56 0x99
• Round 8:
– SBox:
1.1 AES 61
SBox[0x1F] = 0xC0
SBox[0x04] = 0xF2
SBox[0x8A] = 0x7E
SBox[0xB2] = 0x37
SBox[0x5D] = 0x4C
SBox[0x63] = 0xFB
SBox[0x7A] = 0xDA
SBox[0x88] = 0xC4
SBox[0x42] = 0x2C
SBox[0xD8] = 0x61
SBox[0xA3] = 0x0A
SBox[0x56] = 0xB1
SBox[0xB7] = 0xA9
SBox[0x17] = 0xF0
SBox[0xF8] = 0x41
SBox[0x99] = 0xEE
– Shift:
Entrada:
0xC0 0x4C 0x2C 0xA9
0xF2 0xFB 0x61 0xF0
0x7E 0xDA 0x0A 0x41
0x37 0xC4 0xB1 0xEE
Saıda:
0xC0 0x4C 0x2C 0xA9
0xFB 0x61 0xF0 0xF2
0x0A 0x41 0x7E 0xDA
0xEE 0x37 0xC4 0xB1
– MixColuns:
∗ Dado’[0x0]
= Mul02[dado[0x0]] XOR Mul03[dado[0x1]] XOR dado[0x2] XOR dado[0x3]
= Mul02[0xC0] XOR Mul03[ 0xFB ] XOR 0x0A XOR 0xEE
= 0x9B XOR 0x16 XOR 0x0A XOR 0xEE = 0x69
∗ Dado’[0x1]
= dado[0x0] XOR Mul02[dado[0x1]] XOR Mul03[dado[0x2]] XOR dado[0x3]
= 0xC0 XOR Mul02[ 0xFB ] XOR Mul03[ 0x0A ] XOR 0xEE
= 0xC0 XOR 0xED XOR 0x14 XOR 0xEE = 0xDD
∗ Dado’[0x2]
= dado[0x0] XOR dado[0x1] XOR Mul02[dado[0x2]] XOR Mul03[dado[0x3]]
= 0xC0 XOR 0xFB XOR Mul02[0x0A] XOR Mul03[ 0xEE ]
= 0xC0 XOR 0xFB XOR 0x14 XOR 0x29 = 0x06
∗ Dado’[0x3]
= Mul03[dado[0x0]] XOR dado[0x1] XOR dado[0x2] XOR Mul02[dado[0x3]]
1.1 AES 62
= Mul03[ 0xC0 ] XOR 0xFB XOR 0x0A XOR Mul02[ 0xEE ]
= 0xC0 XOR 0xFB XOR 0x0A XOR 0xC7 = 0x6D
∗ Dado’[0x4]
= Mul02[dado[0x4]] XOR Mul03[dado[0x5]] XOR dado[0x6] XOR dado[0x7]
= Mul02[0x4C] XOR Mul03[ 0x61 ] XOR 0x41 XOR 0x37
= 0x98 XOR 0xA3 XOR 0x41 XOR 0x37 = 0x4D
∗ Dado’[0x5]
= dado[0x4] XOR Mul02[dado[0x5]] XOR Mul03[dado[0x6]] XOR dado[0x7]
= 0x4C XOR Mul02[ 0x61 ] XOR Mul03[ 0x41 ] XOR 0x37
= 0x4C XOR 0xC2 XOR 0x82 XOR 0x37 = 0x4D
∗ Dado’[0x6]
= dado[0x4] XOR dado[0x5] XOR Mul02[dado[0x6]] XOR Mul03[dado[0x7]]
= 0x4C XOR 0x61 XOR Mul02[0x41] XOR Mul03[ 0x37 ]
= 0x4C XOR 0x61 XOR 0x82 XOR 0x59 = 0xF6
∗ Dado’[0x7]
= Mul03[dado[0x4]] XOR dado[0x5] XOR dado[0x6] XOR Mul02[dado[0x7]]
= Mul03[ 0x4C ] XOR 0x61 XOR 0x41 XOR Mul02[ 0x37 ]
= 0x4C XOR 0x61 XOR 0x41 XOR 0x6E = 0x9A
∗ Dado’[0x8]
= Mul02[dado[0x8]] XOR Mul03[dado[0x9]] XOR dado[0xA] XOR dado[0xB]
= Mul02[0x2C] XOR Mul03[ 0xF0 ] XOR 0x7E XOR 0xC4
= 0x58 XOR 0x0B XOR 0x7E XOR 0xC4 = 0xE9
∗ Dado’[0x9]
= dado[0x8] XOR Mul02[dado[0x9]] XOR Mul03[dado[0xA]] XOR dado[0xB]
= 0x2C XOR Mul02[ 0xF0 ] XOR Mul03[ 0x7E ] XOR 0xC4
= 0x2C XOR 0xFB XOR 0xFC XOR 0xC4 = 0x91
∗ Dado’[0xA]
= dado[0x8] XOR dado[0x9] XOR Mul02[dado[0xA]] XOR Mul03[dado[0xB]]
= 0x2C XOR 0xF0 XOR Mul02[0x7E] XOR Mul03[ 0xC4 ]
= 0x2C XOR 0xF0 XOR 0xFC XOR 0x57 = 0x77
∗ Dado’[0xB]
= Mul03[dado[0x8]] XOR dado[0x9] XOR dado[0xA] XOR Mul02[dado[0xB]]
= Mul03[ 0x2C ] XOR 0xF0 XOR 0x7E XOR Mul02[ 0xC4 ]
= 0x2C XOR 0xF0 XOR 0x7E XOR 0x93 = 0x69
∗ Dado’[0xC]
= Mul02[dado[0xC]] XOR Mul03[dado[0xD]] XOR dado[0xE] XOR dado[0xF]
= Mul02[0xA9] XOR Mul03[ 0xF2 ] XOR 0xDA XOR 0xB1
= 0x49 XOR 0x0D XOR 0xDA XOR 0xB1 = 0x2F
1.1 AES 63
∗ Dado’[0xD]
= dado[0xC] XOR Mul02[dado[0xD]] XOR Mul03[dado[0xE]] XOR dado[0xF]
= 0xA9 XOR Mul02[ 0xF2 ] XOR Mul03[ 0xDA ] XOR 0xB1
= 0xA9 XOR 0xFF XOR 0xAF XOR 0xB1 = 0x92
∗ Dado’[0xE]
= dado[0xC] XOR dado[0xD] XOR Mul02[dado[0xE]] XOR Mul03[dado[0xF]]
= 0xA9 XOR 0xF2 XOR Mul02[0xDA] XOR Mul03[ 0xB1 ]
= 0xA9 XOR 0xF2 XOR 0xAF XOR 0xC8 = 0x3C
∗ Dado’[0xF]
= Mul03[dado[0xC]] XOR dado[0xD] XOR dado[0xE] XOR Mul02[dado[0xF]]
= Mul03[ 0xA9 ] XOR 0xF2 XOR 0xDA XOR Mul02[ 0xB1 ]
= 0xA9 XOR 0xF2 XOR 0xDA XOR 0x79 = 0xB1
dado = Dado’
– ADD:
0x69 XOR 0xDA = 0xB3
0xDD XOR 0x54 = 0x89
0x06 XOR 0x05 = 0x03
0x6D XOR 0x3B = 0x56
0x4D XOR 0x2B = 0x66
0x7A XOR 0x54 = 0x2E
0xF6 XOR 0x9C = 0x6A
0x9A XOR 0x71 = 0xEB
0xE9 XOR 0x42 = 0xAB
0x91 XOR 0x44 = 0xD5
0x77 XOR 0x41 = 0x36
0x69 XOR 0xF7 = 0x9E
0x2F XOR 0x13 = 0x3C
0x92 XOR 0x7A = 0xE8
0x3C XOR 0x4F = 0x73
0xB1 XOR 0x7B = 0xCA
– Dado intermediario ao final do Round:
0xB3 0x66 0xAB 0x3C
0x89 0x2E 0xD5 0xE8
0x03 0x6A 0x36 0x73
0x56 0xEB 0x9E 0xCA
• Pos-Processamento:
– SBox:
1.1 AES 64
SBox[0xB3] = 0x6D
SBox[0x89] = 0xA7
SBox[0x03] = 0x7B
SBox[0x56] = 0xB1
SBox[0x66] = 0x33
SBox[0x2E] = 0x31
SBox[0x6A] = 0x02
SBox[0xEB] = 0xE9
SBox[0xAB] = 0x62
SBox[0xD5] = 0x03
SBox[0x36] = 0x05
SBox[0x9E] = 0x0B
SBox[0x3C] = 0xEB
SBox[0xE8] = 0x9B
SBox[0x73] = 0x8F
SBox[0xCA] = 0x74
– Shift:
Entrada:
0x6D 0x33 0x62 0xEB
0xA7 0x31 0x03 0x9B
0x7B 0x02 0x05 0x8F
0xB1 0xE9 0x0B 0x74
Saıda:
0x6D 0x33 0x62 0xEB
0x31 0x03 0x9B 0xA7
0x05 0x8F 0x7B 0x02
0x74 0xB1 0xE9 0x0B
– ADD:
1.1 AES 65
0x6D XOR 0x36 = 0x5B
0x31 XOR 0xD0 = 0xE1
0x05 XOR 0x24 = 0x21
0x74 XOR 0x46 = 0x32
0x33 XOR 0x1D = 0x2E
0x03 XOR 0x84 = 0x87
0x8F XOR 0xB8 = 0x37
0xB1 XOR 0x37 = 0x86
0x62 XOR 0x5F = 0x3D
0x9B XOR 0xC0 = 0x5B
0x7B XOR 0xF9 = 0x82
0xE9 XOR 0xC0 = 0x29
0xEB XOR 0x4C = 0xA7
0xA7 XOR 0xBA = 0x1D
0x02 XOR 0xB6 = 0xB4
0x0B XOR 0xBB = 0xB0
• FINAL:
0x5B 0x2E 0x3D 0xA7
0xE1 0x87 0x5B 0x1D
0x21 0x37 0x82 0xB4
0x32 0x86 0x29 0xB0
Dados Finais por ciclo:
0x01 0x23 0x45 0x67 0x89 0xAB 0xCD 0xEF 0xFE 0xDC 0xBA 0x98 0x76 0x54 0x32 0x10
0x01 0x32 0x67 0x54 0xCD 0xFE 0xAB 0x98 0x76 0x45 0x10 0x23 0xBA 0x89 0xDC 0xEF
0xFB 0xB2 0x06 0x28 0xF1 0xBC 0xF6 0x7B 0x4D 0x4A 0xBC 0x52 0x12 0x1A 0x6F 0x41
0xA1 0x97 0xB9 0xCE 0xD6 0xD3 0xB5 0x23 0x10 0xCB 0xD1 0xC8 0x2C 0xAE 0x41 0x07
0x4D 0xE5 0xD8 0xF3 0xD4 0x53 0x03 0x31 0xBC 0xAC 0xB4 0x63 0x96 0x50 0x0C 0xEF
0xF7 0x68 0x56 0xE3 0x95 0xF2 0x7B 0x14 0xB3 0x59 0xA8 0x69 0x2B 0x17 0xC0 0x6F
0x14 0x74 0x83 0x41 0xC9 0x14 0xF1 0x6D 0xC0 0x2D 0xB3 0x38 0x54 0x30 0xCD 0x2F
0xB2 0xA6 0x57 0xA5 0xAC 0x4F 0x04 0x49 0xA9 0x4E 0x85 0x29 0xEB 0xDE 0x75 0x9B
0xB8 0x0B 0xBC 0x8F 0x51 0x8A 0x6D 0xB6 0x62 0x2F 0x71 0x92 0xCA 0x27 0x15 0xAD
0x1F 0x04 0x8A 0xB2 0x5D 0x63 0x7A 0x88 0x42 0xD8 0xA3 0x56 0xB7 0x17 0xF8 0x99
0xB3 0x89 0x03 0x56 0x66 0x2E 0x6A 0xEB 0xAB 0xD5 0x36 0x9E 0x3C 0xE8 0x73 0xCA
0x5B 0xE1 0x21 0x32 0x2E 0x87 0x37 0x86 0x3D 0x5B 0x82 0x29 0xA7 0x1D 0xB4 0xB0
1.1 AES 66
1.1.4 Descriptografador
Para a realizacao da decriptografia e necessario que a informacao criptogra-
fada de 128 bits passe por 11 passos, sendo 1 pre-processamento, 9 rounds intermediarios e
1 pos-processamento. Cabendo neste momento ressaltar que no processo sao usadas as 11
chaves geradas no processo de expansao, mas de forma inversa, ou seja, usa-se primeiro a
chave 10, depois a 9 e assim ate que seja usada a chave 0.
• Pre-processamento:
– ADD: Realiza a soma (descrita nas nocoes do algoritmo) entre a informacao crip-
tografada e a a Key[10] da expansao de chave, gerando um dado intermediario.
• Passos intermediarios de 9 rounds:
– Funcao Inverse-shift-right: Realiza a funcao de deslocamento de dados, sem alterar
os valores dos bytes, apenas descolando-os conforme descrito na secao 1.1.1.
– Inverse Substitute bytes: Faz a conversao dos valores do dado intermediario usando
a tabela InverseSBox conforme descrito na secao 1.1.1.
– Inverse MixColuns: Confirme visto na secao 1.1.1, o procedimento da Inverse-
MixColuns ocorre com a substituicao dos valores conforme sua posicao na matriz.
Sendo substituıdos pelos valores nas tabelas Mul09, Mul11, Mul13 e Mul14.
– ADD: Realiza a soma entre o dado intermediario e a a Key[10-round ]. Esta soma
e a descrita na secao 1.1.1
• Passo final (Round com alteracao):
– Funcao Inverse-shift-right: Realiza a funcao de deslocamento de dados, sem alterar
os valores dos bytes, apenas descolando-os conforme descrito na secao 1.1.1.
– Inverse Substitute bytes: Faz a conversao dos valores do dado intermediario usando
a tabela InverseSBox conforme descrito na secao 1.1.1.
– ADD: Realiza a soma entre o dado intermediario e a a Key[10-round ]. Esta soma
e a descrita na secao 1.1.1
Para exemplificar este processo (usando a Key dada como exemplo na ex-
pansao de chave e o bloco resultante da criptografia) acompanhe o passo a passo a seguir:
• Pre-processamento ADD:
1.1 AES 67
0x5B XOR 0x36 = 0x6D
0xE1 XOR 0xD0 = 0x31
0x21 XOR 0x24 = 0x05
0x32 XOR 0x46 = 0x74
0x2E XOR 0x1D = 0x33
0x87 XOR 0x84 = 0x03
0x37 XOR 0xB8 = 0x8F
0x86 XOR 0x37 = 0xB1
0x3D XOR 0x5F = 0x62
0x5B XOR 0xC0 = 0x9B
0x82 XOR 0xF9 = 0x7B
0x29 XOR 0xC0 = 0xE9
0xA7 XOR 0x4C = 0xEB
0x1D XOR 0xBA = 0xA7
0xB4 XOR 0xB6 = 0x02
0xB0 XOR 0xBB = 0x0B
Dado intermediario:
0x6D 0x33 0x62 0xEB
0x31 0x03 0x9B 0xA7
0x05 0x8F 0x7B 0x02
0x74 0xB1 0xE9 0x0B
• Round 0:
– Inverse Shift:
Entrada:
0x6D 0x33 0x62 0xEB
0x31 0x03 0x9B 0xA7
0x05 0x8F 0x7B 0x02
0x74 0xB1 0xE9 0x0B
Saıda:
0x6D 0x33 0x62 0xEB
0xA7 0x31 0x03 0x9B
0x7B 0x02 0x05 0x8F
0xB1 0xE9 0x0B 0x74
– InverseS-Box:
1.1 AES 68
InverseSBox[0x6D] = 0xB3
InverseSBox[0xA7] = 0x89
InverseSBox[0x7B] = 0x03
InverseSBox[0xB1] = 0x56
InverseSBox[0x33] = 0x66
InverseSBox[0x31] = 0x2E
InverseSBox[0x02] = 0x6A
InverseSBox[0xE9] = 0xEB
InverseSBox[0x62] = 0xAB
InverseSBox[0x03] = 0xD5
InverseSBox[0x05] = 0x36
InverseSBox[0x0B] = 0x9E
InverseSBox[0xEB] = 0x3C
InverseSBox[0x9B] = 0xE8
InverseSBox[0x8F] = 0x73
InverseSBox[0x74] = 0xCA
– ADD :
0xB3 XOR 0xDA = 0x69
0x89 XOR 0x54 = 0xDD
0x03 XOR 0x05 = 0x06
0x56 XOR 0x3B = 0x6D
0x66 XOR 0x2B = 0x4D
0x2E XOR 0x54 = 0x7A
0x6A XOR 0x9C = 0xF6
0xEB XOR 0x71 = 0x9A
0xAB XOR 0x42 = 0xE9
0xD5 XOR 0x44 = 0x91
0x36 XOR 0x41 = 0x77
0x9E XOR 0xF7 = 0x69
0x3C XOR 0x13 = 0x2F
0xE8 XOR 0x7A = 0x92
0x73 XOR 0x4F = 0x3C
0xCA XOR 0x7B = 0xB1
– Inverse Mix Coluns :
∗ Dado’[0x0] = Mul14[dado[0x0]] XOR Mul11[dado[0x1]] XOR Mul13[dado[0x2]]
XOR Mul09[dado[0x3]]
= Mul14[0x69] XOR Mul11[ 0xDD ] XOR Mul13[ 0x06 ] XOR Mul09[ 0x6D ]
= 0x08 XOR 0xCE XOR 0x2E XOR 0x28 = 0xC0
1.1 AES 69
∗ Dado’[0x1] = Mul09[dado[0x0]] XOR Mul14[dado[0x1]] XOR Mul11[dado[0x2]]
XOR Mul13[dado[0x3]]
= Mul09[0x69] XOR Mul14[ 0xDD ] XOR Mul11[ 0x06 ] XOR Mul13[ 0x6D ]
= 0x0C XOR 0x4A XOR 0x3A XOR 0x87 = 0xFB
∗ Dado’[0x2] = Mul13[dado[0x0]] XOR Mul09[dado[0x1]] XOR Mul14[dado[0x2]]
XOR Mul11[dado[0x3]]
= Mul13[0x69] XOR Mul09[ 0xDD ] XOR Mul14[ 0x06 ] XOR Mul11[ 0x6D ]
= 0xB3 XOR 0x6F XOR 0x24 XOR 0xF2 = 0x0A
∗ Dado’[0x3] = Mul11[dado[0x0]] XOR Mul13[dado[0x1]] XOR Mul09[dado[0x2]]
XOR Mul14[dado[0x3]]
= Mul11[0x69] XOR Mul13[ 0xDD ] XOR Mul09[ 0x06 ] XOR Mul14[ 0x6D ]
= 0xDE XOR 0x36 XOR 0x36 XOR 0x30 = 0xEE
∗ Dado’[0x4] = Mul14[dado[0x4]] XOR Mul11[dado[0x5]] XOR Mul13[dado[0x6]]
XOR Mul09[dado[0x7]]
= Mul14[0x4D] XOR Mul11[ 0x7A ] XOR Mul13[ 0xF6 ] XOR Mul09[ 0x9A ]
= 0xEB XOR 0x73 XOR 0xF2 XOR 0x26 = 0x4C
∗ Dado’[0x5] = Mul09[dado[0x4]] XOR Mul14[dado[0x5]] XOR Mul11[dado[0x6]]
XOR Mul13[dado[0x7]]
= Mul09[0x4D] XOR Mul14[ 0x7A ] XOR Mul11[ 0xF6 ] XOR Mul13[ 0x9A ]
= 0x13 XOR 0xFA XOR 0xF0 XOR 0x78 = 0x61
∗ Dado’[0x6] = Mul13[dado[0x4]] XOR Mul09[dado[0x5]] XOR Mul14[dado[0x6]]
XOR Mul11[dado[0x7]]
= Mul13[0x4D] XOR Mul09[ 0x7A ] XOR Mul14[ 0xF6 ] XOR Mul11[ 0x9A ]
= 0x3C XOR 0x87 XOR 0xF3 XOR 0x09 = 0x41
∗ Dado’[0x7] = Mul11[dado[0x4]] XOR Mul13[dado[0x5]] XOR Mul09[dado[0x6]]
XOR Mul14[dado[0x7]]
= Mul11[0x4D] XOR Mul13[ 0x7A ] XOR Mul09[ 0xF6 ] XOR Mul14[ 0x9A ]
= 0x89 XOR 0x74 XOR 0x07 XOR 0xCD = 0x37
∗ Dado’[0x8] = Mul14[dado[0x8]] XOR Mul11[dado[0x9]] XOR Mul13[dado[0xA]]
XOR Mul09[dado[0xB]]
= Mul14[0xE9] XOR Mul11[ 0x91 ] XOR Mul13[ 0x77 ] XOR Mul09[ 0x69 ]
= 0x49 XOR 0x4C XOR 0x25 XOR 0x0C = 0x2C
∗ Dado’[0x9] = Mul09[dado[0x8]] XOR Mul14[dado[0x9]] XOR Mul11[dado[0xA]]
XOR Mul13[dado[0xB]]
= Mul09[0xE9] XOR Mul14[ 0x91 ] XOR Mul11[ 0x77 ] XOR Mul13[ 0x69 ]
= 0xE0 XOR 0xAF XOR 0x0C XOR 0xB3 = 0xF0
∗ Dado’[0xA] = Mul13[dado[0x8]] XOR Mul09[dado[0x9]] XOR Mul14[dado[0xA]]
XOR Mul11[dado[0xB]]
1.1 AES 70
= Mul13[0xE9] XOR Mul09[ 0x91 ] XOR Mul14[ 0x77 ] XOR Mul11[ 0x69 ]
= 0x69 XOR 0x75 XOR 0xBC XOR 0xDE = 0x7E
∗ Dado’[0xB] = Mul11[dado[0x8]] XOR Mul13[dado[0x9]] XOR Mul09[dado[0xA]]
XOR Mul14[dado[0xB]]
= Mul11[0xE9] XOR Mul13[ 0x91 ] XOR Mul09[ 0x77 ] XOR Mul14[ 0x69 ]
= 0x29 XOR 0x07 XOR 0xE2 XOR 0x08 = 0xC4
∗ Dado’[0xC] = Mul14[dado[0xC]] XOR Mul11[dado[0xD]] XOR Mul13[dado[0xE]]
XOR Mul09[dado[0xF]]
= Mul14[0x2F] XOR Mul11[ 0x92 ] XOR Mul13[ 0x3C ] XOR Mul09[ 0xB1 ]
= 0x81 XOR 0x51 XOR 0x37 XOR 0x4E = 0xA9
∗ Dado’[0xD] = Mul09[dado[0xC]] XOR Mul14[dado[0xD]] XOR Mul11[dado[0xE]]
XOR Mul13[dado[0xF]]
= Mul09[0x2F] XOR Mul14[ 0x92 ] XOR Mul11[ 0x3C ] XOR Mul13[ 0xB1 ]
= 0x4C XOR 0xBD XOR 0xBF XOR 0xBC = 0xF2
∗ Dado’[0xE] = Mul13[dado[0xC]] XOR Mul09[dado[0xD]] XOR Mul14[dado[0xE]]
XOR Mul11[dado[0xF]]
= Mul13[0x2F] XOR Mul09[ 0x92 ] XOR Mul14[ 0x3C ] XOR Mul11[ 0xB1 ]
= 0xF0 XOR 0x6E XOR 0x73 XOR 0x37 = 0xDA
∗ Dado’[0xF] = Mul11[dado[0xC]] XOR Mul13[dado[0xD]] XOR Mul09[dado[0xE]]
XOR Mul14[dado[0xF]]
= Mul11[0x2F] XOR Mul13[ 0x92 ] XOR Mul09[ 0x3C ] XOR Mul14[ 0xB1 ]
= 0x12 XOR 0x10 XOR 0xC7 XOR 0x74 = 0xB1
dado = Dado’
– Dado intermediario ao final do Round:
0xC0 0x4C 0x2C 0xA9
0xFB 0x61 0xF0 0xF2
0x0A 0x41 0x7E 0xDA
0xEE 0x37 0xC4 0xB1
• Round 1:
– Inverse Shift:
Entrada:
0xC0 0x4C 0x2C 0xA9
0xFB 0x61 0xF0 0xF2
0x0A 0x41 0x7E 0xDA
0xEE 0x37 0xC4 0xB1
Saıda:
0xC0 0x4C 0x2C 0xA9
0xF2 0xFB 0x61 0xF0
0x7E 0xDA 0x0A 0x41
0x37 0xC4 0xB1 0xEE
1.1 AES 71
– InverseS-Box:
InverseSBox[0xC0] = 0x1F
InverseSBox[0xF2] = 0x04
InverseSBox[0x7E] = 0x8A
InverseSBox[0x37] = 0xB2
InverseSBox[0x4C] = 0x5D
InverseSBox[0xFB] = 0x63
InverseSBox[0xDA] = 0x7A
InverseSBox[0xC4] = 0x88
InverseSBox[0x2C] = 0x42
InverseSBox[0x61] = 0xD8
InverseSBox[0x0A] = 0xA3
InverseSBox[0xB1] = 0x56
InverseSBox[0xA9] = 0xB7
InverseSBox[0xF0] = 0x17
InverseSBox[0x41] = 0xF8
InverseSBox[0xEE] = 0x99
– ADD :
0x1F XOR 0x73 = 0x6C
0x04 XOR 0xFF = 0xFB
0x8A XOR 0x61 = 0xEB
0xB2 XOR 0xEA = 0x58
0x5D XOR 0xF1 = 0xAC
0x63 XOR 0x00 = 0x63
0x7A XOR 0x99 = 0xE3
0x88 XOR 0x4A = 0xC2
0x42 XOR 0x69 = 0x2B
0xD8 XOR 0x10 = 0xC8
0xA3 XOR 0xDD = 0x7E
0x56 XOR 0x86 = 0xD0
0xB7 XOR 0x51 = 0xE6
0x17 XOR 0x3E = 0x29
0xF8 XOR 0x0E = 0xF6
0x99 XOR 0x8C = 0x15
– Inverse Mix Coluns :
∗ Dado’[0x0] = Mul14[dado[0x0]] XOR Mul11[dado[0x1]] XOR Mul13[dado[0x2]]
XOR Mul09[dado[0x3]]
= Mul14[0x6C] XOR Mul11[ 0xFB ] XOR Mul13[ 0xEB ] XOR Mul09[ 0x58 ]
= 0x3E XOR 0x8F XOR 0x73 XOR 0xAE = 0x6C
1.1 AES 72
∗ Dado’[0x1] = Mul09[dado[0x0]] XOR Mul14[dado[0x1]] XOR Mul11[dado[0x2]]
XOR Mul13[dado[0x3]]
= Mul09[0x6C] XOR Mul14[ 0xFB ] XOR Mul11[ 0xEB ] XOR Mul13[ 0x58 ]
= 0x21 XOR 0xB5 XOR 0x3F XOR 0xD5 = 0x7E
∗ Dado’[0x2] = Mul13[dado[0x0]] XOR Mul09[dado[0x1]] XOR Mul14[dado[0x2]]
XOR Mul11[dado[0x3]]
= Mul13[0x6C] XOR Mul09[ 0xFB ] XOR Mul14[ 0xEB ] XOR Mul11[ 0x58 ]
= 0x8A XOR 0x62 XOR 0x55 XOR 0x1E = 0xA3
∗ Dado’[0x3] = Mul11[dado[0x0]] XOR Mul13[dado[0x1]] XOR Mul09[dado[0x2]]
XOR Mul14[dado[0x3]]
= Mul11[0x6C] XOR Mul13[ 0xFB ] XOR Mul09[ 0xEB ] XOR Mul14[ 0x58 ]
= 0xF9 XOR 0xA3 XOR 0xF2 XOR 0x3D = 0x95
∗ Dado’[0x4] = Mul14[dado[0x4]] XOR Mul11[dado[0x5]] XOR Mul13[dado[0x6]]
XOR Mul09[dado[0x7]]
= Mul14[0xAC] XOR Mul11[ 0x63 ] XOR Mul13[ 0xE3 ] XOR Mul09[ 0xC2 ]
= 0xD2 XOR 0x90 XOR 0x1B XOR 0x88 = 0xD1
∗ Dado’[0x5] = Mul09[dado[0x4]] XOR Mul14[dado[0x5]] XOR Mul11[dado[0x6]]
XOR Mul13[dado[0x7]]
= Mul09[0xAC] XOR Mul14[ 0x63 ] XOR Mul11[ 0xE3 ] XOR Mul13[ 0xC2 ]
= 0xBB XOR 0x64 XOR 0x67 XOR 0xAD = 0x15
∗ Dado’[0x6] = Mul13[dado[0x4]] XOR Mul09[dado[0x5]] XOR Mul14[dado[0x6]]
XOR Mul11[dado[0x7]]
= Mul13[0xAC] XOR Mul09[ 0x63 ] XOR Mul14[ 0xE3 ] XOR Mul11[ 0xC2 ]
= 0x3D XOR 0x56 XOR 0x25 XOR 0x17 = 0x59
∗ Dado’[0x7] = Mul11[dado[0x4]] XOR Mul13[dado[0x5]] XOR Mul09[dado[0x6]]
XOR Mul14[dado[0x7]]
= Mul11[0xAC] XOR Mul13[ 0x63 ] XOR Mul09[ 0xE3 ] XOR Mul14[ 0xC2 ]
= 0xF8 XOR 0xC1 XOR 0xBA XOR 0xF0 = 0x73
∗ Dado’[0x8] = Mul14[dado[0x8]] XOR Mul11[dado[0x9]] XOR Mul13[dado[0xA]]
XOR Mul09[dado[0xB]]
= Mul14[0x2B] XOR Mul11[ 0xC8 ] XOR Mul13[ 0x7E ] XOR Mul09[ 0xD0 ]
= 0xB9 XOR 0x59 XOR 0x40 XOR 0x0A = 0xAA
∗ Dado’[0x9] = Mul09[dado[0x8]] XOR Mul14[dado[0x9]] XOR Mul11[dado[0xA]]
XOR Mul13[dado[0xB]]
= Mul09[0x2B] XOR Mul14[ 0xC8 ] XOR Mul11[ 0x7E ] XOR Mul13[ 0xD0 ]
= 0x68 XOR 0x9C XOR 0x5F XOR 0x67 = 0xCC
∗ Dado’[0xA] = Mul13[dado[0x8]] XOR Mul09[dado[0x9]] XOR Mul14[dado[0xA]]
XOR Mul11[dado[0xB]]
1.1 AES 73
= Mul13[0x2B] XOR Mul09[ 0xC8 ] XOR Mul14[ 0x7E ] XOR Mul11[ 0xD0 ]
= 0xC4 XOR 0xD2 XOR 0xC2 XOR 0xB1 = 0x65
∗ Dado’[0xB] = Mul11[dado[0x8]] XOR Mul13[dado[0x9]] XOR Mul09[dado[0xA]]
XOR Mul14[dado[0xB]]
= Mul11[0x2B] XOR Mul13[ 0xC8 ] XOR Mul09[ 0x7E ] XOR Mul14[ 0xD0 ]
= 0x3E XOR 0xDF XOR 0xA3 XOR 0x0C = 0x4E
∗ Dado’[0xC] = Mul14[dado[0xC]] XOR Mul11[dado[0xD]] XOR Mul13[dado[0xE]]
XOR Mul09[dado[0xF]]
= Mul14[0xE6] XOR Mul11[ 0x29 ] XOR Mul13[ 0xF6 ] XOR Mul09[ 0x15 ]
= 0x13 XOR 0x28 XOR 0xF2 XOR 0xBD = 0x74
∗ Dado’[0xD] = Mul09[dado[0xC]] XOR Mul14[dado[0xD]] XOR Mul11[dado[0xE]]
XOR Mul13[dado[0xF]]
= Mul09[0xE6] XOR Mul14[ 0x29 ] XOR Mul11[ 0xF6 ] XOR Mul13[ 0x15 ]
= 0x97 XOR 0xA5 XOR 0xF0 XOR 0xE9 = 0x2B
∗ Dado’[0xE] = Mul13[dado[0xC]] XOR Mul09[dado[0xD]] XOR Mul14[dado[0xE]]
XOR Mul11[dado[0xF]]
= Mul13[0xE6] XOR Mul09[ 0x29 ] XOR Mul14[ 0xF6 ] XOR Mul11[ 0x15 ]
= 0x22 XOR 0x7A XOR 0xF3 XOR 0x97 = 0x3C
∗ Dado’[0xF] = Mul11[dado[0xC]] XOR Mul13[dado[0xD]] XOR Mul09[dado[0xE]]
XOR Mul14[dado[0xF]]
= Mul11[0xE6] XOR Mul13[ 0x29 ] XOR Mul09[ 0xF6 ] XOR Mul14[ 0x15 ]
= 0x40 XOR 0xDE XOR 0x07 XOR 0xD6 = 0x4F
dado = Dado’
– Dado intermediario ao final do Round:
0x6C 0xD1 0xAA 0x74
0x7E 0x15 0xCC 0x2B
0xA3 0x59 0x65 0x3C
0x95 0x73 0x4E 0x4F
• Round 2:
– Inverse Shift:
Entrada:
0x6C 0xD1 0xAA 0x74
0x7E 0x15 0xCC 0x2B
0xA3 0x59 0x65 0x3C
0x95 0x73 0x4E 0x4F
Saıda:
0x6C 0xD1 0xAA 0x74
0x2B 0x7E 0x15 0xCC
0x65 0x3C 0xA3 0x59
0x73 0x4E 0x4F 0x95
1.1 AES 74
– InverseS-Box:
InverseSBox[0x6C] = 0xB8
InverseSBox[0x2B] = 0x0B
InverseSBox[0x65] = 0xBC
InverseSBox[0x73] = 0x8F
InverseSBox[0xD1] = 0x51
InverseSBox[0x7E] = 0x8A
InverseSBox[0x3C] = 0x6D
InverseSBox[0x4E] = 0xB6
InverseSBox[0xAA] = 0x62
InverseSBox[0x15] = 0x2F
InverseSBox[0xA3] = 0x71
InverseSBox[0x4F] = 0x92
InverseSBox[0x74] = 0xCA
InverseSBox[0xCC] = 0x27
InverseSBox[0x59] = 0x15
InverseSBox[0x95] = 0xAD
– ADD :
0xB8 XOR 0xC2 = 0x7A
0x0B XOR 0x99 = 0x92
0xBC XOR 0x06 = 0xBA
0x8F XOR 0xED = 0x62
0x51 XOR 0x82 = 0xD3
0x8A XOR 0xFF = 0x75
0x6D XOR 0xF8 = 0x95
0xB6 XOR 0xA0 = 0x16
0x62 XOR 0x98 = 0xFA
0x2F XOR 0x10 = 0x3F
0x71 XOR 0x44 = 0x35
0x92 XOR 0xCC = 0x5E
0xCA XOR 0x38 = 0xF2
0x27 XOR 0x2E = 0x09
0x15 XOR 0xD3 = 0xC6
0xAD XOR 0x0A = 0xA7
– Inverse Mix Coluns :
∗ Dado’[0x0] = Mul14[dado[0x0]] XOR Mul11[dado[0x1]] XOR Mul13[dado[0x2]]
XOR Mul09[dado[0x3]]
= Mul14[0x7A] XOR Mul11[ 0x92 ] XOR Mul13[ 0xBA ] XOR Mul09[ 0x62 ]
= 0xFA XOR 0x51 XOR 0xC3 XOR 0x5F = 0x37
1.1 AES 75
∗ Dado’[0x1] = Mul09[dado[0x0]] XOR Mul14[dado[0x1]] XOR Mul11[dado[0x2]]
XOR Mul13[dado[0x3]]
= Mul09[0x7A] XOR Mul14[ 0x92 ] XOR Mul11[ 0xBA ] XOR Mul13[ 0x62 ]
= 0x87 XOR 0xBD XOR 0x72 XOR 0xCC = 0x84
∗ Dado’[0x2] = Mul13[dado[0x0]] XOR Mul09[dado[0x1]] XOR Mul14[dado[0x2]]
XOR Mul11[dado[0x3]]
= Mul13[0x7A] XOR Mul09[ 0x92 ] XOR Mul14[ 0xBA ] XOR Mul11[ 0x62 ]
= 0x74 XOR 0x6E XOR 0x16 XOR 0x9B = 0x97
∗ Dado’[0x3] = Mul11[dado[0x0]] XOR Mul13[dado[0x1]] XOR Mul09[dado[0x2]]
XOR Mul14[dado[0x3]]
= Mul11[0x7A] XOR Mul13[ 0x92 ] XOR Mul09[ 0xBA ] XOR Mul14[ 0x62 ]
= 0x73 XOR 0x10 XOR 0x1D XOR 0x6A = 0x14
∗ Dado’[0x4] = Mul14[dado[0x4]] XOR Mul11[dado[0x5]] XOR Mul13[dado[0x6]]
XOR Mul09[dado[0x7]]
= Mul14[0xD3] XOR Mul11[ 0x75 ] XOR Mul13[ 0x95 ] XOR Mul09[ 0x16 ]
= 0x1E XOR 0x1A XOR 0x33 XOR 0xA6 = 0x91
∗ Dado’[0x5] = Mul09[dado[0x4]] XOR Mul14[dado[0x5]] XOR Mul11[dado[0x6]]
XOR Mul13[dado[0x7]]
= Mul09[0xD3] XOR Mul14[ 0x75 ] XOR Mul11[ 0x95 ] XOR Mul13[ 0x16 ]
= 0x11 XOR 0xA0 XOR 0x60 XOR 0xFE = 0x2F
∗ Dado’[0x6] = Mul13[dado[0x4]] XOR Mul09[dado[0x5]] XOR Mul14[dado[0x6]]
XOR Mul11[dado[0x7]]
= Mul13[0xD3] XOR Mul09[ 0x75 ] XOR Mul14[ 0x95 ] XOR Mul11[ 0x16 ]
= 0x70 XOR 0xF0 XOR 0x97 XOR 0x8A = 0x9D
∗ Dado’[0x7] = Mul11[dado[0x4]] XOR Mul13[dado[0x5]] XOR Mul09[dado[0x6]]
XOR Mul14[dado[0x7]]
= Mul11[0xD3] XOR Mul13[ 0x75 ] XOR Mul09[ 0x95 ] XOR Mul14[ 0x16 ]
= 0xAC XOR 0x3F XOR 0x51 XOR 0xC4 = 0x06
∗ Dado’[0x8] = Mul14[dado[0x8]] XOR Mul11[dado[0x9]] XOR Mul13[dado[0xA]]
XOR Mul09[dado[0xB]]
= Mul14[0xFA] XOR Mul11[ 0x3F ] XOR Mul13[ 0x35 ] XOR Mul09[ 0x5E ]
= 0xBB XOR 0xA2 XOR 0x52 XOR 0x98 = 0xD3
∗ Dado’[0x9] = Mul09[dado[0x8]] XOR Mul14[dado[0x9]] XOR Mul11[dado[0xA]]
XOR Mul13[dado[0xB]]
= Mul09[0xFA] XOR Mul14[ 0x3F ] XOR Mul11[ 0x35 ] XOR Mul13[ 0x5E ]
= 0x6B XOR 0x61 XOR 0xEC XOR 0xFB = 0x1D
∗ Dado’[0xA] = Mul13[dado[0x8]] XOR Mul09[dado[0x9]] XOR Mul14[dado[0xA]]
XOR Mul11[dado[0xB]]
1.1 AES 76
= Mul13[0xFA] XOR Mul09[ 0x3F ] XOR Mul14[ 0x35 ] XOR Mul11[ 0x5E ]
= 0xAE XOR 0xDC XOR 0x0D XOR 0x24 = 0x5B
∗ Dado’[0xB] = Mul11[dado[0x8]] XOR Mul13[dado[0x9]] XOR Mul09[dado[0xA]]
XOR Mul14[dado[0xB]]
= Mul11[0xFA] XOR Mul13[ 0x3F ] XOR Mul09[ 0x35 ] XOR Mul14[ 0x5E ]
= 0x84 XOR 0x20 XOR 0x86 XOR 0x19 = 0x3B
∗ Dado’[0xC] = Mul14[dado[0xC]] XOR Mul11[dado[0xD]] XOR Mul13[dado[0xE]]
XOR Mul09[dado[0xF]]
= Mul14[0xF2] XOR Mul11[ 0x09 ] XOR Mul13[ 0xC6 ] XOR Mul09[ 0xA7 ]
= 0xCB XOR 0x53 XOR 0x99 XOR 0xE8 = 0xE9
∗ Dado’[0xD] = Mul09[dado[0xC]] XOR Mul14[dado[0xD]] XOR Mul11[dado[0xE]]
XOR Mul13[dado[0xF]]
= Mul09[0xF2] XOR Mul14[ 0x09 ] XOR Mul11[ 0xC6 ] XOR Mul13[ 0xA7 ]
= 0x23 XOR 0x7E XOR 0x3B XOR 0x42 = 0x24
∗ Dado’[0xE] = Mul13[dado[0xC]] XOR Mul09[dado[0xD]] XOR Mul14[dado[0xE]]
XOR Mul11[dado[0xF]]
= Mul13[0xF2] XOR Mul09[ 0x09 ] XOR Mul14[ 0xC6 ] XOR Mul11[ 0xA7 ]
= 0xC6 XOR 0x41 XOR 0xC8 XOR 0xBD = 0xF2
∗ Dado’[0xF] = Mul11[dado[0xC]] XOR Mul13[dado[0xD]] XOR Mul09[dado[0xE]]
XOR Mul14[dado[0xF]]
= Mul11[0xF2] XOR Mul13[ 0x09 ] XOR Mul09[ 0xC6 ] XOR Mul14[ 0xA7 ]
= 0xDC XOR 0x65 XOR 0xAC XOR 0xB0 = 0xA5
dado = Dado’
– Dado intermediario ao final do Round:
0x37 0x91 0xD3 0xE9
0x84 0x2F 0x1D 0x24
0x97 0x9D 0x5B 0xF2
0x14 0x06 0x3B 0xA5
• Round 3:
– Inverse Shift:
Entrada:
0x37 0x91 0xD3 0xE9
0x84 0x2F 0x1D 0x24
0x97 0x9D 0x5B 0xF2
0x14 0x06 0x3B 0xA5
Saıda:
0x37 0x91 0xD3 0xE9
0x24 0x84 0x2F 0x1D
0x5B 0xF2 0x97 0x9D
0x06 0x3B 0xA5 0x14
1.1 AES 77
– InverseS-Box:
InverseSBox[0x37] = 0xB2
InverseSBox[0x24] = 0xA6
InverseSBox[0x5B] = 0x57
InverseSBox[0x06] = 0xA5
InverseSBox[0x91] = 0xAC
InverseSBox[0x84] = 0x4F
InverseSBox[0xF2] = 0x04
InverseSBox[0x3B] = 0x49
InverseSBox[0xD3] = 0xA9
InverseSBox[0x2F] = 0x4E
InverseSBox[0x97] = 0x85
InverseSBox[0xA5] = 0x29
InverseSBox[0xE9] = 0xEB
InverseSBox[0x1D] = 0xDE
InverseSBox[0x9D] = 0x75
InverseSBox[0x14] = 0x9B
– ADD :
0xB2 XOR 0x30 = 0x82
0xA6 XOR 0x11 = 0xB7
0x57 XOR 0xB2 = 0xE5
0xA5 XOR 0x0D = 0xA8
0xAC XOR 0x40 = 0xEC
0x4F XOR 0x66 = 0x29
0x04 XOR 0xFE = 0xFA
0x49 XOR 0x4D = 0x04
0xA9 XOR 0x1A = 0xB3
0x4E XOR 0xEF = 0xA1
0x85 XOR 0xBC = 0x39
0x29 XOR 0x6C = 0x45
0xEB XOR 0xA0 = 0x4B
0xDE XOR 0x3E = 0xE0
0x75 XOR 0x97 = 0xE2
0x9B XOR 0xC6 = 0x5D
– Inverse Mix Coluns :
∗ Dado’[0x0] = Mul14[dado[0x0]] XOR Mul11[dado[0x1]] XOR Mul13[dado[0x2]]
XOR Mul09[dado[0x3]]
= Mul14[0x82] XOR Mul11[ 0xB7 ] XOR Mul13[ 0xE5 ] XOR Mul09[ 0xA8 ]
= 0x5D XOR 0x0D XOR 0x35 XOR 0x9F = 0xFA
1.1 AES 78
∗ Dado’[0x1] = Mul09[dado[0x0]] XOR Mul14[dado[0x1]] XOR Mul11[dado[0x2]]
XOR Mul13[dado[0x3]]
= Mul09[0x82] XOR Mul14[ 0xB7 ] XOR Mul11[ 0xE5 ] XOR Mul13[ 0xA8 ]
= 0xFE XOR 0x50 XOR 0x5D XOR 0x09 = 0xFA
∗ Dado’[0x2] = Mul13[dado[0x0]] XOR Mul09[dado[0x1]] XOR Mul14[dado[0x2]]
XOR Mul11[dado[0x3]]
= Mul13[0x82] XOR Mul09[ 0xB7 ] XOR Mul14[ 0xE5 ] XOR Mul11[ 0xA8 ]
= 0xC0 XOR 0x78 XOR 0x01 XOR 0xD4 = 0x6D
∗ Dado’[0x3] = Mul11[dado[0x0]] XOR Mul13[dado[0x1]] XOR Mul09[dado[0x2]]
XOR Mul14[dado[0x3]]
= Mul11[0x82] XOR Mul13[ 0xB7 ] XOR Mul09[ 0xE5 ] XOR Mul14[ 0xA8 ]
= 0xE1 XOR 0x92 XOR 0x8C XOR 0xEA = 0x15
∗ Dado’[0x4] = Mul14[dado[0x4]] XOR Mul11[dado[0x5]] XOR Mul13[dado[0x6]]
XOR Mul09[dado[0x7]]
= Mul14[0xEC] XOR Mul11[ 0x29 ] XOR Mul13[ 0xFA ] XOR Mul09[ 0x04 ]
= 0x7F XOR 0x28 XOR 0xAE XOR 0x24 = 0xDD
∗ Dado’[0x5] = Mul09[dado[0x4]] XOR Mul14[dado[0x5]] XOR Mul11[dado[0x6]]
XOR Mul13[dado[0x7]]
= Mul09[0xEC] XOR Mul14[ 0x29 ] XOR Mul11[ 0xFA ] XOR Mul13[ 0x04 ]
= 0xCD XOR 0xA5 XOR 0x84 XOR 0x34 = 0xD8
∗ Dado’[0x6] = Mul13[dado[0x4]] XOR Mul09[dado[0x5]] XOR Mul14[dado[0x6]]
XOR Mul11[dado[0x7]]
= Mul13[0xEC] XOR Mul09[ 0x29 ] XOR Mul14[ 0xFA ] XOR Mul11[ 0x04 ]
= 0x50 XOR 0x7A XOR 0xBB XOR 0x2C = 0xBD
∗ Dado’[0x7] = Mul11[dado[0x4]] XOR Mul13[dado[0x5]] XOR Mul09[dado[0x6]]
XOR Mul14[dado[0x7]]
= Mul11[0xEC] XOR Mul13[ 0x29 ] XOR Mul09[ 0xFA ] XOR Mul14[ 0x04 ]
= 0x0E XOR 0xDE XOR 0x6B XOR 0x38 = 0x83
∗ Dado’[0x8] = Mul14[dado[0x8]] XOR Mul11[dado[0x9]] XOR Mul13[dado[0xA]]
XOR Mul09[dado[0xB]]
= Mul14[0xB3] XOR Mul11[ 0xA1 ] XOR Mul13[ 0x39 ] XOR Mul09[ 0x45 ]
= 0x68 XOR 0x87 XOR 0x0E XOR 0x5B = 0xBA
∗ Dado’[0x9] = Mul09[dado[0x8]] XOR Mul14[dado[0x9]] XOR Mul11[dado[0xA]]
XOR Mul13[dado[0xB]]
= Mul09[0xB3] XOR Mul14[ 0xA1 ] XOR Mul11[ 0x39 ] XOR Mul13[ 0x45 ]
= 0x5C XOR 0x94 XOR 0x98 XOR 0x54 = 0x04
∗ Dado’[0xA] = Mul13[dado[0x8]] XOR Mul09[dado[0x9]] XOR Mul14[dado[0xA]]
XOR Mul11[dado[0xB]]
1.1 AES 79
= Mul13[0xB3] XOR Mul09[ 0xA1 ] XOR Mul14[ 0x39 ] XOR Mul11[ 0x45 ]
= 0xA6 XOR 0xDE XOR 0x45 XOR 0xD1 = 0xEC
∗ Dado’[0xB] = Mul11[dado[0x8]] XOR Mul13[dado[0x9]] XOR Mul09[dado[0xA]]
XOR Mul14[dado[0xB]]
= Mul11[0xB3] XOR Mul13[ 0xA1 ] XOR Mul09[ 0x39 ] XOR Mul14[ 0x45 ]
= 0x21 XOR 0x6C XOR 0xEA XOR 0x9B = 0x3C
∗ Dado’[0xC] = Mul14[dado[0xC]] XOR Mul11[dado[0xD]] XOR Mul13[dado[0xE]]
XOR Mul09[dado[0xF]]
= Mul14[0x4B] XOR Mul11[ 0xE0 ] XOR Mul13[ 0xE2 ] XOR Mul09[ 0x5D ]
= 0xCF XOR 0x7A XOR 0x16 XOR 0x83 = 0x20
∗ Dado’[0xD] = Mul09[dado[0xC]] XOR Mul14[dado[0xD]] XOR Mul11[dado[0xE]]
XOR Mul13[dado[0xF]]
= Mul09[0x4B] XOR Mul14[ 0xE0 ] XOR Mul11[ 0xE2 ] XOR Mul13[ 0x5D ]
= 0x25 XOR 0x37 XOR 0x6C XOR 0xEC = 0x92
∗ Dado’[0xE] = Mul13[dado[0xC]] XOR Mul09[dado[0xD]] XOR Mul14[dado[0xE]]
XOR Mul11[dado[0xF]]
= Mul13[0x4B] XOR Mul09[ 0xE0 ] XOR Mul14[ 0xE2 ] XOR Mul11[ 0x5D ]
= 0x12 XOR 0xA1 XOR 0x2B XOR 0x39 = 0xA1
∗ Dado’[0xF] = Mul11[dado[0xC]] XOR Mul13[dado[0xD]] XOR Mul09[dado[0xE]]
XOR Mul14[dado[0xF]]
= Mul11[0x4B] XOR Mul13[ 0xE0 ] XOR Mul09[ 0xE2 ] XOR Mul14[ 0x5D ]
= 0xB3 XOR 0x0C XOR 0xB3 XOR 0x0B = 0x07
dado = Dado’
– Dado intermediario ao final do Round:
0xFA 0xDD 0xBA 0x20
0xFA 0xD8 0x04 0x92
0x6D 0xBD 0xEC 0xA1
0x15 0x83 0x3C 0x07
• Round 4:
– Inverse Shift:
Entrada:
0xFA 0xDD 0xBA 0x20
0xFA 0xD8 0x04 0x92
0x6D 0xBD 0xEC 0xA1
0x15 0x83 0x3C 0x07
Saıda:
0xFA 0xDD 0xBA 0x20
0x92 0xFA 0xD8 0x04
0xEC 0xA1 0x6D 0xBD
0x83 0x3C 0x07 0x15
1.1 AES 80
– InverseS-Box:
InverseSBox[0xFA] = 0x14
InverseSBox[0x92] = 0x74
InverseSBox[0xEC] = 0x83
InverseSBox[0x83] = 0x41
InverseSBox[0xDD] = 0xC9
InverseSBox[0xFA] = 0x14
InverseSBox[0xA1] = 0xF1
InverseSBox[0x3C] = 0x6D
InverseSBox[0xBA] = 0xC0
InverseSBox[0xD8] = 0x2D
InverseSBox[0x6D] = 0xB3
InverseSBox[0x07] = 0x38
InverseSBox[0x20] = 0x54
InverseSBox[0x04] = 0x30
InverseSBox[0xBD] = 0xCD
InverseSBox[0x15] = 0x2F
– ADD :
0x14 XOR 0x2E = 0x3A
0x74 XOR 0xE0 = 0x94
0x83 XOR 0x1E = 0x9D
0x41 XOR 0xF9 = 0xB8
0xC9 XOR 0x70 = 0xB9
0x14 XOR 0x77 = 0x63
0xF1 XOR 0x4C = 0xBD
0x6D XOR 0x40 = 0x2D
0xC0 XOR 0x5A = 0x9A
0x2D XOR 0x89 = 0xA4
0xB3 XOR 0x42 = 0xF1
0x38 XOR 0x21 = 0x19
0x54 XOR 0xBA = 0xEE
0x30 XOR 0xD1 = 0xE1
0xCD XOR 0x2B = 0xE6
0x2F XOR 0xAA = 0x85
– Inverse Mix Coluns :
∗ Dado’[0x0] = Mul14[dado[0x0]] XOR Mul11[dado[0x1]] XOR Mul13[dado[0x2]]
XOR Mul09[dado[0x3]]
= Mul14[0x3A] XOR Mul11[ 0x94 ] XOR Mul13[ 0x9D ] XOR Mul09[ 0xB8 ]
= 0x57 XOR 0x6B XOR 0x5B XOR 0x0F = 0x68
1.1 AES 81
∗ Dado’[0x1] = Mul09[dado[0x0]] XOR Mul14[dado[0x1]] XOR Mul11[dado[0x2]]
XOR Mul13[dado[0x3]]
= Mul09[0x3A] XOR Mul14[ 0x94 ] XOR Mul11[ 0x9D ] XOR Mul13[ 0xB8 ]
= 0xF1 XOR 0x99 XOR 0x38 XOR 0xD9 = 0x89
∗ Dado’[0x2] = Mul13[dado[0x0]] XOR Mul09[dado[0x1]] XOR Mul14[dado[0x2]]
XOR Mul11[dado[0x3]]
= Mul13[0x3A] XOR Mul09[ 0x94 ] XOR Mul14[ 0x9D ] XOR Mul11[ 0xB8 ]
= 0x19 XOR 0x58 XOR 0xE7 XOR 0x64 = 0xC2
∗ Dado’[0x3] = Mul11[dado[0x0]] XOR Mul13[dado[0x1]] XOR Mul09[dado[0x2]]
XOR Mul14[dado[0x3]]
= Mul11[0x3A] XOR Mul13[ 0x94 ] XOR Mul09[ 0x9D ] XOR Mul14[ 0xB8 ]
= 0x85 XOR 0x3E XOR 0x19 XOR 0x0A = 0xA8
∗ Dado’[0x4] = Mul14[dado[0x4]] XOR Mul11[dado[0x5]] XOR Mul13[dado[0x6]]
XOR Mul09[dado[0x7]]
= Mul14[0xB9] XOR Mul11[ 0x63 ] XOR Mul13[ 0xBD ] XOR Mul09[ 0x2D ]
= 0x04 XOR 0x90 XOR 0xE0 XOR 0x5E = 0x2A
∗ Dado’[0x5] = Mul09[dado[0x4]] XOR Mul14[dado[0x5]] XOR Mul11[dado[0x6]]
XOR Mul13[dado[0x7]]
= Mul09[0xB9] XOR Mul14[ 0x63 ] XOR Mul11[ 0xBD ] XOR Mul13[ 0x2D ]
= 0x06 XOR 0x64 XOR 0x43 XOR 0xEA = 0xCB
∗ Dado’[0x6] = Mul13[dado[0x4]] XOR Mul09[dado[0x5]] XOR Mul14[dado[0x6]]
XOR Mul11[dado[0x7]]
= Mul13[0xB9] XOR Mul09[ 0x63 ] XOR Mul14[ 0xBD ] XOR Mul11[ 0x2D ]
= 0xD4 XOR 0x56 XOR 0x3C XOR 0x04 = 0xBA
∗ Dado’[0x7] = Mul11[dado[0x4]] XOR Mul13[dado[0x5]] XOR Mul09[dado[0x6]]
XOR Mul14[dado[0x7]]
= Mul11[0xB9] XOR Mul13[ 0x63 ] XOR Mul09[ 0xBD ] XOR Mul14[ 0x2D ]
= 0x6F XOR 0xC1 XOR 0x22 XOR 0x9D = 0x11
∗ Dado’[0x8] = Mul14[dado[0x8]] XOR Mul11[dado[0x9]] XOR Mul13[dado[0xA]]
XOR Mul09[dado[0xB]]
= Mul14[0x9A] XOR Mul11[ 0xA4 ] XOR Mul13[ 0xF1 ] XOR Mul09[ 0x19 ]
= 0xCD XOR 0xA0 XOR 0xD1 XOR 0xD1 = 0x6D
∗ Dado’[0x9] = Mul09[dado[0x8]] XOR Mul14[dado[0x9]] XOR Mul11[dado[0xA]]
XOR Mul13[dado[0xB]]
= Mul09[0x9A] XOR Mul14[ 0xA4 ] XOR Mul11[ 0xF1 ] XOR Mul13[ 0x19 ]
= 0x26 XOR 0xA2 XOR 0xC1 XOR 0xB5 = 0xF0
∗ Dado’[0xA] = Mul13[dado[0x8]] XOR Mul09[dado[0x9]] XOR Mul14[dado[0xA]]
XOR Mul11[dado[0xB]]
1.1 AES 82
= Mul13[0x9A] XOR Mul09[ 0xA4 ] XOR Mul14[ 0xF1 ] XOR Mul11[ 0x19 ]
= 0x78 XOR 0xF3 XOR 0xD9 XOR 0xE3 = 0xB1
∗ Dado’[0xB] = Mul11[dado[0x8]] XOR Mul13[dado[0x9]] XOR Mul09[dado[0xA]]
XOR Mul14[dado[0xB]]
= Mul11[0x9A] XOR Mul13[ 0xA4 ] XOR Mul09[ 0xF1 ] XOR Mul14[ 0x19 ]
= 0x09 XOR 0x55 XOR 0x38 XOR 0x9E = 0xFA
∗ Dado’[0xC] = Mul14[dado[0xC]] XOR Mul11[dado[0xD]] XOR Mul13[dado[0xE]]
XOR Mul09[dado[0xF]]
= Mul14[0xEE] XOR Mul11[ 0xE1 ] XOR Mul13[ 0xE6 ] XOR Mul09[ 0x85 ]
= 0x63 XOR 0x71 XOR 0x22 XOR 0xC1 = 0xF1
∗ Dado’[0xD] = Mul09[dado[0xC]] XOR Mul14[dado[0xD]] XOR Mul11[dado[0xE]]
XOR Mul13[dado[0xF]]
= Mul09[0xEE] XOR Mul14[ 0xE1 ] XOR Mul11[ 0xE6 ] XOR Mul13[ 0x85 ]
= 0xDF XOR 0x39 XOR 0x40 XOR 0xE3 = 0x45
∗ Dado’[0xE] = Mul13[dado[0xC]] XOR Mul09[dado[0xD]] XOR Mul14[dado[0xE]]
XOR Mul11[dado[0xF]]
= Mul13[0xEE] XOR Mul09[ 0xE1 ] XOR Mul14[ 0xE6 ] XOR Mul11[ 0x85 ]
= 0x4A XOR 0xA8 XOR 0x13 XOR 0xD0 = 0x21
∗ Dado’[0xF] = Mul11[dado[0xC]] XOR Mul13[dado[0xD]] XOR Mul09[dado[0xE]]
XOR Mul14[dado[0xF]]
= Mul11[0xEE] XOR Mul13[ 0xE1 ] XOR Mul09[ 0xE6 ] XOR Mul14[ 0x85 ]
= 0x18 XOR 0x01 XOR 0x97 XOR 0x77 = 0xF9
dado = Dado’
– Dado intermediario ao final do Round:
0x68 0x2A 0x6D 0xF1
0x89 0xCB 0xF0 0x45
0xC2 0xBA 0xB1 0x21
0xA8 0x11 0xFA 0xF9
• Round 5:
– Inverse Shift:
Entrada:
0x68 0x2A 0x6D 0xF1
0x89 0xCB 0xF0 0x45
0xC2 0xBA 0xB1 0x21
0xA8 0x11 0xFA 0xF9
Saıda:
0x68 0x2A 0x6D 0xF1
0x45 0x89 0xCB 0xF0
0xB1 0x21 0xC2 0xBA
0x11 0xFA 0xF9 0xA8
1.1 AES 83
– InverseS-Box:
InverseSBox[0x68] = 0xF7
InverseSBox[0x45] = 0x68
InverseSBox[0xB1] = 0x56
InverseSBox[0x11] = 0xE3
InverseSBox[0x2A] = 0x95
InverseSBox[0x89] = 0xF2
InverseSBox[0x21] = 0x7B
InverseSBox[0xFA] = 0x14
InverseSBox[0x6D] = 0xB3
InverseSBox[0xCB] = 0x59
InverseSBox[0xC2] = 0xA8
InverseSBox[0xF9] = 0x69
InverseSBox[0xF1] = 0x2B
InverseSBox[0xF0] = 0x17
InverseSBox[0xBA] = 0xC0
InverseSBox[0xA8] = 0x6F
– ADD :
0xF7 XOR 0x54 = 0xA3
0x68 XOR 0x19 = 0x71
0x56 XOR 0x23 = 0x75
0xE3 XOR 0x18 = 0xFB
0x95 XOR 0x5E = 0xCB
0xF2 XOR 0x97 = 0x65
0x7B XOR 0x52 = 0x29
0x14 XOR 0xB9 = 0xAD
0xB3 XOR 0x2A = 0x99
0x59 XOR 0xFE = 0xA7
0xA8 XOR 0x0E = 0xA6
0x69 XOR 0x61 = 0x08
0x2B XOR 0xE0 = 0xCB
0x17 XOR 0x58 = 0x4F
0xC0 XOR 0x69 = 0xA9
0x6F XOR 0x8B = 0xE4
– Inverse Mix Coluns :
∗ Dado’[0x0] = Mul14[dado[0x0]] XOR Mul11[dado[0x1]] XOR Mul13[dado[0x2]]
XOR Mul09[dado[0x3]]
= Mul14[0xA3] XOR Mul11[ 0x71 ] XOR Mul13[ 0x75 ] XOR Mul09[ 0xFB ]
= 0x88 XOR 0x36 XOR 0x3F XOR 0x62 = 0xE3
1.1 AES 84
∗ Dado’[0x1] = Mul09[dado[0x0]] XOR Mul14[dado[0x1]] XOR Mul11[dado[0x2]]
XOR Mul13[dado[0x3]]
= Mul09[0xA3] XOR Mul14[ 0x71 ] XOR Mul11[ 0x75 ] XOR Mul13[ 0xFB ]
= 0xCC XOR 0x98 XOR 0x1A XOR 0xA3 = 0xED
∗ Dado’[0x2] = Mul13[dado[0x0]] XOR Mul09[dado[0x1]] XOR Mul14[dado[0x2]]
XOR Mul11[dado[0x3]]
= Mul13[0xA3] XOR Mul09[ 0x71 ] XOR Mul14[ 0x75 ] XOR Mul11[ 0xFB ]
= 0x76 XOR 0xD4 XOR 0xA0 XOR 0x8F = 0x8D
∗ Dado’[0x3] = Mul11[dado[0x0]] XOR Mul13[dado[0x1]] XOR Mul09[dado[0x2]]
XOR Mul14[dado[0x3]]
= Mul11[0xA3] XOR Mul13[ 0x71 ] XOR Mul09[ 0x75 ] XOR Mul14[ 0xFB ]
= 0x91 XOR 0x0B XOR 0xF0 XOR 0xB5 = 0xDF
∗ Dado’[0x4] = Mul14[dado[0x4]] XOR Mul11[dado[0x5]] XOR Mul13[dado[0x6]]
XOR Mul09[dado[0x7]]
= Mul14[0xCB] XOR Mul11[ 0x65 ] XOR Mul13[ 0x29 ] XOR Mul09[ 0xAD ]
= 0x8E XOR 0xAA XOR 0xDE XOR 0xB2 = 0x48
∗ Dado’[0x5] = Mul09[dado[0x4]] XOR Mul14[dado[0x5]] XOR Mul11[dado[0x6]]
XOR Mul13[dado[0x7]]
= Mul09[0xCB] XOR Mul14[ 0x65 ] XOR Mul11[ 0x29 ] XOR Mul13[ 0xAD ]
= 0xC9 XOR 0x40 XOR 0x28 XOR 0x30 = 0x91
∗ Dado’[0x6] = Mul13[dado[0x4]] XOR Mul09[dado[0x5]] XOR Mul14[dado[0x6]]
XOR Mul11[dado[0x7]]
= Mul13[0xCB] XOR Mul09[ 0x65 ] XOR Mul14[ 0x29 ] XOR Mul11[ 0xAD ]
= 0xC8 XOR 0x60 XOR 0xA5 XOR 0xF3 = 0xFE
∗ Dado’[0x7] = Mul11[dado[0x4]] XOR Mul13[dado[0x5]] XOR Mul09[dado[0x6]]
XOR Mul14[dado[0x7]]
= Mul11[0xCB] XOR Mul13[ 0x65 ] XOR Mul09[ 0x29 ] XOR Mul14[ 0xAD ]
= 0x44 XOR 0xEF XOR 0x7A XOR 0xDC = 0x0D
∗ Dado’[0x8] = Mul14[dado[0x8]] XOR Mul11[dado[0x9]] XOR Mul13[dado[0xA]]
XOR Mul09[dado[0xB]]
= Mul14[0x99] XOR Mul11[ 0xA7 ] XOR Mul13[ 0xA6 ] XOR Mul09[ 0x08 ]
= 0xDF XOR 0xBD XOR 0x4F XOR 0x48 = 0x65
∗ Dado’[0x9] = Mul09[dado[0x8]] XOR Mul14[dado[0x9]] XOR Mul11[dado[0xA]]
XOR Mul13[dado[0xB]]
= Mul09[0x99] XOR Mul14[ 0xA7 ] XOR Mul11[ 0xA6 ] XOR Mul13[ 0x08 ]
= 0x3D XOR 0xB0 XOR 0xB6 XOR 0x68 = 0x53
∗ Dado’[0xA] = Mul13[dado[0x8]] XOR Mul09[dado[0x9]] XOR Mul14[dado[0xA]]
XOR Mul11[dado[0xB]]
1.1 AES 85
= Mul13[0x99] XOR Mul09[ 0xA7 ] XOR Mul14[ 0xA6 ] XOR Mul11[ 0x08 ]
= 0x6F XOR 0xE8 XOR 0xBE XOR 0x58 = 0x61
∗ Dado’[0xB] = Mul11[dado[0x8]] XOR Mul13[dado[0x9]] XOR Mul09[dado[0xA]]
XOR Mul14[dado[0xB]]
= Mul11[0x99] XOR Mul13[ 0xA7 ] XOR Mul09[ 0xA6 ] XOR Mul14[ 0x08 ]
= 0x14 XOR 0x42 XOR 0xE1 XOR 0x70 = 0xC7
∗ Dado’[0xC] = Mul14[dado[0xC]] XOR Mul11[dado[0xD]] XOR Mul13[dado[0xE]]
XOR Mul09[dado[0xF]]
= Mul14[0xCB] XOR Mul11[ 0x4F ] XOR Mul13[ 0xA9 ] XOR Mul09[ 0xE4 ]
= 0x8E XOR 0x9F XOR 0x04 XOR 0x85 = 0x90
∗ Dado’[0xD] = Mul09[dado[0xC]] XOR Mul14[dado[0xD]] XOR Mul11[dado[0xE]]
XOR Mul13[dado[0xF]]
= Mul09[0xCB] XOR Mul14[ 0x4F ] XOR Mul11[ 0xA9 ] XOR Mul13[ 0xE4 ]
= 0xC9 XOR 0xF7 XOR 0xDF XOR 0x38 = 0xD9
∗ Dado’[0xE] = Mul13[dado[0xC]] XOR Mul09[dado[0xD]] XOR Mul14[dado[0xE]]
XOR Mul11[dado[0xF]]
= Mul13[0xCB] XOR Mul09[ 0x4F ] XOR Mul14[ 0xA9 ] XOR Mul11[ 0xE4 ]
= 0xC8 XOR 0x01 XOR 0xE4 XOR 0x56 = 0x7B
∗ Dado’[0xF] = Mul11[dado[0xC]] XOR Mul13[dado[0xD]] XOR Mul09[dado[0xE]]
XOR Mul14[dado[0xF]]
= Mul11[0xCB] XOR Mul13[ 0x4F ] XOR Mul09[ 0xA9 ] XOR Mul14[ 0xE4 ]
= 0x44 XOR 0x26 XOR 0x96 XOR 0x0F = 0xFB
dado = Dado’
– Dado intermediario ao final do Round:
0xE3 0x48 0x65 0x90
0xED 0x91 0x53 0xD9
0x8D 0xFE 0x61 0x7B
0xDF 0x0D 0xC7 0xFB
• Round 6:
– Inverse Shift:
Entrada:
0xE3 0x48 0x65 0x90
0xED 0x91 0x53 0xD9
0x8D 0xFE 0x61 0x7B
0xDF 0x0D 0xC7 0xFB
Saıda:
0xE3 0x48 0x65 0x90
0xD9 0xED 0x91 0x53
0x61 0x7B 0x8D 0xFE
0x0D 0xC7 0xFB 0xDF
1.1 AES 86
– InverseS-Box:
InverseSBox[0xE3] = 0x4D
InverseSBox[0xD9] = 0xE5
InverseSBox[0x61] = 0xD8
InverseSBox[0x0D] = 0xF3
InverseSBox[0x48] = 0xD4
InverseSBox[0xED] = 0x53
InverseSBox[0x7B] = 0x03
InverseSBox[0xC7] = 0x31
InverseSBox[0x65] = 0xBC
InverseSBox[0x91] = 0xAC
InverseSBox[0x8D] = 0xB4
InverseSBox[0xFB] = 0x63
InverseSBox[0x90] = 0x96
InverseSBox[0x53] = 0x50
InverseSBox[0xFE] = 0x0C
InverseSBox[0xDF] = 0xEF
– ADD :
0x4D XOR 0x78 = 0x35
0xE5 XOR 0x9C = 0x79
0xD8 XOR 0xA4 = 0x7C
0xF3 XOR 0x6C = 0x9F
0xD4 XOR 0x0A = 0xDE
0x53 XOR 0x8E = 0xDD
0x03 XOR 0x71 = 0x72
0x31 XOR 0xA1 = 0x90
0xBC XOR 0x74 = 0xC8
0xAC XOR 0x69 = 0xC5
0xB4 XOR 0x5C = 0xE8
0x63 XOR 0xD8 = 0xBB
0x96 XOR 0xCA = 0x5C
0x50 XOR 0xA6 = 0xF6
0x0C XOR 0x67 = 0x6B
0xEF XOR 0xEA = 0x05
– Inverse Mix Coluns :
∗ Dado’[0x0] = Mul14[dado[0x0]] XOR Mul11[dado[0x1]] XOR Mul13[dado[0x2]]
XOR Mul09[dado[0x3]]
= Mul14[0x35] XOR Mul11[ 0x79 ] XOR Mul13[ 0x7C ] XOR Mul09[ 0x9F ]
= 0x0D XOR 0x6E XOR 0x5A XOR 0x0B = 0x32
1.1 AES 87
∗ Dado’[0x1] = Mul09[dado[0x0]] XOR Mul14[dado[0x1]] XOR Mul11[dado[0x2]]
XOR Mul13[dado[0x3]]
= Mul09[0x35] XOR Mul14[ 0x79 ] XOR Mul11[ 0x7C ] XOR Mul13[ 0x9F ]
= 0x86 XOR 0xE8 XOR 0x49 XOR 0x41 = 0x66
∗ Dado’[0x2] = Mul13[dado[0x0]] XOR Mul09[dado[0x1]] XOR Mul14[dado[0x2]]
XOR Mul11[dado[0x3]]
= Mul13[0x35] XOR Mul09[ 0x79 ] XOR Mul14[ 0x7C ] XOR Mul11[ 0x9F ]
= 0x52 XOR 0x9C XOR 0xDE XOR 0x2E = 0x3E
∗ Dado’[0x3] = Mul11[dado[0x0]] XOR Mul13[dado[0x1]] XOR Mul09[dado[0x2]]
XOR Mul14[dado[0x3]]
= Mul11[0x35] XOR Mul13[ 0x79 ] XOR Mul09[ 0x7C ] XOR Mul14[ 0x9F ]
= 0xEC XOR 0x63 XOR 0xB1 XOR 0xFB = 0xC5
∗ Dado’[0x4] = Mul14[dado[0x4]] XOR Mul11[dado[0x5]] XOR Mul13[dado[0x6]]
XOR Mul09[dado[0x7]]
= Mul14[0xDE] XOR Mul11[ 0xDD ] XOR Mul13[ 0x72 ] XOR Mul09[ 0x90 ]
= 0x58 XOR 0xCE XOR 0x1C XOR 0x7C = 0xF6
∗ Dado’[0x5] = Mul09[dado[0x4]] XOR Mul14[dado[0x5]] XOR Mul11[dado[0x6]]
XOR Mul13[dado[0x7]]
= Mul09[0xDE] XOR Mul14[ 0xDD ] XOR Mul11[ 0x72 ] XOR Mul13[ 0x90 ]
= 0x74 XOR 0x4A XOR 0x2B XOR 0x0A = 0x1F
∗ Dado’[0x6] = Mul13[dado[0x4]] XOR Mul09[dado[0x5]] XOR Mul14[dado[0x6]]
XOR Mul11[dado[0x7]]
= Mul13[0xDE] XOR Mul09[ 0xDD ] XOR Mul14[ 0x72 ] XOR Mul11[ 0x90 ]
= 0x21 XOR 0x6F XOR 0x8A XOR 0x47 = 0x83
∗ Dado’[0x7] = Mul11[dado[0x4]] XOR Mul13[dado[0x5]] XOR Mul09[dado[0x6]]
XOR Mul14[dado[0x7]]
= Mul11[0xDE] XOR Mul13[ 0xDD ] XOR Mul09[ 0x72 ] XOR Mul14[ 0x90 ]
= 0xD3 XOR 0x36 XOR 0xCF XOR 0xA1 = 0x8B
∗ Dado’[0x8] = Mul14[dado[0x8]] XOR Mul11[dado[0x9]] XOR Mul13[dado[0xA]]
XOR Mul09[dado[0xB]]
= Mul14[0xC8] XOR Mul11[ 0xC5 ] XOR Mul13[ 0xE8 ] XOR Mul09[ 0xBB ]
= 0x9C XOR 0x26 XOR 0x64 XOR 0x14 = 0xCA
∗ Dado’[0x9] = Mul09[dado[0x8]] XOR Mul14[dado[0x9]] XOR Mul11[dado[0xA]]
XOR Mul13[dado[0xB]]
= Mul09[0xC8] XOR Mul14[ 0xC5 ] XOR Mul11[ 0xE8 ] XOR Mul13[ 0xBB ]
= 0xD2 XOR 0xDA XOR 0x22 XOR 0xCE = 0xE4
∗ Dado’[0xA] = Mul13[dado[0x8]] XOR Mul09[dado[0x9]] XOR Mul14[dado[0xA]]
XOR Mul11[dado[0xB]]
1.1 AES 88
= Mul13[0xC8] XOR Mul09[ 0xC5 ] XOR Mul14[ 0xE8 ] XOR Mul11[ 0xBB ]
= 0xDF XOR 0xB7 XOR 0x47 XOR 0x79 = 0x56
∗ Dado’[0xB] = Mul11[dado[0x8]] XOR Mul13[dado[0x9]] XOR Mul09[dado[0xA]]
XOR Mul14[dado[0xB]]
= Mul11[0xC8] XOR Mul13[ 0xC5 ] XOR Mul09[ 0xE8 ] XOR Mul14[ 0xBB ]
= 0x59 XOR 0x8E XOR 0xE9 XOR 0x18 = 0x26
∗ Dado’[0xC] = Mul14[dado[0xC]] XOR Mul11[dado[0xD]] XOR Mul13[dado[0xE]]
XOR Mul09[dado[0xF]]
= Mul14[0x5C] XOR Mul11[ 0xF6 ] XOR Mul13[ 0x6B ] XOR Mul09[ 0x05 ]
= 0x05 XOR 0xF0 XOR 0xA9 XOR 0x2D = 0x71
∗ Dado’[0xD] = Mul09[dado[0xC]] XOR Mul14[dado[0xD]] XOR Mul11[dado[0xE]]
XOR Mul13[dado[0xF]]
= Mul09[0x5C] XOR Mul14[ 0xF6 ] XOR Mul11[ 0x6B ] XOR Mul13[ 0x05 ]
= 0x8A XOR 0xF3 XOR 0xC8 XOR 0x39 = 0x88
∗ Dado’[0xE] = Mul13[dado[0xC]] XOR Mul09[dado[0xD]] XOR Mul14[dado[0xE]]
XOR Mul11[dado[0xF]]
= Mul13[0x5C] XOR Mul09[ 0xF6 ] XOR Mul14[ 0x6B ] XOR Mul11[ 0x05 ]
= 0xE1 XOR 0x07 XOR 0x14 XOR 0x27 = 0xD5
∗ Dado’[0xF] = Mul11[dado[0xC]] XOR Mul13[dado[0xD]] XOR Mul09[dado[0xE]]
XOR Mul14[dado[0xF]]
= Mul11[0x5C] XOR Mul13[ 0xF6 ] XOR Mul09[ 0x6B ] XOR Mul14[ 0x05 ]
= 0x32 XOR 0xF2 XOR 0x1E XOR 0x36 = 0xE8
dado = Dado’
– Dado intermediario ao final do Round:
0x32 0xF6 0xCA 0x71
0x66 0x1F 0xE4 0x88
0x3E 0x83 0x56 0xD5
0xC5 0x8B 0x26 0xE8
• Round 7:
– Inverse Shift:
Entrada:
0x32 0xF6 0xCA 0x71
0x66 0x1F 0xE4 0x88
0x3E 0x83 0x56 0xD5
0xC5 0x8B 0x26 0xE8
Saıda:
0x32 0xF6 0xCA 0x71
0x88 0x66 0x1F 0xE4
0x56 0xD5 0x3E 0x83
0x8B 0x26 0xE8 0xC5
1.1 AES 89
– InverseS-Box:
InverseSBox[0x32] = 0xA1
InverseSBox[0x88] = 0x97
InverseSBox[0x56] = 0xB9
InverseSBox[0x8B] = 0xCE
InverseSBox[0xF6] = 0xD6
InverseSBox[0x66] = 0xD3
InverseSBox[0xD5] = 0xB5
InverseSBox[0x26] = 0x23
InverseSBox[0xCA] = 0x10
InverseSBox[0x1F] = 0xCB
InverseSBox[0x3E] = 0xD1
InverseSBox[0xE8] = 0xC8
InverseSBox[0x71] = 0x2C
InverseSBox[0xE4] = 0xAE
InverseSBox[0x83] = 0x41
InverseSBox[0xC5] = 0x07
– ADD :
0xA1 XOR 0xF6 = 0x57
0x97 XOR 0x7E = 0xE9
0xB9 XOR 0x87 = 0x3E
0xCE XOR 0xC2 = 0x0C
0xD6 XOR 0x72 = 0xA4
0xD3 XOR 0x12 = 0xC1
0xB5 XOR 0xD5 = 0x60
0x23 XOR 0xCD = 0xEE
0x10 XOR 0x7E = 0x6E
0xCB XOR 0xE7 = 0x2C
0xD1 XOR 0x2D = 0xFC
0xC8 XOR 0x79 = 0xB1
0x2C XOR 0xBE = 0x92
0xAE XOR 0xCF = 0x61
0x41 XOR 0x3B = 0x7A
0x07 XOR 0x32 = 0x35
– Inverse Mix Coluns :
∗ Dado’[0x0] = Mul14[dado[0x0]] XOR Mul11[dado[0x1]] XOR Mul13[dado[0x2]]
XOR Mul09[dado[0x3]]
= Mul14[0x57] XOR Mul11[ 0xE9 ] XOR Mul13[ 0x3E ] XOR Mul09[ 0x0C ]
= 0x67 XOR 0x29 XOR 0x2D XOR 0x6C = 0x0F
1.1 AES 90
∗ Dado’[0x1] = Mul09[dado[0x0]] XOR Mul14[dado[0x1]] XOR Mul11[dado[0x2]]
XOR Mul13[dado[0x3]]
= Mul09[0x57] XOR Mul14[ 0xE9 ] XOR Mul11[ 0x3E ] XOR Mul13[ 0x0C ]
= 0xD9 XOR 0x49 XOR 0xA9 XOR 0x5C = 0x65
∗ Dado’[0x2] = Mul13[dado[0x0]] XOR Mul09[dado[0x1]] XOR Mul14[dado[0x2]]
XOR Mul11[dado[0x3]]
= Mul13[0x57] XOR Mul09[ 0xE9 ] XOR Mul14[ 0x3E ] XOR Mul11[ 0x0C ]
= 0x9E XOR 0xE0 XOR 0x6F XOR 0x74 = 0x65
∗ Dado’[0x3] = Mul11[dado[0x0]] XOR Mul13[dado[0x1]] XOR Mul09[dado[0x2]]
XOR Mul14[dado[0x3]]
= Mul11[0x57] XOR Mul13[ 0xE9 ] XOR Mul09[ 0x3E ] XOR Mul14[ 0x0C ]
= 0x77 XOR 0x69 XOR 0xD5 XOR 0x48 = 0x83
∗ Dado’[0x4] = Mul14[dado[0x4]] XOR Mul11[dado[0x5]] XOR Mul13[dado[0x6]]
XOR Mul09[dado[0x7]]
= Mul14[0xA4] XOR Mul11[ 0xC1 ] XOR Mul13[ 0x60 ] XOR Mul09[ 0xEE ]
= 0xA2 XOR 0x0A XOR 0xD6 XOR 0xDF = 0xA1
∗ Dado’[0x5] = Mul09[dado[0x4]] XOR Mul14[dado[0x5]] XOR Mul11[dado[0x6]]
XOR Mul13[dado[0x7]]
= Mul09[0xA4] XOR Mul14[ 0xC1 ] XOR Mul11[ 0x60 ] XOR Mul13[ 0xEE ]
= 0xF3 XOR 0xE2 XOR 0x8D XOR 0x4A = 0xD6
∗ Dado’[0x6] = Mul13[dado[0x4]] XOR Mul09[dado[0x5]] XOR Mul14[dado[0x6]]
XOR Mul11[dado[0x7]]
= Mul13[0xA4] XOR Mul09[ 0xC1 ] XOR Mul14[ 0x60 ] XOR Mul11[ 0xEE ]
= 0x55 XOR 0x93 XOR 0x76 XOR 0x18 = 0xA8
∗ Dado’[0x7] = Mul11[dado[0x4]] XOR Mul13[dado[0x5]] XOR Mul09[dado[0x6]]
XOR Mul14[dado[0x7]]
= Mul11[0xA4] XOR Mul13[ 0xC1 ] XOR Mul09[ 0x60 ] XOR Mul14[ 0xEE ]
= 0xA0 XOR 0xBA XOR 0x4D XOR 0x63 = 0x34
∗ Dado’[0x8] = Mul14[dado[0x8]] XOR Mul11[dado[0x9]] XOR Mul13[dado[0xA]]
XOR Mul09[dado[0xB]]
= Mul14[0x6E] XOR Mul11[ 0x2C ] XOR Mul13[ 0xFC ] XOR Mul09[ 0xB1 ]
= 0x22 XOR 0x0F XOR 0x80 XOR 0x4E = 0xE3
∗ Dado’[0x9] = Mul09[dado[0x8]] XOR Mul14[dado[0x9]] XOR Mul11[dado[0xA]]
XOR Mul13[dado[0xB]]
= Mul09[0x6E] XOR Mul14[ 0x2C ] XOR Mul11[ 0xFC ] XOR Mul13[ 0xB1 ]
= 0x33 XOR 0x93 XOR 0xBE XOR 0xBC = 0xA2
∗ Dado’[0xA] = Mul13[dado[0x8]] XOR Mul09[dado[0x9]] XOR Mul14[dado[0xA]]
XOR Mul11[dado[0xB]]
1.1 AES 91
= Mul13[0x6E] XOR Mul09[ 0x2C ] XOR Mul14[ 0xFC ] XOR Mul11[ 0xB1 ]
= 0x90 XOR 0x57 XOR 0x9F XOR 0x37 = 0x6F
∗ Dado’[0xB] = Mul11[dado[0x8]] XOR Mul13[dado[0x9]] XOR Mul09[dado[0xA]]
XOR Mul14[dado[0xB]]
= Mul11[0x6E] XOR Mul13[ 0x2C ] XOR Mul09[ 0xFC ] XOR Mul14[ 0xB1 ]
= 0xEF XOR 0xE7 XOR 0x5D XOR 0x74 = 0x21
∗ Dado’[0xC] = Mul14[dado[0xC]] XOR Mul11[dado[0xD]] XOR Mul13[dado[0xE]]
XOR Mul09[dado[0xF]]
= Mul14[0x92] XOR Mul11[ 0x61 ] XOR Mul13[ 0x7A ] XOR Mul09[ 0x35 ]
= 0xBD XOR 0x86 XOR 0x74 XOR 0x86 = 0xC9
∗ Dado’[0xD] = Mul09[dado[0xC]] XOR Mul14[dado[0xD]] XOR Mul11[dado[0xE]]
XOR Mul13[dado[0xF]]
= Mul09[0x92] XOR Mul14[ 0x61 ] XOR Mul11[ 0x7A ] XOR Mul13[ 0x35 ]
= 0x6E XOR 0x78 XOR 0x73 XOR 0x52 = 0x37
∗ Dado’[0xE] = Mul13[dado[0xC]] XOR Mul09[dado[0xD]] XOR Mul14[dado[0xE]]
XOR Mul11[dado[0xF]]
= Mul13[0x92] XOR Mul09[ 0x61 ] XOR Mul14[ 0x7A ] XOR Mul11[ 0x35 ]
= 0x10 XOR 0x44 XOR 0xFA XOR 0xEC = 0x42
∗ Dado’[0xF] = Mul11[dado[0xC]] XOR Mul13[dado[0xD]] XOR Mul09[dado[0xE]]
XOR Mul14[dado[0xF]]
= Mul11[0x92] XOR Mul13[ 0x61 ] XOR Mul09[ 0x7A ] XOR Mul14[ 0x35 ]
= 0x51 XOR 0xDB XOR 0x87 XOR 0x0D = 0x00
dado = Dado’
– Dado intermediario ao final do Round:
0x0F 0xA1 0xE3 0xC9
0x65 0xD6 0xA2 0x37
0x65 0xA8 0x6F 0x42
0x83 0x34 0x21 0x00
• Round 8:
– Inverse Shift:
Entrada:
0x0F 0xA1 0xE3 0xC9
0x65 0xD6 0xA2 0x37
0x65 0xA8 0x6F 0x42
0x83 0x34 0x21 0x00
Saıda:
0x0F 0xA1 0xE3 0xC9
0x37 0x65 0xD6 0xA2
0x6F 0x42 0x65 0xA8
0x34 0x21 0x00 0x83
1.1 AES 92
– InverseS-Box:
InverseSBox[0x0F] = 0xFB
InverseSBox[0x37] = 0xB2
InverseSBox[0x6F] = 0x06
InverseSBox[0x34] = 0x28
InverseSBox[0xA1] = 0xF1
InverseSBox[0x65] = 0xBC
InverseSBox[0x42] = 0xF6
InverseSBox[0x21] = 0x7B
InverseSBox[0xE3] = 0x4D
InverseSBox[0xD6] = 0x4A
InverseSBox[0x65] = 0xBC
InverseSBox[0x00] = 0x52
InverseSBox[0xC9] = 0x12
InverseSBox[0xA2] = 0x1A
InverseSBox[0xA8] = 0x6F
InverseSBox[0x83] = 0x41
– ADD :
0xFB XOR 0xC0 = 0x3B
0xB2 XOR 0x39 = 0x8B
0x06 XOR 0x34 = 0x32
0x28 XOR 0x78 = 0x50
0xF1 XOR 0x84 = 0x75
0xBC XOR 0x6C = 0xD0
0xF6 XOR 0x52 = 0xA4
0x7B XOR 0x0F = 0x74
0x4D XOR 0x0C = 0x41
0x4A XOR 0xF5 = 0xBF
0xBC XOR 0xF8 = 0x44
0x52 XOR 0xB4 = 0xE6
0x12 XOR 0xC0 = 0xD2
0x1A XOR 0x28 = 0x32
0x6F XOR 0x16 = 0x79
0x41 XOR 0x4B = 0x0A
– Inverse Mix Coluns :
∗ Dado’[0x0] = Mul14[dado[0x0]] XOR Mul11[dado[0x1]] XOR Mul13[dado[0x2]]
XOR Mul09[dado[0x3]]
= Mul14[0x3B] XOR Mul11[ 0x8B ] XOR Mul13[ 0x32 ] XOR Mul09[ 0x50 ]
= 0x59 XOR 0xB2 XOR 0x71 XOR 0xE6 = 0x7C
1.1 AES 93
∗ Dado’[0x1] = Mul09[dado[0x0]] XOR Mul14[dado[0x1]] XOR Mul11[dado[0x2]]
XOR Mul13[dado[0x3]]
= Mul09[0x3B] XOR Mul14[ 0x8B ] XOR Mul11[ 0x32 ] XOR Mul13[ 0x50 ]
= 0xF8 XOR 0x23 XOR 0xDD XOR 0xBD = 0xBB
∗ Dado’[0x2] = Mul13[dado[0x0]] XOR Mul09[dado[0x1]] XOR Mul14[dado[0x2]]
XOR Mul11[dado[0x3]]
= Mul13[0x3B] XOR Mul09[ 0x8B ] XOR Mul14[ 0x32 ] XOR Mul11[ 0x50 ]
= 0x14 XOR 0xBF XOR 0x27 XOR 0x46 = 0xCA
∗ Dado’[0x3] = Mul11[dado[0x0]] XOR Mul13[dado[0x1]] XOR Mul09[dado[0x2]]
XOR Mul14[dado[0x3]]
= Mul11[0x3B] XOR Mul13[ 0x8B ] XOR Mul09[ 0x32 ] XOR Mul14[ 0x50 ]
= 0x8E XOR 0xA5 XOR 0xB9 XOR 0x4D = 0xDF
∗ Dado’[0x4] = Mul14[dado[0x4]] XOR Mul11[dado[0x5]] XOR Mul13[dado[0x6]]
XOR Mul09[dado[0x7]]
= Mul14[0x75] XOR Mul11[ 0xD0 ] XOR Mul13[ 0xA4 ] XOR Mul09[ 0x74 ]
= 0xA0 XOR 0xB1 XOR 0x55 XOR 0xF9 = 0xBD
∗ Dado’[0x5] = Mul09[dado[0x4]] XOR Mul14[dado[0x5]] XOR Mul11[dado[0x6]]
XOR Mul13[dado[0x7]]
= Mul09[0x75] XOR Mul14[ 0xD0 ] XOR Mul11[ 0xA4 ] XOR Mul13[ 0x74 ]
= 0xF0 XOR 0x0C XOR 0xA0 XOR 0x32 = 0x6E
∗ Dado’[0x6] = Mul13[dado[0x4]] XOR Mul09[dado[0x5]] XOR Mul14[dado[0x6]]
XOR Mul11[dado[0x7]]
= Mul13[0x75] XOR Mul09[ 0xD0 ] XOR Mul14[ 0xA4 ] XOR Mul11[ 0x74 ]
= 0x3F XOR 0x0A XOR 0xA2 XOR 0x11 = 0x86
∗ Dado’[0x7] = Mul11[dado[0x4]] XOR Mul13[dado[0x5]] XOR Mul09[dado[0x6]]
XOR Mul14[dado[0x7]]
= Mul11[0x75] XOR Mul13[ 0xD0 ] XOR Mul09[ 0xA4 ] XOR Mul14[ 0x74 ]
= 0x1A XOR 0x67 XOR 0xF3 XOR 0xAE = 0x20
∗ Dado’[0x8] = Mul14[dado[0x8]] XOR Mul11[dado[0x9]] XOR Mul13[dado[0xA]]
XOR Mul09[dado[0xB]]
= Mul14[0x41] XOR Mul11[ 0xBF ] XOR Mul13[ 0x44 ] XOR Mul09[ 0xE6 ]
= 0xA3 XOR 0x55 XOR 0x59 XOR 0x97 = 0x38
∗ Dado’[0x9] = Mul09[dado[0x8]] XOR Mul14[dado[0x9]] XOR Mul11[dado[0xA]]
XOR Mul13[dado[0xB]]
= Mul09[0x41] XOR Mul14[ 0xBF ] XOR Mul11[ 0x44 ] XOR Mul13[ 0xE6 ]
= 0x7F XOR 0x20 XOR 0xDA XOR 0x22 = 0xA7
∗ Dado’[0xA] = Mul13[dado[0x8]] XOR Mul09[dado[0x9]] XOR Mul14[dado[0xA]]
XOR Mul11[dado[0xB]]
1.1 AES 94
= Mul13[0x41] XOR Mul09[ 0xBF ] XOR Mul14[ 0x44 ] XOR Mul11[ 0xE6 ]
= 0x60 XOR 0x30 XOR 0x95 XOR 0x40 = 0x85
∗ Dado’[0xB] = Mul11[dado[0x8]] XOR Mul13[dado[0x9]] XOR Mul09[dado[0xA]]
XOR Mul14[dado[0xB]]
= Mul11[0x41] XOR Mul13[ 0xBF ] XOR Mul09[ 0x44 ] XOR Mul14[ 0xE6 ]
= 0xFD XOR 0xFA XOR 0x52 XOR 0x13 = 0x46
∗ Dado’[0xC] = Mul14[dado[0xC]] XOR Mul11[dado[0xD]] XOR Mul13[dado[0xE]]
XOR Mul09[dado[0xF]]
= Mul14[0xD2] XOR Mul11[ 0x32 ] XOR Mul13[ 0x79 ] XOR Mul09[ 0x0A ]
= 0x10 XOR 0xDD XOR 0x63 XOR 0x5A = 0xF4
∗ Dado’[0xD] = Mul09[dado[0xC]] XOR Mul14[dado[0xD]] XOR Mul11[dado[0xE]]
XOR Mul13[dado[0xF]]
= Mul09[0xD2] XOR Mul14[ 0x32 ] XOR Mul11[ 0x79 ] XOR Mul13[ 0x0A ]
= 0x18 XOR 0x27 XOR 0x6E XOR 0x72 = 0x23
∗ Dado’[0xE] = Mul13[dado[0xC]] XOR Mul09[dado[0xD]] XOR Mul14[dado[0xE]]
XOR Mul11[dado[0xF]]
= Mul13[0xD2] XOR Mul09[ 0x32 ] XOR Mul14[ 0x79 ] XOR Mul11[ 0x0A ]
= 0x7D XOR 0xB9 XOR 0xE8 XOR 0x4E = 0x62
∗ Dado’[0xF] = Mul11[dado[0xC]] XOR Mul13[dado[0xD]] XOR Mul09[dado[0xE]]
XOR Mul14[dado[0xF]]
= Mul11[0xD2] XOR Mul13[ 0x32 ] XOR Mul09[ 0x79 ] XOR Mul14[ 0x0A ]
= 0xA7 XOR 0x71 XOR 0x9C XOR 0x6C = 0x26
dado = Dado’
– Dado intermediario ao final do Round:
0x7C 0xBD 0x38 0xF4
0xBB 0x6E 0xA7 0x23
0xCA 0x86 0x85 0x62
0xDF 0x20 0x46 0x26
• Pos-Processamento:
– Inverse Shift:
Entrada:
0x7C 0xBD 0x38 0xF4
0xBB 0x6E 0xA7 0x23
0xCA 0x86 0x85 0x62
0xDF 0x20 0x46 0x26
Saıda:
0x7C 0xBD 0x38 0xF4
0x23 0xBB 0x6E 0xA7
0x85 0x62 0xCA 0x86
0x20 0x46 0x26 0xDF
1.1 AES 95
– InverseS-Box:
InverseSBox[0x7C] = 0x01
InverseSBox[0x23] = 0x32
InverseSBox[0x85] = 0x67
InverseSBox[0x20] = 0x54
InverseSBox[0xBD] = 0xCD
InverseSBox[0xBB] = 0xFE
InverseSBox[0x62] = 0xAB
InverseSBox[0x46] = 0x98
InverseSBox[0x38] = 0x76
InverseSBox[0x6E] = 0x45
InverseSBox[0xCA] = 0x10
InverseSBox[0x26] = 0x23
InverseSBox[0xF4] = 0xBA
InverseSBox[0xA7] = 0x89
InverseSBox[0x86] = 0xDC
InverseSBox[0xDF] = 0xEF
– ADD :
0x01 XOR 0x00 = 0x01
0x32 XOR 0x11 = 0x23
0x67 XOR 0x22 = 0x45
0x54 XOR 0x33 = 0x67
0xCD XOR 0x44 = 0x89
0xFE XOR 0x55 = 0xAB
0xAB XOR 0x66 = 0xCD
0x98 XOR 0x77 = 0xEF
0x76 XOR 0x88 = 0xFE
0x45 XOR 0x99 = 0xDC
0x10 XOR 0xAA = 0xBA
0x23 XOR 0xBB = 0x98
0xBA XOR 0xCC = 0x76
0x89 XOR 0xDD = 0x54
0xDC XOR 0xEE = 0x32
0xEF XOR 0xFF = 0x10
• FINAL:
0x01 0x89 0xFE 0x76
0x23 0xAB 0xDC 0x54
0x45 0xCD 0xBA 0x32
1.1 AES 96
0x67 0xEF 0x98 0x10
Dados Finais por ciclo:
0: 0x5B 0xE1 0x21 0x32 0x2E 0x87 0x37 0x86 0x3D 0x5B 0x82 0x29 0xA7 0x1D 0xB4 0xB0
1: 0x6D 0xA7 0x7B 0xB1 0x33 0x31 0x02 0xE9 0x62 0x03 0x05 0x0B 0xEB 0x9B 0x8F 0x74
2: 0xC0 0xF2 0x7E 0x37 0x4C 0xFB 0xDA 0xC4 0x2C 0x61 0x0A 0xB1 0xA9 0xF0 0x41 0xEE
3: 0x6C 0x2B 0x65 0x73 0xD1 0x7E 0x3C 0x4E 0xAA 0x15 0xA3 0x4F 0x74 0xCC 0x59 0x95
4: 0x37 0x24 0x5B 0x06 0x91 0x84 0xF2 0x3B 0xD3 0x2F 0x97 0xA5 0xE9 0x1D 0x9D 0x14
5: 0xFA 0x92 0xEC 0x83 0xDD 0xFA 0xA1 0x3C 0xBA 0xD8 0x6D 0x07 0x20 0x4 0xBD 0x15
6: 0x68 0x45 0xB1 0x11 0x2A 0x89 0x21 0xFA 0x6D 0xCB 0xC2 0xF9 0xF1 0xF0 0xBA 0xA8
7: 0xE3 0xD9 0x61 0x0D 0x48 0xED 0x7B 0xC7 0x65 0x91 0x8D 0xFB 0x90 0x53 0xFE 0xDF
8: 0x32 0x88 0x56 0x8B 0xF6 0x66 0xD5 0x26 0xCA 0x1F 0x3E 0xE8 0x71 0xE4 0x83 0xC5
9: 0x0F 0x37 0x6F 0x34 0xA1 0x65 0x42 0x21 0xE3 0xD6 0x65 0x00 0xC9 0xA2 0xA8 0x83
10: 0x7C 0x23 0x85 0x20 0xBD 0xBB 0x62 0x46 0x38 0x6E 0xCA 0x26 0xF4 0xA7 0x86 0xDF
11: 0x01 0x23 0x45 0x67 0x89 0xAB 0xCD 0xEF 0xFE 0xDC 0xBA 0x98 0x76 0x54 0x32 0x10
Original: [ 0x01, 0x23, 0x45, 0x67 , 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98 ,
0x76, 0x54, 0x32, 0x10]