You are on page 1of 96

B

Benem
ritaU
UniverssidadA
Autno
omade
ePueblla
F
Facultad
ddeCieenciasd
delaEllectrn
nica

T
Tesinapar
raelgrado
odeLicen
nciaturaeenElectr
nica:

Implem
mentacinenH
Hardwa
aredel
E
Estnda
ardeEn
ncriptaccinAva
anzado
(A
AES),en
nunap
plataforrmaFPG
GA,
u
utilizand
doelMicrocon
ntrolado
or
P
PicoBlaz
ze

esista:JuanFernand
doPialMo
octezuma
Te
A
Asesorinte
rno:MCRicardolvaarezGonzlez.FCEB
BUAP
A
Asesorexte
erno:MCA
AlbaMaribelSnchezzGlvez.FFCCBUAP

H.Pueblade
eZ.Abrilde
e2008

Agradecimientos
Pormediodeestetrabajodeinvestigacinseestudianlascaractersticasquesustentanal
Algoritmo de Encriptacin Avanzado (AES), y la manera de realizar la sntesis de dicho
algoritmoparasuimplementacinenunArreglodeCompuertasProgramableenCampo
(FPGA) al utilizar una de las herramientas de procesamiento embebido del fabricante
Xilinx.

Resumen
Pormediodeestetrabajodeinvestigacinseestudianlascaractersticasquesustentanal
Algoritmo de Encriptacin Avanzado (AES), y la manera de realizar la sntesis de dicho
algoritmoparasuimplementacinenunArreglodeCompuertasProgramableenCampo
(FPGA) al utilizar una de las herramientas de procesamiento embebido del fabricante
Xilinx.

II

ContenidoGeneral
Introduccin.............VIII
Planteamientodelproblema.............VIII
Metasyobjetivos......VIII
Justificacin.IX

CaptuloI.

MARCOHISTRICO......1

1.1 Criptografaenlahistoria........1
1.2 Criptografaclsica........1
1.2.1

LaEscitala(sigloVa.C).......2

1.2.2

CifradodeCsar(sigloIa.C).2

1.2.3

CifradordePolybius(sigloIIa.C)3

1.3 Criptografamoderna........3
1.3.1

DiscodeAlberti.....3

1.3.2

CilindrodeJefferson......4

1.3.3

DiscodeWheatstone.......5

1.3.4

ElsigloXXylaSegundaGuerraMundial..5

1.4 LaCriptografaenlaeradelaInformacin....7
1.5

QuesunFPGA?....8
1.5.1

1.6

HistoriadelosFPGA...9

ElalgoritmoAES.....10
1.6.1

EvaluacindeAES....11

CaptuloII.

MARCOTERICO.......13

2.1

Notacinyconvenciones.......13
2.1.1

Byte....13

2.1.2

ArreglosdeBytes......14

2.1.3

ElState.....15

III

2.1.4

2.2

2.3

ElStatecomounarreglodecolumnas...15

IntroduccinalaMatemtica........16
2.2.1

Grupos,AnillosyCampos....16

2.2.2

Grupos...16

2.2.3

Anillos....17

2.2.4

Campos....17

2.2.5

CamposFinitosdelaformaGF(28)......18

2.2.6

Suma...18

2.2.7

Multiplicacin.....19

2.2.8

Multiplicacinporx....20

2.2.9

PolinomiosconcoeficientesenGF(28)......21

DescripcindelAlgoritmoAES........23
2.3.1

EtapaSubBytes...23

2.3.2

EtapaShiftRows.....24

2.3.3

EtapaMixColumns...24

2.3.4

EtapaAddRoundKey....27

CaptuloIII. DISEODELSISTEMA......29
3.1

DescripcindelaplataformadedesarrollodeHardware.......29

3.2

DescripcindelaplataformadedesarrollodeSoftware......30

3.3

Diagramaconceptualdelsistema.....30

3.4

Metodologa.....31

3.5

PorquutilizarunmicrocontroladorenunFPGA?..31

3.6

CaractersticasdelmicrocontroladorPicoBlaze..32
3.6.1

3.7

pBlazeIDE,softwarededesarrolloenensambladorparaPicoBlaze.33

ImplementacindelSistema..34
3.7.1

3.7.2

GestindeEntrada/SalidadedatosalSistema......................35
3.7.1.1

ComunicacinSerial............................35

3.7.1.2

ComunicacinmedianteuntecladoPS/236

GestindelaLCD......................38

IV

3.7.3

3.8

3.9

Encriptacindedatos.......................41
3.7.3.1

ImplementacinparaAddRoundKey..............................42

3.7.3.2

ImplementacinparaSubBytes..43

3.7.3.3

ImplementacinparaShiftRows.45

3.7.3.4

ImplementacinparaMixColumns46

ArquitecturadelSistema...48
3.8.1

MicrocontroladorPicoBlaze.......................49

3.8.2

MemoriadeprogramaparaelmicrocontroladorPicoBlaze.49

3.8.3

Interface49

DiseodelprogramaparaelintercambiodedatosPCFPGAatravsdeMatLab50

CaptuloIV. ANLISISDERESULTADOS.......51
4.1

Resultadosdelaimplementacindelsistema........53
4.1.1

rea....53

4.1.2

Throughput....54

4.1.3

ComparacinconotrasArquitecturas....54

CaptuloV.

CONCLUSIONES.......56

5.1

Resumendelosresultadosobtenidos........56

5.2

Conclusionesdeltrabajorealizado.........56

5.3

Trabajofuturo........57

Apndices............58
ApndiceA.

TrminosyAcrnimos..58

ApndiceB.

CdigoenensambladorparaelmicrocontroladorPicoBlaze.59

ApndiceC.

CdigoenVHDLparalaentidadinterface.77

ApndiceD.

CdigoMparaelintercambiodedatosPCFPGAatravsde
MatLab..83

Listadodereferencias..........66

ContenidodeFiguras

Figura1.
Figura2.
Figura3.
Figura4.
Figura5.
Figura6.
Figura7.
Figura8.
Figura9.
Figura10.
Figura11.
Figura12.
Figura13.
Figura14.
Figura15.
Figura16.
Figura17.
Figura18.
Figura19.
Figura20.
Figura21.
Figura22.
Figura23.
Figura24.
Figura25.
Figura26.
Figura27.
Figura28.
Figura29.
Figura30.
Figura31.
Figura32.
Figura33.
Figura34.
Figura35.

LaEscitala..........2
AlfabetodecifradodeCsar......2
EjescoordenadosparaelcifradordePolybius......3
DiscodeAlberti........................................4
CilindrodeJefferson..............................5
DiscodeWheatstone.............................................5
Enigma.............................................6
FPGAXilinxSPARTAN3............................................8
Dr.VincentRijmenyDr.JoanDaemen......................10
RepresentacinHexadecimaldelospatronesdenibbles.............................................14
ndicesparaBytesybits...............................................14
EntradasysalidasparaelarregloState...........15
EtapaSubBytes...23
EtapaShiftRows.............................................24
EtapaMixColumns...............................................27
EtapaAddRoundKey............................................28
TarjetadedesarrolloSPARTAN3E.29
Diagramaconceptualdelsistema....30
ArquitecturadelmicrocontroladorPicoBlaze.33
SoftwarepBlazeIDEdeldesarrolladorMediatronix..33
ProgramaqueejecutaelmicrocontroladorPicoBlaze..34
PuertosSerialesRS232delatarjetaSPARTAN3EStarterKit..35
Comportamientodelsistemaenlacomunicacindedatosserial..36
ConectorPS/2delatarjetaSPARTAN3EStarterKit...36
FormasdeondaydiagramadetiemposparalacomunicacinPS/237
Scancodesparacadaunadelasteclas.37
DiagramadeflujoparalasrutinasdelaLCD.38
ProtocolodecomunicacindelaLCD.39
Secuenciadelmendeusuariodelsistemacriptogrfico...40
DiagramadeflujoparaelalgoritmodeencriptacinAES41
DiagramadeflujoparaimplementarAddRoundKey42
SboxempleadaparalaejecucindeAES..43
DiagramadeflujoparaimplementarSubBytes...44
DiagramadeflujoparaimplementarShiftRows.45
DiagramadeflujoparaimplementarMixColumns46

VI

Figura36. SubrutinaparalamultiplicacindematricesenGF(28).47
Figura37. Diagramaesquemticodelaarquitecturadelsistema..48
Figura38. DiagramadeflujoparaelCdigoMdeMatLab...50
Figura39. EjemploparaAESsegnFIPSPUB197..51
Figura40. DatosenviadosyrecibidosatravsdeMatLabhaciaelFPGA........51
Figura41. ResultadosdesplegadosenlaLCDdelatarjetadedesarrollo........52
Figura42. Vistadelosrecursosutilizadosporeldiseo.53
Figura43. Reportedelmapeodeldiseo..54
Figura44. ComparacindedesempeoentrearquitecturasdecifradoAES128....55

VII

Introduccin
Planteamiento del problema
La criptografa es tan antigua como la historia de la humanidad, debido a que siempre ha existido la necesidad
de poder enviar y recibir informacin sin que esta sea interceptada o modificada en su trayecto. As, el
principio bsico de la criptografa, es mantener la privacidad en la comunicacin entre dos personas alterando
el mensaje original de modo que sea incomprensible a toda persona distinta del los destinatarios.
Debido a esta necesidad, a travs de la historia se han desarrollado numerosos aparatos que realizan la tarea
de cifrar y descifrar mensajes; ya sean dispositivos rudimentarios como la Escilata que es el primer sistema
criptogrfico del que se tiene registro, (siglo V a.C.), hasta sofisticados sistemas que aprovechan la teora
desarrollada a travs del tiempo.
Los sistemas criptogrficos actuales surgen en base a las necesidades contemporneas, ya que en este
momento la humanidad transmite grandes cantidades de informacin, la cual en su mayora son enviadas
recibidas por dispositivos que manipulan seales discretas ( digitales), como son telfonos celulares, medios
de almacenamiento (pticos, magnticos, tarjetas de memoria), computadoras que se interconectan entre s
(Internet Intranet), etc. Mucha de esta informacin requiere de gran confidencialidad debido a que se
transmiten datos sensibles como: contraseas, nmeros de tarjetas de crdito, informacin cientfica, militar,
etc. As surgen los sistemas criptogrficos modernos, basados en plataformas electrnicas digitales.

Metas y Objetivos
En base al contexto descrito anteriormente, el Objetivo General de este trabajo es implementar en hardware
el Algoritmo de Encriptacin Avanzada (AES) en un Arreglo de Compuertas Programable en Campo (FPGA).
As el Objetivo Especfico del trabajo es utilizar el algoritmo AES, tambin conocido como Rijndael, en un
FPGA del fabricante Xilinx, utilizando el microcontrolador PicoBlaze. Este algoritmo criptogrfico es
reconocido como el estndar actualmente en la mayor parte del mundo.
Adems la plataforma FPGA ha tenido un gran auge en los ltimos aos, debido a su amplio rango de
aplicaciones que incluyen a los DSP (Procesadores Digitales de Seales), radio definido por software,
sistemas aeroespaciales y de defensa, prototipos de ASIC (Circuito Integrado de Aplicacin Especfica),
sistemas de imgenes para medicina, sistemas de visin, reconocimiento de voz, Bioinformtica, emulacin
de Hardware de computadora, etc.

VIII

Introduccin

Al mismo tiempo los FPGA encuentran aplicaciones en muchas reas donde se requiera del paralelismo
ofrecido por su arquitectura, otra de sus grandes ventajas contra procesadores de uso general.
Por lo tanto, las Metas de este trabajo son:

Utilizar los perifricos de entrada/salida de la tarjeta de desarrollo SPARTAN-3E Starter Kit, para
ingresar, procesar y mostrar los datos a encriptar, utilizando el microcontrolador PicoBlaze.

Emplear el microcontrolador PicoBlaze para sintetizar el algoritmo AES.

El sistema diseado debe de ser rpido, eficiente y verstil.

Justificacin
En base a este trabajo se pretende manejar el ms nuevo estndar en el rea de criptografa informtica;
adems de utilizar una de las plataformas digitales que ms auge ha tenido en los ltimos aos debido a su
flexibilidad de aplicacin y reconfiguracin, adems del gran desempeo que presentan.
Utilizando estas herramientas, se intenta proveer un instrumento para seguridad informtica, que presente un
desempeo aceptable respecto a un ASIC (Circuito Integrado de Aplicacin Especfica), y un desempeo
notable en comparacin con Procesadores de Propsito General. Con la respectiva ventaja de utilizar un
FPGA en lugar de un ASIC que es el bajo coste de la lgica reconfigurable.
La viabilidad de este proyecto para su realizacin no es un obstculo, ya que se cuenta con la tarjeta
SPARTAN-3E Starter Kit, la cual incluye el FPGA que se necesita para implementar los resultados de la
investigacin. Para sustentar la investigacin con argumentos bibliogrficos se utiliza la publicacin oficial
del algoritmo AES, adems de contar con texto especializado en el tema que apoya la investigacin y los
resultados.
El algoritmo AES se sustenta en dos teoras matemticas, por una parte la llamada Teora de Campos Finitos
especficamente Campos de Galois; y por otro lado utiliza tambin Aritmtica Modular.
Por desgracia, este tipo de Fundamentos Matemticos no son impartidos en la Licenciatura, por lo que es uno
de los principales obstculos que habrn de resolverse. Sin embargo, gracias al asesor externo de este trabajo
de investigacin, el cual, su rea de especialidad abarca este tipo de Fundamentos, este inconveniente puede
ser solventado.

IX

Captulo I. MARCO HISTRICO


1.1 Criptografa en la historia
La criptografa (del griego kryptos "ocultar", y grafos "escribir") es la tcnica, arte de la escritura secreta,
actualmente considerada una ciencia que utiliza tcnicas matemticas que hacen posible el intercambio de
mensajes de manera que slo puedan ser ledos por las personas a quienes van dirigidos.
El principio bsico de la criptografa es mantener la privacidad de la comunicacin entre dos personas
alterando el mensaje original de modo que sea incomprensible a toda persona distinta del destinatario. Esta
necesidad se remonta desde tiempos sumamente antiguos.
A la transformacin del mensaje original en el mensaje cifrado (criptograma) le llamamos cifrado, y a la
operacin inversa, le llamamos descifrado; estos pasos se realizan mediante un conjunto de reglas
preestablecidas entre los comunicantes a la que llamamos clave. El criptoanlisis es el conjunto de tcnicas
que intenta encontrar la clave utilizada entre dos comunicantes, revelando as el mensaje original.

1.2 Criptografa clsica


La primera aplicacin conocida de la criptografa se remonta hace 4000 aos, cuando los egipcios utilizaban
jeroglficos crpticos para narrar la vida y hazaas de sus faraones. La encriptacin no se empleaba para
esconder el significado del texto sino para darle un carcter ms solemne. En la antigua China, el carcter
ideogrfico del idioma serva para esconder el significado de las palabras, aunque no parece que esta
particularidad se hubiera empleado para encriptar y desencriptar mensajes.
Varios pueblos de la antigedad emplearon diversos mtodos de encriptacin y desencriptacin de escritos,
como los griegos, los espartanos y los hebreos, pero los rabes y los indios fueron los que mayor desarrollo
lograron en este campo, destacndose un rabe, Muhammad Al-Qalqashandi, quien invent una tcnica para
descifrar mensajes que todava se usa en la actualidad.
La criptografa se torn importante durante la Edad Media, cuando los gobiernos se comunicaban con sus
embajadores por medio de mensajes cifrados. En 1453, el gobierno Italiano establece un grupo dedicado
exclusivamente al estudio de la criptografa, con el fin de perfeccionar los mtodos de encriptacin as como
para descifrar los de sus enemigos.

Ca
aptuloI

M
MarcoHist
rico

A contiinuacin se mu
uestran algunoss mecanismos criptogrficos relevantes, quue se han utilizaado a travs dee la
historiaa:

1.2.1

La Escitala
E
(sigllo V a.C)

Ell primer caso conocido del uso de mtoddos criptogrficcos se dio durrante la guerraa entre Atenass y
Essparta, por parrte de los lacedemonios. Ell cifrado se basaba
b
en la alteracin
a
del mensaje origiinal
mediante la incllusin de smbbolos innecesaarios en ste, que desapareccan al enrollarrlo en un rodiillo
a, de longitud y grosor prefijaados.
llaamado escitala
An sabiendo laa tcnica utilizzada, si no se tenan las dim
mensiones exaactas de la esccitala, un posible
intterceptor del mensaje
m
tena un
u complicado criptoanlisis.

Figura 1. La Escitala.

1.2.2

Cifra
ado de Csarr (siglo I a.C
C)

Juulio Csar preseenta este cifraddor cuyo algorritmo consiste en


e el desplazam
miento de tres espacios haciaa la
deerecha de los caracteres del teexto en claro. Es un cifradorr por sustitucin monoalfabttico, en el que las
opperaciones se realizan
r
utilizaando aritmticca modular n, siendo n iguaal al nmero de
d elementos del
alffabeto.

Figura 2. Alfa
fabeto de cifrado de
d Csar.

Teexto cifrado: Wx
W wdoelhp Euuxwxv?
M
Mensaje
originall: T tambin Brutus?
B

MarcoHistrico

CaptuloI
1.2.3

Cifrador de Polybius (siglo II a.C)

Es el cifrador por substitucin ms antiguo que se conoce. El mtodo se basaba en una tabla secreta, en
cuyos ejes se ponan diferentes combinaciones de letras o nmeros y dentro de la tabla las letras del
alfabeto. Cada letra del mensaje a cifrar era substituida por sus coordenadas:

i/j

Figura 3. Ejes coordenados para el cifrador de Polybius.

Texto cifrado: CECDCAEDABBDDEDC AEDC AECA DBAEED


Mensaje: Polybious es el rey

1.3 Criptografa moderna


1.3.1

Disco de Alberti

En 1465, Len Battista Alberti, msico, pintor, escritor y arquitecto, concibi el primer sistema
polialfabtico que se conoce, que emplea varios abecedarios, utilizando uno u otro, cada tres o cuatro
palabras. El emisor y el destinatario haban de ponerse de acuerdo para fijar la posicin relativa de los
crculos concntricos, que determinara la correspondencia de los signos.
Los diferentes abecedarios utilizados eran representados en uno de los discos, mientras que el otro se
rellenaba con el abecedario normal, ms los nmeros del 1 al 4.
Este disco define 24 posibles sustituciones dependiendo de la posicin del disco interior. Una vez
establecida la correspondencia entre caracteres de ambos discos, se sustituye el texto en claro del disco
exterior por cada una de las letras correspondientes del disco interior, cambiando al abecedario

Ca
aptuloI

M
MarcoHist
rico

coorrespondiente (prefijado por los comunicanntes) cada x paalabras, habienndo sido x tambbin prefijada por
p
los comunicantes.

Figura 4. Disco de Alberrti.

Otro dee los criptgraafos ms importantes del sigglo XVI fue ell francs Blaisse de Vigeneree que escribi un
importaante tratado sob
bre la "escriturra secreta" y quue dise un ciifrado que ha llegado
l
a nuesttros das asociaada
a su noombre. A Selenus se le debee la obra cripttogrfica "Crypptomenytices et
e Cryptographhiae" (Lnebuurg,
1624). Durante
D
los sig
glos XVII, XVIII y XIX, el innters de los monarcas
m
por la criptografa fuue notable.
Las hueestes de Felipee II utilizaron durante
d
muchoo tiempo una cifra
c
con un alffabeto de ms de 500 smboolos
que los matemticos del
d rey consideeraban inexpuggnable.
o francs Franois Viete connsigui criptoannalizar aquel sistema para el rey de Franciaa, a
Cuandoo el matemtico
la saznn Enrique IV, el
e conocimientto mostrado poor el rey francs impuls unaa queja de la coorte espaola ante
a
del pappa Po V acusaando a Enriquee IV de utilizaar magia negraa para vencer a sus ejrcitos. Por su parte,, la
reina Mara
M
Estuardo,, reina de los Escoceses,
E
fue ejecutada por su prima Isabel I de Inglaterrra al descubriirse
un com
mplot de aquellaa tras un criptoanlisis exitosoo por parte de los matemticoos de Isabel.

1.3.2

Cilin
ndro de Jeffe
ferson

Esste dispositivo fue inventado por el famosoo Thomas Jeffeerson (1743-18826), redactor de la declaraciin
dee independenciia de Estados Unidos,
U
aunquue el primero en
e fabricarla en
e serie fue Etttiene Bazeries en
18891. El aparato
o consiste en unna serie de disccos que giran libremente alreededor de un mismo
m
eje y llevvan
im
mpresas las letrras del alfabetto escritas en cada
c
disco en diferente ordeen. El emisor mueve
m
los disccos
haasta configurarr el mensaje enn claro, y eligge otra lnea que
q ser el mennsaje cifrado. Tras haber siido
ennviado, el receeptor solamentte tiene que pooner las letras recibidas en lnea y buscarr en otra lneaa el
mensaje en claro
o.

Ca
aptuloI

M
MarcoHist
rico

Figura 5. Cilindro de Jefferrson.

1.3.3

Disco
o de Wheatsstone

Ell disco de Wheeatstone (18022-1875) realizaa una sustitucin polialfabtiica, muy pareccida a la utilizaada
poor Alberti. El in
nvento consta de dos discos concntricos:
c
e el exterior se
en
s escriben, en orden alfabtiico,
lass 26 letras del alfabeto inglss ms el espaciio, y en el interior se distribuuyen esas mism
mas 26 letras pero
aleeatoriamente.
Soobre los discoss hay dos maneecillas como laas de un reloj, de forma que a medida que avanza la mayyor
poor el disco exteerior, la menorr se desplaza por
p el disco innterior. Cuandoo el puntero grrande recorre una
u
vuuelta, el pequeo da una vueelta ms una leetra. El mensaj
aje en claro se cifraba prohiibiendo al dissco
exxterior ir en sen
ntido antihorariio, siendo el mensaje
m
secreto lo indicado poor el puntero menor.
m

Figura 6. Disco de Wheatsttone.

1.3.4

El sig
glo XX y la Segunda Gu
uerra Munddial

Ell siglo XX ha revolucionadoo la criptograffa. Retomando el concepto de las ruedass concntricas de


Allberti, a princiipios del siglo se disearon teletipos equippados con unaa secuencia de rotores mvilles,
sstos giraban con
n cada tecla quue se pulsaba.

Ca
aptuloI

M
MarcoHist
rico

Dee esta forma, en


e lugar de la letra
l
elegida, apareca
a
un siggno escogido por
p la mquinaa segn diferenntes
reglas en un cd
digo polialfabtico complejo. Estos aparatoos, se llamaron traductores mecnicos.
m
Unaa de
suus predecesorass fue la Rueda de Jefferson.
Laa primera paten
nte data de 1919, y es obra del
d holands Alexander
A
Kchh, que compartte honores conn el
aleemn Arthur Scherbius, el inventor de Enigma
E
una mquina
m
criptoogrfica a rotoor que los naazis
creyeron inviolaable, sin saber que
q acelerara su derrota. Enn efecto, en el desenlace
d
de laa contienda, huubo
unn factor decisiv
vo y apenas coonocido: los aliados eran cappaces de desciffrar todos los mensajes
m
secreetos
aleemanes.
Unna organizaci
n secreta britnica, en la quee particip Alaan Turing, uno de los padres de la informttica
y de la inteligen
ncia artificial, haba logradoo desenmascarrar las claves de Enigma y de su "hermaana
q develaban los
mayor" Lorenz, desarrollando ms de una doocena de artiluugios llamadoss las bombas que
mensajes cifrado
os. La mquinaa alemana se converta
c
as en
e el taln de Aquiles
A
nazi, un
u topo en el que
q
coonfiaban y quee en definitivaa, trabajaba paara el enemigoo. Paralelamennte, Los cdiggos de la versiin
japponesa de En
nigma (llamadoos Purple) see descifraron por
p un grupo de analistas, dirigidos porr el
coomandante Joseeph J. Rochefoort, cuyo criptooanlisis fue viital para la victtoria americanna en la batalla de
M
Midway.

Figgura 7. Enigma.

La existencia de Enig
gma y el hechoo de que los aliados conocieseen sus secretoss fueron durantte mucho tiemppo,
m
guardadoos de la II Gueerra Mundial. La razn? Quueran seguir sacndole
s
partiido
dos de los secretos mejor
g
potenciaando su uso enn diversos passes, que, al instalarla, hacan transparentes sus secretos para
tras la guerra
las poteencias anglosajonas.
Tras laa conclusin de la Segunda Guerra Munddial, la criptoggrafa tiene un desarrollo terico importannte;
siendo Claude Shann
non y sus invvestigaciones sobre
s
teora de
d la informaccin esencialess hitos en diccho
l avances enn computacinn automtica suuponen tanto una
u amenaza para
p
los sistem
mas
desarrollo. Adems, los
o
paara el desarrolloo de nuevos sisstemas.
existenttes como una oportunidad

CaptuloI

MarcoHistrico

1.4 La Criptografa en la era de la Informacin


Finalizada la contienda, las nuevas tecnologas electrnicas y digitales se adaptaron a las mquinas
criptogrficas. Se dieron as los primeros pasos hacia los sistemas criptogrficos ms modernos, mucho ms
fiables que la sustitucin y transposicin clsicas. A mediados de los aos 70 del siglo pasado, el
Departamento de Normas y Estndares norteamericano publica el primer diseo lgico de un cifrador que
estara destinado a ser el principal sistema criptogrfico de finales de siglo: el Estndar de Cifrado de Datos o
DES (inventado por IBM) que utiliza algoritmos de gran complejidad para cifrar los mensajes.
En esas mismas fechas ya se empezaba a gestar lo que sera la, hasta ahora, ltima revolucin de la
criptografa terica y prctica: los sistemas asimtricos. Estos sistemas supusieron un salto cualitativo
importante ya que permitieron introducir la criptografa en otros campos que hoy da son esenciales, como el
de la firma digital. Una de las aportaciones del ltimo cuarto del siglo XX son los sistemas de cifrado
asimtrico o de clave pblica (como RSA), en contraposicin con todos los anteriores, que son criptosistemas
simtricos o de clave privada, que usaban la misma clave para el cifrado y el descifrado del mensaje.
La ventaja de estos sistemas es que permiten solucionar uno de los problemas de la criptografa clsica, la
distribucin de las claves secretas a los participantes en la comunicacin. En la criptografa de clave pblica,
una de las claves puede hacerse pblica sin que por ello la seguridad de la clave secreta se vea afectada. Lo
cifrado con la clave secreta puede descifrarse con la pblica y viceversa. Esta propiedad de los criptosistemas
asimtricos permite tambin otras aplicaciones de estos criptosistemas, como la firma digital que es tan
importante en las redes de telecomunicaciones hoy.
Existen dos trabajos fundamentales sobre los que se apoya prcticamente toda la teora criptogrfica actual.
Uno de ellos, desarrollado por Claude Shannon en sus artculos "A Mathematical Theory of Communication"
(1948) y "Communication Theory of Secrecy Systems" (1949), sienta las bases de la Teora de la Informacin
y de la Criptografa moderna. El segundo, publicado por Whitfield Diffie y Martin Hellman en 1976, se
titulaba "New directions in Cryptography", e introduca el concepto de Criptografa de Clave Pblica,
abriendo enormemente el abanico de aplicacin de esta viejsima disciplina. Con la publicacin del algoritmo
RSA en 1977 por parte de los matemticos Ron Rivest, Adi Shamir y Len Adleman la criptografa "moderna"
o de clave pblica alcanza su consolidacin.
Entonces en la actualidad, los sistemas criptogrficos se implementan de forma electrnica y los sistemas
mecnicos han sido desplazados casi por completo. Esta nueva tcnica abre una amplia variedad de
implementacin como puede ser una computadora digital, ASIC o FPGA.

Ca
aptuloI

M
MarcoHist
rico

1.5 Qu es un FPGA?
Un FPG
GA (field progrrammable gatee array) es un dispositivo
d
sem
miconductor diigital que contiiene componenntes
lgicos programables e interconeexiones tambin programabbles entre elloos. Los compponentes lgiccos
program
mables pueden
n ser programaados para dupliicar la funcionnalidad de puertas lgicas bsicas tales com
mo
AND, OR,
O XOR, NO
OT funcioness combinacionales ms compplejas tales coomo decodificaadores simpples
funcionnes matemticaas. En muchos FPGA,
F
estos componentes
c
lgicos program
mables (o bloquues lgicos, seggn
el lenguuaje comnmente usado) tam
mbin incluyenn elementos de memoria, los cuales puedenn ser simples flipfl
flops bloques de meemoria ms com
mplejos.
i
Una jeerarqua de interconexione
s programables permite a los bloquess lgicos de un FPGA, ser
interconnectados segn
n la necesidad del diseador del sistema, algo
a
parecido a un tablero prrogramable. Esstos
bloquess lgicos e in
nterconexiones pueden ser programados
p
d
despus
del proceso de maanufactura porr el
usuario/diseador, as que el FPGA
GA puede desem
mpear cualquuier funcin lgica necesariia. En los FPG
GA
ncontrar funcioones de alto niivel (como sum
madores y multiplicadores) empotrados
e
enn la
actualess se pueden en
matriz de
d interconexio
ones, inclusivee en FPGAs dee alto desempeeo se incluyenn dichas funcioones con unidaddes
de clcuulo con punto flotante.
f
La recconfigurabilidaad de los FPGA
A radica en quee una parte dell diseo puede ser
reprogrramada mientraas el resto conttina funcionanndo, esto es el principio de laa computacinn reconfigurable o
sistemaas reconfigurab
bles. Los FPGA son geneeralmente ms lentos que sus
s contraparttes, los circuiitos
integraddos de aplicaciiones especficas (ASIC), no pueden
p
soportaar diseos muyy complejos enn los modelos ms
m
bsicos, y consumen ms energa. Sin
S embargo, tienen
t
muchass ventajas taless como la reduuccin del tiem
mpo
para la salida al merrcado de prodductos, la habiilidad para serr reprogramaddos despus dee haber salidoo al
mo investigacin,
mercaddo a fin de corrregir posibless errores, y redduccin los coostos de ingenniera tales com
diseo y prueba de un
n nuevo produccto. Los vendedores pueden proporcionar
p
v
versiones
de FP
PGA, ms baraatos
y menoos flexibles, las cuales no pueden ser modifiicados despus de que el diseeo haya sido im
mplementado.

Figura 8. FP
PGA Xilinx Sparttan-3.

CaptuloI

1.5.1

MarcoHistrico

Historia de los FPGA

Ross Freeman, cofundador de Xilinx, invent el arreglo matricial de compuertas. La raz histrica de las
FPGA son los Dispositivos de lgica programable compleja (CPLD) de mediados de 1980. CPLD y
FPGA incluyen un relativo gran nmero de elementos lgicos programables.
El rango de densidad de los CPLD va desde miles hasta decenas de miles de compuertas lgicas,
mientras que el de los FPGA va tpicamente desde decenas de miles hasta varios millones. La diferencia
primaria entre CPLDs y FPGAs son sus arquitecturas. Un CPLD tiene una estructura restringida,
consistiendo la unin de uno o ms arreglos lgicos que alimentan a un nmero pequeo de registros con
entrada de reloj.
El resultado de estos es menos flexibilidad, con la ventaja de una mejor prediccin de los tiempos de
retraso. Las arquitecturas de los FPGAs, por otro lado, son dominadas por las interconexiones. Esto los
hace ms flexibles (en trminos del rango de diseos prcticos para los cuales pueden ser usados) pero
tambin es posible ir un poco ms lejos en el diseo. Otra diferencia notable entre CPLDs y FPGAs es
la presencia de funciones de ms alto nivel (tales como sumadores y multiplicadores) dentro de los
FPGAs, adems de memorias. Una diferencia importante es que muchos FPGAs modernos, soportan
una total o parcial reconfiguracin del sistema, permitiendo que una parte del diseo sea reprogramada
mientras las otras partes siguen funcionando. Una tendencia reciente ha sido llevar la arquitectura un
paso ms lejos, combinado los bloques lgicos e interconexiones de los tradicionales FPGAs, con
microprocesadores y con perifricos relacionados para formar un completo Sistema programable en un
chip.
Ejemplo de estas tecnologas hibridas pueden ser encontradas en los FPGA Xilinx Virtex, los cuales
incluyen uno o ms procesadores PowerPC embebidos junto con la lgica FPGA. El Atmel FPSLIC
es otro dispositivo como tal, el cual usa un procesador AVR en combinacin con la arquitectura lgica
programable de Atmel.
Otra alternativa es hacer uso de ncleos de procesadores, los cuales son implementados junto con la
lgica FPGA. Esos ncleos incluyen el Xilinx MicroBlaze y PicoBlaze, el Altera Nios y
procesador NiosII, y los de open source LatticeMicro32 y LatticeMicro8. Como previamente se dijo,
muchos FPGA modernos, tienen la habilidad de ser reprogramados en tiempo de funcionamiento lo cual
permite que estos sistemas se reconfiguren a s mismos para cumplir con la tarea actual. Sin embargo no
todos los FPGA actuales soportan esta metodologa.

CaptuloI

MarcoHistrico

1.6 El algoritmo AES


En el ao 1999, NIST (National Institute of Standards and Technology) de EUA, lanz una nueva versin de
su estndar DES, el cual indicaba que DES solamente deba ser usado por sistemas antiguos y Triple-DES
(3DES) sera el estndar vigente. 3DES tena dos caractersticas interesantes que aseguraban su uso
generalizado en los prximos aos. La primera con su longitud en la llave de 168-bits, superaba la
vulnerabilidad de ataques de fuerza bruta en DES. La segunda, el algoritmo de encriptacin subyacente en
3DES es el mismo que en DES. Este algoritmo ha sido sometido a mucho ms escrutinio que cualquier otro
algoritmo de encriptacin durante un gran periodo de tiempo, y no existe un ataque criptoanaltico efectivo
contra el algoritmo, ms que ataques de fuerza bruta. En consecuencia, existe un alto nivel de confianza que
3DES es muy resistente al criptoanlisis. Si la seguridad fuera la nica consideracin, entonces 3DES sera
una eleccin apropiada para un algoritmo criptogrfico estandarizado para las dcadas venideras.
Sin embargo la principal desventaja de 3DES es que el algoritmo es relativamente lento en software. El DES
original fue diseado a mediados de los aos 70s para una implementacin en hardware, y no produca un
cdigo en software eficiente. 3DES, el cual posee tres veces ms rondas que DES es correspondientemente
ms lento. Una desventaja secundaria es que ambos DES y 3DES utilizan un tamao de bloque de 64-bits. Por
razones de seguridad y eficiencia, un tamao de bloque ms grande es mejor. Debido a estas desventajas,
3DES no fue un candidato razonable para su uso a largo plazo. Como reemplazo, NIST en 1997 lanz una
convocatoria para proponer un nuevo Algoritmo de Encriptacin Avanzada AES por sus siglas en ingls, el
cual deba tener una fuerza en seguridad igual o mayor que 3DES y una eficiencia significativamente
mejorada. Adems de estos requerimientos generales, NIST especific que AES deba ser un cifrado a bloques
simtrico, con el tamao del bloque de 128-bits y tener soporte para tamaos de llave de 128, 192 y 256-bits.
En la primera ronda de evaluacin se aceptaron 15 algoritmos para participar. Una segunda ronda redujo el
campo a 5 algoritmos. NIST complet su proceso de evaluacin y public un estndar final (FIPS PUB 197)
en noviembre de 2001. NIST seleccion a Rijndael como el nuevo algoritmo AES. Los dos investigadores que
desarrollaron y presentaron Rijndael para AES son los criptgrafos de Blgica: Dr. Joan Daemen y Dr.
Vincent Rijmen. En ltima instancia AES intenta reemplazar a 3DES, pero este proceso todava tomar
algunos aos. NIST anticipa que 3DES se mantendr como un algoritmo aprobado (para uso del gobierno de
USA) en un futuro previsible.

Figura 9. Dr. Vincent Rijmen y Dr. Joan Daemen, creadores del algoritmo Rijndael, que fue adoptado como AES.

10

CaptuloI

1.6.1

MarcoHistrico

Evaluacin de AES

Vale la pena examinar el criterio utilizado por NIST para evaluar a los candidatos potenciales. Existieron
tres categoras para el criterio de seleccin:
Seguridad: se refiere al esfuerzo requerido para criptoanalizar un algoritmo. El nfasis en la
evaluacin fue en la practicidad del ataque. Debido a que el tamao mnimo para la llave en
AES es de 128-bits, los ataques de fuerza bruta con tecnologa actual y prevista no necesitan ser
considerados.
Costo: NIST intent en AES ser prctico en un amplio rango de aplicaciones. Por lo tanto AES
deba de poseer una alta eficiencia computacional, para as poder ser usado en aplicaciones de
alta velocidad, y en conexiones de banda ancha.
Caractersticas e implementacin del algoritmo: Esta categora incluye una variedad de
consideraciones, como flexibilidad, e idoneidad para una gran variedad de implementaciones en
software y en hardware, lo que hara un anlisis de seguridad ms sencillo.
Utilizando estos criterios, el campo principal de 21 algoritmos candidatos a AES se redujo primero a 15
candidatos y posteriormente a 5. Al mismo tiempo en la evaluacin final como se indic en (NECH00)
de FIPS, los criterios utilizados fueron los siguientes:
Seguridad general: para evaluar la seguridad general, NIST lo deleg en el anlisis de
seguridad pblica, dirigido por la comunidad criptogrfica. Durante el curso de tres aos del
proceso de evaluacin, un gran nmero de criptgrafos publicaron sus anlisis de las fortalezas
y debilidades de los distintos candidatos. Existi un nfasis particular en analizar a los
candidatos con respecto a ataques conocidos, como criptoanlisis diferencial y particular. Sin
embargo, comparado a los anlisis de DES, la carga de tiempo y el nmero de criptgrafos
dedicados a analizar Rijndael fueron eventualmente limitados. Ahora que se ha elegido un solo
cifrado AES, se puede esperar a ver un anlisis de seguridad mucho ms extenso por parte de la
comunidad criptogrfica
Implementaciones en Software: las principales preocupaciones en esta categora fueron
velocidad de ejecucin, desempeo en distintas plataformas, y velocidad en funcin de la
variacin de la llave.
Ambientes con espacio restringido: en algunas aplicaciones, como en smart-cards, reas
relativamente pequeas de memoria RAM y/o memoria ROM, representacin de objetos de
datos como S-boxes las cuales pueden almacenarse en memoria ROM RAM, dependiendo si
existe precmputo si se utilizan representaciones Booleanas y almacenamiento de la subllave.

11

CaptuloI

MarcoHistrico

Implementaciones en Hardware: como en software, implementaciones en hardware pueden


ser optimizadas para tamao velocidad. Sin embargo, en caso de hardware, el tamao se
traduce mucho ms directamente en costo que es comnmente el mismo caso para
implementaciones en software. Duplicar el tamao de un programa de encriptacin puede hacer
una pequea diferencia en una computadora de propsito general con mucha memoria, pero
duplicar el rea usada en hardware tpicamente puede doblar el costo de un dispositivo.
Ataques a las implementaciones: el criterio de la seguridad general, discutida en el primer
punto de la lista, se refiere a ataques criptoanalticos que explotan las propiedades matemticas
de los algoritmos. Existe otra clase de ataques que utilizan medidas fsicas de comportamiento
durante la ejecucin del algoritmo para reunir informacin acerca de cantidades como por
ejemplo la llave. Dichos ataques explotan una combinacin de caractersticas intrnsecas al
algoritmo y caractersticas dependientes de la implementacin. Ejemplos de estos ataques son
los ataques basados en tiempo y ataques basados en consumo de potencia. La idea bsica
detrs de un anlisis de potencia por ejemplo, es observar que la potencia consumida por una
smart-card en cualquier momento particular durante la operacin criptogrfica est relacionada
a la instruccin que est siendo ejecutada y al dato que est siendo procesado. Por ejemplo, la
multiplicacin consume ms potencia que la suma, y la escritura de 1s consume ms potencia
que escribir 0s.
Cifrado vs Descifrado: este criterio trata con varias cuestiones relacionadas tanto al cifrado
como al descifrado. Si los algoritmos de cifrado y descifrado difieren, entonces se necesitar
espacio extra para el descifrado, Tambin aunque los dos algoritmos sean el mismo no, puede
existir diferencias de tiempo entre cifrado y descifrado.

12

Captulo II. MARCO TERICO


2.1

Notacin y Convenciones

Las entradas y salidas para el algoritmo AES consisten, cada una de ellas en secuencias de 128 bits. Estas
secuencias son referidas como bloques y el nmero de bits que contiene estos bloques son referidos como la
longitud del bloque.
La llave de cifrado para el algoritmo AES es una secuencia de 128, 192 o 256 bits. No se permiten otros
tamaos para la entrada, salida y llave de cifrado en este estndar.
Los bits dentro de tales secuencias se numeran empezando en cero, y terminando en uno menos la longitud de
la secuencia de bits. El nmero i adjunto a cada bit, es conocido como su ndice y se encuentra dentro de los
rangos 0 i < 128 , 0 i < 192 , 0 i < 256 que dependen del tamao del bloque y el tamao de la llave.

2.1.1

Byte

Secuencia de ocho bits tratada como una entidad simple y unidad bsica de procesamiento en el
algoritmo AES. Los bits que pertenecen a la entrada, salida y Llave de cifrado son procesados como
arreglos de bytes que se forman dividiendo estas secuencias en grupos de ocho bits contiguos que
forman arreglos de bytes. Para la entrada, salida llave de cifrado (denotada por a) los bytes que
resulten del arreglo son referenciados usando una de las dos formas, an a [ n ] , donde n se encuentra en
alguno de los rangos siguientes:
Tamao de la llave = 128 bits, 0 n < 16 ,

Tamao del bloque = 128 bits, 0 n < 16 ;

Tamao de la llave = 192 bits, 0 n < 24 ,


Tamao de la llave = 256 bits, 0 n < 32 .
Todos los valores de los bytes en el algoritmo AES se presentan como la concatenacin de sus valores de
bits individuales (0 1) entre corchetes en el siguiente orden {b7, b6, b5, b4, b3, b2, b1, b0}. Estos
bytes se interpretarn como elementos de un campo finito utilizando la siguiente representacin
polinomial:
7

b7 x 7 + b6 x 6 + b5 x 5 + b4 x 4 + b3 x 3 + b2 x 2 + b1 x1 + b0 x 0 = bi x i .
i =0

13

Ca
aptuloII

M
MarcoTer
rico

Poor ejemplo, {0
01100011} ideentifica al elem
mento especfiico de un cam
mpo finito: x6 + x5 + x + 1 . Es
coonveniente tam
mbin denotar a los valores deel byte utilizanndo una notacin hexadecimaal con dos gruppos
dee cuatro bits (cada grupo es conocido
c
comoo nibble) que see expresan com
mo un caracterr simple, como en
la figura siguiente:

Figura 100. Representacin Hexadecimal


H
de loos patrones de nibbles.

o {01100011} se puede repreesentar como {63},


{
donde ell caracter que denota los cuaatro
Ass el elemento
bitts ms significcativos del arreeglo se encuenntra a la izquieerda. Algunas operaciones que
q se realizan en
caampos finitos requieren un biit adicional (b8) a la izquierdaa de un byte dee 8 bits. Dondee este bit extraa se
enncuentre presen
nte, aparecer como un {01} e inmediataamente despuss el byte de 8--bits; por ejempplo
unna secuencia dee 9-bits se reprresentar comoo un {01} {1b}.

2.1.2

Arreg
glos de Bytees

Loos arreglos de bytes


b
se repressentarn de la siguiente
s
formaa: a0 a1a2 ...a15
Loos bytes y el orden de bits dentro de loss bytes se deriivan de la seccuencia de enttrada de 128-bbits

enntrada0entrada
a1entrada2 ...entrrada126entradaa127 , de la siguieente manera:

a0 = {entrada0 , enttrada1 ,..., entra


ada7 } ;
ada15 } ;
a1 = {entrada8 , enttrada7 ,..., entra
a15 = {entrada120 , entrada
e
e
121 ,..., entrada
127 } .
Ell patrn puedee extenderse paara secuencias mayores (porr ejemplo: paraa llaves de 1922 y 256-bits), as
quue en general see tiene: an = {entrada
e
ada8 +1 ,..., entradda8
8 , entra
n

n +7

}.

Enn la tabla siguiente se muestraa como se ordeenan los ndicees para bytes y bits:

Figura 11. ndices

para Bytess y bits.

14

Ca
aptuloII

2.1.3

M
MarcoTer
rico

El Sttate

Innternamente, laas operaciones del algoritmo AES se llevann a cabo en un arreglo bidimeensional de byytes
llaamado State. El
E State consistte en cuatro fillas de bytes cadda una conteniiendo Nb bytess, donde Nb ess el
tam
mao del bloqu
ue dividido enttre 32.
Enn el arreglo Sta
ate (denotado por
p el smboloo S), cada byte individual posee dos ndices, con su nmeero
dee fila r dentro del
d rango 0 r < 4, y su nm
mero de columnna c en el rangoo 0 c < Nb.
u byte individuual del State seer referido com
mo Sr,c s[r,c].. Para este estndar, Nb = 4, por
p
Essto permite a un
ejeemplo, 0 c < 4.
All principio de los bloques dee cifrado y descifrado el arreglo de bytes de
d la entrada inn0, in1,,in155 es
coopiado al arregllo State como se muestra en la
l figura siguieente:

Fiigura 12. Entradass y salidas para ell arreglo State.

d
se dirigen
d
entonces, al arreglo State,
S
despus su valor finall es
Laas operacioness de cifrado y descifrado
coopiado a la salid
da teniendo el arreglo de bytees out0, out1,
,out15.
p
del cifrado o descifrrado, el arregloo de entrada, in, es copiado al
a arreglo State de
Poor lo tanto al principio
accuerdo al esqueema: s[r, c] = in[r + 4c] for 0 r < 4 and 0 c < Nb, y al final del cifr
frado descifraado
el State se copia al arreglo salidda de la siguiennte manera: ouut [r + 4c] = s [r, c] for 0 r < 4 and 0 c < Nb.
Nb

2.1.4

El Sttate como un
n arreglo dee columnas

Loos cuatro bytess de cada colum


mna del arregloo State, formann palabras de 32
3 bits, donde el nmero de fila
f
r provee un nd
dice para los cuatro bytes dentro de cadda palabra. Ell State puede por lo tanto ser

15

CaptuloII

MarcoTerico

interpretado como un arreglo unidimensional de palabras de 32 bits (columnas), w0...w3, en donde el


nmero de columna suministra un ndice dentro de este arreglo.
Entonces, para el ejemplo de la figura anterior, el State puede ser considerado tambin, como un arreglo
de cuatro palabras de la manera siguiente:
w0 = s0,0 s1,0 s2,0 s3,0

w2 = s0,2 s1,2 s2,2 s3,2

w1 = s0,1 s1,1 s2,1 s3,1

w3 = s0,3 s1,3 s2,3 s3,3

2.2 Introduccin a la Matemtica


Todos los bytes en el algoritmo AES se interpretan como elementos de campos finitos utilizando la notacin
descrita anteriormente. Los elementos en un campo finito pueden ser multiplicados y sumados, pero estas
operaciones son diferentes de las que se usan para los nmeros comunes. En las siguientes subsecciones se
introduce a los conceptos matemticos bsicos necesarios para el desarrollo del tema de investigacin.

2.2.1

Grupos, Anillos y Campos

Grupos, anillos y campos son los elementos fundamentales de una rama de las matemticas conocida
como lgebra abstracta lgebra moderna. El lgebra abstracta, se interesa con conjuntos en los cuales
sus elementos puedan ser operables algebricamente, esto es, que puedan ser combinados de diferentes
maneras para obtener un tercer elemento del conjunto al que pertenecen. Estas operaciones se
encuentran sujetas a reglas especficas, las cuales definen la naturaleza del conjunto. Por convencin, la
notacin para las dos clases principales de operaciones en el conjunto de elementos es usualmente la
misma para la suma y multiplicacin de los nmeros ordinarios. Sin embargo, es importante notar que en
lgebra abstracta no se est limitado a las operaciones aritmticas ordinarias

2.2.2

Grupos

Un grupo G, algunas veces denotado por {G , i} , es un conjunto de elementos con una operacin binaria
expresada por (elemento genrico que puede referirse a suma, multiplicacin o alguna otra operacin
matemtica), que asocia a cada par ordenado (a, b) de elementos en G un elemento (a b) en G, y que
obedece a los axiomas:
(A1)

Cerradura: Si a y b pertenecen a G, entonces a b se encuentra tambin en G.

(A2)

Asociativa: a (b c) = (a b) c para todo a, b, c en G.

(A3)

Elemento identidad: Existe un elemento e en G tal que a e = e a = a para todo a en G.

(A4)

Elemento inverso: Para cada a en G existe un elemento a en G tal que a a = a a = e.

16

CaptuloII

MarcoTerico

Si un grupo tiene un nmero finito de elementos, se refiere a l como un grupo finito, y el orden del
grupo es igual al nmero de elementos en el grupo. De otra forma, el grupo es un grupo infinito.
Un grupo es llamado abeliano si satisface la siguiente condicin adicional:
(A5)

2.2.3

Conmutativa: a b = b a para todo a, b en G.

Anillos

Un anillo R, algunas veces expresado por { R , + , } , es un conjunto de elementos con dos operaciones
binarias, llamadas suma y multiplicacin, en las cuales para toda a, b, y c en R se cumplen los siguientes
axiomas:
(A1-A5)

R es un grupo abeliano con respecto a la suma: R satisface los axiomas A1 al A5. Para
este caso de un grupo aditivo, se le conoce al elemento identidad como 0 y el inverso
de a como -a.

(M1) Cerradura para la multiplicacin: Si a y b pertenecen a R, entonces ab se encuentra


tambin en R.
(M2) Asociatividad para la multiplicacin: a(bc) = (ab)c para todo a, b y c en R.
(M3) Leyes distributivas: a(b + c) = ab + ac para todo a, b, y c en R.
(a + b)c = ac + bc para todo a, b, y c en R.
(M4) Conmutatividad para la multiplicacin: ab = ba para todo a, y b en R.
(M5) Identidad multiplicativa: Existe un elemento 1 en R el cual a1 = a para todo a en R.
(M6) No divisor 0: Si a y b estn en R y ab = 0, entonces a = 0 b = 0.
En esencia un anillo es un conjunto en el cual es posible sumar, restar [a b = a + (-b)] y multiplicar sin
dejar al conjunto.

2.2.4

Campos

Un campo F, algunas veces denotado por { F , + , } , es un conjunto de elementos con dos operaciones
binarias llamadas suma y multiplicacin en las cuales para toda a, b y c en F, los siguientes axiomas se
cumplen:
(A1-M6)

F es un dominio entero, esto es que F satisface los axiomas A1 al A5 y M1 al M6.

(M7) Inverso multiplicativo: Para cada a en F, excepto 0, existe un elemento a-1 en F tal que
aa-1 = (a-1)a = 1.
En esencia un campo es un conjunto en el cual es posible sumar, restar, multiplicar y dividir sin dejar al
conjunto. La divisin es definida con la regla siguiente: a/b = a(b-1).

17

CaptuloII
2.2.5

MarcoTerico

Campos finitos de la forma GF(p)

Los campos infinitos no son de inters particular en el contexto de la criptografa, Sin embargo, los
campos finitos juegan un rol crucial en los algoritmos criptogrficos. Puede mostrarse que el orden de un
campo finito (nmero de elementos del campo) debe ser una potencia de un nmero primo pn, donde n
es un entero positivo, sabiendo que un nmero primo es un entero el cual sus nicos factores positivos
enteros son el uno y l mismo.
El campo finito de orden pn es generalmente escrito como GF(pn); GF para denotar un campo de Galois,
en honor del primer matemtico que estudi a los campos finitos. Existen dos casos especiales que son
interesantes para propsitos criptogrficos: con n = 1 se considera el campo finito GF(p), este campo
finito tiene una estructura diferente que otros campos finitos con n > 1. El otro caso relevante es para el
caso de los campos finitos de la forma GF(2n).
Entonces dado que todo cuerpo de caracterstica 0, contiene a los racionales y es por lo tanto infinito,
todos los campos finitos tienen caracterstica prima, y por lo tanto su tamao es de la forma pn, para p
primo generado por el elemento 1. No es en general cierto sin embargo se puede decir que todo cuerpo
de caracterstica prima es finito. Para un primo p los enteros mdulo p forman un cuerpo de p elementos,
denotado por Z/pZ. Si q = pn es una potencia de un primo, existe (salvo isomorfismo) exactamente un
campo con q elementos, denotado por Fq GF(q). Se puede construir de la siguiente manera: encontrar
un polinomio irreducible f(x) de grado n con coeficientes en Fp, y definir F = Fp[X] / <f(t)>, donde
Fp[X] denota el anillo de todos los polinomios con coeficientes en Fp, <f(X)> denota el ideal generado
por f(X), y la barra diagonal indica el anillo cociente (definido de forma similar al grupo cociente). El
polinomio f(X) se puede hallar factorizando Xq X sobre Fp. El campo Fq contiene una copia de Fp como
subcampo. No existen otros campos finitos.

2.2.6

Suma

La suma de dos elementos en un campo finito se logra sumando los coeficientes de las potencias
correspondientes en los polinomios de los dos elementos. La suma se lleva a cabo con la operacin
lgica (expresada por ), por ejemplo para el modulo 2 tenemos que 11 = 0, 10 = 1, y 00 = 0.
En consecuencia, la substraccin de polinomios es idntica a la suma de polinomios. Alternativamente,
la suma de elementos de campos finitos puede ser descrita como el modulo 2 de los correspondientes
bits de un byte. Para dos bytes

{c7 c6 c5 c4 c3c2 c1c0 } , donde cada c

{a7 a6 a5a4 a3a2a1a0 }

{b7b6b5b4b3b2b1b0 } ,

la suma es

= ai bi . Por ejemplo c7 = a 7 b7 , c6 = a6 b6, ,, c0 = a0 b0

18

CaptuloII

MarcoTerico

Por ejemplo, las expresiones siguientes son equivalentes una con otra:

Notacin polinomial:

( x6 + x4 + x2 + x + 1) + ( x7 + x +1) = x7 + x6 + x4 + x2 .

Notacin binaria: {01010111} {10000011} = {11010100}.


Notacin hexadecimal: {57} {83} = {d4}.

2.2.7

Multiplicacin

En la representacin polinomial, una multiplicacin en GF(28) (representado por ) corresponde a la


multiplicacin de polinomios modulo un polinomio irreducible de grado 8. Un polinomio es irreducible
si sus nicos divisores son el uno y el mismo.
Para el algoritmo AES, este polinomio irreducible es m( x) = x8 + x4 + x3 + x +1 , {01}{1b} en
notacin hexadecimal.
Por ejemplo {57} {83} = {c1}, porque:

(x

+ x 4 + x 2 + x + 1)( x 7 + x + 1) = x13 + x11 + x 9 + x8 + x 7 + x 7 + x 5 + x 3 + x 2 + x + x 6 + x 4 + x 2 + x + 1


= x13 + x11 + x 9 + x 8 + x 6 + x 5 + x 4 + x 3 + 1

Y:

x13 + x11 + x 9 + x 8 + x 6 + x 5 + x 4 + x 3 + 1 mod ( x8 + x 4 + x 3 + x + 1) = x 7 + x 6 + 1


La reduccin modular por el polinomio m(x) asegura que el resultado ser un polinomio binario de grado
menor que 8, y as se puede representar como un byte. A diferencia de la suma, no existe una operacin
lgica simple a nivel de bytes que corresponda a la multiplicacin.
La multiplicacin definida es asociativa, y el elemento {01} es la identidad multiplicativa. Para
cualquier polinomio b(x) diferente de cero y de grado menor a 8, el inverso multiplicativo de b(x),
representado por b 1 ( x ) , puede ser encontrado de la manera siguiente: usando el algoritmo Euclidiano

extendido, se computan dos polinomios a(x) y c(x) tales b(x) a(x) + m(x) c(x) = 1.
Adems, a(x) b(x) mod m(x) = 1, lo que significa que b-1(x) = a(x) mod m(x). Generalizando, para
cualquier a(x), b(x) and c(x) en el campo, se dice que: a(x) (b(x) + c(x)) = a(x) b(x) + a(x) c(x).

19

MarcoTerico

CaptuloII

Entonces se dice que el arreglo de 256 posibles valores del byte, con la operacin lgica XOR usada en
la suma y la multiplicacin acabada de definir, tiene la estructura de un campo finito GF(28).

2.2.8

Multiplicacin por x

Al multiplicar el polinomio modelo: b7 x 7 + b6 x 6 + b5 x 5 + b4 x 4 + b3 x 3 + b2 x 2 + b1 x1 + b0 x =

b x
i =0

con el polinomio x resulta en: b8 x + b7 x + b6 x + b5 x + b4 x + b3 x + b2 x + b1 x + b0 x .


8

El resultado x b(x) se obtiene al reducir el resultado obtenido modulo m(x), como ya se defini
anteriormente. Si b7 = 0, el resultado se encuentra entonces en una forma reducida. Si b7 = 1, la
reduccin se acompaa substrayendo (XOR) el polinomio m(x). Entonces podemos decir que la
multiplicacin por x, (por ejemplo {00000010} {02}) se puede implementar a nivel de bytes como
un corrimiento a la izquierda y una subsiguiente operacin lgica XOR con {1b}. Esta operacin en
bytes se denota como xtime(). La multiplicacin de potencias mayores a x puede ser implementada al
repetir la operacin xtime().
Para agregar ms recursos, la multiplicacin por cualquier constante puede tambin ser implementada,
por ejemplo:
{57} {13} = {fe}, debido a que:
{57} {02} = xtime({57}) = {ae}
{57} {04} = xtime({ae}) = {47}
{57} {08} = xtime({47}) = {8e}
{57} {10} = xtime({8e}) = {07},
Adems:
{57} {13} = {57} ({01} {02} {10})
= {57} {ae} {07}
= {fe}.

20

CaptuloII
2.2.9

MarcoTerico

Polinomios con coeficientes en GF(28)

Los polinomios de cuatro trminos, que poseen coeficientes que son elementos de campos finitos,
pueden ser definidos de la siguiente manera: a( x) = a3 x3 + a2 x2 + a1 x + a0
Dichos polinomios sern expresados como una palabra de la forma: [ a0 , a1 , a2 , a3 ] .
Se debe notar que los polinomios para estas definiciones se comportan de una manera diferente que los
elementos de polinomios que satisfacen la definicin de campo finito. An cuando ambos tipos de
polinomios utilizan la misma x indeterminada. Los coeficientes para estas definiciones son ellos mismos
elementos de un campo finito, por ejemplo: bytes, en lugar de bits; adems la multiplicacin de
polinomios de cuatro trminos, utiliza un polinomio diferente de reduccin, definido a continuacin. As
que debe de existir siempre una distincin que nos indique en qu contexto se est trabajando.
Para ilustrar la suma y multiplicacin de estos campos definamos un segundo polinomio de cuatro
trminos: b( x) = b3 x3 + b2 x2 + b1 x + b0 .
La suma se lleva a cabo al sumar las potencias similares de los coeficientes del campo finito. Esta suma
corresponde a una operacin lgica XOR entre los bytes correspondientes en cada una de las palabras,
expresado de otra manera la ejecucin de la operacin XOR de los valores completos de la palabra.
As usando los polinomios de cuatro trminos anteriores tenemos:

a( x) + b( x) = (a3 b3 ) x3 + (a2 b2 ) x 2 + (a1 b1 ) x1 + (a0 b0 ) .


La multiplicacin puede ser realizada en dos pasos. En el primer paso, el producto de polinomios
c(x) = a(x)b(x), es expandido algebraicamente y las potencias similares se juntan para dar

c( x) = c6 x6 + c5 x5 + c4 x4 + c3 x3 + c2 x2 + c1 x1 + c0 , donde:

c0 = a0 ib0

c4 = a3 ib1 a2 ib2 a1 ib3

c1 = a1 ib0 a0 ib1

c5 = a3 ib2 a1 ib3

c2 = a2 ib0 a1 ib1 a0 ib2

c6 = a3 ib3

c3 = a3 ib0 a2 ib1 a1 ib2 a0 ib3


El resultado, c(x) no representa una palabra de cuatro bytes. Por lo tanto, el segundo paso de la
multiplicacin es reducir c(x) modulo un polinomio de 4.
El resultado puede ser reducido a un polinomio de grado menor a 4.

21

CaptuloII

Para el algoritmo AES, el polinomio que cumple estas condiciones es

MarcoTerico

x4 + 1, as que:

x i mod ( x 4 + 1) = x i mod 4 .
El producto modular de a(x) y b(x), denotado como a(x) b(x), est dado por el polinomio de cuatro
trminos d(x), definido como: d ( x ) = d 3 x 3 + d 2 x 2 + d 1 x + d 0 por:

d 0 = ( a0 ib0 ) ( a3 ib1 ) ( a2 ib2 ) ( a1 ib3 )


d1 = ( a1 ib0 ) ( a0 ib1 ) ( a3 ib2 ) ( a2 ib3 )
d 2 = ( a2 ib0 ) ( a1 ib1 ) ( a0 ib2 ) ( a3 ib3 )
d3 = ( a3 ib0 ) ( a2 ib1 ) ( a1 ib2 ) ( a0 ib3 )
Cuando a(x) es un polinomio fijo, el polinomio de cuatro trminos d(x), se puede reescribir como la
matriz:

d 0 a0
d a
1 = 1
d 2 a2

d3 a3

a3

a2

a0
a1

a3
a0

a2

a1

a1 b0
a2 b1
a3 b2

a0 b3

Como x 4 + 1 no es un polinomio irreducible sobre GF(28), la multiplicacin por un polinomio fijo de


cuatro trminos no es necesariamente invertible. Sin embargo el algoritmo AES especifica un polinomio
fijo de cuatro trminos que posee una inversa que es:
a(x) = {03}x3 + {01}x2 + {01}x + {02}
a-1(x) = {0b} x3 + {0d} x2+ {09}x + {0e}
Otro polinomio usado en el algoritmo AES tiene a0= a1 = a 2= {00} y a3 = {01}, el cual es el
polinomio x3. Al revisar la matriz propuesta anteriormente, se muestra que su efecto es formar la palabra
de salida al rotar los bytes de la palabra de entrada. Esto significa que [b0, b1, b2, b3] se transforma en [b1,
b2, b3, b0].

22

Ca
aptuloII

2.3

M
MarcoTer
rico

Descripcin del Alggoritmo AE


ES

El flujoo de datos en ell algoritmo AE


ES consta de la iteracin de las 4 etapas siguuientes:

2.3.1

Etap
pa SubBytes

Laa etapa de tra


ansformacin
n de byte susstituto conocidda como SubB
Bytes, es una simple tabla de
bsqueda. AES define
d
una mattriz de 16x16 elementos
e
conn diferentes vallores de bytes, llamada S-boxx y
quue contiene unaa permutacin de todos los 256 valores possibles de 8-bits. Cada byte inddividual del Sttate
ess mapeado a un
n nuevo byte dee la siguiente manera:
m
el nibbble izquierdo del
d byte se usa como el valorr de
la fila, y el nibble derecho com
mo el valor de la columna. Estos
E
valores de columnas y filas
f
sirven com
mo
box para selecccionar un valor de salida nicco de 8-bits. Poor ejemplo el valor
v
hexadecim
mal
ndices en la S-b
{995}, en la etapaa SubBytes hacce referencia a la fila 9, coluumna 5 de la S-box,
S
la cual contendr
c
el vaalor
{22A}. En conseccuencia, el valoor {95} es mappeado al valor {2A}

Figura 13. En la fase SubbBytes, cada Byte del State es reempplazado segn unaa tabla de bsquedda.

Laa S-box est diseada


d
para ser resistente a ataques cripptoanalticos coonocidos. Especficamente, los
diseadores de Rijndael
R
buscarron un diseo que tuviera unna baja correlaccin entre bits de entrada y bits
b
l salida no puuede ser descritta como una fuuncin matemtica simple dee la
dee salida, y la prropiedad que la
enntrada.

23

Ca
aptuloII

2.3.2

M
MarcoTer
rico

Etap
pa ShiftRowss

Laa etapa de tra


ansformacin de cambio de
d filas, llamaada ShiftRowss, es representtada en la figuura
sigguiente:

Figura 14. En
E la fase ShiftRoows, cclicamente se
s cambian las filaas en el State.

Laa primera fila se


s mantiene sinn alteraciones. Para la segundda fila, se llevaa a cabo un corrrimiento circuular
a la izquierda de 1-byte. Paara la terceraa fila se ejecuuta un corrim
miento circularr de 2-bytes. Y
suucesivamente en la cuarta filaa del State se lleeva a cabo un corrimiento
c
cirrcula de 3-bytees.
Laa transformaci
n ShiftRows es
e ms substanccial de lo que aparenta
a
a prim
mera vista. Estoo es debido a que
q
tannto el State, co
omo el cifrado de entrada y de
d salida son trratados como un
u arreglo coluumnas de 4-byttes.
Poor lo tanto, en
n la encriptaciin los primerros 4-bytes del texto sin ciffrar son copiaddos a la prim
mera
coolumna del State, y as sucesiivamente. Entoonces, la ronda de la llave serr aplicada al State
S
columna por
p
coolumna. As, un
u cambio de fila
f mueve un byte individuual desde una columna
c
a otrra, lo cual es una
u
distancia lineal de
d mltiplos de
d 4-bytes. Tam
mbin hay quee notar que la transformacinn asegura que los
4--bytes de una columna son exxtendidos haciaa las dems collumnas en el Sttate.

2.3.3

Etap
pa MixColum
mns

Laa transforma
acin de mezzclado de columnas, llam
mada MixColum
mns opera enn cada colum
mna
individualmente. Cada byte dee una columna es mapeado a un nuevo vallor que es una funcin de toddos
c
los cuatro bytes que se encuenttran en dicha columna.

24

CaptuloII

MarcoTerico

La transformacin puede ser definida por la siguiente multiplicacin entre una matriz definida y el State:

02
01

01

03

03
02
01
01

01
03
02
01

01 s0,0

01 s1,0
03 s2,0

02 s3,0

s0,1
s1,1
s2,1
s3,1

s0,2
s1,2
s2,2
s3,2

'
s0,3 s0,0
'
s1,3 s1,0
= '
s2,3 s2,0
'
s3,3 s3,0

'
s0,1
'
s1,1
'
s2,1
'
s3,1

'
s0,2
'
s1,2
'
s2,2
'
s3,2

'

s0,3
'
s1,3
'
s2,3
'
s3,3

Estos coeficientes se basan en un cdigo lineal con una distancia mxima entre palabras de cdigo, lo
cual asegura una buena carga en la mezcla de bytes en cada columna.
Cada elemento en la matriz producto, es la suma de productos de elementos de una fila y una columna.
En este caso, cada suma y multiplicacin son llevadas a cabo en GF(28). La transformacin MixColumns
en una sola columna j(0 j 3) del State puede expresarse como:

s0,' j = ( 2 i s0, j ) ( 3 i s1, j ) s2, j s3, j


s1,' j = s0,' j ( 2 i s1, j ) ( 3 i s2, j ) s3, j
s2,' j = s0,' j s1, j ( 2 i s2, j ) ( 3 i s3, j )
s3,' j = ( 3 i s0, j ) s1,' j s2, j ( 2 i s3, j )
El siguiente es un ejemplo de la transformacin MixColumns:

87
6E

46

A6

F2
4C
E7
8C

4D
90
4A
D8

97
47
37
EC

94
C3

95
ED

40
D4
E4
A5

A3
70
3A
A6

4C
9 F
42

BC

Verificando la primera columna de la matriz resultante se puede notar que para GF(28) la suma se lleva
a cabo realizando una simple operacin XOR. Para la multiplicacin particularmente para un valor por
x, por ejemplo [02] puede implementarse con un registro de corrimiento de 1-bit a la izquierda,
seguido por una operacin XOR con (0001 1011) si el bit ms significativo del valor original es 1.

25

CaptuloII

MarcoTerico

Para verificar la primera columna del ejemplo anterior, se tiene que:

{ A6}
= {47}
({02} {87}) ({03} {6 E}) {46}
({02} {6 E} ) ({03} {46} ) { A6}
= {37}
{87}
{6 E}
({02} {46} ) ({03} { A6} ) = {94}
{87}
{46}
({02} { A6} ) = { ED}
({03} {87}) {6 E}

Para la primera ecuacin se tiene la operacin [02] [87] = (0000 1110)


0101); [03] [6E] = [6E]

(0001

1011) = (0001

([02] [6E]) = (0110 1110) (1101 1100) = (1011 0010). Entonces:

{02} {87} = 0001 0101


{03} {6 E} = 1011 0010
= 0100 0110
{46}
= 1010 0110
{a6}
0100 0111 = {47}
La transformacin MixColumns combinada con la transformacin ShiftRows asegura que despus de
algunas rondas, todos los bits de salida dependan de todos los bits de entrada brindando difusin al
proceso. Adems, la eleccin de coeficientes en MixColumns: {01}, {02}, {03}, fueron elegidos
substancialmente por razones de implementacin. La multiplicacin de estos coeficientes cuando se
implementa de manera eficiente involucra a lo ms un corrimiento y una operacin XOR.
Los coeficientes para InvMixColumns que es el proceso inverso para descifrar AES son ms difciles de
implementar. Sin embargo, la encriptacin fue considerada ms importante durante el diseo de Rijndael
y AES, que la desencriptacin por dos razones:
1.

Para modelos de cifrado CFB (cipher block feedback) y OFB (output feedback mode), solo se
utiliza encriptacin.

2.

Como cualquier bloque de cifrado, AES puede ser utilizado para construir un cdigo de
autenticacin de mensaje MAC, en el cual solamente se requiere encriptacin.

26

Ca
aptuloII

M
MarcoTer
rico

Figura 15
5. En la etapa MixxColumns, cada coolumna del State ess multiplicada porr un polinomio connstante c(x).

2.3.4

Etap
pa AddRoundKey

Enn la transform
macin adicin
n de llave de ronda, llamadda AddRoundK
Key, los 128-bbits del State son
s
prrocesados mateemticamente bit a bit mediiante una operracin XOR con
c los 128-biits de la llave de
roonda. La operaacin puede serr vista como una
u operacin entre columnaas, tomando loos 4-bytes de una
u
coolumna del Sta
ate y una palabbra de la llave de ronda, y taambin puede ser
s vista comoo una operacinn a
nivvel de bytes.
u ejemplo de AddRoundKey:
A
:
Ell siguiente es un

47
37

94

ED

40
D4
E4
A5

A3
70
3A
A6

4C AC
9 F 77

4 66
42

B F3
BC

19
FA
DC
21

28
D1
29
47

57 EB
E
59

5C 440 2 E
=
00 F 2 38

6 A 1E 84

8B
A1
133
E7

1B
C 3
42

D2

Laa primera matriz es el State y la segunda maatriz es la llavee de ronda.


n AddRoundK
Key se dise taan simple com
mo fue posible, y afecta a cadaa bit del State. La
Laa transformaci
exxpansin de la llave,
l
junto conn la complejidaad de otras etappas en AES, manifiestan
m
seguuridad.

27

Ca
aptuloII

M
MarcoTer
rico

) .
Figura 16. En la ettapa AddRoundKey
ey, cada byte del Sttate se combina coon un byte de la suubclave usando la operacin XOR (

28

Capttulo IIII. DISSEO DEL


D SIISTEMA
A
3.1 Descripci
D
n de la plaataforma de
d desarroollo de Harrdware
El FPG
GA utilizado paara este trabajoo fue un SPART
TAN-3E XC33S500E del fabbricante Xilinx, montado sobbre
una tarjjeta de desarrolllo SPARTAN--3E Starter-K
Kit, del fabricaante Digilent. Dicha tarjeta contiene: puerrtos
Serialess, PS/2, VGA,, SMA; Conveertidores DAC
C (Digital-Anallgico), ADC (Analgico-Diigital); Memorrias
DDR-S
SDRAM; Interfface PHY Etheernet; LCD (liqquid cristal dissplay) de 16 caaracteres por 2 lneas; Switchhes,
Push-buuttons, Encodeer rotatorio, Leds; entre otross perifricos.

F
Figura
17. Tarjetaa de desarrollo SPA
ARTAN-3E.

29

CapttuloIII

DisseodelSisstema

3.2 Descripci
D
n de la plaataforma de
d desarroollo de Soft
ftware
Utilizarr un FPGA del fabricante Xilinx incorporaa varias ventajaas en el flujo dee diseo, ya quue el diseadorr es
provistoo de herramien
ntas muy eficacces para alcanzzar sus objetivoos; algunas de estas
e
herramienntas son:
IISE Founda
ation. Softwarre utilizado para
p
crear y compilar cddigo HDL. Siintetizar, simuular
i
implementar,
enrutar
e
y aconddicionar diseoos. Adems de descargar el diiseo para proggramar al FPG
GA.
M
Microcontrola
ador PicoBlazze. Procesadoor en software que se implem
menta en FPGA
As de Xilinx. De
8
8-bits
basado en
e una arquitecctura RISC y puudiendo alcanzzar velocidadess de hasta 100--MIPS. Ideal para
t
tareas
de contrrol en disposittivos perifricoos. Esta herram
mienta es fundaamental en estte trabajo, ya que
q
l controladorres para los disspositivos I/O, y el algoritmoo de encriptacin AES se desaarrollaron en baase
los
a este.
S
System
Geneerator. Softw
ware que perm
mite crear y verificar diseos para FPG
GAs de Xilinnx.
F
Funciona
en co
onjunto con Sim
mulink de MaatLab, permittiendo trabajar con bloques enn un alto nivell de
a
abstraccin.
Se pueden desaarrollar ncleoos DSP para su
s implementaacin en un FPGA,
F
generanndo
a
automticamen
nte el cdigo enn VHDL a parttir de su modellado en Simulinnk.

3.3 Diagrama
D
conceptuaal del sisteema
El diseo del sistema se realiz en funcin
fu
del siguuiente diagram
ma conceptual:

Ingreso de
d datos

Control del puerto


serial

Conntrol del puerto


serial

Salida de dattos

Conntrol del LCD

Salida de dattos

Cifr
frado de Datos

Ingreso de
d datos

Control del puerto


PS/2

Figura 18. Diagrrama conceptual del


d sistema.

30

CaptuloIII

DiseodelSistema

Como se observa en la figura anterior, el sistema criptogrfico es capaz de ingresar los datos a encriptar de
dos maneras distintas: va comunicacin serial y el puerto DB-9 de la tarjeta de desarrollo y alternativamente
utilizando un teclado y el puerto PS/2 de la misma. Para la recuperacin de los datos encriptados se pueden
mostrar en LCD de la tarjeta de desarrollo y tambin pueden recuperarse mediante comunicacin serial y el
puerto DB-9. Para la eleccin de la gestin de datos el sistema emplea los switches y la LCD de la tarjeta de
desarrollo as el usuario puede ingresar los datos a encriptar de la manera que ms le convenga.

3.4 Metodologa
El sistema se encarga de ejecutar 4 tareas principales:
Gestionar el men de eleccin del usuario para el ingreso de datos.
Ingresar los datos al sistema para su encriptacin.
Encriptar los datos utilizando el algoritmo AES-128.
Encargarse de regresar los datos encriptados va serial y desplegarlos en la LCD.

3.5 Por qu utilizar un microcontrolador en un FPGA?


Tanto microcontroladores, como FPGAs pueden implementar exitosamente prcticamente cualquier tipo de
funcin digital lgica. Sin embargo cada uno posee caractersticas nicas en costo, desempeo y facilidad de
uso. Los microcontroladores se encuentran muy bien ubicados en aplicaciones de control, especialmente para
especificaciones altamente cambiantes. Los recursos del FPGA requeridos para implementar un
microcontrolador son relativamente constantes.
La misma lgica del FPGA es re-utilizada repetidamente por las instrucciones del microcontrolador,
conservando recursos. Los requerimientos de la memoria de programa crecen cuando crece la complejidad.
Programar secuencias de control mquinas de estado en cdigo ensamblador es a menudo mucho ms
sencillo que crear estructuras similares en lgica para el FPGA. Los microcontroladores tpicamente se
encuentran limitados en desempeo. Cada instruccin se ejecuta secuencialmente.
Y cuando una aplicacin crece en complejidad, el nmero de instrucciones requeridas para implementarla
tambin crece por lo que el desempeo del sistema decrece invariablemente. En contraste el desempeo en un
FPGA es ms flexible. Por ejemplo, un algoritmo puede ser implementado secuencialmente completamente
en paralelo dependiendo de los requerimientos de desempeo.

31

CaptuloIII

DiseodelSistema

Una implementacin completamente en paralelo es ms rpida pero consume ms recursos en el FPGA.


Un microcontrolador empotrado en un FPGA provee lo mejor de dos mundos. El microcontrolador
implementa funciones complejas no cruciales de control, mientras funciones de Data-path crticas en el
tiempo son mejor implementadas utilizando lgica del FPGA. Por ejemplo, un microcontrolador no puede
responder a eventos ms rpidos que algunos microsegundos. La lgica del FPGA puede responder a
mltiples y simultneos eventos en tan solo algunos nanosegundos. Anteriormente antes de que el
microcontrolador PicoBlaze existiera, si se requera conectar un microcontrolador al FPGA se deba de
hacer externamente a este, limitando la conectividad y afectando el desempeo del sistema.
Utilizar el microcontrolador PicoBlaze para encriptar datos utilizando el algoritmo AES-128 es una opcin
viable, ya que un microcontrolador es una mquina de estados ms o menos compleja dependiendo de su
arquitectura, y esto lo hace una buena solucin para este tipo de algoritmos donde la repeticin de tareas y
secuencias de operaciones son una constante.

3.6 Caractersticas del microcontrolador PicoBlaze


El microcontrolador PicoBlaze es una de las soluciones de Xilinx, para procesamiento embebido, siendo
compacto, y optimizado para las familias Spartan-3 y Virtex-II. Es un microcontrolador RISC de 8-bits
pensado para tareas de control y gestin de dispositivos perifricos externos, pero no por ello deja de ser
efectivo en tareas de procesamiento de datos y algoritmos ms complejos como es el caso de la AES-128.
Este microcontrolador ocupa apenas 96 slices del FPGA. Puede albergar hasta 1024 instrucciones en la
memoria de programa y puede ejecutar desde 44 hasta 100-MIPS dependiendo del dispositivo a utilizar.
Algunas de las caractersticas del microcontrolador son:

Registros de propsito general de 16-bits


Almacenamiento de 1K instrucciones de programa, automticamente cargado durante la
configuracin del FPGA.
ALU de 8-bits con banderas de CARRY y ZERO.
Memoria RAM interna de 64 localidades de 8-bits.
256 direcciones de entrada y 256 direcciones de salida.
Stack automtico de 31 posiciones.
Desempeo altamente predecible, siempre 2 ciclos de reloj por instruccin.
Rpida respuesta a interrupciones, en el peor de los casos 5 ciclos de reloj.

32

CapttuloIII

DisseodelSisstema

Figura 19. Arquittectura del microcoontrolador PicoBllaze.

3
3.6.1

pBllazeIDE, software
s
de desarrollo
d
en
n ensambladdor para PiccoBlaze

D
Despus
de que
q
tanto loss datos a ciffrar como la llave han siido ingresadoos al sistema el
m
microcontrolad
dor PicoBlaze se encarga dee encriptarlos y enviarlos tannto por el puertoo serial como por
p
l LCD de la tarjeta
la
t
de desaarrollo. Para ell programa quee ejecuta el microcontrolado
m
or PicoBlaze, se
u
utiliz
la herraamienta thirdd-party pBlazzeIDE que el desarrollador Mediatronix, ofrece sin coosto
d
desde
su sitio
o web. Dichaa herramienta adems de permitir
p
escribbir y compilaar el cdigo en
e
ensamblador,
permite
p
simular las instruccciones a ejecuutar por el miccrocontroladorr PicoBlaze, as
c
como
los puerttos de Entradaa/Salida del missmo.

Figura 20. Software pBlaazeIDE del desarrrollador Mediatronnix, simulando ell programa del trabbajo del trabajo dee
investigacin.

33

CaptuloIII

DiseodelSistema

3.7 Implementacin del sistema


Inicializar LCD

Desplegar mensaje de
bienvenida en la LCD

Limpiar la
memoria SPM del

El usuario an
no ha elegido
una gestin

Esperar eleccin de
gestin del usuario
(leer switches)

No
Detectar el bit de
inicio en la lnea de
Rx del puerto RS-232

No

Comunicacin
Serial

Comunicacin
PS/2

Comprobar si han
ingresado al sistema
32 bytes
conteniendo la llave
y el texto a cifrar

Comprobar si han
ingresado al sistema
32 bytes
conteniendo la llave
y el texto a cifrar

No

Detectar el bit de
inicio en la lnea de
reloj del puerto PS2

No

S
S

Subrutina de
retardo de 4.3s

Detectar un nivel
bajo en la lnea de
reloj en PS2

Cifrado

Examinar si han
ingresado 8-bits
al sistema

Detectar un flanco
de subida en la
lnea de reloj en

Escanear la lnea Rx de
RS-232 y realizar un
registro de corrimiento a
la izquierda en el registro
de recepcin con un 0
un 1 segn lo detectado

Extraer los datos


obtenidos de la
encriptacin: Texto
cifrado, y Keyschedule por medio
de la lnea TX del
puerto SR-232 de
manera similiar a la
rutina de ingreso

Subrutina de
retardo de 8.3s

Escanear la lnea de datos


de PS2 y realizar un
registro de corrimiento a
la izquierda en el registro
de recepcin con un 0
un 1 segn lo detectado

Almacenar los resultados en


la memoria SPM del
microcontrolador

PicoBlaze

Subrutina de
retardo de 8.3s

Detectar el bit de
parada en la lnea de
Rx del puerto RS-232

No

No

Desplegar los datos


obtenidos de la
encriptacin: Texto
cifrado, y Keyschedule por medio de
la LCD de la tarjeta de
desarrollo

No

S
No

Examinar si han
ingresado 8-bits
al sistema

S
Detectar el bit de
parada en la lnea de
reloj del puerto PS2

No

S
Decodificar el
Scan-Key recibido
y traducirlo a
cdigo ASCII

Esperar a que el usuario


desee iniciar una nueva
encriptacin de datos

Almacenar en la
memoria SPM del
PicoBlaze
Almacenar en la
memoria SPM del
PicoBlaze

Figura 21. Programa que ejecuta el microcontrolador PicoBlaze .

34

Desplegar el carcter
ingresado, en la LCD de
la tarjeta de desarrollo

No

CapttuloIII

3.7.1

DisseodelSisstema

Gestiin de Entraada/Salida de
d datos al Sistema
S

Ell sistema pued


de gestionar daatos por medioo de un tecladoo PS/2 por el
e puerto seriaal de la tarjeta de
deesarrollo:

3.7.1.1

Comuniccacin Serial

Para una comunicacinn libre de erroores entre el FPGA


F
y la PC
C debe seguir correctamentee el
protocolo
o de comunicaccin serial, sinncronizar la deeteccin de seales en la receepcin, y geneerar
formas de
d onda acertaddas en la trannsmisin. Con el fin de ahoorrar hardware y aprovecharr la
utilizacin del microconntrolador PicooBlaze, toda la gestin de daatos se realiza dentro
d
del mism
mo
microcon
ntrolador. El prrotocolo de com
municacin see estableci a 115,200
1
bps, utilizando 1-bit de
inicio, 8--bits de datos y 1-bit de paarada. Para la recepcin se utiliz la tcnnica llamada BitB
Banging que consiste en
e detectar el bit
b de inicio de la comunicacin para desppus muestrearr el
pin de Rxx en un intervalo de tiempo determinado, y finalizar detectando el bitt de parada dee la
recepcin
n. Al utilizar unna velocidad de
d transmisin de
d 115,200 bpss que es el mxximo que perm
mite
el protoco
olo, el intervaloo de muestreo se estableci a 8.68s, para satisfacer
s
el Tiiempo de Smboolo
de la com
municacin.

Figura 22
2. Puertos Serialess RS-232 montadoos en la tarjeta de desarrollo
d
SPART
TAN-3E Starter-K
Kit.

35

CapttuloIII

DisseodelSisstema

p
un bit de inicio que satisfaga
s
el Tieempo de Smboolo,
Para la transmisin a laa PC se enva primero
despus se
s toma el byyte a enviar, bit por bit cadaa 8.68s empeezando por el LSB (bit mennos
significattivo), despus realizar
r
un despplazamiento y transmisin dee cada uno de los
l bits del bytte a
enviar, y finalizar ponieendo la lnea Tx
T en alto paraa indicar un bitt de paro. De nueva
n
cuenta esta
e
d microcontroolador PicoBlaaze.
tarea se reealiza dentro del

Figuraa 23. Comportamiiento del sistema en la comunicacinn de datos serial.

3.7.1.2

Comuniccacin mediaante un teclaado PS/2

Mediantee esta opcin el


e sistema puede ingresar los datos a encrriptar mediantee un teclado para
computad
dora, la gestinn de los datos se
s hace utilizanndo el protocoloo de comunicaaciones PS/2.

Figura 24. Coonector PS/2 de laa tarjeta de desarroollo SPARTAN-3E


E Starter-Kit.

36

CapttuloIII

DisseodelSisstema

Como se observa en la figura anteriorr, el protocolo PS/2 se basa en


e dos lneas de
d comunicacin:
d reloj, y la lnea de datos. Un
U caracter se conforma de 8-bits,
8
la manera de transmisiin
la lnea del
y recepcin de caracterres funciona dee manera muy similar al prottocolo Serial: 1-bit
1
de inicio,, 1bit de parada, 8-bits dee datos entre ellos
e
y 1-bit dee paridad, la diferencia
d
radicca en que paraa la
d
de laa comunicacinn serial en la cuual,
sincronizacin de bits se emplea la lnnea de reloj a diferencia
dicha sinccronizacin se hace de manerra implcita a la lnea de datoos

Figura 25.
2 Formas de ondda y diagrama de tiempos
t
para la coomunicacin PS/2..

El sistem
ma, de la mismaa manera que loo hace con la comunicacin
c
s
serial,
gestionaa la comunicaciin
con el tecclado por meddio del microcoontrolador PicooBlaze, con el
e fin de ahorrrar recursos enn el
diseo, lo
o que se hace es esperar un flanco de bajaada en la lneaa de reloj, com
mprobar un bit de
inicio con
n un 0 lgicoo en la lnea dee datos y comeenzar a recibir los bits de loss caracteres. Caada
caracter recibido,
r
ingressa al sistema enn un formato llamado Scan-ccode, diferente al cdigo ASC
CII,
por lo qu
ue se requiri la
l implementaccin de un deccodificador por hardware parra que el sistema
pueda enccriptar los datoos.

Figura 26. Scan-codes


S
para cada
c
una de las tecclas.

37

DiseodelSistema

CaptuloIII
3.7.2

Gestin de la LCD
A)

B)

Inicio

Iniciar

Enviar dato de 8-bits a


escribir en la LCD a la
interface del sistema

Esperar 20ms

Limpiar el bus de
datos de la LCD
Especificar a la lnea
LCD_RS de la LCD
que se desea enviar
un dato

Habilitar la operacin
de escritura

Notificar a la LCD que se


desea escribir poniendo la
lnea LCD_RW en un
estado bajo

Esperar 5ms

Configurar la LCD con


los parmetros: Interface
de 8-bits, 2 renglones,
caracteres de 5x8 puntos
de resolucin

Habilitar las operaciones


de Lectura/Escritura en la
LCD poniendo en alto la
lnea LCD_E

Configurar la memoria
DDRAM, y al puntero de la
LCD con los parmetros:
Movimiento del cursor a la
derecha y autoincremento en
DDRAM Address

El nibble superior del byte


a escribir ha sido enviado
por LCD_DAT?

No

Enviar nibble
superior a
LCD_DAT

S
Enviar nibble
inferior a LCD DAT

Configurar a la pantalla de
la LCD con los parmetros:
Encender el display entero,
activar cursor, desactivar
posicin del cursor

Esperar 240ns

Deshabilitar las
operaciones de
Lectura/Escritura en la
LCD poniendo en bajo
LCD_E

Limpiar todas las


localidades de DDRAM
Address y apuntar a la
direccin 0

Esperar 2ms

Deshabilitar la admisin
de datos a la LCD
poniendo en bajo la lnea
LCD_RW

Escribir mensajes de
bienvenida y mensajes
de men de usuario:
Esperar gestin

Esperar 1us

Se ha enviado el byte
completo por LCD_DAT?
Desplegar:
Recibiendo

Desplegar cada
caracter
ingresado (32)

No

S
Salir

No
Esperar Cifrado

Desplegar texto
cifrado o Key-schedule
en funcin de los
switches de la tarjeta

El usuario ha
indicado una nueva
rutina de encriptacin?

38

Figura 27. A) Rutina para la LCD


B) Subrutina de escritura.

CapttuloIII

DisseodelSisstema

h que tener en cuenta quee en la tarjeta de


Paara la gestin de la pantallaa de cristal lqquido (LCD) hay
deesarrollo el FP
PGA se comuniica con la LCD
D por medio dee 3 seales de control (Enablle, RS, R/W) y un
buus de datos de 4-bits, sin em
mbargo para escribir caracteres y enviar coomandos a la LCD
L
se tiene que
q
haacer con un pro
otocolo de 8-bits de datos, por lo que entonnces se deben de enviar 2 niibbles de bits a la
LC
CD para que pueda
p
interprettar las instruccciones que se desean
d
que ejeecute. En la figura siguientee se
muuestra el protocolo que ha dee seguirse para que la LCD puueda interpretar las operacionnes deseadas:

F
Figura
28. Protocoolo de comunicacin de la LCD.

Anntes de comenzar a escribiir caracteres en


e la LCD, primero
p
ha dee inicializarse para que pueeda
intterpretar los co
omandos deseaados, por lo quue se configura para una interrface de 8-bits, con la LCD de
d 2
lnneas, caracteres de 5x8 pixelees de resolucin, ubicar el cuursor en la prim
mera lnea y coolumna, activarr la
memoria DDRAM
M de la LCD, y limpiar la paantalla, despus de este inicioo el sistema maanda la secuenncia
deel mensaje de bienvenida al usuario y esppera a que estee elija la gestiin de datos que
q desea. En las
im
mgenes siguien
ntes se muestraa la secuencia del
d men de ussuario:
va en las imgeenes siguientess, despus de haber
h
desplegaado los mensajees de bienveniida,
Coomo se observ
el sistema entra en espera a quue el usuario inndique la maneera en que deseea ingresar los datos a encripttar,
s
de la tarjeta
t
de desarrrollo.
essto se hace por medio de los switches

39

CapttuloIII

Figura 29. Secuencia del meen de usuario dell sistema criptogrfico.

40

DisseodelSisstema

CaptuloIII

3.7.3

DiseodelSistema

Encriptacin de datos

Tarea esencial del sistema, una vez que los datos se encuentran en el microcontrolador PicoBlaze, se
les aplica el algoritmo de encriptacin AES-128 para despus ponerlos a disposicin del usuario.
AES opera en una matriz de 4x4 bytes, llamada State (almacenado linealmente en el SPM scratch pad
memory del microcontrolador PicoBlaze). Para el cifrado cada ronda de la aplicacin de AES (excepto
la ltima) consiste en cuatro pasos: SubBytes, ShiftRows, MixColumns y AddRoundKey.
Una de las grandes ventajas de AES, es que aunque cada paso es sustentado y ejecutado
matemticamente, dichos pasos se ejecutan a nivel de bytes, lo que lo hace ms sencillo de implementar
ya sea en hardware en software.

Inicio

AddRoundKey

SubBytes

ShiftRows

MixColumns

AddRoundKey

Comprobar si se
han realizado 9
rondas

No

S
SubBytes

ShiftRows

AddRoundKey

Terminar

Figura 30. Diagrama de flujo para el algoritmo de encriptacin AES.

41

CaptuloIII

3.7.3.1

DiseodelSistema

Implementacin para AddRoundKey

En la etapa AddRoundKey, la subclave se combina con el State. En cada ronda se obtiene una subclave
de la clave principal, usando la iteracin de la clave; cada subclave es del mismo tamao del State. La
subclave se agrega combinando cada byte del State con el correspondiente byte de la subclave usando
la operacin lgica XOR.
Inicio

Cargar al puntero state la


direccin inicial donde est
almacenado el State en la
memoria SPM del
Picoblaze

Cargar al puntero key la


direccin inicial donde est
almacenado el KeySchedule en la memoria
SPM del Picoblaze

Cargar al registro count


con el valor 16 dec

Cargar en regstate el valor


que se encuentra almacenado
en la localidad que est
direccionando el puntero
state

Cargar en regkey el valor que


se encuentra almacenado en
la localidad que est
direccionando el puntero de
Key-Schedule

Realizar una operacin


XOR entre regstate y
regkey y depositar el
resultado en resgstate

Almacenar el valor de regstate en el


state, esto se realiza guardando dicho
valor en la memoria SPM del
PicoBlaze direccionndola con el valor
que se encuentra en el puntero state

Incrementar en 1 el valor
de los punteros state y key

No
Es el valor del
registro count igual
a cero?

Decremento en 1
al registro count

Salir

Figura 31. Diagrama de flujo utilizado para el diseo del algoritmo empleado para la implementacin de la etapa AddRoundKey en el
microcontrolador PicoBlaze.

42

CapttuloIII

3
3.7.3.2

DisseodelSisstema

Im
mplementaciin para SubbBytes

E la etapa Sub
En
bBytes, cada byyte en el arreglo del State es substituido usando la S-box de Rijndael dee 8b
bits.
Esta operracin provee la no linealidaad en el cifraddo. La S-box utilizada
u
provieene de la funciin
i
inversa
alreded
dor del GF(28), conocido poor tener granddes propiedadees de no lineallidad. Para eviitar
a
ataques
basado
os en simples propiedades algebraicas, la S-box se consttruye por la coombinacin dee la
f
funcin
inverssa con una trannsformacin affn invertible. La S-box tambbin se elije para
p
evitar punntos
e
estables
y tamb
bin puntos esttables inversoss. La S-box se construye
c
de laa siguiente mannera:
1.

Iniciaalizar la S-box con los valorres de los byttes en secuenccia ascendente fila por fila. La
primeera fila contienne [00], [01], [002], , [0F]; la segunda filaa contiene [10], [11], etc.; y as
sucesiivamente. Por lo que el valorr del byte en la fila x, columnna y ser [xy].

2.

Mapeear cada byte enn la S-box por su inverso mulltiplicativo en el campo finitoo GF(28); el vaalor
[00] es
e mapeado porr s mismo.

3.

Consiiderar que cadaa byte en la S-bbox consiste dee 8-bits etiquettados como (b7, b6, b5, b4, b3, b2,
b1, b0,).

Aplicar la siguiente transformacin a cada bitt de cada byyte en la S-box:

bi' = bi b( i + 4) mod88 b(i 5) mod8 b(i + 7) mod8 ci , donde ci es el i-simo bit


b del byte c con
c
valor [63], que es (cc7c6c5c4c3c2c1c0) = (01100011)

Fiigura 32. S-box em


mpleada para la ejjecucin del algoriitmo AES en el miccrocontrolador PiicoBlaze.

43

CaptuloIII

DiseodelSistema

El diagrama de flujo para la secuencia implementada en el microcontrolador PicoBlaze es la


siguiente:
Inicio

Cargar al puntero state la


direccin inicial donde est
almacenado el State en la
memoria SPM del
Picoblaze

Cargar al registro count


con el valor 16 dec

Cargar en regstate el valor


que se encuentra almacenado
en la localidad que est
direccionando el puntero
state

Direccionar a la
memoria ROM externa
con el valor que se
encuentra en regstate

Leer el valor que


entrega la memoria
ROM externa y
almacenarlo en
regstate

Almacenar el valor de regstate en el


state, esto se realiza guardando dicho
valor en la memoria SPM del
PicoBlaze direccionndola con el valor
que se encuentra en el puntero state

Incrementar en 1 el
valor del puntero state

Decremento en 1
al registro count

Es el valor del
registro count igual
a cero?

No

S
Salir

Figura 33. Diagrama de flujo utilizado para el diseo del algoritmo empleado para la implementacin de la etapa SubBytes en el
microcontrolador PicoBlaze.

44

CaptuloIII
3.7.3.3

DiseodelSistema

Implementacin para ShiftRows

El paso ShiftRows opera en las filas del State; rota de manera cclica los bytes en cada fila por un
determinado offset. En AES, la primera fila queda en la misma posicin. Cada byte de la segunda fila
es rotado una posicin a la izquierda. De manera similar, la tercera y cuarta filas son rotadas por los
offsets de dos y tres respectivamente. De esta manera, cada columna del State resultante del paso
ShiftRows est compuesta por bytes de cada columna del State inicial.

Inicio

Leer y almacenar en el
registro s7 la direccin 1 del
SPM del Picoblaze

Guardar en la direccin 2 del


SPM del Picoblaze el
registro s8

Leer y almacenar en el
registro sA la direccin 3 del
SPM del Picoblaze

Leer y almacenar en el
registro s8 la direccin 5 del
SPM del Picoblaze

Guardar en la direccin 2 del


SPM del Picoblaze el
registro s8

Leer y almacenar en el
registro s6 la direccin 7 del
SPM del Picoblaze

Leer y almacenar en el
registro s9 la direccin 9 del
SPM del Picoblaze

Guardar en la direccin 2 del


SPM del Picoblaze el
registro s8

Leer y almacenar en el
registro s7 la direccin 11 del
SPM del Picoblaze

Leer y almacenar en el
registro sA la direccin 13 del
SPM del Picoblaze

Guardar en la direccin 2 del


SPM del Picoblaze el
registro s8

Leer y almacenar en el
registro s8 la direccin 15 del
SPM del Picoblaze

Guardar en la direccin 1 del


SPM del Picoblaze el
registro s8

Leer y almacenar en el
registro sA la direccin 14 del
SPM del Picoblaze

Guardar en la direccin 3 del


SPM del Picoblaze el
registro s8

Guardar en la direccin 5 del


SPM del Picoblaze el
registro s9

Leer y almacenar en el
registro s8 la direccin 10 del
SPM del Picoblaze

Guardar en la direccin 7 del


SPM del Picoblaze el
registro sA

Guardar en la direccin 9 del


SPM del Picoblaze el
registro sA

Leer y almacenar en el
registro s7 la direccin 6 del
SPM del Picoblaze

Guardar en la direccin 11
del SPM del Picoblaze el
registro s6

Guardar en la direccin 13
del SPM del Picoblaze el
registro s7

Leer y almacenar en el
registro s6 la direccin 2 del
SPM del Picoblaze

Guardar en la direccin 15
del SPM del Picoblaze el
registro s7

Terminar

Figura 34. Diagrama de flujo utilizado para el diseo del algoritmo empleado para la implementacin de la etapa ShiftRows en el
microcontrolador PicoBlaze.

45

CaptuloIII

3.7.3.4

DiseodelSistema

Implementacin para MixColumns

En el paso MixColumns, los cuatro bytes de cada columna del State se combinan usando una
transformacin lineal invertible. La funcin MixColumns toma cuatro bytes como entrada y devuelve
cuatro bytes, donde cada byte de entrada influye todas las salidas de cuatro bytes. Junto con ShiftRows,
MixColumns implica difusin en el cifrado. Cada columna se trata como un polinomio GF (28) y luego
se multiplica el mdulo x4 + 1 con un polinomio fijo c(x). El paso MixColumns puede verse como una
multiplicacin matricial en el campo finito de Rijndael.
Inicio

Leer y almacenar en el
registro s4 la direccin 0 del
SPM del Picoblaze

Guardar en la direccin 7 del


SPM del Picoblaze el
registro s7

Leer y almacenar en el
registro s4 la direccin 8 del
SPM del Picoblaze

Guardar en la direccin 15
del SPM del Picoblaze el
registro s7

Leer y almacenar en el
registro s5 la direccin 1 del
SPM del Picoblaze

Guardar en la direccin 6 del


SPM del Picoblaze el
registro s6

Leer y almacenar en el
registro s5 la direccin 9 del
SPM del Picoblaze

Guardar en la direccin 14
del SPM del Picoblaze el
registro s6

Leer y almacenar en el
registro s6 la direccin 2 del
SPM del Picoblaze

Guardar en la direccin 5 del


SPM del Picoblaze el
registro s5

Leer y almacenar en el
registro s6 la direccin 10 del
SPM del Picoblaze

Guardar en la direccin 13
del SPM del Picoblaze el
registro s5

Leer y almacenar en el
registro s7 la direccin 3 del
SPM del Picoblaze

Guardar en la direccin 4 del


SPM del Picoblaze el
registro s4

Leer y almacenar en el
registro s7 la direccin 11 del
SPM del Picoblaze

Guardar en la direccin 12
del SPM del Picoblaze el
registro s4

Llamar subrutina
MixColumn

Llamar subrutina
MixColumn

Llamar subrutina
MixColumn

Llamar subrutina
MixColumn

Guardar en la direccin 0 del


SPM del Picoblaze el
registro s4

Leer y almacenar en el
registro s7 la direccin 7 del
SPM del Picoblaze

Guardar en la direccin 8 del


SPM del Picoblaze el
registro s4

Leer y almacenar en el
registro s7 la direccin 15 del
SPM del Picoblaze

Guardar en la direccin 1 del


SPM del Picoblaze el
registro s5

Leer y almacenar en el
registro s6 la direccin 6 del
SPM del Picoblaze

Guardar en la direccin 9 del


SPM del Picoblaze el
registro s5

Leer y almacenar en el
registro s6 la direccin 14 del
SPM del Picoblaze

Guardar en la direccin 2 del


SPM del Picoblaze el
registro s6

Leer y almacenar en el
registro s5 la direccin 5 del
SPM del Picoblaze

Guardar en la direccin 10
del SPM del Picoblaze el
registro s6

Leer y almacenar en el
registro s5 la direccin 13 del
SPM del Picoblaze

Guardar en la direccin 3 del


SPM del Picoblaze el
registro s7

Leer y almacenar en el
registro s4 la direccin 4 del
SPM del Picoblaze

Guardar en la direccin 11
del SPM del Picoblaze el
registro s7

Leer y almacenar en el
registro s4 la direccin 12 del
SPM del Picoblaze

Figura 35. Diagrama de flujo utilizado para el diseo del algoritmo empleado para la implementacin de la etapa MixColumns en el
microcontrolador PicoBlaze.

46

Terminar

CaptuloIII

DiseodelSistema

MixColumns

Cargar el registro
s4(c[0]) en s9

XOR s7(c[3]) con


s8(c[0] c[1]), depositar
el resultado en s8

Realizar un registro de
corrimiento a la
izquierda SL0 a s8

Cargar el registro
s6(c[2]) en s8

Existi un desbordamiento en el
microcontrolador PicoBlaze al
ejecutar la instruccin anterior?

XOR s7(c[3]) con


s9(c[0]), depositar el
resultado en s9

Cargar el registro
s5(c[1]) en sA

XOR s6(c[2]) con


sA(c[1]), depositar el
resultado en sA

Cargar el registro
s9(c[0] c[3]) en sB

XOR sA(c[1] c[2]) con


XOR sB(c[0] c[3]),
depositar el resultado
en sB(tmp)

No

XOR s8(c[0] c[0] c[1]


c[3])con s5(c[1]), depositar
el resultado en s5. Segundo
coeficiente obtenido

XOR s8(c[0] c[1])


con 1Bhex, depositar
el resultado en s8

XOR sB(c[0] c[3]) con


s8(c[0] c[1]), depositar
el resultado en s8

XOR sB(c[0] c[3]) con


s8(c[0] c[1]), depositar
el resultado en s8

XOR s8(c[0] c[1])


con 1Bhex, depositar
el resultado en s8

XOR con s8(c[0] c[0]


c[1] c[3]) con s6(c[2]),
depositar el resultado en s6.
Tercer coeficiente obtenido

S
Existi un desbordamiento en el
microcontrolador PicoBlaze al
ejecutar la instruccin anterior?

Cargar el registro
s9(c[0] c[3]) en s8

XOR s5(c[1]) con


s8(c[0]), depositar el
resultado en s8

Realizar un registro de
corrimiento a la
izquierda SL0 a s8

Realizar un registro de
corrimiento a la
izquierda SL0 a s8

Realizar un registro de
corrimiento a la
izquierda SL0 a s8

Cargar el registro
sA(c[1] c[2]) en

Existi un desbordamiento en el
microcontrolador PicoBlaze al
ejecutar la instruccin anterior?

Cargar el registro
s4(c[0]) en s8

Existi un desbordamiento en el
microcontrolador PicoBlaze al
ejecutar la instruccin anterior?

No

No

No

XOR s4(c[0])con s8(c[0]


c[1] c[0] c[3]), depositar
el resultado en s4. Primer
coeficiente obtenido

XOR s8(c[0] c[1])


con 1Bhex, depositar
el resultado en s8

XOR sB(c[0] c[3]) con


s8(c[0] c[1]), depositar
el resultado en s8

XOR sB(c[0] c[3]) con


s8(c[0] c[1]), depositar
el resultado en s8

S
XOR s8(c[0] c[1])
con 1Bhex, depositar
el resultado en s8

XOR s8(c[0] c[0] c[1]


c[3]) con s7(c[3]), depositar
el resultado en s7. Cuarto y
ltimo coeficiente obtenido.

Terminar

Figura 36. Subrutina empleada para la implementacin de la multiplicacin de matrices en GF(28) en el microcontrolador
PicoBlaze.

47

CapttuloIII

DisseodelSisstema

P
Para
realizar una
u implemenntacin ms efficiente en el microcontroladdor PicoBlazee y como se ha
m
mostrado
que MixColumns solamente reqquiere de multtiplicaciones por
p [02] y [033] en GF(28), las
c
cuales
solamente hacen usoo de corrimienntos y operaciiones XOR coondicionales, estas
e
operacionnes
p
pueden

ser

eliminadas

si

se

utilizaa

la

siguiennte

identidadd

matemticaa

para

GF(228):

{03} i x = ({022} i x ) x , y si se parte dee las ecuacionnes para MixCoolumns mostraadas en el Marrco
T
Terico,
se tien
ne entonces quue:

Tmp = s0, j s1, j s2, j s3, j


s0,' j = s0, j Tm
mp 2 i ( s0, j s1, j )

s1,' j = s1, j Tm
mp 2 i ( s1, j s2, j )
s2,' j = s2, j Tm
mp 2 i ( s2, j s3, j )
s3,' j = s3, j Tm
mp 2 i ( s3, j s0, j )

Y al emplear laas nuevas ecuaaciones el tiemppo de procesam


miento se reducce en esta etapa del cifrado.

3.8 Arquitectu
A
ura del Sistema

Figurra 37. Diagrama esquemtico


e
de la arquitectura
a
del siistema.

48

CaptuloIII

DiseodelSistema

Como se observa en la figura anterior la arquitectura del sistema, como resultado del procesamiento embebido
en el microcontrolador PicoBlaze ha resultado muy prctica de implementar. A continuacin se describe
cada uno de los bloques del sistema:

3.8.1

Microcontrolador PicoBlaze

Nombrado en el diagrama como kcpsm3 es el bloque principal del sistema ya que en l se desarrolla
todo el procesamiento de datos adems de la gestin de perifricos externos. El cdigo fuente para
implementarse en un proyecto se puede encontrar de manera gratuita desde la pgina web del fabricante
Xilinx: www.xilinx.com

3.8.2

Memoria de programa para el microcontrolador PicoBlaze

Designado en el diagrama esquemtico como aes_mem es la memoria donde reside el programa a


ejecutar por el microcontrolador. Este programa fue ensamblado con la herramienta pBlazeIDE del
desarrollador Mediatronix.

3.8.1

Interface

Esta es la entidad encargada de realizar la interfaz entre el microcontrolador PicoBlaze y los perifricos
externos a este: LCD, push-buttons, switches, puerto RS-232 y PS/2. Adems se encarga de decodificar
los Scan-codes que enva el teclado a cdigo ASCII; y realiza la transformacin SubBytes del algoritmo
AES-128 almacenando la S-box necesaria para ello.

49

CaptuloIII

DiseodelSistema

3.9 Diseo del programa para el intercambio de datos PC-FPGA a travs


de MatLab
Por medio de este programa, la PC puede enviar una llave, y un texto plano para ser cifrado en el FPGA para
posteriormente recibir el texto codificado segn AES-128. El programa como ya se ha mencionado fue
desarrollado en MatLab, sin embargo no es necesario el uso de este programa para que el FPGA pueda
lograr una comunicacin exitosa, de hecho se puede prescindir de una PC, basta contar con algn dispositivo
electrnico que cumpla con el protocolo de comunicacin serial, para que la codificacin de datos en el
sistema se pueda llevar a cabo. Lo que significa que el software desarrollado fue creado solamente para
corroborar el funcionamiento de la plataforma de hardware.

Terminar
Inicio

Esperar la recepcin de datos en


COM1, y almacenar los
resultados en la variable salida.
Desplegar los resultados en la
pantalla

Almacenar en la variable
llave los nmeros ingresados
por el usuario para usar en el
proceso de encriptacin

Almacenar en la variable
datos los nmeros
ingresados por el usuario
para su encriptacin

Configurar e inicializar el puerto serial


COM1 utilizando el siguiente protocolo
de comunicaciones: Tasa de
transferencia = 115200bps, Nmero de
bits = 8-bits, Bits de parada = 1-bit, No
bit de paridad

Agrupar en una sola variable


matriz las variables dato y llave, y
convertirlas a un formato uint(8)
para su posterior transmisin

Transmitir la variable matriz


por el puerto serial utilizando
los parmetros de
comunicacin ya establecidos

Figura 38. Diagrama de flujo para el diseo del programa que ejecuta MatLab para la gestin de datos.

50

Captulo IV
V. AN
NLISIIS DE RESUL
R
LTADO
OS
e sistema codificara correctaamente segn AES-128, se utiliz
u
el docum
mento FIPS PUB
Para coomprobar que el
197(Fedderal Informattion Processingg Standards Puublication 197)
7), el cual es el documento ofi
ficial que descrribe
al Algooritmo de Encrriptacin Avannzada AES, y se
s compararon los ejemplos que contiene dicho
d
documennto
contra los
l datos que el sistema procees:

A)

B)

Figura 39. Ejemp


plo para AES-128 segn
s
FIPS. A) Teexto y Llave antes del cifrado. B) Texxto cifrado y subclave final.

Figura
F
40. Datos enviados
e
y recibidoos por la PC a travvs de MatLab haacia el FPGA.

51

CaptuloIV

AnlisisdeResultados

s observa en las
l imgenes anteriores
a
los datos
d
utilizadoss en el ejemploo de FIPS y los datos obteniddos
Como se
en el sistema de encriiptacin desarrrollado en este trabajo, concuuerdan, por lo que
q se puede teener la certezaa de
s
encriptta datos segn AES-128
A
de manera
m
correcta.
que el sistema
i
sigu
uientes se muesstran los resulttados del textoo cifrado mostrrado en la LCD
D de la tarjeta de
En las imgenes
desarrollo. Estos caraacteres concuerrdan con los reesultados anteriiores ya que soon los mismos valores pero con
c
su correespondiente traaduccin a cddigo ASCII.

Figura 41. Resultados


R
despleggados en la LCD de
d la tarjeta de dessarrollo

52

CaptuloIV

AnlisisdeResultados

4.1 Resultados
R
s de la impplementaciin del sisttema
Para deeterminar las propiedades finales del sisstema se mueestran algunass de sus caractersticas en su
implem
mentacin:

4.1.1

rea
a

Seegn la herram
mienta de softw
ware ISE Fooundation del fabricante
f
Xiliinx el espacioo ocupado porr el
diseo en el FPG
GA es:
A)

B)

Figura 42
2. Vista de los recuursos utilizados poor el diseo. A) Edditor de interconexxiones. B) Editor FloorPanel.
F

53

CaptuloIV

Valor utilizado
25 de 232
2 de 24
1 de 20
276 de 4656
78 de 2328

Recurso
IOBs Externos
BUFGMUXs
RAMB16s
Slices
SLICEMs

AnlisisdeResultados

Porcentaje XC3S500E
10%
8%
5%
5%
3%

Figura 43. Reporte del mapeo del diseo.

Como se puede observar en las imgenes y en el reporte de recursos, el nmero de elementos utilizado
por el diseo es mnimo, debido a que el procesamiento y la gestin de datos se realizan en el
microcontrolador PicoBlaze, dejando bastantes recursos disponibles en el FPGA para otras
necesidades. Con esto se cumple una de las metas principales para este diseo.

4.1.2

Throughput

Al utilizar el microcontrolador PicoBlaze se puede conocer con gran precisin el tiempo que requiere
una tarea en ser procesada, ya que todas las instrucciones que ejecuta el microcontrolador requieren de
dos ciclos de reloj. Para el caso del diseo, el nmero de ciclos de reloj necesarios para encriptar 128bits a 50MHz segn los datos obtenidos con la herramienta pBlazeIDE es de 5,247-ciclos. Para un
algoritmo criptogrfico el Throughput (cantidad de datos procesados por unidad de tiempo) es:

Throughput =

Frecuencia del reloj Nmero de bits


Ciclos de procesamiento

En especfico para el sistema diseado en este trabajo de investigacin el Throughput obtenido es:

Throughput =

4.1.3

50MHz 128 bits


= 1.21Mbps
5247 ciclos

Comparacin del sistema con otras Arquitecturas

Con el propsito de conocer la manera en que se comporta el sistema en el mundo real se compar el
desempeo del sistema con algunas otras implementaciones encontradas en literatura abierta. Dichas
implementaciones se dividen en dos categoras: Arquitecturas basadas en FPGAs y Arquitecturas
basadas en microcontroladores.

54

CaptuloIV

AnlisisdeResultados

A continuacin se muestra una tabla con los resultados obtenidos para AES-128:

Autor
Weaver[9]
Labb[10]
Saggese[11]
Chodwiec[12]
Chodwiec[12]
Standaert[13]
Gaj[14]
Saqib[15]
Amphion [16]
Amphion [16]
Segredo[17]
Segredo[17]
Caldern[18]
Bernstein[19]

Bernstein[19]
Bernstein[19]
ChungHuang[20]
Permadi[21]
Permadi[21]
ChungHuang[20]
ChungHuang[20]
SIC-IAIK[22]
FlowersSchlunder[23]
Trabajo de
Investigacin

Tecnologa/Dispositivo
Slices BRAMs
FPGA/XVE600-8
460
10
FPGA/XCV1000-4
2151
4
FPGA/XCVE2000-8
446
10
FPGA/XC2530-5
222
3
FPGA/XC2530-6
222
3
FPGA/XC2300E
542
10
FPGA/XCV1000
2902

FPGA/XCV812E
2744

FPGA/XVE8
421
4
FPGA/XVE8
573
10
FPGA/XCV100-4
496
10
FPGA/XCV600E8
496
10
FPGA/Altera EPF10K
1584

Microprocesador/Intel Pentium
(611 ciclos @ 66MHz)
Microprocesador/AMD AthlonX2 4600+
(213 ciclos @ 2.4GHz)
Microprocesador/Intel Core2 Quad Q6600
(201 ciclos @ 2.4GHz)
Microcontrolador/Motorola 6805
(9000 ciclos @ 2.1MHz)
Microcontrolador/Microchip PIC16F84
(12225 ciclos @ 4MHz)
Microcontrolador/Microchip PIC16F877
(4559 ciclos @ 4MHz)
Microcontrolador/Motorola 68HC908
(7258 ciclos @ 8MHz)
Microcontrolador/Hitachi H8/300
(4180 ciclos @ 5MHz)
Microcontrolador/Intel 8051
(3905 ciclos @ 8MHz)
Microcontrolador-DSP/Microchip PIC24/dsPIC
(2808 ciclos @ 16MIPS)
PicoBlazeMicrocontrolador
Embebido-FPGA/XC3S500E
276
1
(5247 ciclos @ 50MHz)

Throughput
690Mbps
390Mbps
1Gbps
139Mbps
166Mbps
1.45Gbps
331.5Mbps
258.5Mbps
290Mbps
1.06Gbps
417Mbps
743Mbps
637.24Mbps

13.8Mbps (terico)
1.44Tbps (terico)
1.52Tbps (terico)
30Kbps
41.8Kbps
112.3Kbps
141Kbps
153.1Kbps
262.2Kbps
729Kbps
1.21Mbps

Figura 44. Comparacin de desempeo entre diferentes Arquitecturas para cifrado de AES-128

55

Captulo V.

CONCLUSIONES

5.1 Resumen de los resultados obtenidos


Se efectu y se ahond en el estudio del algoritmo AES, logrando realizar una sntesis correcta para la
implementacin exitosa de dicho algoritmo en un sistema electrnico digital.
Se utilizaron varias de las herramientas de diseo de Hardware y procesamiento embebido para FPGAs
del fabricante Xilinx.
Se logr la asociacin exitosa de los perifricos de Entrada/Salida de datos al sistema. Y de la misma
manera la comunicacin Hardware/Software entre el FPGA y la PC.
La implementacin obtenida del diseo del sistema demostr ser muy competente ante otros sistemas de
la misma naturaleza.

5.2 Conclusiones del Trabajo realizado


Por medio de este trabajo se corrobor la importancia con la que cuenta la Electrnica Digital hoy en da
debido a las necesidades contemporneas del hombre. Y dentro de esta rea la manera en que los Arreglos de
Compuertas Programables en Campo se posicionan conforme pasa el tiempo en reas donde era impensable
su utilizacin debido a los paradigmas acumulados durante muchos aos. Ahora los FPGA tienden a encontrar
un lugar cada vez ms slido debido a su gran capacidad y versatilidad para la implementacin de soluciones
en Hardware. Y es debido a esta nueva prctica, que los fabricantes de FPGAs ofrecen ms y mejores
herramientas para lograr diseos exitosos y ms fciles de implementar, como es el caso del microcontrolador
PicoBlaze utilizado en este tema de investigacin. Dicho microcontrolador demostr poseer una capacidad
de procesamiento muy superior a la mayora de los microcontroladores actuales, debido a la inherente ventaja
de estar embebido en una plataforma FPGA donde se cuentan con recursos para disear cualquier entidad
necesaria para algn sistema que as lo requiera y al mismo tiempo contar con una frecuencia de reloj ms
alta, obteniendo as lo mejor de dos mundos. Como se vio en el captulo de Anlisis de Resultados, aunque el
desempeo de una solucin de procesamiento con microcontrolador no puede compararse con el desempeo
de arquitecturas dedicadas, la solucin con microcontrolador demostr ocupar menos recursos en la
plataforma, por lo que es ideal para diseos donde la velocidad de cifrado de datos no sea una tarea crtica
cuando las necesidades de espacio son ajustadas ya que el microcontrolador para el caso de este diseo no
solamente se ocupa de la tarea de cifrado, sino que tambin se encarga de gestionar los perifricos de
Entrada/Salida as como la comunicacin con la PC.

56

CaptuloV

5.3 Trabajo Futuro


Basndose en el mismo diseo y valindose de los pocos recursos que emplea el microcontrolador
PicoBlaze, se puede obtener un mejor desempeo empotrando varios microcontroladores en el FPGA para
distribuir el procesamiento de datos y as elevar el Throughput final del sistema.
Y siguiendo la misma lnea de procesamiento embebido, sera muy interesante considerar el desempeo que
se podra obtener al utilizar algn microprocesador empotrable como MicroBlaze PowerPC ya que con
ellos se podra simplificar el algoritmo de encriptacin al emplear instrucciones de 32-bits en lugar de las de 8
por lo que fortuitamente se prescindira de iteraciones, alcanzando as un mucho mayor Throughput que el
alcanzado para este diseo. Adems, al utilizar alguno de estos microprocesadores eventualmente se
utilizaran dispositivos ms veloces como la memoria DDR-SDRAM el puerto PHY-Ethernet de la tarjeta
de desarrollo por lo que la movilizacin de los datos en el sistema sera mucho mayor y mucho ms rpida,
obteniendo as una mejora global en la arquitectura.

57

Conclusiones

APNDICES
Apndice A. Trminos y Acrnimos
A continuacin se enlista una serie de trminos y acrnimos que se utilizarn durante la realizacin de esta
investigacin. Algunos trminos que nativamente se encuentran en el idioma ingls, se les aplicar una
traduccin inmediata al espaol para una mejor comprensin:

AES. Estndar de Encriptacin Avanzado


Affine. Una transformacin que consiste en la multiplicacin de una matriz seguida por la suma de un
vector.
Arreglo. Una coleccin ordenada de entidades iguales (ejemplo: un arreglo de bytes).
Bit. Un dgito binario, el cual tiene un valor de 0 1.
Bloque. Secuencia de bits binarios que abarcan la entrada, salida, State y la Ronda de la llave. El tamao
de una secuencia es el nmero de bits que contiene. Los bloques se interpretan tambin como arreglos de
bytes.
Byte. Un grupo de ocho bits que es tratado como una sola entidad como un arreglo de 8 bits
individuales.
Cifrado. Series de transformaciones que convierten texto simple a texto cifrado usando la llave de
Cifrado.
Descifrado. Series de transformaciones que convierten texto cifrado a texto simple usando la llave de
cifrado.
Llave de cifrado. Llave criptogrfica secreta que es usada por la rutina de Expansin de llave para generar
un arreglo de Rondas de llave; se puede imaginar como un arreglo rectangular de bytes que tienen cuatro
filas y N k columnas.

58

Apndices

Palabra. Un grupo de 32 bits que es tratado como una entidad simple como un arreglo de 4 bytes.
Rijndael. Algoritmo criptogrfico especificado en el Estndar de Encriptacin Avanzado (AES).
Rondas de la llave. S valores derivados del texto cifrado utilizando la Rutina de expansin de la llave; son
aplicados al State en la etapa de cifrado y descifrado.
Rutina de expansin de llave. Usada para generar una serie de Rondas de la llave a partir de la Llave de
cifrado.
Texto cifrado. Formato de salida que tienen los datos en la etapa de cifrado, entrada del descifrado.
Texto simple. Entrada de datos al bloque de cifrado o salida del bloque de descifrado.
S-box. Substitucin no lineal basada en la bsqueda en tablas, usada en varias substituciones de bytes y en
la rutina de Expansin de la llave para llevar a cabo una substitucin uno a uno del valor de un byte.
State. Es el resultado de cifrados intermedios, se puede imaginar como un arreglo rectangular de bytes que
tienen cuatro filas y N k columnas.

Apndice B. Cdigo en ensamblador para el microcontrolador PicoBlaze


; -----------------------------------------------------------------------------; -----------------------------------------------------------------------------; Nombrando registros
statep
keyp
countint
round
regstate
regkey
cicl_supp

EQU
EQU
EQU
EQU
EQU
EQU
EQU

s0
s1
s2
s3
s4
s5
s6

;
;
;
;
;
;
;

scan_byte
comp_supp

EQU
EQU

s7
s8

puntero del State


puntero de la llave
registro soporte de cuenta interna
registro soporte de cuenta de rondas
registro soporte del State
registro soporte de la llave
registro con la variable para revisar el registro con la constante
para revisar estado del ingreso de los 10 bits de datos
; registro donde se almacena el byte formado de la comunicacin serial
; registro donde se coloca el bit ingresado de la comunicacin serial

gral_reg0
gral_reg1
gral_reg2
gral_reg3
gral_reg4
rc

EQU
EQU
EQU
EQU
EQU
EQU

sA
sB
sC
sD
sE
sF

; registro de constante de ronda para la expansin de la llave

; -----------------------------------------------------------------------------; Declarando puertos externos


tx
led
sbox_out
lcd_data
lcd_rs
lcd_ciclo
mayusculas

DSOUT
DSOUT
DSOUT
DSOUT
DSOUT
DSOUT
DSOUT

$10
$11
$12
$13
$14
$15
$16

;
;
;
;
;
;

puerto
puerto
puerto
puerto
puerto
puerto

de salida para la comunicacin serial


de salida para controlar los leds de la tarjeta
de salida para la sbox
de datos para la LCD
de seleccin de registro en la LCD (datos comando)
para manipular el ciclo en el que se encuentra la LCD

59

Apndices

scan_code_out
rx
sbox_in
gestion_port
ps2_clk
ps2_data
ascii_in
lcd_sel
reload_port

DSOUT
DSIN
DSIN
DSIN
DSIN
DSIN
DSIN
DSIN
DSIN

$17
$20
$21
$22
$23
$24
$25
$26
$27

; puerto de entrada para la comunicacin serial


; puerto de entrada para la sbox

; -----------------------------------------------------------------------------; Declarando constantes


rn
state
key
b16
G
cicl

EQU
EQU
EQU
EQU
EQU
EQU

$0A
$00
$10
$10
$1B
$0A

start
delay_1us_cnt
cnt_1us_LCD
rs_com
rs_dat
ciclo_a
ciclo_b
ciclo_c
ciclo_d

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

$01
$0A
$0B
$0C
$0D
$0A
$0B
$0C
$0D

;
;
;
;
;
;

constante del state para el scratchpad


constante del state para el scratchpad
constante de la llave para el scratchpad
constante para conteo (128 bits AES)
0x11B
constante con el nmero de ciclos necesarios (10) para ingresar el
byte de la comunicacin serial

; constante para generar un retardo de 1us para la Comunicacin Serial


; constante para generar un retardo de 1us para la LCD
;
;
;
;

upper nibble,
rw = '1', e =
lower nibble,
lower nibble,

rs, rw = '0', e = '1'


'0'
rs, rw = '0', e = '1'
e = '1'

; -----------------------------------------------------------------------------; Tabla de caracteres ASCII


caracter_a
caracter_b
caracter_c
caracter_d
caracter_e
caracter_f
caracter_g

EQU
EQU
EQU
EQU
EQU
EQU
EQU

$61
$62
$63
$64
$65
$66
$67

caracter_h
caracter_i
caracter_j
caracter_k
caracter_l
caracter_m
caracter_n
caracter_o
caracter_p
caracter_q
caracter_r
caracter_s
caracter_t
caracter_u
caracter_v
caracter_w
caracter_x
caracter_y
caracter_z

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

$68
$69
$6A
$6B
$6C
$6D
$6E
$6F
$70
$71
$72
$73
$74
$75
$76
$77
$78
$79
$7A

caracter_AM
caracter_BM
caracter_CM
caracter_DM
caracter_EM
caracter_FM
caracter_GM
caracter_HM
caracter_IM
caracter_JM
caracter_KM
caracter_LM
caracter_MM
caracter_NM
caracter_OM
caracter_PM
caracter_QM
caracter_RM
caracter_SM
caracter_TM
caracter_UM
caracter_VM
caracter_WM
caracter_XM
caracter_YM
caracter_ZM

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

$41
$42
$43
$44
$45
$46
$47
$48
$49
$4A
$4B
$4C
$4D
$4E
$4F
$50
$51
$52
$53
$54
$55
$56
$57
$58
$59
$5

60

Apndices

caracter_0
caracter_1
caracter_2
caracter_3
caracter_4
caracter_5
caracter_6
caracter_7
caracter_8
caracter_9

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

$30
$31
$32
$33
$34
$35
$36
$37
$38
$39

caracter_colon
caracter_punto
caracter_semicolon
caracter_menos
caracter_division
caracter_suma
caracter_coma
caracter_menor_que
caracter_mayor_que
caracter_igual
caracter_espacio
caracter_RC
caracter_interr
caracter_pesos
caracter_excl
caracter_bs

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

$3A
$2E
$3B
$2D
$2F
$2B
$2C
$3C
$3E
$3D
$20
$0D
$3F
$24
$21
$08

; ':'

; '/'

; retorno de carro
; '?'
; '!'
; Back Space

; -----------------------------------------------------------------------------; Programa principal


inicio:

CALL
CALL
CALL

high
iniciar_lcd
mensaje_bienvenida

aes:

CALL
CALL
CALL

gestion_entrada
encriptacion
gestion_salida

JUMP

aes

; -----------------------------------------------------------------------------high:

LOAD
OUT

gral_reg0, $01
gral_reg0, tx

RET
; -----------------------------------------------------------------------------iniciar_lcd:

CALL
LOAD
LOAD

delay_20ms
gral_reg0, $03
gral_reg2, ciclo_d

OUT
OUT
CALL

gral_reg0, lcd_data
gral_reg2, lcd_ciclo
delay_5ms

LOAD
OUT
OUT
CALL

gral_reg0, $02
gral_reg0, lcd_data
gral_reg2, lcd_ciclo
delay_40us

; Configuracin de la LCD
LOAD
LOAD
CALL

gral_reg1, rs_com ; Function set x"28", interface de 8-bits, 2 lneas, caracteres de 5x8
puntos de resolucin
gral_reg0, $28
escribir_lcd

; Entry mode set x"06", cursor se mueve a la derecha y DDRAM address se incrementa en 1
LOAD
CALL

gral_reg0, $06
escribir_lcd

; Display On/Off x"0C", encender el display entero, activar cursor, desactivar posicin del cursor
LOAD
CALL

gral_reg0, $0C
escribir_lcd

; Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00"
LOAD
CALL
CALL
CALL

gral_reg0, $01
escribir_lcd
delay_1ms
delay_1ms

RET
; ------------------------------------------------------------------------------

61

Apndices

Mensaje_bienvenida:
; Configura direccin x"00" de la LCD
LOAD
LOAD
CALL

gral_reg0, $84
gral_reg1, rs_com
escribir_lcd

; Escribir "BUAP-FCE"
LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_bm
escribir_lcd
gral_reg0, caracter_um
escribir_lcd
gral_reg0, caracter_am
escribir_lcd
gral_reg0, caracter_pm
escribir_lcd

LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg0, caracter_menos
escribir_lcd
gral_reg0, caracter_fm
escribir_lcd
gral_reg0, caracter_cm
escribir_lcd
gral_reg0, caracter_em
escribir_lcd

; Configura direccin x"40" de la LCD


LOAD
LOAD
CALL

gral_reg0, $C2
gral_reg1, rs_com
escribir_lcd

; Escribir "Sistema cifrador"


LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_cm
escribir_lcd
gral_reg0, caracter_i
escribir_lcd
gral_reg0, caracter_f
escribir_lcd
gral_reg0, caracter_r
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_d
escribir_lcd
gral_reg0, caracter_o
escribir_lcd
gral_reg0, caracter_r
escribir_lcd

LOAD
CALL

gral_reg0, caracter_espacio
escribir_lcd

LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg0, caracter_am
escribir_lcd
gral_reg0, caracter_em
escribir_lcd
gral_reg0, caracter_sm
escribir_lcd

CALL
CALL
CALL

delay_1s
delay_1s
delay_1s

; Esperar 3 segundos

RET
; -----------------------------------------------------------------------------leds:

OUT

scan_byte, led

RET
; -----------------------------------------------------------------------------gestion_entrada:
; Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00"
LOAD
LOAD
CALL
CALL
CALL

gral_reg1, rs_com
gral_reg0, $01
escribir_lcd
delay_1ms
delay_1ms

62

Apndices

; Escribir "Elegir gestin"


LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_em
escribir_lcd
gral_reg0, caracter_l
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_g
escribir_lcd
gral_reg0, caracter_i
escribir_lcd
gral_reg0, caracter_r
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd

LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg0, caracter_g
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_s
escribir_lcd
gral_reg0, caracter_t
escribir_lcd
gral_reg0, caracter_i
escribir_lcd
gral_reg0, caracter_o
escribir_lcd
gral_reg0, caracter_n
escribir_lcd

; Configura direccin x"40" de la LCD


LOAD
LOAD
CALL
LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg0, $C3
gral_reg1, rs_com
escribir_lcd
gral_reg1, rs_dat
gral_reg0, caracter_d
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd

LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg0, caracter_d
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_t
escribir_lcd
gral_reg0, caracter_o
escribir_lcd
gral_reg0, caracter_s
escribir_lcd
gral_reg0, caracter_colon
escribir_lcd

CALL
CALL

delay_1s
delay_500ms

; Esperar 2 segundos

; Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00"
LOAD
LOAD
CALL
CALL
CALL

gral_reg1, rs_com
gral_reg0, $01
escribir_lcd
delay_1ms
delay_1ms

LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_sm
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_r
escribir_lcd
gral_reg0, caracter_i
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_l
escribir_lcd

; Desplegar men

63

Apndices
LOAD
CALL
LOAD
CALL

gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd

LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg0, caracter_pm
escribir_lcd
gral_reg0, caracter_sm
escribir_lcd
gral_reg0, caracter_division
escribir_lcd
gral_reg0, caracter_2
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd

; Configura direccin x"40" de la LCD

elegir_gestion:

LOAD
LOAD
CALL

gral_reg0, $C3
gral_reg1, rs_com
escribir_lcd

LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_sm
escribir_lcd
gral_reg0, caracter_wm
escribir_lcd
gral_reg0, caracter_1
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_sm
escribir_lcd
gral_reg0, caracter_wm
escribir_lcd
gral_reg0, caracter_0
escribir_lcd

IN
COMP
JUMP
COMP
JUMP

scan_byte, gestion_port
scan_byte, $00
Z, elegir_gestion
scan_byte, $02
Z, serial_entrada

; -----------------------------------------------------------------------------ps2_entrada:

ps2_in_state:

CALL
LOAD
LOAD

introducir_texto
sF, state
s9, b16

CALL
CALL
COMP
JUMP

ps2_routine
deco_scan
gral_reg2, $01
Z, ps2_in_state

; ingresa al sistema el cdigo de la tecla presionada


; decodifica el cdigo instruccin de la tecla presionada

STORE
ADD
SUB
JUMP

scan_byte, sF
sF, 1
s9, 1
NZ, ps2_in_state

;
;
;
;

; direcciona el puntero al state


; inicializa la variable de cuenta

almacena el byte ingresado


incrementa el puntero del state
decrementa el valor del registro de soporte de cuenta
si el registro de soporte de cuenta es cero todos los bytes se han

cargado en RAM
CALL

ps2_end_work
COMP
JUMP

ps2_in_key:

cargado en RAM

gral_reg2, $01
Z, ps2_in_state

CALL
LOAD
LOAD

introducir_llave
sF, $10
s9, b16

CALL
CALL
COMP
JUMP

ps2_routine
deco_scan
gral_reg2, $01
Z, ps2_in_key

STORE
ADD
SUB
JUMP

scan_byte, sF
sF, 1
s9, 1
NZ, ps2_in_key

CALL
COMP
JUMP

ps2_end_work
gral_reg2, $01
Z, ps2_in_state

; direcciona el puntero a la entrada


; inicializa la variable de cuenta
; decodifica el cdigo instruccin de la tecla presionada

;
;
;
;

almacena el byte ingresado


incrementa el puntero de la llave
decrementa el valor del registro de soporte de cuenta
si el registro de soporte de cuenta es cero todos los bytes se han

RET

64

Apndices

; -----------------------------------------------------------------------------ps2_routine:

LOAD
LOAD

cicl_supp, $00
scan_byte, $00

ps2_wait_low:

COMP
JUMP

cicl_supp, $0B
Z, ps2_dat_out

ps2_wait:

IN
COMP
JUMP

comp_supp, ps2_clk
comp_supp, $00
NZ, ps2_wait

ps2_scan:

ADD
COMP
JUMP
COMP
JUMP
COMP
JUMP

cicl_supp, $01
cicl_supp, $01
Z, ps2_wait_high
cicl_supp, $0A
Z, ps2_wait_high
cicl_supp, $0B
Z, ps2_wait_high

IN
COMP
JUMP

comp_supp, ps2_data
comp_supp, $00
Z, ps2_zero_rut

ps2_one_rut:

SR1
JUMP

scan_byte
ps2_wait_high

ps2_zero_rut:

SR0

scan_byte

ps2_wait_high:

IN
COMP
JUMP
JUMP

comp_supp, ps2_clk
comp_supp, $00
Z, ps2_wait_high
ps2_wait_low

ps2_dat_out:

RET

; -----------------------------------------------------------------------------deco_scan:
shift:

shift_work:

COMP
JUMP
COMP
JUMP

scan_byte, $12
Z, shift_work
scan_byte, $59
NZ, enter

LOAD
OUT
CALL
CALL
CALL
JUMP
JUMP

s3, $01
s3, mayusculas
delay_100ms
delay_100ms
ps2_routine
deco_scan
deco_out

; -----------------------------------------------------------------------------enter:

COMP
JUMP
LOAD
CALL
CALL
JUMP

scan_byte, $5A
NZ, caps
gral_reg2, $01
delay_100ms
delay_100ms
deco_end

; ------------------------------------------------------------------------------

caps:

COMP
JUMP
COMP
JUMP

scan_byte, $58
NZ, backspace
gral_reg4, $01
Z, uppcase_off

uppcase_on:

LOAD
OUT
LOAD
LOAD
CALL
CALL
JUMP

s3, $01
s3, mayusculas
gral_reg4, $01
gral_reg2, $01
delay_100ms
delay_100ms
deco_end

uppcase_off:

LOAD
OUT
LOAD
LOAD
CALL
CALL
JUMP

s3, $00
s3, mayusculas
gral_reg2, $01
gral_reg4, $00
delay_100ms
delay_100ms
deco_end

; -----------------------------------------------------------------------------backspace:

COMP
JUMP
COMP
JUMP
COMP

scan_byte, $66
NZ, deco_out
sF, state
NZ, backspace_work
sF, key

65

Apndices

backspace_work:

JUMP
LOAD
CALL
CALL
JUMP

NZ, backspace_work
gral_reg2, $01
delay_100ms
delay_100ms
deco_end

SUB
ADD
LOAD
AND
XOR
OR

sF, $01
s9, 1
gral_reg3,
gral_reg3,
gral_reg3,
gral_reg3,

sF
$0F
$40
$80

; Configura direccin a borrar de la LCD


LOAD
LOAD
CALL
LOAD
LOAD
CALL

gral_reg0, gral_reg3
gral_reg1, rs_com
escribir_lcd
gral_reg1, rs_dat
gral_reg0, caracter_espacio
escribir_lcd

; Configura la nueva direccin a escribir de la LCD


LOAD
LOAD
CALL
LOAD
LOAD
CALL
CALL
JUMP

gral_reg0, gral_reg3
gral_reg1, rs_com
escribir_lcd
gral_reg1, rs_dat
gral_reg2, $01
delay_100ms
delay_100ms
deco_end

; -----------------------------------------------------------------------------deco_out:

CALL
CALL
OUT
IN
LOAD
CALL
COMP
JUMP
LOAD
OUT

deco_end:

RET

delay_100ms
delay_100ms
scan_byte, scan_code_out
scan_byte, ascii_in
gral_reg0, scan_byte
escribir_lcd
gral_reg4, $01
Z, deco_end
s3, $00
s3, mayusculas

; -----------------------------------------------------------------------------; -----------------------------------------------------------------------------ps2_end_work:

CALL
CALL
CALL
COMP
JUMP
COMP
JUMP

backspace_end_work: SUB
ADD
LOAD
AND
XOR
OR

ps2_routine
delay_100ms
delay_100ms
scan_byte, $5A
Z, ps2_end_out
scan_byte, $66
NZ, ps2_end_work
sF, $01
s9, 1
gral_reg3,
gral_reg3,
gral_reg3,
gral_reg3,

sF
$0F
$40
$80

; Configura direccin a borrar de la LCD


LOAD
LOAD
CALL

gral_reg0, gral_reg3
gral_reg1, rs_com
escribir_lcd

LOAD
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_espacio
escribir_lcd

; Configura la nueva direccin a escribir de la LCD


LOAD
LOAD
CALL
LOAD
LOAD
ps2_end_out:

gral_reg0, gral_reg3
gral_reg1, rs_com
escribir_lcd
gral_reg1, rs_dat
gral_reg2, $01

RET

; -----------------------------------------------------------------------------; -----------------------------------------------------------------------------serial_entrada:

CALL
LOAD
LOAD

esperando
statep, state
countint, b16

serial_in_state:

CALL

clean

; direcciona el puntero al state


; inicializa la variable de cuenta

66

Apndices
CALL
STORE
CALL
ADD
SUB
JUMP

start_rx
scan_byte, statep
leds
statep, 1
countint, 1
NZ, serial_in_state

LOAD
CALL
LOAD
LOAD

scan_byte, $08
leds
keyp, $10
countint, b16

CALL
CALL
STORE
CALL
ADD
SUB

clean
start_rx
scan_byte, keyp
leds
keyp, 1
countint, 1

JUMP

NZ, serial_in_key

LOAD
CALL

scan_byte, $80
leds

; almacena el byte ingresado


; incrementa el puntero del state
; decrementa el valor del registro de soporte de cuenta
; si el registro de soporte de cuenta es cero todos los bytes se han

cargado en RAM

serial_in_key:

cargado en RAM

; direcciona el puntero a la entrada


; inicializa la variable de cuenta

; almacena el byte ingresado


; incrementa el puntero de la llave
; decrementa el valor del registro de soporte de cuenta
; si el registro de soporte de cuenta es cero todos los bytes se han

RET
; -----------------------------------------------------------------------------start_rx:
wait_start:

IN
COMP
JUMP

comp_supp, rx
comp_supp, $00
NZ, wait_start

CALL

delay_Rx0

polling:

CALL
ADD
COMP
JUMP
IN
COMP
JUMP

delay_Rx1
cicl_supp, $01
cicl_supp, cicl
Z, wait_stop
comp_supp, rx
comp_supp, $00
Z, zero_rut

one_rut:

SR1
JUMP

scan_byte
polling

zero_rut:

SR0
JUMP

scan_byte
polling

wait_stop:

IN
COMP
JUMP

comp_supp, rx
comp_supp, $00
Z, wait_stop

RET
; -----------------------------------------------------------------------------encriptacion:
preround:

LOAD

round, $00

; ------------------------------------------------------------------------------

addroundkey0:

LOAD
LOAD
LOAD

statep, state
keyp, key
countint, b16

; direcciona el puntero statep al inicio del state


; direcciona el puntero keyp al inicio de la llave
; carga el valor con el nmero de bytes a procesar

FETCH
FETCH
XOR

regstate, statep
regkey, keyp
regstate, regkey

; carga al registro state el valor que est direccionando el puntero


; carga al registro key el valor que est direccionando el puntero key
; realiza la operacin lgica XOR entre el state y la llave, deposita el
valor en el registro state
; guarda el valor del registro state en el state
; incrementa en uno el valor del puntero state
; incrementa en uno el valor del puntero llave
; se decrementa el valor del registro de soporte de cuenta
; si el registro de soporte de cuenta es cero el state ha sufrido la

STORE
ADD
ADD
SUB
JUMP
transformacin addroundkey

regstate, statep
statep, $01
keyp, $01
countint, $01
NZ, addroundkey0

; -----------------------------------------------------------------------------cipher:

LOAD
LOAD

round, rn
rc, $01

; -----------------------------------------------------------------------------cleanbox:

LOAD
LOAD

statep, state
countint, b16

; direcciona el puntero statep al inicio del state


; carga el valor con el nmero de bytes a procesar

s_box:

FETCH
OUT
IN
STORE

regstate,
regstate,
regstate,
regstate,

;
;
;
;

statep
sbox_out
sbox_in
statep

carga en el registro state el valor que est direccionando el puntero


le indica a la BlockRam la direccin que se desea leer
ingresa el valor ledo
se almacena el byte deseado en la memoria RAM scratchpad

67

Apndices
ADD
SUB
JUMP

statep, $01
countint, $01
NZ, s_box

; se incrementa en uno el valor del puntero


; se decrementa el valor del registro de soporte de cuenta
; si el registro de soporte de cuenta es cero todos los bytes se han

; -----------------------------------------------------------------------------shiftrow:

FETCH
FETCH
FETCH
FETCH
STORE
STORE
STORE
STORE

s7,
s8,
s9,
sA,
s8,
s9,
sA,
s7,

state
state
state
state
state
state
state
state

+
+
+
+
+
+
+
+

1
1
1
1
1
1
1
1

FETCH
FETCH
FETCH
FETCH
STORE
STORE
STORE
STORE

s6,
s7,
s8,
sA,
s8,
sA,
s6,
s7,

state
state
state
state
state
state
state
state

+
+
+
+
+
+
+
+

2
2
2
2
2
2
2
2

FETCH
FETCH
FETCH
FETCH

sA,
s6,
s7,
s8,

state
state
state
state

+
+
+
+

3
3 + 4
3 + 4 + 4
3 + 4 + 4 + 4

STORE
STORE
STORE
STORE

s8,
sA,
s6,
s7,

state
state
state
state

+
+
+
+

3
3 + 4
3 + 4 + 4
3 + 4 + 4 + 4

+ 4
+ 4 + 4
+ 4 + 4 + 4
+ 4
+ 4 + 4
+ 4 + 4 + 4
+ 4
+ 4 + 4
+ 4 + 4 + 4
+ 4
+ 4 + 4
+ 4 + 4 + 4

; -----------------------------------------------------------------------------COMP
JUMP

round, $01
Z, roundkey

; -----------------------------------------------------------------------------mixcolumns:

FETCH
FETCH
FETCH
FETCH
CALL
STORE
STORE
STORE
STORE

s4, state
s5, state
s6, state
s7, state
mixcolumn
s4, state
s5, state
s6, state
s7, state

+
+
+
+

0
1
2
3

+
+
+
+

0
1
2
3

FETCH
FETCH
FETCH
FETCH
CALL
STORE
STORE
STORE
STORE

s4, state
s5, state
s6, state
s7, state
mixcolumn
s4, state
s5, state
s6, state
s7, state

+
+
+
+

0
1
2
3

+
+
+
+

4
4
4
4

+
+
+
+

0
1
2
3

+
+
+
+

4
4
4
4

FETCH
FETCH
FETCH
FETCH
CALL
STORE
STORE
STORE
STORE

s4, state
s5, state
s6, state
s7, state
mixcolumn
s4, state
s5, state
s6, state
s7, state

+
+
+
+

0
1
2
3

+
+
+
+

4
4
4
4

+
+
+
+

4
4
4
4

+
+
+
+

0
1
2
3

+
+
+
+

4
4
4
4

+
+
+
+

4
4
4
4

FETCH
FETCH
FETCH
FETCH
CALL
STORE
STORE
STORE
STORE

s4, state
s5, state
s6, state
s7, state
mixcolumn
s4, state
s5, state
s6, state
s7, state

+
+
+
+

0
1
2
3

+
+
+
+

4
4
4
4

+
+
+
+

4
4
4
4

+
+
+
+

4
4
4
4

+
+
+
+

0
1
2
3

+
+
+
+

4
4
4
4

+
+
+
+

4
4
4
4

+
+
+
+

4
4
4
4

; -----------------------------------------------------------------------------roundkey:

FETCH
FETCH
FETCH
FETCH
LOAD
LOAD
LOAD
LOAD
LOAD

s4,
s5,
s6,
s7,
s8,
s4,
s5,
s6,
s7,

key
key
key
key
s4
s5
s6
s7
s8

+
+
+
+

12
13
14
15

; carga la ltima columna de la llave

; Aplica la transformacin rotword

68

cargado en RAM

Apndices

nowrap:

key96:

OUT
IN

s4, sbox_out
s4, sbox_in

; SubWord( RotWord( temp ) )


; ingresa el valor ledo

XOR
SL0
JUMP
XOR

s4, rc
rc
NC, nowrap
rc, G

; xor Rcon( i / Nk )
; x^(i-1) (i+=1)

OUT
IN
OUT
IN
OUT
IN
LOAD
LOAD

s5, sbox_out
s5, sbox_in
s6, sbox_out
s6, sbox_in
s7, sbox_out
s7, sbox_in
keyp, key
countint, b16

; SubWord( RotWord( temp ) )

FETCH
XOR
STORE
ADD
FETCH
XOR
STORE
ADD
FETCH
XOR
STORE

s8, keyp
s4, s8
s4, keyp
keyp, 1
s8, keyp
s5, s8
s5, keyp
keyp, 1
s8, keyp
s6, s8
s6, keyp

; k[i]=k[i - Nk] ^ temp

ADD
FETCH
XOR
STORE
ADD
SUB
JUMP

keyp, 1
s8, keyp
s7, s8
s7, keyp
keyp, 1
countint, 4
NZ, key96

; SubWord( RotWord( temp ) )


; SubWord( RotWord( temp ) )

; k[i]=k[i - Nk] ^ temp

; k[i]=k[i - Nk] ^ temp

; k[i]=k[i - Nk] ^ temp

; -----------------------------------------------------------------------------cleanark:

LOAD
LOAD
LOAD

statep, state
keyp, key
countint, b16

; direcciona el puntero statep al inicio del state


; direcciona el puntero keyp al inicio de la llave
; carga el valor con el nmero de bytes a procesar

addroundkey:

FETCH
FETCH
XOR

regstate, statep
regkey, keyp
regstate, regkey

; carga al registro state el valor que est direccionando el puntero


; carga al registro key el valor que est direccionando el puntero key
; realiza la operacin lgica XOR entre el state y la llave, deposita el
valor en el registro state
; guarda el valor del registro state en el state
; incrementa en uno el valor del puntero state
; incrementa en uno el valor del puntero llave
; se decrementa el valor del registro de soporte de cuenta
; si el registro de soporte de cuenta es cero el state ha sufrido la

STORE
ADD
ADD
SUB
JUMP
transformacin addroundkey

regstate, statep
statep, $01
keyp, $01
countint, $01
NZ, addroundkey

; -----------------------------------------------------------------------------SUB
JUMP

round, $01
NZ, cleanbox

; se decrementa el valor del registro de soporte de cuenta


;

RET
; -----------------------------------------------------------------------------; -----------------------------------------------------------------------------gestion_salida:
transmision:
out_state:

out_key:

LOAD
LOAD

countint, b16
statep, state

; carga el valor con el nmero de bytes a procesar


; direcciona el puntero statep al inicio de la llave

CALL
FETCH
CALL
CALL
ADD
SUB
JUMP
LOAD
LOAD

clean
scan_byte, statep
leds
start_tx
statep, $01
countint, $01
NZ, out_state
countint, b16
keyp, key

;
;
;
;
;

CALL
FETCH
CALL
CALL
ADD
SUB
JUMP
LOAD
CALL

clean
scan_byte, keyp
leds
start_tx
keyp, $01
countint, $01
NZ, out_key
scan_byte, $01
leds

se incrementa en uno el valor del puntero


se decrementa el valor del registro de soporte de cuenta
si el registro de soporte de cuenta es cero todos los bytes se han
se coloca nuevamente el valor de la cuenta para el registro de soporte
direcciona el puntero keyp al inicio de la llave

; se incrementa en uno el valor del puntero


; se decrementa el valor del registro de soporte de cuenta
; si el registro de soporte de cuenta es cero todos los bytes se han

; -----------------------------------------------------------------------------lcd_salida:

IN

scan_byte, lcd_sel

69

cargado en RAM
de cuenta

cargado en RAM

Apndices
COMP
JUMP

scan_byte, $00
NZ, escribir_keysch

escribir_output:

CALL
LOAD
LOAD

texto_cifrado
s4, state
s5, b16

lcd_output:

FETCH
LOAD
CALL
ADD
SUB
JUMP

scan_byte, s4
gral_reg0, scan_byte
escribir_lcd
s4, $01
; se incrementa en uno el valor del puntero
s5, $01
; se decrementa el valor del registro de soporte de cuenta
NZ, lcd_output
; si el registro de soporte de cuenta es cero todos los bytes se han

cambio_a:

IN
COMP
JUMP
IN
COMP
JUMP
JUMP

scan_byte, lcd_sel
scan_byte, $01
Z, escribir_keysch
scan_byte, reload_port
scan_byte, $01
Z, reload
cambio_a

escribir_keysch:

CALL
LOAD
LOAD

llave_procesada
s4, key
s5, b16

lcd_keysch:

FETCH
LOAD
CALL
ADD

scan_byte, s4
gral_reg0, scan_byte
escribir_lcd
s4, $01
; se incrementa en uno el valor del puntero

SUB
JUMP

s5, $01
NZ, lcd_keysch

cambio_b:

IN
COMP
JUMP
IN
COMP
JUMP
JUMP

scan_byte, lcd_sel
scan_byte, $00
Z, escribir_output
scan_byte, reload_port
scan_byte, $01
Z, reload
cambio_b

reload:

RET

; direcciona el puntero statep al inicio de la llave


; carga el valor con el nmero de bytes a procesar

; carga el valor con el nmero de bytes a procesar

; se decrementa el valor del registro de soporte de cuenta


; si el registro de soporte de cuenta es cero todos los bytes se han

; -----------------------------------------------------------------------------; Bloque que genera las formas de onda protocolarias necesarias para transmitir a la PC
start_tx:

LOAD
OUT
CALL

gral_reg0, $00
gral_reg0, tx
delay_Tx0

byte_tx:

ADD
COMP
JUMP
SRA
JUMP

cicl_supp, $01
cicl_supp, cicl
Z, stop_tx
scan_byte
C, tx_1

tx_0:

LOAD
OUT
CALL
JUMP

gral_reg0, $00
gral_reg0, tx
delay_Tx1
byte_tx

tx_1:

LOAD
OUT
CALL
JUMP

gral_reg0, $01
gral_reg0, tx
delay_Tx1
byte_tx

stop_tx:

LOAD
LOAD
LOAD
OUT
CALL

gral_reg0, $01
gral_reg0, $01
gral_reg0, $01
gral_reg0, tx
delay_Tx_fin

RET
; -----------------------------------------------------------------------------mixcolumn:

mcf1:

LOAD
XOR
LOAD
XOR
LOAD
XOR
LOAD
XOR
SL0
JUMP
XOR

s9,
s9,
sA,
sA,
sB,
sB,
s8,
s8,
s8
NC,
s8,

s4
s7
s5
s6
s9
sA
s4
s5

XOR
XOR
LOAD

s8, sB
s4, s8
s8, sA

cargado en RAM

; t = c[0] ^ c[3]
; u = c[1] ^ c[2]
; v = t ^ u
; c[0] = c[0] ^ v ^ mul(0x02, c[0] ^ c[1])

mcf1
G

; c[1] = c[1] ^ v ^ mul(0x02, u)

70

cargado en RAM

Apndices

mcf2:

mcf3:

mcf4:

SL0
JUMP
XOR

s8
NC, mcf2
s8, G

XOR
XOR
LOAD
XOR
SL0
JUMP
XOR

s8,
s5,
s8,
s8,
s8
NC,
s8,

sB
s8
s6
s7

XOR
XOR
LOAD
SL0
JUMP
XOR

s8,
s6,
s8,
s8
NC,
s8,

sB
s8
s9

XOR
XOR

s8, sB
s7, s8

; c[2] = c[2] ^ v ^ mul(0x02, c[2] ^ c[3])

mcf3
G

; c[3] = c[3] ^ v ^ mul(0x02, t)

mcf4
G

RET
; -----------------------------------------------------------------------------; En el gral_reg0 se procesa el dato a enviar a la LCD (lcd_data)
; En el gral_reg1 se procesa el RS de la LCD (lcd_rs)
; En el gral_reg2 se indica el ciclo al que se quiere hacer referencia
escribir_lcd:

OUT
OUT
LOAD
OUT
CALL

gral_reg0, lcd_data
gral_reg1, lcd_rs
gral_reg2, ciclo_a
gral_reg2, lcd_ciclo
delay_240ns

LOAD
OUT
CALL

gral_reg2, ciclo_b
gral_reg2, lcd_ciclo
delay_1us_lcd

LOAD
OUT
CALL

gral_reg2, ciclo_c
gral_reg2, lcd_ciclo
delay_240ns

LOAD
OUT
CALL

gral_reg2, ciclo_b
gral_reg2, lcd_ciclo
delay_40us

RET
; -----------------------------------------------------------------------------introducir_texto:
; Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00"
LOAD
LOAD
CALL
CALL
CALL

gral_reg1, rs_com
gral_reg0, $01
escribir_lcd
delay_1ms
delay_1ms

; Escribir "Texto a cifrar:"


LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_tm
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_x
escribir_lcd
gral_reg0, caracter_t
escribir_lcd
gral_reg0, caracter_o
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd

LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD

gral_reg0, caracter_c
escribir_lcd
gral_reg0, caracter_i
escribir_lcd
gral_reg0, caracter_f
escribir_lcd
gral_reg0, caracter_r

71

Apndices
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_r
escribir_lcd
gral_reg0, caracter_colon
escribir_lcd

; Configura direccin x"40" de la LCD


LOAD
LOAD
CALL
LOAD

gral_reg0, $C0
gral_reg1, rs_com
escribir_lcd
gral_reg1, rs_dat

RET
; -----------------------------------------------------------------------------introducir_llave:
; Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00"
LOAD
LOAD
CALL
CALL
CALL

gral_reg1, rs_com
gral_reg0, $01
escribir_lcd
delay_1ms
delay_1ms

; -----------------------------------------------------------------------------; Escribir "Llave a utilizar"


LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_lm
escribir_lcd
gral_reg0, caracter_l
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_v
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd

LOAD
CALL
LOAD
CALL

gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd

LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg0, caracter_u
escribir_lcd
gral_reg0, caracter_t
escribir_lcd
gral_reg0, caracter_i
escribir_lcd
gral_reg0, caracter_l
escribir_lcd
gral_reg0, caracter_i
escribir_lcd
gral_reg0, caracter_z
escribir_lcd

LOAD
CALL
LOAD
CALL

gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_r
escribir_lcd

; Configura direccin x"40" de la LCD


LOAD
LOAD
CALL
LOAD

gral_reg0, $C0
gral_reg1, rs_com
escribir_lcd
gral_reg1, rs_dat

RET
; -----------------------------------------------------------------------------texto_cifrado:
; Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00"
LOAD
LOAD
CALL
CALL
CALL

gral_reg1, rs_com
gral_reg0, $01
escribir_lcd
delay_1ms
delay_1ms

; Escribir "Texto cifrado:"


LOAD

gral_reg1, rs_dat

72

Apndices
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_tm
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_x
escribir_lcd
gral_reg0, caracter_t
escribir_lcd
gral_reg0, caracter_o
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd

LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD

gral_reg0, caracter_c
escribir_lcd
gral_reg0, caracter_i
escribir_lcd
gral_reg0, caracter_f
escribir_lcd
gral_reg0, caracter_r
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_d
escribir_lcd
gral_reg0, caracter_o

CALL
LOAD
CALL

escribir_lcd
gral_reg0, caracter_colon
escribir_lcd

; Configura direccin x"40" de la LCD


LOAD
LOAD
CALL
LOAD

gral_reg0, $C0
gral_reg1, rs_com
escribir_lcd
gral_reg1, rs_dat

RET
; -----------------------------------------------------------------------------esperando:

; Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00"
LOAD
LOAD
CALL
CALL
CALL

gral_reg1, rs_com
gral_reg0, $01
escribir_lcd
delay_1ms
delay_1ms

; Escribir "Texto cifrado:"


LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd
gral_reg0, caracter_em
escribir_lcd
gral_reg0, caracter_s
escribir_lcd
gral_reg0, caracter_p
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_r
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_n
escribir_lcd
gral_reg0, caracter_d
escribir_lcd
gral_reg0, caracter_o
escribir_lcd
gral_reg0, caracter_punto
escribir_lcd
gral_reg0, caracter_punto
escribir_lcd
gral_reg0, caracter_punto
escribir_lcd

; Configura direccin x"40" de la LCD


LOAD
LOAD
CALL
LOAD

gral_reg0, $C0
gral_reg1, rs_com
escribir_lcd
gral_reg1, rs_dat

RET
; ------------------------------------------------------------------------------

73

Apndices

;Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00"
LOAD
LOAD
CALL
CALL
CALL

gral_reg1, rs_com
gral_reg0, $01
escribir_lcd
delay_1ms
delay_1ms

; Escribir "Llave a cifrar:"


LOAD
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg1, rs_dat
gral_reg0, caracter_lm
escribir_lcd
gral_reg0, caracter_l
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_v
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_espacio
escribir_lcd

LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL
LOAD
CALL

gral_reg0, caracter_p
escribir_lcd
gral_reg0, caracter_r
escribir_lcd
gral_reg0, caracter_o
escribir_lcd
gral_reg0, caracter_c
escribir_lcd
gral_reg0, caracter_e
escribir_lcd
gral_reg0, caracter_s
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_d
escribir_lcd
gral_reg0, caracter_a
escribir_lcd
gral_reg0, caracter_colon
escribir_lcd

; Configura direccin x"40" de la LCD


LOAD
LOAD
CALL
LOAD

gral_reg0, $C0
gral_reg1, rs_com
escribir_lcd
gral_reg1, rs_dat

RET
; -----------------------------------------------------------------------------; Bloque que genera un retardo para Rx0
delay_Rx0:

LOAD

gral_reg1, $04

wait_Rx0:

CALL
SUB
JUMP
LOAD
SUB
JUMP

delay_1us
gral_reg1, $01
NZ, wait_Rx0
gral_reg1, $04
gral_reg1, $01
NZ, wait_Rx0_1

wait_Rx0_1:

RET
; -----------------------------------------------------------------------------; Bloque que genera un retardo para Rx1
delay_Rx1:

LOAD

gral_reg1, $08

wait_Rx1:

CALL
SUB
JUMP
LOAD

delay_1us
gral_reg1, $01
NZ, wait_Rx1
gral_reg1, $02

wait_Rx1_1:

SUB
JUMP

gral_reg1, $01
NZ, wait_Rx1_1

RET
; -----------------------------------------------------------------------------; Bloque que genera un retardo para Tx0
delay_Tx0:

LOAD

gral_reg1, $08

wait_Tx0:

CALL
SUB

delay_1us
gral_reg1, $01

74

Apndices

wait_Tx0_1:

JUMP
LOAD

NZ, wait_Tx0
gral_reg1, $03

SUB
JUMP

gral_reg1, $01
NZ, wait_Tx0_1

RET
; -----------------------------------------------------------------------------; Bloque que genera un retardo para Tx1
delay_Tx1:

LOAD

gral_reg1, $07

wait_Tx1:

CALL
SUB
JUMP
LOAD

delay_1us
gral_reg1, $01
NZ, wait_Tx1
gral_reg1, $0F

wait_Tx1_1:

SUB
JUMP

gral_reg1, $01
NZ, wait_Tx1_1

RET
; -----------------------------------------------------------------------------; Bloque que genera un retardo para Tx_fin
delay_Tx_fin:

LOAD

gral_reg1, $07

wait_Tx_fin:

CALL
SUB
JUMP
LOAD

delay_1us
gral_reg1, $01
NZ, wait_Tx_fin
gral_reg1, $18

wait_Tx1_fin:

SUB
JUMP

gral_reg1, $01
NZ, wait_Tx1_fin

RET
; -----------------------------------------------------------------------------; Bloque que genera un retardo de 1us
delay_1us:

LOAD

gral_reg0, delay_1us_cnt

wait_1us:

SUB
JUMP

gral_reg0, $01
NZ, wait_1us

RET
; -----------------------------------------------------------------------------delay_1us_lcd:

LOAD

s0, cnt_1us_lcd

wait_1us_lcd:

SUB
JUMP

s0, 1
NZ, wait_1us_lcd

RET
; ------------------------------------------------------------------------------

delay_40us:

LOAD

s1, $28

wait_40us:

CALL
SUB
JUMP

delay_1us_lcd
s1, $01
NZ, wait_40us

; 40 x 1us = 40us

RET
; -----------------------------------------------------------------------------delay_100us:

LOAD

s1, $64

wait_100us:

CALL
SUB
JUMP

delay_1us_lcd
s1, $01
NZ, wait_100us

; 25 x 40us = 1ms

RET
; -----------------------------------------------------------------------------delay_1ms:

LOAD

s2, $19

wait_1ms:

CALL
SUB
JUMP

delay_40us
s2, $01
NZ, wait_1ms

; 25 x 40us = 1ms

RET

75

Apndices

; -----------------------------------------------------------------------------delay_5ms:

LOAD

s3, $05

wait_5ms:

CALL
SUB
JUMP

delay_40us
s2, $01
NZ, wait_5ms

; 25 x 40us = 1ms

RET
; -----------------------------------------------------------------------------delay_20ms:

LOAD

s3, $14

wait_20ms:

CALL
SUB
JUMP

delay_1ms
s3, $01
NZ, wait_20ms

; 20 x 1ms = 20ms

RET
; -----------------------------------------------------------------------------delay_100ms:

LOAD

s4, $05

wait_100ms:

CALL
SUB
JUMP
RET

delay_20ms
s4, $01
NZ, wait_100ms

; 50 x 20ms = 1000ms

; -----------------------------------------------------------------------------delay_500ms:

LOAD

s4, $19

wait_500ms:

CALL
SUB
JUMP

delay_20ms
s4, $01
NZ, wait_500ms

; 25 x 20ms = 500ms

RET
; -----------------------------------------------------------------------------delay_1s:

LOAD

s4, $32

wait_1s:

CALL
SUB
JUMP

delay_20ms
s4, $01
NZ, wait_1s

; 50 x 20ms = 1000ms

RET
; -----------------------------------------------------------------------------; Bloque que genera un retardo de 1us
delay_240ns:

LOAD

gral_reg0, $07

wait_240ns:

SUB
JUMP

gral_reg0, $01
NZ, wait_240ns

RET
; ------------------------------------------------------------------------------

; Bloque para limpiar los registros de control del sistema


clean:

LOAD
LOAD

cicl_supp, $01
scan_byte, $00

; limpia el registro "cicl_supp"


; limpia el registro "scan_byte"

RET
; -----------------------------------------------------------------------------VHDL

"ROM_form.vhd", "aes_mem.vhd", "aes_mem"

; ------------------------------------------------------------------------------

76

Apndices

Apndice C. Cdigo VHDL para la entidad Interface


---------------------------------------------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Interface is
Port ( --Entradas
rst
write_strobe
read_strobe
port_id_pB
out_port_pB
sw
Rx
clk
ps2_clk
ps2_data
lcd_sel
reload_port

:
:
:
:
:
:
:
:
:
:
:
:

in
in
in
in
in
in
in
in
in
in
in
in

std_logic;
std_logic;
std_logic;
std_logic_vector(7 downto 0);
std_logic_vector(7 downto 0);
std_logic_vector(1 downto 0);
std_logic;
std_logic;
std_logic;
std_logic;
std_logic;
std_logic;

--Salidas
Tx
: out std_logic;
leds
: out std_logic_vector(7 downto 0);
lcd_data
: out std_logic_vector(3 downto 0);
lcd_e
: out std_logic;
lcd_rs
: out std_logic;
lcd_rw
: out std_logic;
in_port_pB
: out std_logic_vector(7 downto 0));
end Interface;
architecture Behavioral of Interface is
---------------------------------------------------------------------------------------------------------------------Seales internas
-------------------------------------------------------------------------------------------------------------------signal look
: std_logic_vector(7 downto 0);
signal dato
: std_logic_vector(7 downto 0);
signal rs
: std_logic_vector(3 downto 0);
signal rs_to_lcd
: std_logic;
signal gestion
: std_logic_vector(1 downto 0);
signal lcd_dat
: std_logic_vector(7 downto 0);
signal ciclo : std_logic_vector(3 downto 0);
signal code
: std_logic_vector(7 downto 0);
signal ascii : std_logic_vector(7 downto 0);
signal up_case
: std_logic;
-------------------------------------------------------------------------------------------------------------------begin
---------------------------------------------------------------------------------------------------------------------Puertos de Escritura
-------------------------------------------------------------------------------------------------------------------process(rst, write_strobe, port_id_pB, out_port_pB)
begin
if rst = '1' then leds <= x"00"; Tx <= '1'; look <= x"00"; lcd_dat <= x"00"; rs <= x"0"; up_case <= '0'; code <=
x"00";
elsif rising_edge(write_strobe) then
if port_id_pB = x"10" then
Tx <= out_port_pB(0);
elsif port_id_pB = x"11" then leds <= out_port_pB;
elsif port_id_pB = x"12" then look <= out_port_pB;
elsif port_id_pB = x"13" then lcd_dat <= out_port_pB;
elsif port_id_pB = x"14" then rs <= out_port_pB(3 downto 0);

end if;
end process;

elsif port_id_pB = x"15" then ciclo <= out_port_pB(3 downto 0);


elsif port_id_pB = x"16" then up_case <= out_port_pB(0);
elsif port_id_pB = x"17" then code <= out_port_pB;
end if;

---------------------------------------------------------------------------------------------------------------------Puertos de Lectura
-------------------------------------------------------------------------------------------------------------------process(read_strobe, port_id_pB, Rx, dato, gestion,ps2_clk, ps2_data, ascii, lcd_sel, reload_port)
begin
if rising_edge(read_strobe) then
if port_id_pB = x"20" then in_port_pB <= "0000000" & Rx;
elsif port_id_pB = x"21" then in_port_pB <= dato;
elsif port_id_pB = x"22" then in_port_pB <= "000000" & gestion;
elsif port_id_pB = x"23" then in_port_pB <= "0000000" & ps2_clk;
elsif port_id_pB = x"24" then in_port_pB <= "0000000" & ps2_data;
elsif port_id_pB = x"25" then in_port_pB <= ascii;
elsif port_id_pB = x"26" then in_port_pB <= "0000000" & lcd_sel;
elsif port_id_pB = x"27" then in_port_pB <= "0000000" & reload_port;
end if;
end if;

77

Apndices
---------------------------------------------------------------------------------------------------------------------Seleccion de gestion I/O
-------------------------------------------------------------------------------------------------------------------process(rst,clk,sw)
begin
if rst = '1' then gestion <= "00";
elsif rising_edge(clk) then

end if;
end process;

case sw is
when "01" => gestion <= "01";
when "10" => gestion <= "10";
when others => gestion <= "00";
end case;

---------------------------------------------------------------------------------------------------------------------Ciclos LCD
-------------------------------------------------------------------------------------------------------------------process(rst,clk,ciclo)
begin
if rising_edge(clk) then
case
when
when
when
when

ciclo is
x"A" => lcd_rs <= rs_to_lcd; lcd_rw <= '0'; lcd_e <= '1'; lcd_data <= lcd_dat(7 downto 4);
x"B" => lcd_rw <= '1'; lcd_e <= '0';
x"C" => lcd_rs <= rs_to_lcd; lcd_rw <= '0'; lcd_e <= '1'; lcd_data <= lcd_dat(3 downto 0);
x"D" => lcd_e <= '1'; lcd_data <= lcd_dat(3 downto 0);

when others => null;


end case;
end if;
end process;
-------------------------------------------------------------------------------------------------------------------process(rst,clk,rs)
begin
if rst = '1' then rs_to_lcd <= '0';
elsif rising_edge(clk) then

end if;
end process;

case rs is
when x"C" => rs_to_lcd <= '0';
when x"D" => rs_to_lcd <= '1';
when others => null;
end case;

---------------------------------------------------------------------------------------------------------------------Sbox
-------------------------------------------------------------------------------------------------------------------process(rst,clk,look)
begin
if rst = '1' then dato <= x"00";
elsif rising_edge(clk) then
case look is
when x"00" => dato <= x"63";
when x"01" => dato <= x"7C";
when x"02" => dato <= x"77";
when x"03" => dato <= x"7B";
when x"04" => dato <= x"F2";
when x"05" => dato <= x"6B";
when x"06" => dato <= x"6F";
when x"07" => dato <= x"C5";
when x"08" => dato <= x"30";
when x"09" => dato <= x"01";
when x"0A" => dato <= x"67";
when x"0B" => dato <= x"2B";
when x"0C" => dato <= x"FE";
when x"0D" => dato <= x"D7";
when x"0E" => dato <= x"AB";
when x"0F" => dato <= x"76";
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"10"
x"11"
x"12"
x"13"
x"14"
x"15"
x"16"
x"17"
x"18"
x"19"
x"1A"
x"1B"
x"1C"
x"1D"
x"1E"
x"1F"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"CA";
x"82";
x"C9";
x"7D";
x"FA";
x"59";
x"47";
x"F0";
x"AD";
x"D4";
x"A2";
x"AF";
x"9C";
x"A4";
x"72";
x"C0";

when
when
when
when

x"20"
x"21"
x"22"
x"23"

=>
=>
=>
=>

dato
dato
dato
dato

<=
<=
<=
<=

x"B7";
x"FD";
x"93";
x"26";

78

Apndices
when
when
when
when
when
when
when
when
when
when
when
when

x"24"
x"25"
x"26"
x"27"
x"28"
x"29"
x"2A"
x"2B"
x"2C"
x"2D"
x"2E"
x"2F"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"36";
x"3F";
x"F7";
x"CC";
x"34";
x"A5";
x"E5";
x"F1";
x"71";
x"D8";
x"31";
x"15";

when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"30"
x"31"
x"32"
x"33"
x"34"
x"35"
x"36"
x"37"
x"38"
x"39"
x"3A"
x"3B"
x"3C"
x"3D"
x"3E"
x"3F"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"04";
x"C7";
x"23";
x"C3";
x"18";
x"96";
x"05";
x"9A";
x"07";
x"12";
x"80";
x"E2";
x"EB";
x"27";
x"B2";
x"75";

when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"40"
x"41"
x"42"
x"43"
x"44"
x"45"
x"46"
x"47"
x"48"
x"49"
x"4A"
x"4B"
x"4C"
x"4D"
x"4E"
x"4F"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"09";
x"83";
x"2C";
x"1A";
x"1B";
x"6E";
x"5A";
x"A0";
x"52";
x"3B";
x"D6";
x"B3";
x"29";
x"E3";
x"2F";
x"84";

when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"50"
x"51"
x"52"
x"53"
x"54"
x"55"
x"56"
x"57"
x"58"
x"59"
x"5A"
x"5B"
x"5C"
x"5D"
x"5E"
x"5F"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"53";
x"D1";
x"00";
x"ED";
x"20";
x"FC";
x"B1";
x"5B";
x"6A";
x"CB";
x"BE";
x"39";
x"4A";
x"4C";
x"58";
x"CF";

when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"60"
x"61"
x"62"
x"63"
x"64"
x"65"
x"66"
x"67"
x"68"
x"69"
x"6A"
x"6B"
x"6C"
x"6D"
x"6E"
x"6F"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"D0";
x"EF";
x"AA";
x"FB";
x"43";
x"4D";
x"33";
x"85";
x"45";
x"F9";
x"02";
x"7F";
x"50";
x"3C";
x"9F";
x"A8";

when
when
when
when
when
when
when
when
when
when
when
when
when

x"70"
x"71"
x"72"
x"73"
x"74"
x"75"
x"76"
x"77"
x"78"
x"79"
x"7A"
x"7B"
x"7C"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"51";
x"A3";
x"40";
x"8F";
x"92";
x"9D";
x"38";
x"F5";
x"BC";
x"B6";
x"DA";
x"21";
x"10";

79

Apndices
when x"7D" => dato <= x"FF";
when x"7E" => dato <= x"F3";
when x"7F" => dato <= x"D2";
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"80"
x"81"
x"82"
x"83"
x"84"
x"85"
x"86"
x"87"
x"88"
x"89"
x"8A"
x"8B"
x"8C"
x"8D"
x"8E"
x"8F"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"CD";
x"0C";
x"13";
x"EC";
x"5F";
x"97";
x"44";
x"17";
x"C4";
x"A7";
x"7E";
x"3D";
x"64";
x"5D";
x"19";
x"73";

when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"90"
x"91"
x"92"
x"93"
x"94"
x"95"
x"96"
x"97"
x"98"
x"99"
x"9A"
x"9B"
x"9C"
x"9D"
x"9E"
x"9F"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"60";
x"81";
x"4F";
x"DC";
x"22";
x"2A";
x"90";
x"88";
x"46";
x"EE";
x"B8";
x"14";
x"DE";
x"5E";
x"0B";
x"DB";

when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"A0"
x"A1"
x"A2"
x"A3"
x"A4"
x"A5"
x"A6"
x"A7"
x"A8"
x"A9"
x"AA"
x"AB"
x"AC"
x"AD"
x"AE"
x"AF"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"E0";
x"32";
x"3A";
x"0A";
x"49";
x"06";
x"24";
x"5C";
x"C2";
x"D3";
x"AC";
x"62";
x"91";
x"95";
x"E4";
x"79";

when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"B0"
x"B1"
x"B2"
x"B3"
x"B4"
x"B5"
x"B6"
x"B7"
x"B8"
x"B9"
x"BA"
x"BB"
x"BC"
x"BD"
x"BE"
x"BF"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"E7";
x"C8";
x"37";
x"6D";
x"8D";
x"D5";
x"4E";
x"A9";
x"6C";
x"56";
x"F4";
x"EA";
x"65";
x"7A";
x"AE";
x"08";

when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"C0"
x"C1"
x"C2"
x"C3"
x"C4"
x"C5"
x"C6"
x"C7"
x"C8"
x"C9"
x"CA"
x"CB"
x"CC"
x"CD"
x"CE"
x"CF"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"BA";
x"78";
x"25";
x"2E";
x"1C";
x"A6";
x"B4";
x"C6";
x"E8";
x"DD";
x"74";
x"1F";
x"4B";
x"BD";
x"8B";
x"8A";

when
when
when
when
when

x"D0"
x"D1"
x"D2"
x"D3"
x"D4"

=>
=>
=>
=>
=>

dato
dato
dato
dato
dato

<=
<=
<=
<=
<=

x"70";
x"3E";
x"B5";
x"66";
x"48";

80

Apndices

end if;
end process;

when
when
when
when
when
when
when
when
when
when
when

x"D5"
x"D6"
x"D7"
x"D8"
x"D9"
x"DA"
x"DB"
x"DC"
x"DD"
x"DE"
x"DF"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"03";
x"F6";
x"0E";
x"61";
x"35";
x"57";
x"B9";
x"86";
x"C1";
x"1D";
x"9E";

when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"E0"
x"E1"
x"E2"
x"E3"
x"E4"
x"E5"
x"E6"
x"E7"
x"E8"
x"E9"
x"EA"
x"EB"
x"EC"
x"ED"
x"EE"
x"EF"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato
dato

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"E1";
x"F8";
x"98";
x"11";
x"69";
x"D9";
x"8E";
x"94";
x"9B";
x"1E";
x"87";
x"E9";
x"CE";
x"55";
x"28";
x"DF";

when x"F0" => dato <=


when x"F1" => dato <=
when x"F2" => dato <=
when x"F3" => dato <=
when x"F4" => dato <=
when x"F5" => dato <=
when x"F6" => dato <=
when x"F7" => dato <=
when x"F8" => dato <=
when x"F9" => dato <=
when x"FA" => dato <=
when x"FB" => dato <=
when x"FC" => dato <=
when x"FD" => dato <=
when x"FE" => dato <=
when x"FF" => dato <=
when others => null;
end case;

x"8C";
x"A1";
x"89";
x"0D";
x"BF";
x"E6";
x"42";
x"68";
x"41";
x"99";
x"2D";
x"0F";
x"B0";
x"54";
x"BB";
x"16";

---------------------------------------------------------------------------------------------------------------------Scan-code to ASCII
-------------------------------------------------------------------------------------------------------------------process(rst,clk,code,up_case)
begin
if rst = '1' then ascii <= x"20";
elsif rising_edge(clk) then
case up_case is
when
case
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

'0' =>
code is
x"1C" =>
x"32" =>
x"21" =>
x"23" =>
x"24" =>
x"2B" =>
x"34" =>
x"33" =>
x"43" =>
x"3B" =>
x"42" =>
x"4B" =>
x"3A" =>
x"31" =>
x"4C" =>
x"44" =>
x"4D" =>
x"15" =>
x"2D" =>
x"1B" =>
x"2C" =>
x"3C" =>
x"2A" =>
x"1D" =>
x"22" =>
x"35" =>
x"1A" =>

ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"61";
x"62";
x"63";
x"64";
x"65";
x"66";
x"67";
x"68";
x"69";
x"6A";
x"6B";
x"6C";
x"6D";
x"6E";
x"EE";
x"6F";
x"70";
x"71";
x"72";
x"73";
x"74";
x"75";
x"76";
x"77";
x"78";
x"79";
x"7A";

--a
--b
--c
--d
--e
--f
--g
--h
--i
--j
--k
--l
--m
--n
--
--o
--p
--q
--r
--s
--t
--u
--v
--w
--x
--y
--z

when
when
when
when

x"45"
x"16"
x"1E"
x"26"

ascii
ascii
ascii
ascii

<=
<=
<=
<=

x"30";
x"31";
x"32";
x"33";

--0
--1
--2
--3

=>
=>
=>
=>

81

Apndices
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"25"
x"2E"
x"36"
x"3D"
x"3E"
x"46"
x"0E"
x"61"
x"41"
x"49"
x"4A"
x"29"
x"52"
x"5D"
x"54"
x"5B"
x"7C"
x"79"
x"7B"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"34";
x"35";
x"36";
x"37";
x"38";
x"39";
x"7C";
x"3C";
x"2C";
x"2E";
x"B0";
x"20";
x"7B";
x"7D";
x"5B";
x"5D";
x"78";
x"2B";
x"2D";

--4
--5
--6
--7
--8
--9
--vertical |
--menor que <
--coma ,
--punto .
--guin --espacio
--corchete a {
--corchete b }
--parentesis c_a[
--parentesis c_b ]
--multiplicacion
--suma
--resta

when others => ascii <= x"40";


end case;
when '1' =>
case
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when
when

code is
x"1C" =>
x"32" =>
x"21" =>
x"23" =>
x"24" =>
x"2B" =>
x"34" =>
x"33" =>
x"43" =>
x"3B" =>
x"42" =>
x"4B" =>
x"3A" =>
x"31" =>
x"4C" =>
x"44" =>
x"4D" =>
x"15" =>
x"2D" =>
x"1B" =>
x"2C" =>
x"3C" =>
x"2A" =>
x"1D" =>
x"22" =>
x"35" =>
x"1A" =>

ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"41";
x"42";
x"43";
x"44";
x"45";
x"46";
x"47";
x"48";
x"49";
x"4A";
x"4B";
x"4C";
x"4D";
x"4E";
x"EE";
x"4F";
x"50";
x"51";
x"52";
x"53";
x"54";
x"55";
x"56";
x"57";
x"58";
x"59";
x"5A";

--A
--B
--C
--D
--E
--F
--G
--H
--I
--J
--K
--L
--M
--N
--
--O
--P
--Q
--R
--S
--T
--U
--V
--W
--X
--Y
--Z

when
when
when
when
when
when
when
when
when
when
when
when
when
when

x"0E"
x"16"
x"1E"
x"26"
x"25"
x"2E"
x"36"
x"3D"
x"3E"
x"46"
x"45"
x"61"
x"29"
x"4A"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"DF";
x"21";
x"22";
x"23";
x"24";
x"25";
x"26";
x"2F";
x"28";
x"29";
x"3F";
x"3E";
x"20";
x"5F";

--grados
--exclamacion !
--parentesis "
--nmero #
--pesos $
--porcentaje %
--ampersand &
--diagonal /
--parntesis a (
--parntesis b )
--interrogacin ?
--mayor que >
--espacio
--guion bajo

when
when
when
when
when
when
when
when
when
when
when
when
when

x"70"
x"69"
x"72"
x"7A"
x"6B"
x"73"
x"74"
x"6C"
x"75"
x"7D"
x"7C"
x"79"
x"7B"

=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii
ascii

<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=
<=

x"30";
x"31";
x"32";
x"33";
x"34";
x"35";
x"36";
x"37";
x"38";
x"39";
x"78";
x"2B";
x"2D";

--0
--1
--2
--3
--4
--5
--6
--7
--8
--9
--multiplicacion
--suma
--resta

when others => ascii <= x"40";


end case;
when others => null;
end case;
end if;
end process;
-------------------------------------------------------------------------------------------------------------------end Behavioral;

82

Apndices

Apndice D.

Cdigo-M para el intercambio de datos FPGA-PC a travs


de MatLab

clc;
datos = input('Ingrese los datos a cifrar (16, 8 bits c/u) en formato hexadecimal: ','s');
llave = input('Ingrese la llave utilizada para el cifrado (16, 8 bits c/u) en formato hexadecimal: ','s');
% ------------------------------------------------------------------------envio = 0;
matriz = 0;
for n = 1:3:46
sub0 = datos(n);
sub1 = datos(n+1);
envio = hex2dec([sub0 sub1]);
matriz = [matriz envio];
end
n = 1;
for n = 1:3:46
sub0 = llave(n);
sub1 = llave(n+1);
envio = hex2dec([sub0 sub1]);
matriz = [matriz envio];
end
elementos = length(matriz);
matriz = matriz(2:elementos);
matriz = uint8(matriz);
% ------------------------------------------------------------------------port = 'COM1';
puerto_serial = serial(port);
set(puerto_serial,'Timeout', 30);
set(puerto_serial,'OutputBufferSize',32);
set(puerto_serial,'InputBufferSize',32);
set(puerto_serial,'BaudRate',115200);
set(puerto_serial,'DataBits',8);
set(puerto_serial,'Parity','none');
set(puerto_serial,'StopBits',1);
fopen(puerto_serial);
fwrite(puerto_serial,matriz,'uint8');
%------------------------------------------------------------------------[A,cuenta] = fread(puerto_serial);
fclose(puerto_serial);
salida = dec2hex(A(1:16))
key_schedule = dec2hex(A(17:32))

83

Listadodereferencias

[1] Chapman,Ken;XilinxLtd.PicoBlazeKCSPM3Manual2(Rev.7)[enlnea].USAOctubre
de2003.DisponibleenInternet:<http://www.xilinx.com>

[2] Federal Information Processing Standards Publication 197. Announcing the Advanced
Encryption Standard (AES) [en lnea]. USA Noviembre 26 2001. Disponible en Internet:
<http://www.csrc.nist.gov>

[3] CryptographyandNetworkSecurity.PrinciplesandPractices
WilliamStallings
3Edicin
Pearson/PrenticeHall
USA,2003

[4] Xilinx. Spartan3E Starter Kit Board User Guide (UG230 v1.0) [en lnea]. USA Marzo 9
2006.DisponibleenInternet:<http://www.xilinx.com>

[5] TheDesignofRijndael:AES,TheAdvancedEncryptionStandard
DaemenJoan,RijmenVincent.
1Edicin
Springer/Verlag
USA,2002

[6] HandbookofAppliedCryptography
MenezezAlfredJ.,VanOorschotPaulC.,VanstoneScottA.
5Edicin
USA,2001

[7] SecurityonFPGAs:Stateoftheartimplementationsandattacks
InACMTransactionsonEmbeddedComputingSystems(TECS)volume3
USA,2004

[8] EfficientmodularpipelinedAESimplementationincountermodeonAlteraFPGA
Infieldprogrammablelogicandapplications,pages:282291,534574.
SystemTECSvolume3
USA,2004

[9] Techinical report, U.C. Berkeley BRASS group. High performance, compact AES
implementations in Xilinx FPGAs [en lnea]. USA 2002. Disponible en internet:
<http://www.cs.berkey.edu/nnweaver/sfra/rijndael.pdf>
[10]LabbA.PrezA.AESimplementationsonFPGA:Timeflexibilitytradeoff.

84

ListadodeReferencias
[11]An FPGAbased performance analysis of the unrolling, tiling and pipelining of the AES
algorithminfieldprogrammablelogicandapplications.
SaggeseG.P.,MazzeoA.,MazzoccaN.andStrolloA.G.M.
Ches2003
Pginas:292302
Kln,2003

[12]VerycompactFPGAimplementationoftheAESalgorithmincryptographichardwareand
embeddedsystems.
Chodowiec,PawelandGajKris.
Ches2003
Pginas:319333
Kln,2003

[13]EfficientimplementationofRijndaelencryptioninreconfigurablehardware:Improvments
andDesigntradeoffs.
StandaertFranoisXavier,RouvroyGael,QuisquartJeanJacquesandLegatJeanDidier.
Ches2003
Pginas:334350
Kln,2003
[14]Comparison of the hardware performance of the AES candidates using reconfigurable
hardware.
GajKrisandChodowiecPawel.
InthethirdAEScandidateconference.
NewYork,2000

[15]4.2Gbit/ssinglechipFPGAimplementationofAESalgorithm.
RodriguezHenriquezF.,SaqibN.A.andDiazPerezA.
Electronicslettersvolumen39.
Pginas:11151116
USA,2003

[16]Amphion.CS521010:HighperformanceAESencryptioncores.2003
[17]DiseodeunprocesadorcriptogrficoRijndaelenFPGA.
SegredoasAlejandro,ZabalaEnriqueyBelloGustavo.
InXWorkshopIBERCHIP
Pgina:64
Cartagena,2004
[18]ImplementacinenHardwaredelalgoritmoRijndael.
JcomeCaldernGermn,VelazcoMedinaJaime,LpezHernndezJulio.
InXWorkshopIBERCHIP
Pgina:113
Cartagena,2004

85

ListadodeReferencias
[19]DanielJuliusBernstein.AESSpeed.[enlnea].USAMarzo2008.Disponibleeninternet:
<http://cr.yp.to/aesspeed.html>

[20]ChungHuang Yang. Performance of AES on microcontrollers. [en lnea]. USA Marzo


2008.Disponibleeninternet:<http://www.crypto.idv.tw/AES/index.htm>

[21]EdiPermadi.ImplementingAESusingPIC16F84.[enlnea].USAMarzo2008.Disponible
en internet: <http://edipermadi.wordpress.com/2008/01/21/implementingaesusing
pic16f84>

[22]Stiftung Secure Information and Communication Technologies. Performanceoptimized


AES implementation for 8051based microcontrollers. [en lnea]. Austria Marzo 2008.
Disponibleeninternet:<http://jce.iaik.tugraz.at>

[23]DavidFlowersandHowardHenrySchlunder;MicrochipTechnologyInc.DataEncryption
RoutinesforPIC24anddsPICdevices.[enlnea].USAMarzo2008.Disponibleeninternet:
<http://ww1.microchip.com/downloads/en/AppNotes/0144a.pdf>

[24]AnalysisanddesignofdigitalsystemswithVHDL.
AllenM.Dewey.
PSWpub.
Boston,1997

[25]IntroductoryVHDLfromsimulationtosynthesys.
SudhakarYalamanchili.
PrenticeHall
USA,2001

[26]Programmablelogichandbook.
Sharma,AshokK.
McGrawHill.
USA,1998
[27]Programmablelogic,PLDsandFPGAs.
SealsR.C.
McGrawHill.
USA,1997
[28]DigitalSignalProcessingwithFieldProgrammableGateArrays.
UweMeyerBaese.
Springer.
USA,2007

86

You might also like