Download - Luckas Andre Farias - uel.br · estar a em foco apenas no uso da matriz S-Box que e apresentada na ... considere-a como um vetor de 128 posi ... 80 cd 0c 13 ec 5f 97 44 17 c4 a7 7e

Transcript

Luckas Andre Farias

Criptografia em hardware usando VHDL aplicado a VOIP

Londrina

2012

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

LISTA DE SIGLAS E ABREVIATURAS

SIGLA1 - Significado

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]

97

Referencias Bibliograficas

ADVANCED ENCRYPTION STANDARD (AES). Federal Information Processing StandardsPublication 197, p. 1–51, 2001.

STALLINGS, W. Cryptography and network security: principles and practice. [S.l.: s.n.].