Upload
fernando-pinal-moctezuma
View
91
Download
7
Embed Size (px)
DESCRIPTION
Por medio de este trabajo de investigación se estudian las características que sustentan al Algoritmo de Encriptación Avanzado (AES), y la manera de realizar la síntesis de dicho algoritmo para su implementación en un Arreglo de Compuertas Programable en Campo (FPGA) al utilizar una de las herramientas de procesamiento embebido del fabricante Xilinx®.
Citation preview
BF T
“E(AuP TeAA H
BeneméFacultad
Tesina par
ImplemEstándaAES), enutilizandPicoBlaz
esista: JuaAsesor inteAsesor exte
. Puebla de
érita Ud de Cie
ra el grado
mentaciar de Enn una pdo el Mze™”
n Fernandrno: MC Rerno: MC A
e Z. Abril de
Universencias d
o de Licen
ón en Hncriptacplataforicrocon
do Piñal Moicardo ÁlvaAlba Marib
e 2008
sidad Ade la El
nciatura e
Hardwación Avarma FPGntrolado
octezumaarez Gonzáel Sánchez
Autónolectrón
en Electró
are del anzado GA, or
ález. FCE‐Bz Gálvez. F
oma denica ónica:
BUAP FCC‐BUAP
e Puebl
la
I
Agradecimientos
Por medio de este trabajo de investigación se estudian las características que sustentan al
Algoritmo de Encriptación Avanzado (AES), y la manera de realizar la síntesis de dicho
algoritmo para su implementación en un Arreglo de Compuertas Programable en Campo
(FPGA) al utilizar una de las herramientas de procesamiento embebido del fabricante
Xilinx®.
II
Resumen
Por medio de este trabajo de investigación se estudian las características que sustentan al
Algoritmo de Encriptación Avanzado (AES), y la manera de realizar la síntesis de dicho
algoritmo para su implementación en un Arreglo de Compuertas Programable en Campo
(FPGA) al utilizar una de las herramientas de procesamiento embebido del fabricante
Xilinx®.
III
Contenido General
Introducción...……...……….………………………….………………….…………...……………………….VIII
Planteamiento del problema………....………………….……………………………..….………....….…VIII
Metas y objetivos…………………………….……………………………..…………..……………………….…VIII
Justificación……………………………………….………………………………………………………………………IX
Capítulo I. MARCO HISTÓRICO……………………………….…...……………….…………………….1
1.1 Criptografía en la historia….………………………………………………...………………………..……..1
1.2 Criptografía clásica………………….…………………………………………...………………………..……..1
1.2.1 La Escitala (siglo V a.C)…………………...……………………………………………………………..……..2
1.2.2 Cifrado de César (siglo I a.C)………………………………………………………………………………….2
1.2.3 Cifrador de Polybius (siglo II a.C)……………………………………………………………………………3
1.3 Criptografía moderna…………….…………………………………………...………………………..……..3
1.3.1 Disco de Alberti………………………………...……………………………………………………………..……3
1.3.2 Cilindro de Jefferson……………...……………………………………………………………..…………….…4
1.3.3 Disco de Wheatstone…………...……………………………………………………………..………………..5
1.3.4 El siglo XX y la Segunda Guerra Mundial…………………………………………..……………………5
1.4 La Criptografía en la era de la Información….…………………………………………...……………7
1.5 ¿Qué es un FPGA?………………….………………………...……………………………………………………8
1.5.1 Historia de los FPGA…………………………………………………………………………...…………………9
1.6 El algoritmo AES………………………………………….…………………………………………...………….10
1.6.1 Evaluación de AES……………….……………………………………………………………...………………11
Capítulo II. MARCO TEÓRICO………………………………….…...……………….…………………..13
2.1 Notación y convenciones………………………..………………………………………...………………..13
2.1.1 Byte………………………….……………………………………………………………………...…………………13
2.1.2 Arreglos de Bytes…..….……………………………………………………………………...…………………14
2.1.3 El State.…………………….……………………………………………………………………...…………………15
IV
2.1.4 El State como un arreglo de columnas……………………………………………...…………………15
2.2 Introducción a la Matemática……….………..………………………………………...………………..16
2.2.1 Grupos, Anillos y Campos.………………………………………………………………...…………………16
2.2.2 Grupos……………………………………………………………………………………………...…………………16
2.2.3 Anillos.……………………………………………………………………………………………...…………………17
2.2.4 Campos.…………………………………………………………………………………………...…………………17
2.2.5 Campos Finitos de la forma GF(28)………..…….…………………………………...…………………18
2.2.6 Suma………………………………………………………………………………………………...…………………18
2.2.7 Multiplicación..………………………………………………………………………………...…………………19
2.2.8 Multiplicación por x………………………………………………………………………...…………….……20
2.2.9 Polinomios con coeficientes en GF(28)…..………………………………………...…………….……21
2.3 Descripción del Algoritmo AES….………..……………………………………………...………………..23
2.3.1 Etapa SubBytes………………………………………………………………………………...…………………23
2.3.2 Etapa ShiftRows…..…………………………………………………………………………...…………………24
2.3.3 Etapa MixColumns…………………………………………………………………………...…………………24
2.3.4 Etapa AddRoundKey………………………………………………………………………...………………….27
Capítulo III. DISEÑO DEL SISTEMA………………………….…...……………….…………………….29
3.1 Descripción de la plataforma de desarrollo de Hardware..………………...………………..29
3.2 Descripción de la plataforma de desarrollo de Software….………………...………………..30
3.3 Diagrama conceptual del sistema……………………………...………………………………………..30
3.4 Metodología…..…………...………………………………………………………………………………………31
3.5 ¿Por qué utilizar un microcontrolador en un FPGA?……………………………………………..31
3.6 Características del microcontrolador PicoBlaze™…………………………………………………..32
3.6.1 pBlazeIDE™, software de desarrollo en ensamblador para PicoBlaze™…….……………33
3.7 Implementación del Sistema………………………………………………………………………………..34
3.7.1 Gestión de Entrada/Salida de datos al Sistema….………………….....................…………35 3.7.1.1 Comunicación Serial.……………………......……………………………….....................…………35
3.7.1.2 Comunicación mediante un teclado PS/2 …………………………………………………………36
3.7.2 Gestión de la LCD………………….....................………………………………………………………….38
V
3.7.3 Encriptación de datos.………………….....................……………………………………………….…41
3.7.3.1 Implementación para AddRoundKey.......………………..……………….....................……42
3.7.3.2 Implementación para SubBytes………………………………………………………………………..43
3.7.3.3 Implementación para ShiftRows……………………………………………………………………….45
3.7.3.4 Implementación para MixColumns……………………………………………………………………46
3.8 Arquitectura del Sistema……………………………………………………………………………………...48
3.8.1 Microcontrolador PicoBlaze™…………………..…………………………….....................…………49
3.8.2 Memoria de programa para el microcontrolador PicoBlaze™…………………………….…49
3.8.3 Interface………………………………………………………………………………………………………………49
3.9 Diseño del programa para el intercambio de datos PC‐FPGA a través de MatLab® 50
Capítulo IV. ANÁLISIS DE RESULTADOS.………………….…...……………….…………………….51
4.1 Resultados de la implementación del sistema……………………………...…...………………..53
4.1.1 Área…………………………………………………………………………...…………………………………….…53
4.1.2 Throughput………………………………………………………………...…………………………………….…54
4.1.3 Comparación con otras Arquitecturas………………………...…………………………………….…54
Capítulo V. CONCLUSIONES……………….…...……………….………………………………………..56
5.1 Resumen de los resultados obtenidos…………………………………………...…...………………..56
5.2 Conclusiones del trabajo realizado…….………………………………………...…...………………..56
5.3 Trabajo futuro……………………………………………………………………………...…...………………..57
Apéndices……...……...……….………………………….………………….…………...………………………58
Apéndice A. Términos y Acrónimos……………………………………………………………………..58
Apéndice B. Código en ensamblador para el microcontrolador PicoBlaze™………….59
Apéndice C. Código en VHDL para la entidad interface……………………………………….77
Apéndice D. Código‐M para el intercambio de datos PC‐FPGA a través de
MatLab®………………………………………………………………………………………..…83
Listado de referencias..….………….……………….………………….…………...……………………….66
VI
Contenido de Figuras
Figura 1. La Escitala………….……………………………………....…………………….……………………………………....2
Figura 2. Alfabeto de cifrado de César………………………………….…………………….…………………………....2
Figura 3. Ejes coordenados para el cifrador de Polybius……………………………………..…………………....3
Figura 4. Disco de Alberti…………………….……………………………………………….......................................4
Figura 5. Cilindro de Jefferson…………………….………………………………………………….............................5
Figura 6. Disco de Wheatstone.………………….……………………………………...........................................5
Figura 7. Enigma…………………….………………….……………………………………...........................................6
Figura 8. FPGA Xilinx® SPARTAN™‐3…………….……………………………………...........................................8
Figura 9. Dr. Vincent Rijmen y Dr. Joan Daemen……….………………………………………….....................10
Figura 10. Representación Hexadecimal de los patrones de nibbles.............................................14
Figura 11. Índices para Bytes y bits..………….……………………………………............................................14
Figura 12. Entradas y salidas para el arreglo State………….………………………………………………..........15
Figura 13. Etapa SubBytes…………….…………………………………………………………………………………………..23
Figura 14. Etapa ShiftRows……………………….……………………………………............................................24
Figura 15. Etapa MixColumns………..………….……………………………………............................................27
Figura 16. Etapa AddRoundKey………………….……………………………………...........................................28
Figura 17. Tarjeta de desarrollo SPARTAN‐3E™………………………………………………………………………….29
Figura 18. Diagrama conceptual del sistema………….………………………………………………………………...30
Figura 19. Arquitectura del microcontrolador PicoBlaze™……….…………………………………………………33
Figura 20. Software pBlazeIDE™ del desarrollador Mediatronix®……….…………………………………….…33 Figura 21. Programa que ejecuta el microcontrolador PicoBlaze™………………………..……………………34
Figura 22. Puertos Seriales RS‐232 de la tarjeta SPARTAN‐3E™Starter‐Kit™………………………………..35
Figura 23. Comportamiento del sistema en la comunicación de datos serial……………………………..36
Figura 24. Conector PS/2 de la tarjeta SPARTAN‐3E™Starter‐Kit™………….…………………………………..36
Figura 25. Formas de onda y diagrama de tiempos para la comunicación PS/2…………………………37
Figura 26. Scan‐codes para cada una de las teclas……….……………………………………………………………37
Figura 27. Diagrama de flujo para las rutinas de la LCD………….…………………………………………………38
Figura 28. Protocolo de comunicación de la LCD………….……………………………………………………………39
Figura 29. Secuencia del menú de usuario del sistema criptográfico.………………………………………..40
Figura 30. Diagrama de flujo para el algoritmo de encriptación AES…………………………………………41
Figura 31. Diagrama de flujo para implementar AddRoundKey…………………………………………………42
Figura 32. Sbox empleada para la ejecución de AES…….………………………………………………………….…43
Figura 33. Diagrama de flujo para implementar SubBytes.……………………………………………..…………44
Figura 34. Diagrama de flujo para implementar ShiftRows…………………………………………………….…45
Figura 35. Diagrama de flujo para implementar MixColumns……………………………………………………46
VII
Figura 36. Subrutina para la multiplicación de matrices en GF(28)………………………………………….…47
Figura 37. Diagrama esquemático de la arquitectura del sistema…….……………………………………….48
Figura 38. Diagrama de flujo para el Código‐M de MatLab®……………………………………………………...50
Figura 39. Ejemplo para AES según FIPS PUB 197…….………………………………………………………….……51
Figura 40. Datos enviados y recibidos a través de MatLab® hacia el FPGA…….………….......…………51
Figura 41. Resultados desplegados en la LCD de la tarjeta de desarrollo……….………….......…………52
Figura 42. Vista de los recursos utilizados por el diseño.……………………………………………………………53
Figura 43. Reporte del mapeo del diseño…….……………………………………………………………………….……54
Figura 44. Comparación de desempeño entre arquitecturas de cifrado AES‐128…………....…………55
VIII
Introducción
Planteamiento del problema
La criptografía es tan antigua como la historia de la humanidad, debido a que siempre ha existido la necesidad
de poder enviar y recibir información sin que esta sea interceptada o modificada en su trayecto. Así, el
principio básico de la criptografía, es mantener la privacidad en la comunicación entre dos personas alterando
el mensaje original de modo que sea incomprensible a toda persona distinta del ó los destinatarios.
Debido a esta necesidad, a través 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
criptográfico del que se tiene registro, (siglo V a.C.), hasta sofisticados sistemas que aprovechan la teoría
desarrollada a través del tiempo.
Los sistemas criptográficos actuales surgen en base a las necesidades contemporáneas, ya que en este
momento la humanidad transmite grandes cantidades de información, la cual en su mayoría son enviadas ó
recibidas por dispositivos que manipulan señales discretas (ó digitales), como son teléfonos celulares, medios
de almacenamiento (ópticos, magnéticos, tarjetas de memoria), computadoras que se interconectan entre sí
(Internet ó Intranet), etc. Mucha de esta información requiere de gran confidencialidad debido a que se
transmiten datos sensibles como: contraseñas, números de tarjetas de crédito, información científica, militar,
etc. Así surgen los sistemas criptográficos modernos, basados en plataformas electrónicas digitales.
Metas y Objetivos
En base al contexto descrito anteriormente, el Objetivo General de este trabajo es implementar en hardware
el Algoritmo de Encriptación Avanzada (AES) en un Arreglo de Compuertas Programable en Campo (FPGA).
Así el Objetivo Específico del trabajo es utilizar el algoritmo AES, también conocido como Rijndael, en un
FPGA del fabricante Xilinx®, utilizando el microcontrolador PicoBlaze™. Este algoritmo criptográfico es
reconocido como el estándar actualmente en la mayor parte del mundo.
Además la plataforma FPGA ha tenido un gran auge en los últimos años, debido a su amplio rango de
aplicaciones que incluyen a los DSP (Procesadores Digitales de Señales), radio definido por software,
sistemas aeroespaciales y de defensa, prototipos de ASIC (Circuito Integrado de Aplicación Específica),
sistemas de imágenes para medicina, sistemas de visión, reconocimiento de voz, Bioinformática, emulación
de Hardware de computadora, etc.
Introducción
IX
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 periféricos 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 diseñado debe de ser rápido, eficiente y versátil.
Justificación
En base a este trabajo se pretende manejar el más nuevo estándar en el área de criptografía informática;
además de utilizar una de las plataformas digitales que más auge ha tenido en los últimos años debido a su
flexibilidad de aplicación y reconfiguración, además del gran desempeño que presentan.
Utilizando estas herramientas, se intenta proveer un instrumento para seguridad informática, que presente un
desempeño aceptable respecto a un ASIC (Circuito Integrado de Aplicación Específica), y un desempeño
notable en comparación con Procesadores de Propósito General. Con la respectiva ventaja de utilizar un
FPGA en lugar de un ASIC que es el bajo coste de la lógica reconfigurable.
La viabilidad de este proyecto para su realización no es un obstáculo, 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
investigación. Para sustentar la investigación con argumentos bibliográficos se utiliza la publicación oficial
del algoritmo AES, además de contar con texto especializado en el tema que apoya la investigación y los
resultados.
El algoritmo AES se sustenta en dos teorías matemáticas, por una parte la llamada Teoría de Campos Finitos
específicamente Campos de Galois; y por otro lado utiliza también Aritmética Modular.
Por desgracia, este tipo de Fundamentos Matemáticos no son impartidos en la Licenciatura, por lo que es uno
de los principales obstáculos que habrán de resolverse. Sin embargo, gracias al asesor externo de este trabajo
de investigación, el cual, su área de especialidad abarca este tipo de Fundamentos, este inconveniente puede
ser solventado.
1
Capítulo I. MARCO HISTÓRICO
1.1 Criptografía en la historia
La criptografía (del griego kryptos "ocultar", y grafos "escribir") es la técnica, ó arte de la escritura secreta,
actualmente considerada una ciencia que utiliza técnicas matemáticas que hacen posible el intercambio de
mensajes de manera que sólo puedan ser leídos por las personas a quienes van dirigidos.
El principio básico de la criptografía es mantener la privacidad de la comunicación 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 transformación del mensaje original en el mensaje cifrado (criptograma) le llamamos cifrado, y a la
operación inversa, le llamamos descifrado; estos pasos se realizan mediante un conjunto de reglas
preestablecidas entre los comunicantes a la que llamamos clave. El criptoanálisis es el conjunto de técnicas
que intenta encontrar la clave utilizada entre dos comunicantes, revelando así el mensaje original.
1.2 Criptografía clásica
La primera aplicación conocida de la criptografía se remonta hace 4000 años, cuando los egipcios utilizaban
jeroglíficos crípticos para narrar la vida y hazañas de sus faraones. La encriptación no se empleaba para
esconder el significado del texto sino para darle un carácter más solemne. En la antigua China, el carácter
ideográfico del idioma servía 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 antigüedad emplearon diversos métodos de encriptación y desencriptación 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, destacándose un árabe, Muhammad Al-Qalqashandi, quien inventó una técnica para
descifrar mensajes que todavía se usa en la actualidad.
La criptografía 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 criptografía, con el fin de perfeccionar los métodos de encriptación así como
para descifrar los de sus enemigos.
A conti
historia
1.
El
Es
m
lla
Aú
int
1.
Ju
de
op
alf
A
D
Te
M
inuación se mu
a:
2.1 La E
l primer caso
sparta, por par
ediante la incl
amado escitala
ún sabiendo la
terceptor del m
2.2 Cifra
ulio César prese
erecha de los c
peraciones se r
fabeto.
B C D E
E F G H
exto cifrado: W
Mensaje original
uestran algunos
Escitala (sigl
conocido del
rte de los lac
lusión de símb
a, de longitud y
a técnica utiliz
mensaje tenía u
ado de César
enta este cifrad
aracteres del te
realizan utiliza
F G H
I J K
Wx wdoelhp Eu
l: Tú también B
s mecanismos
lo V a.C)
uso de métod
edemonios. El
bolos innecesa
y grosor prefija
zada, si no se
un complicado
Figu
r (siglo I a.C
dor cuyo algor
exto en claro.
ando aritmétic
I J K L
L M N Ñ
Figura 2. Alfa
uxwxv?
Brutus?
2
criptográficos
dos criptográfic
l cifrado se b
arios en éste,
ados.
tenían las dim
criptoanálisis.
ra 1. La Escitala.
C)
ritmo consiste e
Es un cifrador
ca modular n,
M N Ñ O
O P Q R
fabeto de cifrado d
relevantes, qu
cos se dio dur
basaba en la a
que desaparec
mensiones exa
en el desplazam
r por sustitució
siendo n igua
O P Q R
R S T U
de César.
Ca
ue se han utiliza
rante la guerra
alteración del
cían al enrollar
actas de la esc
miento de tres
n monoalfabét
al al número d
S T U V
V W X Y
Mapítulo I
ado a través de
a entre Atenas
mensaje origi
rlo en un rodi
citala, un posi
espacios hacia
tico, en el que
de elementos
V W X Y
Y Z A B
Marco Histó
e la
s y
inal
illo
ble
a la
las
del
Z
C
órico
3
Marco HistóricoCapítulo I
1.2.3 Cifrador de Polybius (siglo II a.C)
Es el cifrador por substitución más antiguo que se conoce. El método se basaba en una tabla secreta, en
cuyos ejes se ponían diferentes combinaciones de letras o números y dentro de la tabla las letras del
alfabeto. Cada letra del mensaje a cifrar era substituida por sus coordenadas:
A B C D E
A a b c d e
B f g h i/j k
C l m n o p
D q r s t u
E v w x y z
Figura 3. Ejes coordenados para el cifrador de Polybius.
Texto cifrado: CECDCAEDABBDDEDC AEDC AECA DBAEED
Mensaje: Polybious es el rey
1.3 Criptografía moderna
1.3.1 Disco de Alberti
En 1465, León Battista Alberti, músico, pintor, escritor y arquitecto, concibió el primer sistema
polialfabético que se conoce, que emplea varios abecedarios, utilizando uno u otro, cada tres o cuatro
palabras. El emisor y el destinatario habían de ponerse de acuerdo para fijar la posición relativa de los
círculos concéntricos, 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, más los números del 1 al 4.
Este disco define 24 posibles sustituciones dependiendo de la posición 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
co
lo
Otro de
importa
a su no
1624). D
Las hue
que los
Cuando
la sazón
del pap
reina M
un com
1.
Es
de
18
im
ha
en
m
orrespondiente
s comunicante
e los criptógra
ante tratado sob
ombre. A Sele
Durante los sig
estes de Felipe
matemáticos d
o el matemático
n Enrique IV, e
pa Pío V acusa
María Estuardo,
mplot de aquella
3.2 Cilin
ste dispositivo
e independenci
891. El aparato
mpresas las letr
asta configurar
nviado, el rece
ensaje en claro
(prefijado por
s.
afos más impo
bre la "escritur
nus se le debe
glos XVII, XV
e II utilizaron d
del rey conside
o francés Fran
el conocimient
ando a Enrique
, reina de los E
a tras un cripto
ndro de Jeffe
fue inventado
ia de Estados U
o consiste en un
ras del alfabet
r el mensaje en
eptor solament
o.
los comunican
Figura
rtantes del sig
ra secreta" y qu
e la obra cript
III y XIX, el in
durante mucho
eraban inexpug
çois Viete con
to mostrado po
e IV de utiliza
Escoceses, fue
análisis exitoso
ferson
por el famoso
Unidos, aunqu
na serie de disc
to escritas en c
n claro, y elig
te tiene que po
4
ntes) cada x pa
4. Disco de Alber
glo XVI fue el
ue diseñó un ci
tográfica "Cryp
nterés de los m
o tiempo una c
gnable.
nsiguió criptoan
or el rey francé
ar magia negra
ejecutada por
o por parte de
o Thomas Jeffe
ue el primero e
cos que giran l
cada disco en
ge otra línea q
oner las letras
alabras, habien
rti.
l francés Blais
ifrado que ha l
ptomenytices e
monarcas por la
cifra con un alf
nalizar aquel s
és impulsó una
a para vencer a
su prima Isab
los matemático
erson (1743-18
en fabricarla e
ibremente alre
diferente orde
que será el men
recibidas en
Ca
ndo sido x tamb
se de Vigenere
llegado a nuest
et Cryptograph
criptografía fu
fabeto de más
istema para el
a queja de la co
a sus ejércitos
el I de Inglater
os de Isabel.
826), redactor
en serie fue Ett
ededor de un m
en. El emisor m
nsaje cifrado.
línea y buscar
Mapítulo I
bién prefijada p
e que escribió
tros días asocia
hiae" (Lünebu
ue notable.
de 500 símbo
rey de Francia
orte española a
. Por su parte,
rra al descubri
de la declaraci
tiene Bazeries
mismo eje y llev
mueve los disc
Tras haber si
r en otra línea
Marco Histó
por
un
ada
urg,
olos
a, a
ante
, la
irse
ión
en
van
cos
ido
a el
órico
1.
El
po
las
ale
So
po
vu
ex
1.
El
Al
és
3.3 Disco
l disco de Whe
or Alberti. El in
s 26 letras del
eatoriamente.
obre los discos
or el disco exte
uelta, el peque
xterior ir en sen
3.4 El sig
l siglo XX ha
lberti, a princi
stos giraban con
o de Wheats
eatstone (1802
nvento consta
alfabeto inglés
s hay dos mane
erior, la menor
ño da una vue
ntido antihorari
glo XX y la
revolucionado
ipios del siglo
n cada tecla qu
Figura 5.
stone
2-1875) realiza
de dos discos c
s más el espaci
ecillas como la
r se desplaza p
elta más una le
io, siendo el m
Figura 6.
Segunda Gu
o la criptograf
se diseñaron
ue se pulsaba.
5
Cilindro de Jeffer
a una sustitució
concéntricos: e
io, y en el inte
as de un reloj,
por el disco in
etra. El mensaj
mensaje secreto
Disco de Wheatst
uerra Mund
fía. Retomand
teletipos equip
rson.
ón polialfabéti
en el exterior s
rior se distribu
de forma que
nterior. Cuando
aje en claro se
lo indicado po
tone.
dial
o el concepto
pados con una
Ca
ica, muy parec
se escriben, en
uyen esas mism
a medida que
o el puntero gr
cifraba “prohi
or el puntero m
de las ruedas
a secuencia de
Mapítulo I
cida a la utiliza
orden alfabéti
mas 26 letras p
avanza la may
rande recorre u
ibiendo” al dis
menor.
s concéntricas
rotores móvil
Marco Histó
ada
ico,
ero
yor
una
sco
de
les,
órico
De
re
su
La
ale
cr
un
ale
Un
y
m
m
co
jap
co
M
La exis
dos de
tras la g
las pote
Tras la
siendo
desarro
existent
e esta forma, e
glas en un cód
us predecesoras
a primera paten
emán Arthur
eyeron inviola
n factor decisiv
emanes.
na organizació
de la inteligen
ayor" Lorenz,
ensajes cifrado
onfiaban y que
ponesa de En
omandante Jose
Midway.
tencia de Enig
los secretos m
guerra potencia
encias anglosaj
a conclusión d
Claude Shann
llo. Además, l
tes como una o
en lugar de la l
digo polialfabé
s fue la Rueda
nte data de 19
Scherbius, el
able, sin saber q
vo y apenas co
ón secreta britá
ncia artificial,
desarrollando
os. La máquina
e en definitiva
nigma (llamado
eph J. Rochefo
gma y el hecho
mejor guardado
ando su uso en
onas.
e la Segunda
non y sus inv
los avances en
oportunidad pa
letra elegida, a
tico complejo.
de Jefferson.
19, y es obra d
inventor de E
que aceleraría
onocido: los al
ánica, en la que
había logrado
más de una do
a alemana se c
a, trabajaba pa
os Purple) se
ort, cuyo cripto
Fig
o de que los ali
os de la II Gue
n diversos país
Guerra Mund
vestigaciones s
n computación
ara el desarrollo 6
aparecía un sig
Estos aparato
del holandés A
Enigma una m
su derrota. En
iados eran cap
e participó Ala
o desenmascar
ocena de artilu
convertía así e
ara el enemigo
e descifraron p
oanálisis fue vi
gura 7. Enigma.
ados conociese
erra Mundial.
ses, que, al ins
dial, la criptog
sobre teoría d
n automática su
o de nuevos sis
gno escogido p
os, se llamaron
Alexander Köch
máquina cripto
n efecto, en el d
paces de descif
an Turing, uno
rar las claves
ugios llamados
en el talón de A
o. Paralelamen
por un grupo
ital para la vict
en sus secretos
¿La razón? Qu
talarla, hacían
grafía tiene un
de la informac
uponen tanto u
stemas.
Ca
por la máquina
traductores m
h, que compart
ográfica a roto
desenlace de la
frar todos los m
de los padres
de Enigma y
s las bombas q
Aquiles nazi, u
nte, Los códig
de analistas,
toria american
s fueron durant
uerían seguir s
transparentes
desarrollo teó
ción esenciales
una amenaza p
Mapítulo I
a según diferen
mecánicos. Una
te honores con
or que los na
a contienda, hu
mensajes secre
de la informát
de su "herma
que develaban
un topo en el q
gos de la versi
dirigidos por
na en la batalla
te mucho tiemp
sacándole parti
sus secretos p
órico importan
s hitos en dic
para los sistem
Marco Histó
ntes
a de
n el
azis
ubo
etos
tica
ana
los
que
ión
r el
de
po,
ido
ara
nte;
cho
mas
órico
7
Marco HistóricoCapítulo I
1.4 La Criptografía en la era de la Información
Finalizada la contienda, las nuevas tecnologías electrónicas y digitales se adaptaron a las máquinas
criptográficas. Se dieron así los primeros pasos hacia los sistemas criptográficos más modernos, mucho más
fiables que la sustitución y transposición clásicas. A mediados de los años 70 del siglo pasado, el
Departamento de Normas y Estándares norteamericano publica el primer diseño lógico de un cifrador que
estaría destinado a ser el principal sistema criptográfico de finales de siglo: el Estándar 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 sería la, hasta ahora, última revolución de la
criptografía teórica y práctica: los sistemas asimétricos. Estos sistemas supusieron un salto cualitativo
importante ya que permitieron introducir la criptografía en otros campos que hoy día son esenciales, como el
de la firma digital. Una de las aportaciones del último cuarto del siglo XX son los sistemas de cifrado
asimétrico o de clave pública (como RSA), en contraposición con todos los anteriores, que son criptosistemas
simétricos 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 criptografía clásica, la
distribución de las claves secretas a los participantes en la comunicación. En la criptografía de clave pública,
una de las claves puede hacerse pública sin que por ello la seguridad de la clave secreta se vea afectada. Lo
cifrado con la clave secreta puede descifrarse con la pública y viceversa. Esta propiedad de los criptosistemas
asimétricos permite también 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 prácticamente toda la teoría criptográfica actual.
Uno de ellos, desarrollado por Claude Shannon en sus artículos "A Mathematical Theory of Communication"
(1948) y "Communication Theory of Secrecy Systems" (1949), sienta las bases de la Teoría de la Información
y de la Criptografía moderna. El segundo, publicado por Whitfield Diffie y Martin Hellman en 1976, se
titulaba "New directions in Cryptography", e introducía el concepto de Criptografía de Clave Pública,
abriendo enormemente el abanico de aplicación de esta viejísima disciplina. Con la publicación del algoritmo
RSA en 1977 por parte de los matemáticos Ron Rivest, Adi Shamir y Len Adleman la criptografía "moderna"
o de clave pública alcanza su consolidación.
Entonces en la actualidad, los sistemas criptográficos se implementan de forma electrónica y los sistemas
mecánicos han sido desplazados casi por completo. Esta nueva técnica abre una amplia variedad de
implementación como puede ser una computadora digital, ASIC o FPGA.
1.5 ¿
Un FPG
lógicos
program
AND, O
funcion
el lengu
flops ó
Una je
intercon
bloques
usuario
actuales
matriz d
de cálcu
reprogr
sistema
integrad
básicos
para la
mercad
diseño y
y meno
Qué es un
GA (field progr
programable
mables pueden
OR, XOR, NO
nes matemática
uaje comúnme
bloques de me
erarquía de i
nectados según
s lógicos e in
/diseñador, as
s se pueden en
de interconexio
ulo con punto f
ramada mientra
as reconfigurab
dos de aplicaci
, y consumen
salida al mer
do a fin de cor
y prueba de un
os flexibles, las
FPGA?
rammable gate
s e intercone
n ser programa
OT ó funciones
as. En muchos F
nte usado) tam
emoria más com
interconexione
n la necesidad
nterconexiones
í que el FPGA
ncontrar funcio
ones, inclusive
flotante. La rec
as el resto cont
bles. Los FP
iones específic
más energía. S
rcado de prod
rregir posibles
n nuevo produc
cuales no pue
e array) es un d
exiones tambié
ados para dupli
s combinacion
FPGA, estos c
mbién incluyen
mplejos.
s programabl
del diseñador
pueden ser p
GA puede desem
ones de alto ni
e en FPGA’s de
configurabilida
tinúa funcionan
GA son gene
as (ASIC), no p
Sin embargo, t
ductos, la habi
s errores, y red
cto. Los vende
den ser modifi
Figura 8. FP
8
dispositivo sem
én programab
icar la funcion
ales más comp
componentes ló
n elementos de
es permite a
del sistema, a
programados d
mpeñar cualqu
ivel (como sum
e alto desempe
ad de los FPGA
ndo, esto es el
eralmente más
pueden soporta
tienen muchas
ilidad para ser
ducción los co
dores pueden p
icados después
PGA Xilinx® Spart
miconductor di
bles entre ello
nalidad de pue
plejas tales co
ógicos program
memoria, los
a los bloques
algo parecido a
después del p
uier función ló
madores y mu
eño se incluyen
A radica en que
principio de la
lentos que s
ar diseños muy
s ventajas tales
r reprogramad
ostos de ingen
proporcionar v
de que el dise
tan™-3.
Ca
igital que conti
os. Los comp
rtas lógicas bá
omo decodifica
mables (o bloqu
cuales pueden
s lógicos de
a un tablero pr
roceso de ma
ógica necesari
ltiplicadores) e
n dichas funcio
e una parte del
a computación
sus contrapart
y complejos en
s como la redu
dos después de
niería tales com
versiones de FP
eño haya sido im
Mapítulo I
iene componen
ponentes lógic
ásicas tales com
adores ó simp
ues lógicos, seg
n ser simples fl
un FPGA,
rogramable. Es
anufactura por
ia. En los FPG
empotrados en
ones con unidad
l diseño puede
n reconfigurabl
tes, los circui
n los modelos m
ucción del tiem
e haber salido
mo investigaci
PGA, más bara
mplementado.
Marco Histó
ntes
cos
mo
ples
gún
flip-
ser
stos
r el
GA
n la
des
ser
e o
itos
más
mpo
o al
ón,
atos
órico
9
Marco HistóricoCapítulo I
1.5.1 Historia de los FPGA
Ross Freeman, cofundador de Xilinx®, inventó el arreglo matricial de compuertas. La raíz histórica de las
FPGA son los Dispositivos de lógica programable compleja (CPLD) de mediados de 1980. CPLD y
FPGA incluyen un relativo gran número de elementos lógicos programables.
El rango de densidad de los CPLD va desde miles hasta decenas de miles de compuertas lógicas,
mientras que el de los FPGA va típicamente desde decenas de miles hasta varios millones. La diferencia
primaria entre CPLD’s y FPGA’s son sus arquitecturas. Un CPLD tiene una estructura restringida,
consistiendo la unión de uno o más arreglos lógicos que alimentan a un número pequeño de registros con
entrada de reloj.
El resultado de estos es menos flexibilidad, con la ventaja de una mejor predicción de los tiempos de
retraso. Las arquitecturas de los FPGA’s, por otro lado, son dominadas por las interconexiones. Esto los
hace más flexibles (en términos del rango de diseños prácticos para los cuales pueden ser usados) pero
también es posible ir un poco más lejos en el diseño. Otra diferencia notable entre CPLD’s y FPGA’s es
la presencia de funciones de más alto nivel (tales como sumadores y multiplicadores) dentro de los
FPGA’s, además de memorias. Una diferencia importante es que muchos FPGA’s modernos, soportan
una total o parcial reconfiguración del sistema, permitiendo que una parte del diseño sea reprogramada
mientras las otras partes siguen funcionando. Una tendencia reciente ha sido llevar la arquitectura un
paso más lejos, combinado los bloques lógicos e interconexiones de los tradicionales FPGA’s, con
microprocesadores y con periféricos relacionados para formar un completo “Sistema programable en un
chip”.
Ejemplo de estas tecnologías hibridas pueden ser encontradas en los FPGA Xilinx® Virtex™, los cuales
incluyen uno o más procesadores PowerPC™ embebidos junto con la lógica FPGA. El Atmel® FPSLIC™
es otro dispositivo como tal, el cual usa un procesador AVR™ en combinación con la arquitectura lógica
programable de Atmel®.
Otra alternativa es hacer uso de núcleos de procesadores, los cuales son implementados junto con la
lógica FPGA. Esos núcleos 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 metodología.
10
Marco HistóricoCapítulo I
1.6 El algoritmo AES
En el año 1999, NIST (National Institute of Standards and Technology) de EUA, lanzó una nueva versión de
su estándar DES, el cual indicaba que DES solamente debía ser usado por sistemas antiguos y Triple-DES
(3DES) sería el estándar vigente. 3DES tenía dos características interesantes que aseguraban su uso
generalizado en los próximos años. 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 encriptación subyacente en
3DES es el mismo que en DES. Este algoritmo ha sido sometido a mucho más escrutinio que cualquier otro
algoritmo de encriptación durante un gran periodo de tiempo, y no existe un ataque criptoanalítico efectivo
contra el algoritmo, más que ataques de fuerza bruta. En consecuencia, existe un alto nivel de confianza que
3DES es muy resistente al criptoanálisis. Si la seguridad fuera la única consideración, entonces 3DES sería
una elección apropiada para un algoritmo criptográfico estandarizado para las décadas venideras.
Sin embargo la principal desventaja de 3DES es que el algoritmo es relativamente lento en software. El DES
original fue diseñado a mediados de los años 70’s para una implementación en hardware, y no producía un
código en software eficiente. 3DES, el cual posee tres veces más rondas que DES es correspondientemente
más lento. Una desventaja secundaria es que ambos DES y 3DES utilizan un tamaño de bloque de 64-bits. Por
razones de seguridad y eficiencia, un tamaño de bloque más 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 Encriptación Avanzada AES por sus siglas en inglés, el
cual debía tener una fuerza en seguridad igual o mayor que 3DES y una eficiencia significativamente
mejorada. Además de estos requerimientos generales, NIST especificó que AES debía ser un cifrado a bloques
simétrico, con el tamaño del bloque de 128-bits y tener soporte para tamaños de llave de 128, 192 y 256-bits.
En la primera ronda de evaluación se aceptaron 15 algoritmos para participar. Una segunda ronda redujo el
campo a 5 algoritmos. NIST completó su proceso de evaluación y publicó un estándar 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 criptógrafos de Bélgica: Dr. Joan Daemen y Dr.
Vincent Rijmen. En última instancia AES intenta reemplazar a 3DES, pero este proceso todavía tomará
algunos años. 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.
11
Marco HistóricoCapítulo I
1.6.1 Evaluación de AES
Vale la pena examinar el criterio utilizado por NIST para evaluar a los candidatos potenciales. Existieron
tres categorías para el criterio de selección:
Seguridad: se refiere al esfuerzo requerido para criptoanalizar un algoritmo. El énfasis en la
evaluación fue en la practicidad del ataque. Debido a que el tamaño mínimo para la llave en
AES es de 128-bits, los ataques de fuerza bruta con tecnología actual y prevista no necesitan ser
considerados.
Costo: NIST intentó en AES ser práctico en un amplio rango de aplicaciones. Por lo tanto AES
debía de poseer una alta eficiencia computacional, para así poder ser usado en aplicaciones de
alta velocidad, y en conexiones de banda ancha.
Características e implementación del algoritmo: Esta categoría incluye una variedad de
consideraciones, como flexibilidad, e idoneidad para una gran variedad de implementaciones en
software y en hardware, lo que haría un análisis de seguridad más 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 evaluación 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 análisis de
seguridad pública, dirigido por la comunidad criptográfica. Durante el curso de tres años del
proceso de evaluación, un gran número de criptógrafos publicaron sus análisis de las fortalezas
y debilidades de los distintos candidatos. Existió un énfasis particular en analizar a los
candidatos con respecto a ataques conocidos, como criptoanálisis diferencial y particular. Sin
embargo, comparado a los análisis de DES, la carga de tiempo y el número de criptógrafos
dedicados a analizar Rijndael fueron eventualmente limitados. Ahora que se ha elegido un solo
cifrado AES, se puede esperar a ver un análisis de seguridad mucho más extenso por parte de la
comunidad criptográfica
Implementaciones en Software: las principales preocupaciones en esta categoría fueron
velocidad de ejecución, desempeño en distintas plataformas, y velocidad en función de la
variación de la llave.
Ambientes con espacio restringido: en algunas aplicaciones, como en smart-cards, áreas
relativamente pequeñas de memoria RAM y/o memoria ROM, representación de objetos de
datos como S-boxes las cuales pueden almacenarse en memoria ROM ó RAM, dependiendo si
existe precómputo ó si se utilizan representaciones Booleanas y almacenamiento de la subllave.
12
Marco HistóricoCapítulo I
Implementaciones en Hardware: como en software, implementaciones en hardware pueden
ser optimizadas para tamaño ó velocidad. Sin embargo, en caso de hardware, el tamaño se
traduce mucho más directamente en costo que es comúnmente el mismo caso para
implementaciones en software. Duplicar el tamaño de un programa de encriptación puede hacer
una pequeña diferencia en una computadora de propósito general con mucha memoria, pero
duplicar el área usada en hardware típicamente 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 criptoanalíticos que explotan las propiedades matemáticas
de los algoritmos. Existe otra clase de ataques que utilizan medidas físicas de comportamiento
durante la ejecución del algoritmo para reunir información acerca de cantidades como por
ejemplo la llave. Dichos ataques explotan una combinación de características intrínsecas al
algoritmo y características dependientes de la implementación. Ejemplos de estos ataques son
los ataques basados en tiempo y ataques basados en consumo de potencia. La idea básica
detrás de un análisis de potencia por ejemplo, es observar que la potencia consumida por una
smart-card en cualquier momento particular durante la operación criptográfica está relacionada
a la instrucción que está siendo ejecutada y al dato que está siendo procesado. Por ejemplo, la
multiplicación consume más potencia que la suma, y la escritura de 1’s consume más potencia
que escribir 0’s.
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, También aunque los dos algoritmos sean el mismo ó no, puede
existir diferencias de tiempo entre cifrado y descifrado.
13
Capítulo II. MARCO TEÓRICO
2.1 Notación 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 número 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
tamaños para la entrada, salida y llave de cifrado en este estándar.
Los bits dentro de tales secuencias se numeran empezando en cero, y terminando en uno menos la longitud de
la secuencia de bits. El número i adjunto a cada bit, es conocido como su índice y se encuentra dentro de los
rangos 0 128i≤ < , 0 192i≤ < , 0 256i≤ < que dependen del tamaño del bloque y el tamaño de la llave.
2.1.1 Byte
Secuencia de ocho bits tratada como una entidad simple y unidad básica 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, na ó [ ]a n , donde n se encuentra en
alguno de los rangos siguientes:
Tamaño de la llave = 128 bits, 0 16n≤ < , Tamaño del bloque = 128 bits, 0 16n≤ < ;
Tamaño de la llave = 192 bits, 0 24n≤ < ,
Tamaño de la llave = 256 bits, 0 32n≤ < .
Todos los valores de los bytes en el algoritmo AES se presentan como la concatenación 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 interpretarán como elementos de un campo finito utilizando la siguiente representación
polinomial: 7
7 6 5 4 3 2 1 07 6 5 4 3 2 1 0
0
ii
i
b x b x b x b x b x b x b x b x b x=
+ + + + + + + = ∑ .
Po
co
de
la
As
bit
ca
en
un
2.
Lo
Lo
en
El
qu
En
or ejemplo, {0
onveniente tam
e cuatro bits (c
figura siguien
sí el elemento
ts más signific
ampos finitos r
ncuentre presen
na secuencia de
1.2 Arreg
os arreglos de b
os bytes y el
0ntrada entrada
l patrón puede
ue en general se
n la tabla sigui
01100011} ide
mbién denotar a
ada grupo es c
te:
Figura 10
o {01100011}
cativos del arre
equieren un bi
nte, aparecerá
e 9-bits se repr
glos de Byte
bytes se repres
orden de bits
1 2...a entrada entr
e extenderse pa
e tiene: {na e=
ente se muestra
0
1
15
a
a
a
=
=
=
entifica al elem
a los valores de
conocido como
0. Representación H
se puede repre
eglo se encuen
it adicional (b8
como un ‘{01
resentará como
es
sentarán de la s
dentro de los
126rada entrada
ara secuencias
8 ,n
entrada entra
a como se orde
Figura 11. Í
{{
{
0
8
120
,
,
,
entrada ent
entrada ent
entrada e=
14
mento específi
el byte utilizan
o nibble) que se
Hexadecimal de lo
esentar como {
ntra a la izquie
) a la izquierda
}’ e inmediata
o un {01} {1b}
siguiente forma
s bytes se deri
127a , de la siguie
mayores (por
8 1,...,n
ada entrad+
enan los índice
Índices para Bytes
1
7
121
,...,
,...,
,...,
trada entra
trada entra
entrada e
ico de un cam
ndo una notació
e expresan com
os patrones de nib
{63}, donde el
erda. Algunas
a de un byte de
amente después
.
a: 0 1 2 15...a a a a
ivan de la sec
ente manera:
r ejemplo: para
}8 7 .n
da +
es para bytes y
s y bits.
}}
}
7
15
127
;
;
.
ada
ada
entrada
Ca
mpo finito: 6xón hexadecima
mo un caracter
bles.
l caracter que
operaciones q
e 8 bits. Donde
s el byte de 8-
cuencia de ent
a llaves de 192
bits:
Mapítulo II
5 1x x+ + + .
al con dos grup
r simple, como
denota los cua
que se realizan
e este bit extra
-bits; por ejemp
trada de 128-b
2 y 256-bits),
Marco Teór
Es
pos
en
atro
en
a se
plo
bits
así
rico
2.
In
lla
tam
En
de
Es
eje
Al
co
La
co
Po
ac
el
2.
Lo
r
1.3 El St
nternamente, la
amado State. E
maño del bloqu
n el arreglo Sta
e fila r dentro d
sto permite a u
emplo, 0 ≤ c <
l principio de
opiado al arregl
as operaciones
opiado a la salid
or lo tanto al p
cuerdo al esque
State se copia
1.4 El St
os cuatro bytes
provee un índ
tate
as operaciones
El State consist
ue dividido ent
ate (denotado p
del rango 0 ≤ r
un byte individu
< 4.
los bloques de
lo State como
Fi
s de cifrado y d
da teniendo el
principio del ci
ema: s[r, c] = i
al arreglo salid
tate como un
s de cada colum
dice para los
del algoritmo
te en cuatro fil
tre 32.
por el símbolo
r < 4, y su núm
ual del State se
e cifrado y des
se muestra en l
igura 12. Entradas
descifrado se d
arreglo de byte
frado o descifr
n[r + 4c] for 0
da de la siguien
n arreglo de
mna del arreglo
cuatro bytes
15
AES se llevan
las de bytes cad
o S), cada byte
mero de column
er referido com
cifrado el arre
la figura siguie
s y salidas para el
dirigen entonc
es out0, out1,…
rado, el arreglo
0 ≤ r < 4 and
nte manera: ou
e columnas
o State, forman
dentro de cad
n a cabo en un
da una conteni
individual po
na c en el rango
mo Sr,c ó s[r,c].
glo de bytes d
ente:
l arreglo State.
es, al arreglo S
…,out15.
o de entrada, in
0 ≤ c < Nb, y
ut [r + 4c] = s [r,
n palabras de 3
da palabra. El
Ca
arreglo bidime
iendo Nb bytes
see dos índice
o 0 ≤ c < Nb.
. Para este está
de la entrada in
State, después
n, es copiado a
al final del cifr
c] for 0 ≤ r < 4
32 bits, donde
l State puede
Mapítulo II
ensional de by
s, donde Nb es
s, con su núme
ándar, Nb = 4, p
n0, in1,…,in15
su valor final
al arreglo State
frado ó descifra
4 and 0 ≤ c < Nb
el número de f
por lo tanto
Marco Teór
ytes
s el
ero
por
5 es
l es
de
ado
Nb.
fila
ser
rico
16
Marco TeóricoCapítulo II
interpretado como un arreglo unidimensional de palabras de 32 bits (columnas), w0...w3, en donde el
número de columna suministra un índice dentro de este arreglo.
Entonces, para el ejemplo de la figura anterior, el State puede ser considerado también, 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 Introducción a la Matemática
Todos los bytes en el algoritmo AES se interpretan como elementos de campos finitos utilizando la notación
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 números comunes. En las siguientes subsecciones se
introduce a los conceptos matemáticos básicos necesarios para el desarrollo del tema de investigación.
2.2.1 Grupos, Anillos y Campos
Grupos, anillos y campos son los elementos fundamentales de una rama de las matemáticas conocida
como álgebra abstracta ó álgebra moderna. El álgebra abstracta, se interesa con conjuntos en los cuales
sus elementos puedan ser operables algebráicamente, 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 específicas, las cuales definen la naturaleza del conjunto. Por convención, la
notación para las dos clases principales de operaciones en el conjunto de elementos es usualmente la
misma para la suma y multiplicación de los números ordinarios. Sin embargo, es importante notar que en
álgebra abstracta no se está limitado a las operaciones aritméticas ordinarias
2.2.2 Grupos
Un grupo G, algunas veces denotado por { },G i , es un conjunto de elementos con una operación binaria
expresada por • (elemento genérico que puede referirse a suma, multiplicación o alguna otra operación
matemática), 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 también 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.
17
Marco TeóricoCapítulo II
Si un grupo tiene un número finito de elementos, se refiere a él como un grupo finito, y el orden del
grupo es igual al número de elementos en el grupo. De otra forma, el grupo es un grupo infinito.
Un grupo es llamado abeliano si satisface la siguiente condición adicional:
(A5) Conmutativa: a • b = b • a para todo a, b en G.
2.2.3 Anillos
Un anillo R, algunas veces expresado por { }, ,R + × , es un conjunto de elementos con dos operaciones
binarias, llamadas suma y multiplicación, 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 multiplicación: Si a y b pertenecen a R, entonces ab se encuentra
también en R.
(M2) Asociatividad para la multiplicación: 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 multiplicación: 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 están 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 multiplicación 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 división es definida con la regla siguiente: a/b = a(b-1).
18
Marco TeóricoCapítulo II
2.2.5 Campos finitos de la forma GF(p)
Los campos infinitos no son de interés particular en el contexto de la criptografía, Sin embargo, los
campos finitos juegan un rol crucial en los algoritmos criptográficos. Puede mostrarse que el orden de un
campo finito (número de elementos del campo) debe ser una potencia de un número primo pn, donde n
es un entero positivo, sabiendo que un número 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 matemático que estudió a los campos finitos. Existen dos casos especiales que son
interesantes para propósitos criptográficos: 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 característica 0, contiene a los racionales y es por lo tanto infinito,
todos los campos finitos tienen característica prima, y por lo tanto su tamaño 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 característica prima es finito. Para un primo p los enteros módulo 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 operación
lógica (expresada por ⊕), por ejemplo para el modulo 2 tenemos que 1⊕1 = 0, 1⊕0 = 1, y 0⊕0 = 0.
En consecuencia, la substracción de polinomios es idéntica 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 { }7 6 5 4 3 2 1 0a a a a a a a a y { }7 6 5 4 3 2 1 0b b b b b b bb , la suma es
{ }7 6 5 4 3 2 1 0c c c c c c c c , donde cada i i ic a b= ⊕ . Por ejemplo 7 7 7c a b= ⊕ , 6 6 6,c a b= ⊕ ,…, 0 0 0c a b= ⊕
19
Marco TeóricoCapítulo II
Por ejemplo, las expresiones siguientes son equivalentes una con otra:
Notación polinomial: 6 4 2 7 7 6 4 2( 1) ( 1)x x x x x x x x x x+ + + + + + + = + + + .
Notación binaria: {01010111} ⊕ {10000011} = {11010100}.
Notación hexadecimal: {57} ⊕ {83} = {d4}.
2.2.7 Multiplicación
En la representación polinomial, una multiplicación en GF(28) (representado por •) corresponde a la
multiplicación 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 8 4 3( ) 1m x x x x x= + + + + , ó {01}{1b} en
notación hexadecimal.
Por ejemplo {57} • {83} = {c1}, porque:
( )( )6 4 2 7 13 11 9 8 7 7 5 3 2 6 4 2
13 11 9 8 6 5 4 3
1 1 1
1
x x x x x x x x x x x x x x x x x x x x
x x x x x x x x
+ + + + + + = + + + + + + + + + + + + + +
= + + + + + + + +
Y:
( )13 11 9 8 6 5 4 3 8 4 3 7 61 mod 1 1x x x x x x x x x x x x x x+ + + + + + + + + + + + = + +
La reducción 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 operación
lógica simple a nivel de bytes que corresponda a la multiplicación.
La multiplicación 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 1( )b 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.
Además, 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).
20
Marco TeóricoCapítulo II
Entonces se dice que el arreglo de 256 posibles valores del byte, con la operación lógica XOR usada en
la suma y la multiplicación acabada de definir, tiene la estructura de un campo finito GF(28).
2.2.8 Multiplicación por x
Al multiplicar el polinomio modelo:7
7 6 5 4 3 2 17 6 5 4 3 2 1 0
0
ii
i
b x b x b x b x b x b x b x b x b x=
+ + + + + + + = ∑ ,
con el polinomio x resulta en: 8 7 6 5 4 3 2 18 7 6 5 4 3 2 1 0b x b x b x b x b x b x b x b x b x+ + + + + + + + .
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
reducción se acompaña substrayendo (XOR) el polinomio m(x). Entonces podemos decir que la
multiplicación por x, (por ejemplo {00000010} ó {02}) se puede implementar a nivel de bytes como
un corrimiento a la izquierda y una subsiguiente operación lógica XOR con {1b}. Esta operación en
bytes se denota como xtime(). La multiplicación de potencias mayores a x puede ser implementada al
repetir la operación xtime().
Para agregar más recursos, la multiplicación por cualquier constante puede también 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},
Además:
{57} • {13} = {57} • ({01} ⊕ {02} ⊕ {10})
= {57} ⊕ {ae} ⊕ {07}
= {fe}.
21
Marco TeóricoCapítulo II
2.2.9 Polinomios con coeficientes en GF(28)
Los polinomios de cuatro términos, que poseen coeficientes que son elementos de campos finitos,
pueden ser definidos de la siguiente manera: 3 23 2 1 0( )a x a x a x a x a= + + +
Dichos polinomios serán expresados como una palabra de la forma: [ ]0 1 2 3, , ,a a a a .
Se debe notar que los polinomios para estas definiciones se comportan de una manera diferente que los
elementos de polinomios que satisfacen la definición de campo finito. Aún 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; además la multiplicación de
polinomios de cuatro términos, utiliza un polinomio diferente de reducción, definido a continuación. Así
que debe de existir siempre una distinción que nos indique en qué contexto se está trabajando.
Para ilustrar la suma y multiplicación de estos campos definamos un segundo polinomio de cuatro
términos: 3 23 2 1 0( )b x b x b x b x b= + + + .
La suma se lleva a cabo al sumar las potencias similares de los coeficientes del campo finito. Esta suma
corresponde a una operación lógica XOR entre los bytes correspondientes en cada una de las palabras,
expresado de otra manera la ejecución de la operación XOR de los valores completos de la palabra.
Así usando los polinomios de cuatro términos anteriores tenemos: 3 2 1
3 3 2 2 1 1 0 0( ) ( ) ( ) ( ) ( ) ( )a x b x a b x a b x a b x a b+ = ⊕ + ⊕ + ⊕ + ⊕ .
La multiplicación 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 6 5 4 3 2 1
6 5 4 3 2 1 0( )c x c x c x c x c x c x c x c= + + + + + + , donde:
0 0 0 4 3 1 2 2 1 3
1 1 0 0 1 5 3 2 1 3
2 2 0 1 1 0 2 6 3 3
3 3 0 2 1 1 2 0 3
c a b c a b a b a bc a b a b c a b a bc a b a b a b c a bc a b a b a b a b
= = ⊕ ⊕= ⊕ = ⊕= ⊕ ⊕ == ⊕ ⊕ ⊕
i i i ii i i ii i i ii i i i
El resultado, c(x) no representa una palabra de cuatro bytes. Por lo tanto, el segundo paso de la
multiplicación es reducir c(x) modulo un polinomio de 4.
El resultado puede ser reducido a un polinomio de grado menor a 4.
22
Marco TeóricoCapítulo II
Para el algoritmo AES, el polinomio que cumple estas condiciones es 4 1x + , así que:
( )4 mod 4mod 1i ix x x+ = .
El producto modular de a(x) y b(x), denotado como a(x) ⊗ b(x), está dado por el polinomio de cuatro
términos d(x), definido como: 3 23 2 1 0( )d x d x d x d x d= + + + por:
( ) ( ) ( ) ( )( ) ( ) ( ) ( )( ) ( ) ( ) ( )( ) ( ) ( ) ( )
0 0 0 3 1 2 2 1 3
1 1 0 0 1 3 2 2 3
2 2 0 1 1 0 2 3 3
3 3 0 2 1 1 2 0 3
d a b a b a b a b
d a b a b a b a b
d a b a b a b a b
d a b a b a b a b
= ⊕ ⊕ ⊕
= ⊕ ⊕ ⊕
= ⊕ ⊕ ⊕
= ⊕ ⊕ ⊕
i i i i
i i i i
i i i i
i i i i
Cuando a(x) es un polinomio fijo, el polinomio de cuatro términos d(x), se puede reescribir como la
matriz:
0 0 3 2 1 0
1 1 0 3 2 1
2 2 1 0 3 2
3 3 2 1 0 3
d a a a a bd a a a a bd a a a a bd a a a a b
⎡ ⎤ ⎡ ⎤ ⎡ ⎤⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ ⎥=⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎣ ⎦ ⎣ ⎦ ⎣ ⎦
Como 4 1x + no es un polinomio irreducible sobre GF(28), la multiplicación por un polinomio fijo de
cuatro términos no es necesariamente invertible. Sin embargo el algoritmo AES especifica un polinomio
fijo de cuatro términos 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].
2.3
El flujo
2.
La
bú
qu
es
la
ín
{9
{2
La
di
de
en
Descripc
o de datos en el
3.1 Etap
a etapa de tra
úsqueda. AES d
ue contiene una
s mapeado a un
fila, y el nibb
dices en la S-b
95}, en la etapa
2A}. En consec
Figura
a S-box está d
señadores de R
e salida, y la pr
ntrada.
ión del Alg
l algoritmo AE
pa SubBytes
ansformación
define una mat
a permutación
n nuevo byte de
le derecho com
box para selecc
a SubBytes hac
cuencia, el valo
13. En la fase Sub
diseñada para
Rijndael buscar
ropiedad que l
goritmo AE
ES consta de la
n de byte sus
triz de 16x16 e
de todos los 2
e la siguiente m
mo el valor de
cionar un valor
ce referencia a
or {95} es map
bBytes, cada Byte
ser resistente
ron un diseño
la salida no pu
23
ES
iteración de la
stituto conocid
elementos con
56 valores pos
manera: el nibb
la columna. E
de salida únic
a la fila 9, colu
peado al valor
del State es reemp
a ataques crip
que tuviera un
uede ser descrit
s 4 etapas sigu
da como SubB
n diferentes val
sibles de 8-bits
ble izquierdo d
Estos valores d
co de 8-bits. Po
umna 5 de la S
{2A}
plazado según una
ptoanalíticos co
na baja correlac
ta como una fu
Ca
uientes:
Bytes, es una
lores de bytes,
. Cada byte ind
del byte se usa
e columnas y f
or ejemplo el v
S-box, la cual c
a tabla de búsqued
onocidos. Esp
ción entre bits
unción matemá
Mapítulo II
simple tabla
llamada S-box
dividual del St
como el valor
filas sirven com
valor hexadecim
contendrá el va
da.
ecíficamente,
de entrada y b
ática simple de
Marco Teór
de
x y
tate
r de
mo
mal
alor
los
bits
e la
rico
2.
La
sig
La
a
su
La
tan
Po
co
co
di
4-
2.
La
in
lo
3.2 Etap
a etapa de tra
guiente:
a primera fila s
la izquierda
ucesivamente e
a transformació
nto el State, co
or lo tanto, en
olumna del Sta
olumna. Así, u
stancia lineal d
-bytes de una c
3.3 Etap
a transforma
dividualmente
s cuatro bytes
pa ShiftRows
ansformación
Figura 14. E
se mantiene sin
de 1-byte. Pa
n la cuarta fila
ón ShiftRows e
omo el cifrado
n la encriptaci
te, y así sucesi
un cambio de f
de múltiplos d
olumna son ex
pa MixColum
ación de mez
. Cada byte de
que se encuent
s
de cambio d
En la fase ShiftRo
n alteraciones.
ara la tercera
a del State se lle
es más substanc
de entrada y d
ión los primer
ivamente. Ento
fila mueve un
de 4-bytes. Tam
xtendidos hacia
mns
zclado de co
e una columna
tran en dicha c
24
de filas, llama
ows, cíclicamente s
Para la segund
a fila se ejecu
eva a cabo un c
cial de lo que a
de salida son tr
ros 4-bytes de
onces, la ronda
byte individu
mbién hay que
a las demás col
lumnas, llam
es mapeado a
columna.
ada ShiftRows
se cambian las fila
da fila, se lleva
uta un corrim
corrimiento cir
aparenta a prim
ratados como u
l texto sin cif
de la llave ser
ual desde una c
e notar que la
lumnas en el St
mada MixColum
a un nuevo val
Ca
s, es represent
as en el State.
a a cabo un cor
miento circular
rcula de 3-byte
mera vista. Esto
un arreglo colu
frar son copiad
rá aplicada al S
columna a otr
transformación
tate.
mns opera en
lor que es una
Mapítulo II
tada en la figu
rrimiento circu
r de 2-bytes.
es.
o es debido a q
umnas de 4-byt
dos a la prim
State columna p
ra, lo cual es u
n asegura que
n cada colum
función de tod
Marco Teór
ura
ular
Y
que
tes.
mera
por
una
los
mna
dos
rico
25
Marco TeóricoCapítulo II
La transformación puede ser definida por la siguiente multiplicación entre una matriz definida y el State:
' ' ' '0,0 0,1 0,2 0,3 0,0 0,1 0,2 0,3
' ' ' '1,0 1,1 1,2 1,3 1,0 1,1 1,2 1,3
' ' ' '2,0 2,1 2,2 2,3 2,0 2,1 2,2 2,3
' ' '3,0 3,1 3,2 3,3 3,0 3,1 3,2 3,3
02 03 01 0101 02 03 0101 01 02 0303 01 01 02
s s s s s s s ss s s s s s s ss s s s s s s ss s s s s s s s
⎡ ⎤⎡ ⎤⎢ ⎥⎢ ⎥⎢ ⎥⎢ ⎥ =⎢ ⎥⎢ ⎥⎢ ⎥⎢ ⎥
⎣ ⎦ ⎣ ⎦'
⎡ ⎤⎢ ⎥⎢ ⎥⎢ ⎥⎢ ⎥⎢ ⎥⎣ ⎦
Estos coeficientes se basan en un código lineal con una distancia máxima entre palabras de código, 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 multiplicación son llevadas a cabo en GF(28). La transformación MixColumns
en una sola columna j(0 ≤ j ≤ 3) del State puede expresarse como:
( ) ( )( ) ( )
( ) ( )( ) ( )
'0, 0, 1, 2, 3,
' '1, 0, 1, 2, 3,
' '2, 0, 1, 2, 3,
' '3, 0, 1, 2, 3,
2 3
2 3
2 3
3 2
j j j j j
j j j j j
j j j j j
j j j j j
s s s s s
s s s s s
s s s s s
s s s s s
= ⊕ ⊕ ⊕
= ⊕ ⊕ ⊕
= ⊕ ⊕ ⊕
= ⊕ ⊕ ⊕
i i
i i
i i
i i
El siguiente es un ejemplo de la transformación MixColumns:
87 2 4 97 47 40 3 46 4 90 37 4 70 946 7 4 3 94 4 3 42
6 8 8 95 5 6
F D A CE C EC D F
E A C E AA C D ED A A 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 operación XOR. Para la multiplicación 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 operación XOR con (0001 1011) si el bit más significativo del valor original es 1.
26
Marco TeóricoCapítulo II
Para verificar la primera columna del ejemplo anterior, se tiene que:
{ } { }( ) { } { }( ) { } { } { }
{ } { } { }( ) { } { }( ) { } { }{ } { } { } { }( ) { } { }( ) { }{ } { }( ) { } { } { } { }( ) { }
02 87 03 6 46 6 47
87 02 6 03 46 6 37
87 6 02 46 03 6 94
03 87 6 46 02 6
E A
E A
E A
E A ED
• ⊕ • ⊕ ⊕ =
⊕ • ⊕ • ⊕ =
⊕ ⊕ • ⊕ • =
• ⊕ ⊕ ⊕ • =
Para la primera ecuación se tiene la operación [02] • [87] = (0000 1110) ⊕(0001 1011) = (0001
0101); [03] • [6E] = [6E] ⊕([02] • [6E]) = (0110 1110) ⊕(1101 1100) = (1011 0010). Entonces:
{ } { }{ } { }{ }{ }
{ }
02 87 00010101
03 6 10110010
46 0100 0110
6 1010 0110
0100 0111 47
E
a
• =
• =
=
=
=
La transformación MixColumns combinada con la transformación ShiftRows asegura que después de
algunas rondas, todos los bits de salida dependan de todos los bits de entrada brindando difusión al
proceso. Además, la elección de coeficientes en MixColumns: {01}, {02}, {03}, fueron elegidos
substancialmente por razones de implementación. La multiplicación de estos coeficientes cuando se
implementa de manera eficiente involucra a lo más un corrimiento y una operación XOR.
Los coeficientes para InvMixColumns que es el proceso inverso para descifrar AES son más difíciles de
implementar. Sin embargo, la encriptación fue considerada más importante durante el diseño de Rijndael
y AES, que la desencriptación por dos razones:
1. Para modelos de cifrado CFB (cipher block feedback) y OFB (output feedback mode), solo se
utiliza encriptación.
2. Como cualquier bloque de cifrado, AES puede ser utilizado para construir un código de
autenticación de mensaje MAC, en el cual solamente se requiere encriptación.
2.
En
pr
ro
co
niv
El
La
La
ex
Figura 15
3.4 Etap
n la transform
rocesados mate
onda. La opera
olumna del Sta
vel de bytes.
l siguiente es u
473794
DE
ED
⎡⎢⎢⎢⎢⎣
a primera matr
a transformació
xpansión de la l
5. En la etapa Mix
pa AddRoun
mación adición
emáticamente
ación puede ser
ate y una palab
un ejemplo de A
40 3 44 70 94 3 45 6
ADE AA A B
iz es el State y
ón AddRoundK
llave, junto con
xColumns, cada co
dKey
n de llave de
bit a bit medi
r vista como u
bra de la llave
AddRoundKey:
49 7742 66
3
C ACF
BC F
⎤ ⎡⎥ ⎢⎥ ⎢⊕⎥ ⎢⎥ ⎢⎦ ⎣
y la segunda ma
Key se diseñó ta
n la complejida
27
olumna del State es
ronda, llamad
iante una oper
una operación
de ronda, y ta
:
19 281
2921 47
FA DDC
atriz es la llave
an simple com
ad de otras etap
s multiplicada por
da AddRoundK
ración XOR c
entre columna
ambién puede s
575 4006 1
EC
FA
⎤ ⎡⎥ ⎢⎥ ⎢=⎥ ⎢⎥ ⎢⎦ ⎣
e de ronda.
mo fue posible,
pas en AES, m
Ca
r un polinomio con
Key, los 128-b
con los 128-bi
as, tomando lo
ser vista como
59 840 2
2 38 1384
EB BE A
FE E
y afecta a cada
manifiestan segu
Mapítulo II
nstante c(x).
bits del State s
its de la llave
os 4-bytes de u
o una operación
11 33 427 2
B BA C
D
⎤⎥⎥⎥⎥⎦
a bit del State.
uridad.
Marco Teór
son
de
una
n a
La
rico
FFigura 16. En la ettapa AddRoundKeyey, cada byte del St
28
tate se combina coon un byte de la su
Ca
ubclave usando la
Mapítulo II
operación XOR (⊕
Marco Teór
)⊕ .
rico
3.1 D El FPG
una tarj
Seriales
DDR-S
Push-bu
Descripció
GA utilizado pa
jeta de desarrol
s, PS/2, VGA,
SDRAM; Interf
uttons, Encode
Capít
ón de la pla
ara este trabajo
llo SPARTAN-
, SMA; Conve
face PHY Ethe
er rotatorio, Le
F
tulo III
ataforma d
o fue un SPART
-3E™ Starter-K
ertidores DAC
ernet; LCD (liq
d’s; entre otros
Figura 17. Tarjeta
29
I. DIS
de desarro
TAN-3E™ XC3
Kit™, del fabrica
C (Digital-Anal
quid cristal dis
s periféricos.
a de desarrollo SPA
SEÑO D
ollo de Har
3S500E del fab
ante Digilent®.
lógico), ADC
splay) de 16 ca
ARTAN-3E™.
DEL SI
rdware
bricante Xilinx®
. Dicha tarjeta
(Analógico-Di
aracteres por 2
ISTEMA
®, montado sob
contiene: puer
igital); Memor
líneas; Switch
A
bre
rtos
rias
hes,
3.2 D Utilizar
provisto
I
i
M
8
t
l
a
S
F
a
a
3.3 D El diseñ
Ingreso d
Ingreso d
Descripció
r un FPGA del
o de herramien
ISE™ Founda
implementar, e
Microcontrola
8-bits basado e
tareas de contr
los controlador
a este.
System Gene
Funciona en co
abstracción. S
automáticamen
Diagrama
ño del sistema
de datos
de datos
ón de la pla
fabricante Xil
ntas muy eficac
ation. Softwar
enrutar y acond
ador PicoBlaz
en una arquitec
rol en disposit
res para los dis
erator™. Softw
onjunto con Sim
e pueden desa
nte el código en
conceptua
se realizó en fu
Control del puerto PS/2
Control del puerto serial
ataforma d
inx® incorpora
ces para alcanz
re utilizado p
dicionar diseño
ze™. Procesado
ctura RISC y pu
tivos periférico
spositivos I/O,
ware que perm
mulink™ de Ma
arrollar núcleo
n VHDL a part
al del siste
función del sigu
Figura 18. Diagr
Cifr
30
de desarro
a varias ventaja
zar sus objetivo
para crear y
os. Además de
or en software
udiendo alcanz
os. Esta herram
y el algoritmo
mite crear y
atLab®, permit
os DSP para s
tir de su model
ema uiente diagram
rama conceptual d
frado de Datos
ollo de Soft
as en el flujo de
os; algunas de e
compilar cód
descargar el di
que se implem
zar velocidades
mienta es funda
o de encriptació
verificar diseñ
tiendo trabajar
su implementa
lado en Simulin
ma conceptual:
del sistema.
Con
Con
Capít
ftware
e diseño, ya qu
estas herramien
digo HDL. Si
iseño para prog
menta en FPGA
s de hasta 100-
amental en est
ón AES se desa
ños para FPG
con bloques en
ación en un F
nk™.
ntrol del puerto serial
ntrol del LCD
Distulo III
ue el diseñador
ntas son:
intetizar, simu
gramar al FPG
A’s de Xilinx®.
-MIPS. Ideal p
te trabajo, ya q
arrollaron en ba
GA’s de Xilin
n un alto nivel
FPGA, generan
Salida de dat
Salida de dat
seño del Sis
r es
ular
GA.
De
ara
que
ase
nx®.
l de
ndo
tos
tos
stema
31
Diseño del SistemaCapítulo III
Como se observa en la figura anterior, el sistema criptográfico es capaz de ingresar los datos a encriptar de
dos maneras distintas: vía comunicación 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 recuperación de los datos encriptados se pueden
mostrar en LCD de la tarjeta de desarrollo y también pueden recuperarse mediante comunicación serial y el
puerto DB-9. Para la elección de la gestión 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 más le convenga.
3.4 Metodología
El sistema se encarga de ejecutar 4 tareas principales:
Gestionar el menú de elección del usuario para el ingreso de datos.
Ingresar los datos al sistema para su encriptación.
Encriptar los datos utilizando el algoritmo AES-128.
Encargarse de regresar los datos encriptados vía serial y desplegarlos en la LCD.
3.5 ¿Por qué utilizar un microcontrolador en un FPGA?
Tanto microcontroladores, como FPGA’s pueden implementar exitosamente prácticamente cualquier tipo de
función digital lógica. Sin embargo cada uno posee características únicas en costo, desempeño 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 lógica 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 ó máquinas de estado en código ensamblador es a menudo mucho más
sencillo que crear estructuras similares en lógica para el FPGA. Los microcontroladores típicamente se
encuentran limitados en desempeño. Cada instrucción se ejecuta secuencialmente.
Y cuando una aplicación crece en complejidad, el número de instrucciones requeridas para implementarla
también crece por lo que el desempeño del sistema decrece invariablemente. En contraste el desempeño en un
FPGA es más flexible. Por ejemplo, un algoritmo puede ser implementado secuencialmente ó completamente
en paralelo dependiendo de los requerimientos de desempeño.
32
Diseño del SistemaCapítulo III
Una implementación completamente en paralelo es más rápida pero consume más 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 ó críticas en el
tiempo son mejor implementadas utilizando lógica del FPGA. Por ejemplo, un microcontrolador no puede
responder a eventos más rápidos que algunos microsegundos. La lógica del FPGA puede responder a
múltiples y simultáneos eventos en tan solo algunos nanosegundos. Anteriormente antes de que el
microcontrolador PicoBlaze™ existiera, si se requería conectar un microcontrolador al FPGA se debía de
hacer externamente a este, limitando la conectividad y afectando el desempeño del sistema.
Utilizar el microcontrolador PicoBlaze™ para encriptar datos utilizando el algoritmo AES-128 es una opción
viable, ya que un microcontrolador es una máquina de estados más o menos compleja dependiendo de su
arquitectura, y esto lo hace una buena solución para este tipo de algoritmos donde la repetición de tareas y
secuencias de operaciones son una constante.
3.6 Características 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 gestión de dispositivos periféricos externos, pero no por ello deja de ser
efectivo en tareas de procesamiento de datos y algoritmos más 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 características del microcontrolador son:
Registros de propósito general de 16-bits Almacenamiento de 1K instrucciones de programa, automáticamente cargado durante la
configuración 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 automático de 31 posiciones. Desempeño altamente predecible, siempre 2 ciclos de reloj por instrucción.
Rápida respuesta a interrupciones, en el peor de los casos 5 ciclos de reloj.
3
D
m
l
u
d
e
c
3.6.1 pBl
Después de q
microcontrolad
la LCD de la t
utilizó la herra
desde su sitio
ensamblador, p
como los puert
Figura
lazeIDE™, s
que tanto los
dor PicoBlaze™
tarjeta de desa
amienta “third
o web. Dicha
permite simul
tos de Entrada
20. Software pBla
Figura 19. Arquit
software de d
s datos a cif™ se encarga de
arrollo. Para el
d-party” pBlaz
a herramienta
ar las instrucc
a/Salida del mis
azeIDE™ del desarr
33
tectura del microco
desarrollo en
frar como la
e encriptarlos y
l programa que
zeIDE™ que el
además de p
ciones a ejecu
smo.
rollador Mediatroninvestigaci
ontrolador PicoBl
n ensamblad
llave han si
y enviarlos tan
e ejecuta el m
desarrollador
permitir escrib
utar por el mic
nix®, simulando elón.
Capít
laze™.
dor para Pic
ido ingresado
nto por el puerto
microcontrolado
Mediatronix®,
bir y compila
crocontrolador
l programa del trab
Distulo III
coBlaze™
os al sistema
o serial como p
or PicoBlaze™,
, ofrece sin co
ar el código
r PicoBlaze™,
bajo del trabajo de
seño del Sis
el
por
, se
osto
en
así
e
stema
34
Diseño del SistemaCapítulo III
3.7 Implementación del sistema
Figura 21. Programa que ejecuta el microcontrolador PicoBlaze™.
Sí
No
Comunicación PS/2
Comunicación Serial
El usuario aún no ha elegido una gestión
Sí
No
No
Sí
No Sí
No
Sí
Sí
No
Sí
No No
Sí
Sí
No
Almacenar en la memoria SPM del
PicoBlaze™
Decodificar el Scan-Key recibido
y traducirlo a código ASCII
Desplegar el carácter ingresado, en la LCD de la tarjeta de desarrollo
Detectar el bit de parada en la línea de
Rx del puerto RS-232
Subrutina de retardo de 8.3µs
Esperar a que el usuario desee iniciar una nueva encriptación de datos
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
Detectar el bit de parada en la línea de reloj del puerto PS2
Desplegar mensaje de bienvenida en la LCD
Inicializar LCD
Esperar elección de gestión del usuario
(leer switches)
Limpiar la memoria SPM del
Examinar si han ingresado 8-bits
al sistema
Detectar un flanco de subida en la línea de reloj en
Escanear la línea de datos de PS2 y realizar un
registro de corrimiento a la izquierda en el registro de recepción con un 0 ó un 1 según lo detectado
Detectar un nivel bajo en la línea de
reloj en PS2
Detectar el bit de inicio en la línea de reloj del puerto PS2
Escanear la línea Rx de RS-232 y realizar un
registro de corrimiento a la izquierda en el registro de recepción con un 0 ó un 1 según lo detectado
Subrutina de retardo de 8.3µs
Examinar si han ingresado 8-bits
al sistema
Subrutina de retardo de 4.3µs
Detectar el bit de inicio en la línea de
Rx del puerto RS-232
Extraer los datos obtenidos de la
encriptación: Texto cifrado, y Key-
schedule por medio de la línea TX del puerto SR-232 de
manera similiar a la rutina de ingreso
Desplegar los datos obtenidos de la
encriptación: Texto cifrado, y Key-
schedule por medio de la LCD de la tarjeta de
desarrollo
Cifrado
Almacenar los resultados en la memoria SPM del
microcontrolador PicoBlaze™
Almacenar en la memoria SPM del
PicoBlaze™
No
Sí
3.
El
de
7.1 Gesti
l sistema pued
esarrollo:
3.7.1.1
Para una
protocolo
formas d
utilizació
microcon
inicio, 8-
Banging
pin de Rx
recepción
el protoco
de la com
Figura 22
ión de Entra
de gestionar da
Comunic
comunicación
o de comunicac
de onda acertad
n del microcon
ntrolador. El pr
-bits de datos
que consiste e
x en un interv
n. Al utilizar un
olo, el intervalo
municación.
2. Puertos Seriales
ada/Salida d
atos por medio
cación Seria
n libre de erro
ción serial, sin
das en la tran
ntrolador Pico
rotocolo de com
y 1-bit de pa
en detectar el b
alo de tiempo
na velocidad d
o de muestreo
s RS-232 montado
35
de datos al S
o de un teclado
l
ores entre el F
ncronizar la de
nsmisión. Con
oBlaze™, toda l
municación se
arada. Para la
bit de inicio d
determinado,
de transmisión d
se estableció a
os en la tarjeta de d
Sistema
o PS/2 ó por e
FPGA y la PC
etección de señ
el fin de aho
a gestión de da
e estableció a 1
recepción se
e la comunica
y finalizar de
de 115,200 bps
a 8.68µs, para s
desarrollo SPART
Capít
el puerto seria
C debe seguir
ñales en la rece
orrar hardware
atos se realiza d
115,200 bps, u
utilizó la técn
ción para desp
tectando el bit
s que es el máx
satisfacer el Ti
TAN-3E™ Starter-K
Distulo III
al de la tarjeta
correctamente
epción, y gene
y aprovechar
dentro del mism
tilizando 1-bit
nica llamada B
pués muestrear
t de parada de
ximo que perm
iempo de Símbo
Kit™.
seño del Sis
de
e el
erar
r la
mo
de
Bit-
r el
e la
mite
olo
stema
Para la tr
después s
significat
enviar, y
tarea se re
3.7.1.2
Mediante
computad
ansmisión a la
se toma el by
tivo), después r
finalizar ponie
ealiza dentro d
Figura
Comunic
e esta opción e
dora, la gestión
Figura 24. Co
a PC se envía p
yte a enviar, b
realizar un desp
endo la línea T
del microcontro
a 23. Comportami
cación media
el sistema pue
n de los datos s
onector PS/2 de la
36
primero un bit
it por bit cada
plazamiento y
Tx en alto para
olador PicoBla
iento del sistema e
ante un tecla
de ingresar lo
se hace utilizan
a tarjeta de desarro
de inicio que s
a 8.68µs empe
transmisión de
a indicar un bit
aze™.
n la comunicación
ado PS/2
s datos a encr
ndo el protocolo
ollo SPARTAN-3E
Capít
satisfaga el Tie
ezando por el
e cada uno de l
t de paro. De n
n de datos serial.
riptar mediante
o de comunica
E™ Starter-Kit™.
Distulo III
empo de Símbo
LSB (bit men
los bits del byt
nueva cuenta e
e un teclado p
aciones PS/2.
seño del Sis
olo,
nos
te a
esta
ara
stema
Como se
la línea d
y recepci
bit de pa
sincroniz
dicha sinc
El sistem
con el tec
diseño, lo
inicio con
caracter r
por lo qu
pueda enc
observa en la
del reloj, y la lí
ón de caracter
rada, 8-bits de
ación de bits s
cronización se
Figura 2
ma, de la misma
clado por med
o que se hace
n un ‘0’ lógico
recibido, ingres
ue se requirió l
criptar los dato
figura anterior
nea de datos. U
res funciona de
e datos entre e
e emplea la lín
hace de maner
25. Formas de ond
a manera que lo
dio del microco
es esperar un
o en la línea de
sa al sistema en
la implementac
os.
Figura 26. S
37
r, el protocolo
Un caracter se
e manera muy
ellos y 1-bit de
nea de reloj a d
ra implícita a l
da y diagrama de t
o hace con la c
ontrolador Pico
flanco de baja
e datos y come
n un formato l
ción de un dec
Scan-codes para c
PS/2 se basa e
conforma de 8
similar al prot
e paridad, la d
diferencia de la
a línea de dato
tiempos para la co
comunicación s
oBlaze™, con e
ada en la línea
enzar a recibir
lamado Scan-c
codificador po
cada una de las tec
Capít
en dos líneas d
8-bits, la mane
tocolo Serial: 1
diferencia radic
a comunicación
os
omunicación PS/2.
serial, gestiona
el fin de ahorr
a de reloj, com
los bits de los
code, diferente
r hardware par
clas.
Distulo III
de comunicació
ra de transmisi
1-bit de inicio,
ca en que para
n serial en la cu
.
a la comunicaci
rar recursos en
mprobar un bit
s caracteres. Ca
al código ASC
ra que el siste
seño del Sis
ón:
ión
, 1-
a la
ual,
ión
n el
de
ada
CII,
ma
stema
38
Diseño del SistemaCapítulo III
3.7.2 Gestión de la LCD
Figura 27. A) Rutina para la LCD
B) Subrutina de escritura.
B) A)
Escribir mensajes de bienvenida y mensajes de menú de usuario: “Esperar gestión”
Desplegar cada caracter
ingresado (32)
Desplegar: “Recibiendo”
Configurar la LCD con los parámetros: Interface
de 8-bits, 2 renglones, caracteres de 5x8 puntos
de resolución
Limpiar el bus de datos de la LCD
Inicio
Habilitar la operación de escritura
Esperar 5ms
Esperar 20ms
Configurar la memoria DDRAM, y al puntero de la
LCD con los parámetros: Movimiento del cursor a la
derecha y autoincremento en DDRAM Address
Configurar a la pantalla de la LCD con los parámetros: Encender el display entero, activar cursor, desactivar
posición del cursor
Limpiar todas las localidades de DDRAM Address y apuntar a la
dirección “0”
Esperar 2ms
Esperar Cifrado
Desplegar texto cifrado o Key-schedule
en función de los switches de la tarjeta
¿El usuario ha indicado una nueva
rutina de encriptación?
Enviar dato de 8-bits a escribir en la LCD a la interface del sistema
Especificar a la línea LCD_RS de la LCD que se desea enviar
un dato
Notificar a la LCD que se desea escribir poniendo la
línea LCD_RW en un estado bajo
Habilitar las operaciones de Lectura/Escritura en la LCD poniendo en alto la
línea LCD_E
¿El nibble superior del byte a escribir ha sido enviado
por LCD_DAT?
Esperar 240ns
Deshabilitar las operaciones de
Lectura/Escritura en la LCD poniendo en bajo
LCD_E
Deshabilitar la admisión de datos a la LCD
poniendo en bajo la línea LCD_RW
Enviar nibble superior a LCD_DAT
Enviar nibble inferior a LCD DAT
Esperar 1us
Se ha enviado el byte completo por LCD_DAT?
Salir
Iniciar
No
Sí
No
Sí
No Sí
Pa
de
bu
ha
LC
mu
An
int
lín
m
de
im
Co
el
es
ara la gestión
esarrollo el FP
us de datos de
acer con un pro
CD para que p
uestra el proto
ntes de come
terpretar los co
neas, caractere
emoria DDRAM
el mensaje de
mágenes siguien
omo se observ
sistema entra
sto se hace por
de la pantalla
PGA se comuni
4-bits, sin em
otocolo de 8-b
pueda interpret
colo que ha de
F
nzar a escribi
omandos desea
s de 5x8 pixele
M de la LCD,
bienvenida al
ntes se muestra
va en las imáge
en espera a qu
medio de los s
a de cristal líq
ica con la LCD
mbargo para es
its de datos, p
tar las instrucc
e seguirse para
Figura 28. Protoco
ir caracteres e
ados, por lo qu
es de resolució
y limpiar la pa
usuario y esp
a la secuencia d
enes siguientes
ue el usuario in
switches de la t
39
quido (LCD) h
D por medio de
cribir caracter
or lo que enton
ciones que se d
que la LCD pu
olo de comunicació
en la LCD, p
ue se configura
ón, ubicar el cu
antalla, despué
pera a que este
del menú de us
s, después de h
ndique la mane
tarjeta de desar
hay que tener
e 3 señales de
es y enviar co
nces se deben
desean que eje
ueda interpreta
ón de la LCD.
primero ha de
para una inter
ursor en la prim
és de este inicio
e elija la gesti
suario:
haber desplega
era en que dese
rrollo.
Capít
en cuenta que
control (Enabl
omandos a la L
de enviar 2 ni
ecute. En la fi
r las operacion
e inicializarse
rface de 8-bits,
mera línea y co
o el sistema ma
ión de datos q
ado los mensaje
ea ingresar los
Distulo III
e en la tarjeta
le, RS, R/W) y
LCD se tiene q
ibbles de bits a
gura siguiente
nes deseadas:
para que pue
con la LCD d
olumna, activar
anda la secuen
que desea. En
es de bienveni
datos a encript
seño del Sis
de
un
que
a la
e se
eda
de 2
r la
ncia
las
ida,
tar,
stema
Figura 29. Secuencia del me
40
enú de usuario del
l sistema criptográ
Capít
áfico.
Distulo III seño del Sisstema
41
Diseño del SistemaCapítulo III
3.7.3 Encriptación de datos
Tarea esencial del sistema, una vez que los datos se encuentran en el microcontrolador PicoBlaze™, se
les aplica el algoritmo de encriptación AES-128 para después ponerlos a disposición 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 aplicación 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
matemáticamente, dichos pasos se ejecutan a nivel de bytes, lo que lo hace más sencillo de implementar
ya sea en hardware ó en software.
Figura 30. Diagrama de flujo para el algoritmo de encriptación AES.
AddRoundKey
Inicio
Comprobar si se han realizado 9
rondas
SubBytes
ShiftRows
AddRoundKey
ShiftRows
MixColumns
AddRoundKey
SubBytes
Terminar
No
Sí
42
Diseño del SistemaCapítulo III
3.7.3.1 Implementación 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 iteración de la clave; cada subclave es del mismo tamaño del State. La
subclave se agrega combinando cada byte del State con el correspondiente byte de la subclave usando
la operación lógica XOR.
Figura 31. Diagrama de flujo utilizado para el diseño del algoritmo empleado para la implementación de la etapa AddRoundKey en el
microcontrolador PicoBlaze™.
Cargar al registro count con el valor 16 dec
Realizar una operación XOR entre regstate y regkey y depositar el resultado en resgstate
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
Cargar al puntero state la dirección inicial donde está almacenado el State en la
memoria SPM del Picoblaze™
Inicio
Cargar al puntero key la dirección inicial donde está
almacenado el Key-Schedule en la memoria
SPM del Picoblaze™
Almacenar el valor de regstate en el state, esto se realiza guardando dicho
valor en la memoria SPM del PicoBlaze™ direccionándola con el valor
que se encuentra en el puntero state
Incrementar en 1 el valor de los punteros state y key
Decremento en 1 al registro count
¿Es el valor del registro count igual
a cero? Salir
No
Sí
3
E
b
i
a
f
e
3.7.3.2 Im
En la etapa Sub
bits. Esta oper
inversa alreded
ataques basado
función invers
estables y tamb
1. Inicia
prime
sucesi
2. Mape
[00] e
3. Consi
b1, b'ib =
valor
Fi
mplementaci
bBytes, cada by
ración provee
dor del GF(28
os en simples
sa con una tran
bién puntos est
alizar la S-box
era fila contien
ivamente. Por
ear cada byte en
es mapeado por
iderar que cada
0,). Aplicar
( )4 mod8i ib b +⊕
[63], que es (c
igura 32. S-box em
ión para Sub
yte en el arreg
la no linealida8), conocido po
propiedades a
nsformación af
tables inversos
con los valor
ne [00], [01], [0
lo que el valor
n la S-box por
r sí mismo.
a byte en la S-b
la siguiente
( )8 5 mod8ib −⊕ ⊕
c7c6c5c4c3c2c1c0
mpleada para la ej
43
bBytes
lo del State es
ad en el cifrad
or tener grand
lgebraicas, la
fín invertible.
s. La S-box se c
res de los byt
02], … , [0F];
r del byte en la
su inverso mul
box consiste de
transformació
( )7 mod8ib +⊕ ⊕
0) = (01100011
jecución del algori
substituido us
do. La S-box u
des propiedade
S-box se const
La S-box tamb
construye de la
tes en secuenc
la segunda fila
fila x, column
ltiplicativo en
e 8-bits etiquet
ón a cada bit
ic⊕ , donde ci
)
itmo AES en el mic
Capít
ando la S-box
utilizada provie
es de no lineal
truye por la co
bién se elije p
a siguiente man
cia ascendente
a contiene [10
na y será [xy].
el campo finito
tados como (b7
t de cada by
es el i-ésimo b
crocontrolador Pi
Distulo III
de Rijndael de
ene de la funci
lidad. Para evi
ombinación de
para evitar pun
nera:
fila por fila.
], [11], etc.; y
o GF(28); el va
7, b6, b5, b4, b3,
yte en la S-b
bit del byte c c
icoBlaze™.
seño del Sis
e 8-
ión
itar
e la
ntos
La
así
alor
b2,
ox:
con
stema
44
Diseño del SistemaCapítulo III
El diagrama de flujo para la secuencia implementada en el microcontrolador PicoBlaze™ es la
siguiente:
Figura 33. Diagrama de flujo utilizado para el diseño del algoritmo empleado para la implementación de la etapa SubBytes en el microcontrolador PicoBlaze™.
Cargar al registro count con el valor 16 dec
Direccionar a la memoria ROM externa
con el valor que se encuentra en regstate
Cargar en regstate el valor que se encuentra almacenado
en la localidad que está direccionando 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?
Cargar al puntero state la dirección inicial donde está almacenado el State en la
memoria SPM del Picoblaze™
Inicio
Salir
Almacenar el valor de regstate en el state, esto se realiza guardando dicho
valor en la memoria SPM del PicoBlaze™ direccionándola con el valor
que se encuentra en el puntero state
Leer el valor que entrega la memoria
ROM externa y almacenarlo en
regstate
No
Sí
45
Diseño del SistemaCapítulo III
3.7.3.3 Implementación para ShiftRows
El paso ShiftRows opera en las filas del State; rota de manera cíclica los bytes en cada fila por un
determinado offset. En AES, la primera fila queda en la misma posición. Cada byte de la segunda fila
es rotado una posición 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.
Figura 34. Diagrama de flujo utilizado para el diseño del algoritmo empleado para la implementación de la etapa ShiftRows en el microcontrolador PicoBlaze™.
Inicio
Leer y almacenar en el registro s6 la dirección 2 del
SPM del Picoblaze™
Leer y almacenar en el registro s7 la dirección 6 del
SPM del Picoblaze™
Leer y almacenar en el registro s8 la dirección 10 del
SPM del Picoblaze™
Leer y almacenar en el registro sA la dirección 14 del
SPM del Picoblaze™
Guardar en la dirección 2 del SPM del Picoblaze™ el
registro s8
Guardar en la dirección 2 del SPM del Picoblaze™ el
registro s8
Guardar en la dirección 2 del SPM del Picoblaze™ el
registro s8
Guardar en la dirección 2 del SPM del Picoblaze™ el
registro s8
Terminar
Leer y almacenar en el registro s8 la dirección 5 del
SPM del Picoblaze™
Leer y almacenar en el registro s9 la dirección 9 del
SPM del Picoblaze™
Leer y almacenar en el registro sA la dirección 13 del
SPM del Picoblaze™
Guardar en la dirección 1 del SPM del Picoblaze™ el
registro s8
Guardar en la dirección 5 del SPM del Picoblaze™ el
registro s9
Guardar en la dirección 9 del SPM del Picoblaze™ el
registro sA
Guardar en la dirección 13 del SPM del Picoblaze™ el
registro s7
Leer y almacenar en el registro s7 la dirección 1 del
SPM del Picoblaze™
Leer y almacenar en el registro s6 la dirección 7 del
SPM del Picoblaze™
Leer y almacenar en el registro s7 la dirección 11 del
SPM del Picoblaze™
Leer y almacenar en el registro s8 la dirección 15 del
SPM del Picoblaze™
Guardar en la dirección 3 del SPM del Picoblaze™ el
registro s8
Guardar en la dirección 7 del SPM del Picoblaze™ el
registro sA
Guardar en la dirección 11 del SPM del Picoblaze™ el
registro s6
Guardar en la dirección 15 del SPM del Picoblaze™ el
registro s7
Leer y almacenar en el registro sA la dirección 3 del
SPM del Picoblaze™
46
Diseño del SistemaCapítulo III
3.7.3.4 Implementación para MixColumns
En el paso MixColumns, los cuatro bytes de cada columna del State se combinan usando una
transformación lineal invertible. La función 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 difusión en el cifrado. Cada columna se trata como un polinomio GF (28) y luego
se multiplica el módulo x4 + 1 con un polinomio fijo c(x). El paso MixColumns puede verse como una
multiplicación matricial en el campo finito de Rijndael.
Figura 35. Diagrama de flujo utilizado para el diseño del algoritmo empleado para la implementación de la etapa MixColumns en el
microcontrolador PicoBlaze™.
Inicio
Leer y almacenar en el registro s5 la dirección 1 del
SPM del Picoblaze™
Leer y almacenar en el registro s6 la dirección 2 del
SPM del Picoblaze™
Leer y almacenar en el registro s7 la dirección 3 del
SPM del Picoblaze™
Leer y almacenar en el registro s4 la dirección 0 del
SPM del Picoblaze™
Llamar subrutina MixColumn
Guardar en la dirección 0 del SPM del Picoblaze™ el
registro s4
Guardar en la dirección 1 del SPM del Picoblaze™ el
registro s5
Guardar en la dirección 2 del SPM del Picoblaze™ el
registro s6
Guardar en la dirección 3 del SPM del Picoblaze™ el
registro s7
Llamar subrutina MixColumn
Guardar en la dirección 4 del SPM del Picoblaze™ el
registro s4
Guardar en la dirección 5 del SPM del Picoblaze™ el
registro s5
Guardar en la dirección 6 del SPM del Picoblaze™ el
registro s6
Guardar en la dirección 7 del SPM del Picoblaze™ el
registro s7
Leer y almacenar en el registro s4 la dirección 4 del
SPM del Picoblaze™
Leer y almacenar en el registro s5 la dirección 5 del
SPM del Picoblaze™
Leer y almacenar en el registro s6 la dirección 6 del
SPM del Picoblaze™
Leer y almacenar en el registro s7 la dirección 7 del
SPM del Picoblaze™
Llamar subrutina MixColumn
Leer y almacenar en el registro s5 la dirección 9 del
SPM del Picoblaze™
Leer y almacenar en el registro s6 la dirección 10 del
SPM del Picoblaze™
Leer y almacenar en el registro s7 la dirección 11 del
SPM del Picoblaze™
Leer y almacenar en el registro s4 la dirección 8 del
SPM del Picoblaze™
Guardar en la dirección 8 del SPM del Picoblaze™ el
registro s4
Guardar en la dirección 9 del SPM del Picoblaze™ el
registro s5
Guardar en la dirección 10 del SPM del Picoblaze™ el
registro s6
Guardar en la dirección 11 del SPM del Picoblaze™ el
registro s7
Terminar
Guardar en la dirección 12 del SPM del Picoblaze™ el
registro s4
Guardar en la dirección 13 del SPM del Picoblaze™ el
registro s5
Guardar en la dirección 14 del SPM del Picoblaze™ el
registro s6
Guardar en la dirección 15 del SPM del Picoblaze™ el
registro s7
Llamar subrutina MixColumn
Leer y almacenar en el registro s4 la dirección 12 del
SPM del Picoblaze™
Leer y almacenar en el registro s5 la dirección 13 del
SPM del Picoblaze™
Leer y almacenar en el registro s6 la dirección 14 del
SPM del Picoblaze™
Leer y almacenar en el registro s7 la dirección 15 del
SPM del Picoblaze™
47
Diseño del SistemaCapítulo III
Figura 36. Subrutina empleada para la implementación de la multiplicación de matrices en GF(28) en el microcontrolador PicoBlaze™.
XOR sB(c[0]⊕ c[3]) con s8(c[0]⊕ c[1]), depositar
el resultado en s8
XOR s4(c[0])con s8(c[0]⊕c[1]⊕ c[0]⊕ c[3]), depositar el resultado en s4. Primer
coeficiente obtenido
Cargar el registro sA(c[1]⊕ c[2]) en
Realizar un registro de corrimiento a la
izquierda SL0 a s8
¿Existió un desbordamiento en el microcontrolador PicoBlaze™ al ejecutar la instrucción anterior?
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 s8(c[0]⊕ c[0]⊕ c[1]⊕c[3])con s5(c[1]), depositar el resultado en s5. Segundo
coeficiente obtenido
Cargar el registro s6(c[2]) en s8
XOR s7(c[3]) con s8(c[0]⊕ c[1]), depositar
el resultado en s8
Cargar el registro s4(c[0]) en s9
MixColumns
XOR s7(c[3]) con s9(c[0]), depositar el
resultado en s9
XOR s6(c[2]) con sA(c[1]), depositar el
resultado en sA
Cargar el registro s5(c[1]) en sA
XOR sA(c[1]⊕ c[2]) con XOR sB(c[0]⊕ c[3]), depositar el resultado
en sB(tmp)
Cargar el registro s9(c[0]⊕ c[3]) en sB
Cargar el registro s4(c[0]) 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
¿Existió un desbordamiento en el microcontrolador PicoBlaze™ al ejecutar la instrucción anterior?
XOR s8(c[0]⊕ c[1]) con 1Bhex, depositar
el resultado en s8
Realizar un registro de corrimiento a la
izquierda SL0 a s8
¿Existió un desbordamiento en el microcontrolador PicoBlaze™ al ejecutar la instrucción anterior?
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 con s8(c[0]⊕ c[0]⊕c[1]⊕ c[3]) con s6(c[2]),
depositar el resultado en s6. Tercer coeficiente obtenido
Cargar el registro s9(c[0]⊕ c[3]) en s8
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 s8(c[0]⊕ c[0]⊕ c[1]⊕c[3]) con s7(c[3]), depositar el resultado en s7. Cuarto y último coeficiente obtenido.
Terminar
Realizar un registro de corrimiento a la
izquierda SL0 a s8
¿Existió un desbordamiento en el microcontrolador PicoBlaze™ al ejecutar la instrucción anterior?
No
Sí
No Sí
No
Sí
No
Sí
P
m
c
p
{T
Y
3.8 A
Para realizar u
mostrado que
cuales solame
pueden ser
{ } {(03 02x =i
Teórico, se tien
0,
'0, 0,
'1, 1,
'2, 2,
'3, 3,
j
j j
j j
j j
j j
Tmp s s
s s Tm
s s Tm
s s Tm
s s Tm
= ⊕
= ⊕
= ⊕
= ⊕
= ⊕
Y al emplear la
Arquitectu
una implemen
MixColumns
nte hacen uso
eliminadas
} )2 x x⊕i , y
ne entonces qu
((((
1, 2, 3,
0,
1,
2,
3,
2
2
2
2
j j j
j
j
j
j
s s s
mp s
mp s
mp s
mp s
⊕ ⊕
⎡⊕ ⎣⎡⊕ ⊕⎣⎡⊕ ⎣⎡⊕ ⎣
i
i
i
i
as nuevas ecua
ura del Sis
Figur
ntación más ef
solamente req
o de corrimien
si se utiliza
si se parte de
ue:
))))
1,
2,
3,
0,
j
j
j
j
j
s
s
s
s
⎤⊕ ⎦⎤⊕ ⎦⎤⊕ ⎦⎤⊕ ⎦
aciones el tiemp
tema
ra 37. Diagrama e
48
ficiente en el
quiere de mult
ntos y operaci
a la siguien
e las ecuacion
po de procesam
esquemático de la a
microcontrolad
tiplicaciones p
iones XOR co
nte identidad
nes para MixCo
miento se reduc
arquitectura del si
Capít
dor PicoBlaze
por [02] y [03
ondicionales, e
d matemática
olumns mostra
ce en esta etap
istema.
Distulo III
e™ y como se
3] en GF(28),
estas operacion
a para GF(2
adas en el Mar
a del cifrado.
seño del Sis
ha
las
nes
28):
rco
stema
49
Diseño del SistemaCapítulo III
Como se observa en la figura anterior la arquitectura del sistema, como resultado del procesamiento embebido
en el microcontrolador PicoBlaze™ ha resultado muy práctica de implementar. A continuación 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 además de la gestión de periféricos externos. El código fuente para
implementarse en un proyecto se puede encontrar de manera gratuita desde la página web del fabricante
Xilinx®: www.xilinx.com
3.8.2 Memoria de programa para el microcontrolador PicoBlaze™
Designado en el diagrama esquemático 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 periféricos
externos a este: LCD, push-buttons, switches, puerto RS-232 y PS/2. Además se encarga de decodificar
los Scan-codes que envía el teclado a código ASCII; y realiza la transformación SubBytes del algoritmo
AES-128 almacenando la S-box necesaria para ello.
50
Diseño del SistemaCapítulo III
3.9 Diseño del programa para el intercambio de datos PC-FPGA a través 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 según 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 comunicación exitosa, de hecho se puede prescindir de una PC, basta contar con algún dispositivo
electrónico que cumpla con el protocolo de comunicación serial, para que la codificación 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.
Figura 38. Diagrama de flujo para el diseño del programa que ejecuta MatLab® para la gestión de datos.
Inicio
Almacenar en la variable datos los números
ingresados por el usuario para su encriptación
Almacenar en la variable llave los números ingresados por el usuario para usar en el
proceso de encriptación
Agrupar en una sola variable matriz las variables dato y llave, y convertirlas a un formato uint(8)
para su posterior transmisión
Transmitir la variable matriz por el puerto serial utilizando
los parámetros de comunicación ya establecidos
Esperar la recepción de datos en COM1, y almacenar los
resultados en la variable salida. Desplegar los resultados en la
pantalla
Configurar e inicializar el puerto serial COM1 utilizando el siguiente protocolo
de comunicaciones: Tasa de transferencia = 115200bps, Número de bits = 8-bits, Bits de parada = 1-bit, No
bit de paridad
Terminar
Para co
197(Fed
al Algo
contra l
A)
B)
Capí
omprobar que e
deral Informat
oritmo de Encr
los datos que e
Figura 39. Ejemp
F
ítulo IV
el sistema cod
tion Processing
riptación Avan
l sistema proce
plo para AES-128 s
Figura 40. Datos e
V. AN
ificara correcta
g Standards Pu
nzada AES, y s
esó:
según FIPS. A) Te
enviados y recibido
51
NÁLISI
amente según
ublication 197)
se compararon
exto y Llave antes
os por la PC a trav
IS DE R
AES-128, se u
7), el cual es el
los ejemplos
del cifrado. B) Tex
vés de MatLab® ha
RESUL
utilizó el docum
documento ofi
que contiene d
xto cifrado y subc
acia el FPGA.
LTADO
mento FIPS P
ficial que descr
dicho documen
lave final.
OS
UB
ribe
nto
Como s
en el si
que el s
En las i
desarro
su corre
se observa en l
stema de encri
sistema encript
imágenes sigu
llo. Estos cara
espondiente tra
las imágenes a
iptación desarr
ta datos según A
uientes se mues
acteres concuer
aducción a cód
Figura 41. R
anteriores los d
rollado en este
AES-128 de m
stran los result
rdan con los re
digo ASCII.
Resultados despleg
52
datos utilizados
trabajo, concu
manera correcta
tados del texto
esultados anteri
gados en la LCD d
s en el ejemplo
uerdan, por lo q
.
o cifrado mostr
iores ya que so
de la tarjeta de des
Capítulo
o de FIPS y lo
que se puede te
rado en la LCD
on los mismos
sarrollo
IV Anális
s datos obtenid
ener la certeza
D de la tarjeta
valores pero c
is de Resul
dos
a de
de
con
tados
4.1 R
Para de
implem
4.
Se
di
Resultados
eterminar las
mentación:
1.1 Área
egún la herram
seño en el FPG
Figura 42
s de la imp
propiedades
a
mienta de softw
GA es:
2. Vista de los recu
A)
plementaci
finales del sis
ware ISE™ Fo
ursos utilizados po
53
ión del sist
stema se mue
oundation del f
or el diseño. A) Ed
tema estran algunas
fabricante Xili
ditor de interconex
Capítulo
s de sus cara
inx® el espacio
xiones. B) Editor F
B)
IV Anális
cterísticas en
o ocupado por
FloorPanel.
is de Resul
su
r el
tados
54
Capítulo IV Análisis de Resultados
Recurso Valor utilizado Porcentaje XC3S500E
IOBs Externos 25 de 232 10% BUFGMUXs 2 de 24 8% RAMB16s 1 de 20 5% Slices 276 de 4656 5% SLICEMs 78 de 2328 3%
Figura 43. Reporte del mapeo del diseño.
Como se puede observar en las imágenes y en el reporte de recursos, el número de elementos utilizado
por el diseño es mínimo, debido a que el procesamiento y la gestión 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 diseño.
4.1.2 Throughput
Al utilizar el microcontrolador PicoBlaze™ se puede conocer con gran precisión 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 diseño, el número de ciclos de reloj necesarios para encriptar 128-
bits a 50MHz según los datos obtenidos con la herramienta pBlazeIDE™ es de 5,247-ciclos. Para un
algoritmo criptográfico el Throughput (cantidad de datos procesados por unidad de tiempo) es:
Frecuencia del reloj Número de bits
Ciclos de prThroughpu
ocesami tot
en×
=
En específico para el sistema diseñado en este trabajo de investigación el Throughput obtenido es:
50 128
51.21
247MHz bits
ciclosThroughput Mbps×
= =
4.1.3 Comparación del sistema con otras Arquitecturas
Con el propósito de conocer la manera en que se comporta el sistema en el mundo real se comparó el
desempeño del sistema con algunas otras implementaciones encontradas en literatura abierta. Dichas
implementaciones se dividen en dos categorías: Arquitecturas basadas en FPGA’s y Arquitecturas
basadas en microcontroladores.
55
Capítulo IV Análisis de Resultados
A continuación se muestra una tabla con los resultados obtenidos para AES-128:
Autor Tecnología/Dispositivo Slices BRAM’s Throughput Weaver[9] FPGA/XVE600-8 460 10 690Mbps Labbé[10] FPGA/XCV1000-4 2151 4 390Mbps
Saggese[11] FPGA/XCVE2000-8 446 10 1Gbps Chodwiec[12] FPGA/XC2530-5 222 3 139Mbps Chodwiec[12] FPGA/XC2530-6 222 3 166Mbps Standaert[13] FPGA/XC2300E 542 10 1.45Gbps
Gaj[14] FPGA/XCV1000 2902 — 331.5Mbps Saqib[15] FPGA/XCV812E 2744 — 258.5Mbps
Amphion [16] FPGA/XVE8 421 4 290Mbps Amphion [16] FPGA/XVE8 573 10 1.06Gbps Segredo[17] FPGA/XCV100-4 496 10 417Mbps Segredo[17] FPGA/XCV600E8 496 10 743Mbps
Calderón[18] FPGA/Altera® EPF10K 1584 — 637.24Mbps Bernstein[19] Microprocesador/Intel® Pentium™
(611 ciclos @ 66MHz)
13.8Mbps (teórico)Bernstein[19] Microprocesador/AMD® Athlon™X2 4600+
(213 ciclos @ 2.4GHz)
1.44Tbps (teórico) Bernstein[19] Microprocesador/Intel® Core™2 Quad Q6600
(201 ciclos @ 2.4GHz)
1.52Tbps (teórico) Chung-
Huang[20] Microcontrolador/Motorola® 6805 (9000 ciclos @ 2.1MHz)
30Kbps
Permadi[21] Microcontrolador/Microchip® PIC16F84 (12225 ciclos @ 4MHz)
41.8Kbps
Permadi[21] Microcontrolador/Microchip® PIC16F877 (4559 ciclos @ 4MHz)
112.3Kbps
Chung-Huang[20]
Microcontrolador/Motorola® 68HC908 (7258 ciclos @ 8MHz)
141Kbps
Chung-Huang[20]
Microcontrolador/Hitachi® H8/300 (4180 ciclos @ 5MHz)
153.1Kbps
SIC-IAIK[22] Microcontrolador/Intel® 8051 (3905 ciclos @ 8MHz)
262.2Kbps
Flowers-Schlunder[23]
Microcontrolador-DSP/Microchip® PIC24/dsPIC® (2808 ciclos @ 16MIPS)
729Kbps
Trabajo de Investigación
PicoBlaze™Microcontrolador Embebido-FPGA/XC3S500E (5247 ciclos @ 50MHz)
276
1
1.21Mbps
Figura 44. Comparación de desempeño entre diferentes Arquitecturas para cifrado de AES-128
56
Capítulo V. CONCLUSIONES
5.1 Resumen de los resultados obtenidos
Se efectuó y se ahondó en el estudio del algoritmo AES, logrando realizar una síntesis correcta para la
implementación exitosa de dicho algoritmo en un sistema electrónico digital.
Se utilizaron varias de las herramientas de diseño de Hardware y procesamiento embebido para FPGA’s
del fabricante Xilinx®.
Se logró la asociación exitosa de los periféricos de Entrada/Salida de datos al sistema. Y de la misma
manera la comunicación Hardware/Software entre el FPGA y la PC.
La implementación obtenida del diseño 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 Electrónica Digital hoy en día
debido a las necesidades contemporáneas 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 utilización debido a los paradigmas acumulados durante muchos años. Ahora los FPGA tienden a encontrar
un lugar cada vez más sólido debido a su gran capacidad y versatilidad para la implementación de soluciones
en Hardware. Y es debido a esta nueva práctica, que los fabricantes de FPGA’s ofrecen más y mejores
herramientas para lograr diseños exitosos y más fáciles de implementar, como es el caso del microcontrolador
PicoBlaze™ utilizado en este tema de investigación. Dicho microcontrolador demostró poseer una capacidad
de procesamiento muy superior a la mayoría de los microcontroladores actuales, debido a la inherente ventaja
de estar embebido en una plataforma FPGA donde se cuentan con recursos para diseñar cualquier entidad
necesaria para algún sistema que así lo requiera y al mismo tiempo contar con una frecuencia de reloj más
alta, obteniendo así lo mejor de dos mundos. Como se vio en el capítulo de Análisis de Resultados, aunque el
desempeño de una solución de procesamiento con microcontrolador no puede compararse con el desempeño
de arquitecturas dedicadas, la solución con microcontrolador demostró ocupar menos recursos en la
plataforma, por lo que es ideal para diseños donde la velocidad de cifrado de datos no sea una tarea crítica ó
cuando las necesidades de espacio son ajustadas ya que el microcontrolador para el caso de este diseño no
solamente se ocupa de la tarea de cifrado, sino que también se encarga de gestionar los periféricos de
Entrada/Salida así como la comunicación con la PC.
57
ConclusionesCapítulo V
5.3 Trabajo Futuro Basándose en el mismo diseño y valiéndose de los pocos recursos que emplea el microcontrolador
PicoBlaze™, se puede obtener un mejor desempeño empotrando varios microcontroladores en el FPGA para
distribuir el procesamiento de datos y así elevar el Throughput final del sistema.
Y siguiendo la misma línea de procesamiento embebido, sería muy interesante considerar el desempeño que
se podría obtener al utilizar algún microprocesador empotrable como MicroBlaze™ ó PowerPC™ ya que con
ellos se podría simplificar el algoritmo de encriptación al emplear instrucciones de 32-bits en lugar de las de 8
por lo que fortuitamente se prescindiría de iteraciones, alcanzando así un mucho mayor Throughput que el
alcanzado para este diseño. Además, al utilizar alguno de estos microprocesadores eventualmente se
utilizarían dispositivos más veloces como la memoria DDR-SDRAM ó el puerto PHY-Ethernet de la tarjeta
de desarrollo por lo que la movilización de los datos en el sistema sería mucho mayor y mucho más rápida,
obteniendo así una mejora global en la arquitectura.
58
APÉNDICES
Apéndice A. Términos y Acrónimos
A continuación se enlista una serie de términos y acrónimos que se utilizarán durante la realización de esta
investigación. Algunos términos que nativamente se encuentran en el idioma inglés, se les aplicará una
traducción inmediata al español para una mejor comprensión:
AES. Estándar de Encriptación Avanzado
Affine. Una transformación que consiste en la multiplicación de una matriz seguida por la suma de un
vector.
Arreglo. Una colección ordenada de entidades iguales (ejemplo: un arreglo de bytes).
Bit. Un dígito 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 tamaño
de una secuencia es el número de bits que contiene. Los bloques se interpretan también 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 criptográfica secreta que es usada por la rutina de Expansión de llave para generar
un arreglo de Rondas de llave; se puede imaginar como un arreglo rectangular de bytes que tienen cuatro
filas y kN columnas.
59
Apéndices
Palabra. Un grupo de 32 bits que es tratado como una entidad simple ó como un arreglo de 4 bytes.
Rijndael. Algoritmo criptográfico especificado en el Estándar de Encriptación Avanzado (AES).
Rondas de la llave. S valores derivados del texto cifrado utilizando la Rutina de expansión de la llave; son
aplicados al State en la etapa de cifrado y descifrado.
Rutina de expansión 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. Substitución no lineal basada en la búsqueda en tablas, usada en varias substituciones de bytes y en
la rutina de Expansión de la llave para llevar a cabo una substitución 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 kN columnas.
Apéndice B. Código en ensamblador para el microcontrolador PicoBlaze™
; ------------------------------------------------------------------------------ ; ------------------------------------------------------------------------------ ; Nombrando registros statep EQU s0 ; puntero del State keyp EQU s1 ; puntero de la llave countint EQU s2 ; registro soporte de cuenta interna round EQU s3 ; registro soporte de cuenta de rondas regstate EQU s4 ; registro soporte del State regkey EQU s5 ; registro soporte de la llave cicl_supp EQU s6 ; registro con la variable para revisar el registro con la constante para revisar estado del ingreso de los 10 bits de datos scan_byte EQU s7 ; registro donde se almacena el byte formado de la comunicación serial comp_supp EQU s8 ; registro donde se coloca el bit ingresado de la comunicación serial gral_reg0 EQU sA gral_reg1 EQU sB gral_reg2 EQU sC gral_reg3 EQU sD gral_reg4 EQU sE rc EQU sF ; registro de constante de ronda para la expansión de la llave ; ------------------------------------------------------------------------------ ; Declarando puertos externos tx DSOUT $10 ; puerto de salida para la comunicación serial led DSOUT $11 ; puerto de salida para controlar los leds de la tarjeta sbox_out DSOUT $12 ; puerto de salida para la sbox lcd_data DSOUT $13 ; puerto de datos para la LCD lcd_rs DSOUT $14 ; puerto de selección de registro en la LCD (datos ó comando) lcd_ciclo DSOUT $15 ; puerto para manipular el ciclo en el que se encuentra la LCD mayusculas DSOUT $16
60
Apéndices
scan_code_out DSOUT $17 rx DSIN $20 ; puerto de entrada para la comunicación serial sbox_in DSIN $21 ; puerto de entrada para la sbox gestion_port DSIN $22 ps2_clk DSIN $23 ps2_data DSIN $24 ascii_in DSIN $25 lcd_sel DSIN $26 reload_port DSIN $27 ; ------------------------------------------------------------------------------ ; Declarando constantes rn EQU $0A ; constante del state para el scratchpad state EQU $00 ; constante del state para el scratchpad key EQU $10 ; constante de la llave para el scratchpad b16 EQU $10 ; constante para conteo (128 bits AES) G EQU $1B ; 0x11B cicl EQU $0A ; constante con el número de ciclos necesarios (10) para ingresar el byte de la comunicación serial start EQU $01 delay_1us_cnt EQU $0A ; constante para generar un retardo de 1us para la Comunicación Serial cnt_1us_LCD EQU $0B ; constante para generar un retardo de 1us para la LCD rs_com EQU $0C rs_dat EQU $0D ciclo_a EQU $0A ; upper nibble, rs, rw = '0', e = '1' ciclo_b EQU $0B ; rw = '1', e = '0' ciclo_c EQU $0C ; lower nibble, rs, rw = '0', e = '1' ciclo_d EQU $0D ; lower nibble, e = '1' ; ------------------------------------------------------------------------------ ; Tabla de caracteres ASCII caracter_a EQU $61 caracter_b EQU $62 caracter_c EQU $63 caracter_d EQU $64 caracter_e EQU $65 caracter_f EQU $66 caracter_g EQU $67 caracter_h EQU $68 caracter_i EQU $69 caracter_j EQU $6A caracter_k EQU $6B caracter_l EQU $6C caracter_m EQU $6D caracter_n EQU $6E caracter_o EQU $6F caracter_p EQU $70 caracter_q EQU $71 caracter_r EQU $72 caracter_s EQU $73 caracter_t EQU $74 caracter_u EQU $75 caracter_v EQU $76 caracter_w EQU $77 caracter_x EQU $78 caracter_y EQU $79 caracter_z EQU $7A caracter_AM EQU $41 caracter_BM EQU $42 caracter_CM EQU $43 caracter_DM EQU $44 caracter_EM EQU $45 caracter_FM EQU $46 caracter_GM EQU $47 caracter_HM EQU $48 caracter_IM EQU $49 caracter_JM EQU $4A caracter_KM EQU $4B caracter_LM EQU $4C caracter_MM EQU $4D caracter_NM EQU $4E caracter_OM EQU $4F caracter_PM EQU $50 caracter_QM EQU $51 caracter_RM EQU $52 caracter_SM EQU $53 caracter_TM EQU $54 caracter_UM EQU $55 caracter_VM EQU $56 caracter_WM EQU $57 caracter_XM EQU $58 caracter_YM EQU $59 caracter_ZM EQU $5ª
61
Apéndices
caracter_0 EQU $30 caracter_1 EQU $31 caracter_2 EQU $32 caracter_3 EQU $33 caracter_4 EQU $34 caracter_5 EQU $35 caracter_6 EQU $36 caracter_7 EQU $37 caracter_8 EQU $38 caracter_9 EQU $39 caracter_colon EQU $3A ; ':' caracter_punto EQU $2E caracter_semicolon EQU $3B caracter_menos EQU $2D caracter_division EQU $2F ; '/' caracter_suma EQU $2B caracter_coma EQU $2C caracter_menor_que EQU $3C caracter_mayor_que EQU $3E caracter_igual EQU $3D caracter_espacio EQU $20 caracter_RC EQU $0D ; retorno de carro caracter_interr EQU $3F ; '?' caracter_pesos EQU $24 caracter_excl EQU $21 ; '!' caracter_bs EQU $08 ; Back Space ; ------------------------------------------------------------------------------ ; Programa principal inicio: CALL high CALL iniciar_lcd CALL mensaje_bienvenida aes: CALL gestion_entrada CALL encriptacion CALL gestion_salida JUMP aes ; ------------------------------------------------------------------------------ high: LOAD gral_reg0, $01 OUT gral_reg0, tx RET ; ------------------------------------------------------------------------------ iniciar_lcd: CALL delay_20ms LOAD gral_reg0, $03 LOAD gral_reg2, ciclo_d OUT gral_reg0, lcd_data OUT gral_reg2, lcd_ciclo CALL delay_5ms LOAD gral_reg0, $02 OUT gral_reg0, lcd_data OUT gral_reg2, lcd_ciclo CALL delay_40us ; Configuración de la LCD LOAD gral_reg1, rs_com ; Function set x"28", interface de 8-bits, 2 líneas, caracteres de 5x8 puntos de resolución LOAD gral_reg0, $28 CALL escribir_lcd ; Entry mode set x"06", cursor se mueve a la derecha y DDRAM address se incrementa en 1 LOAD gral_reg0, $06 CALL escribir_lcd ; Display On/Off x"0C", encender el display entero, activar cursor, desactivar posición del cursor LOAD gral_reg0, $0C CALL escribir_lcd ; Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00" LOAD gral_reg0, $01 CALL escribir_lcd CALL delay_1ms CALL delay_1ms RET ; ------------------------------------------------------------------------------
62
Apéndices
Mensaje_bienvenida: ; Configura dirección x"00" de la LCD LOAD gral_reg0, $84 LOAD gral_reg1, rs_com CALL escribir_lcd ; Escribir "BUAP-FCE" LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_bm CALL escribir_lcd LOAD gral_reg0, caracter_um CALL escribir_lcd LOAD gral_reg0, caracter_am CALL escribir_lcd LOAD gral_reg0, caracter_pm CALL escribir_lcd LOAD gral_reg0, caracter_menos CALL escribir_lcd LOAD gral_reg0, caracter_fm CALL escribir_lcd LOAD gral_reg0, caracter_cm CALL escribir_lcd LOAD gral_reg0, caracter_em CALL escribir_lcd ; Configura dirección x"40" de la LCD LOAD gral_reg0, $C2 LOAD gral_reg1, rs_com CALL escribir_lcd ; Escribir "Sistema cifrador" LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_cm CALL escribir_lcd LOAD gral_reg0, caracter_i CALL escribir_lcd LOAD gral_reg0, caracter_f CALL escribir_lcd LOAD gral_reg0, caracter_r CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_d CALL escribir_lcd LOAD gral_reg0, caracter_o CALL escribir_lcd LOAD gral_reg0, caracter_r CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_am CALL escribir_lcd LOAD gral_reg0, caracter_em CALL escribir_lcd LOAD gral_reg0, caracter_sm CALL escribir_lcd ; Esperar 3 segundos CALL delay_1s CALL delay_1s CALL delay_1s 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 gral_reg1, rs_com LOAD gral_reg0, $01 CALL escribir_lcd CALL delay_1ms CALL delay_1ms
63
Apéndices
; Escribir "Elegir gestión" LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_em CALL escribir_lcd LOAD gral_reg0, caracter_l CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_g CALL escribir_lcd LOAD gral_reg0, caracter_i CALL escribir_lcd LOAD gral_reg0, caracter_r CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_g CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_s CALL escribir_lcd LOAD gral_reg0, caracter_t CALL escribir_lcd LOAD gral_reg0, caracter_i CALL escribir_lcd LOAD gral_reg0, caracter_o CALL escribir_lcd LOAD gral_reg0, caracter_n CALL escribir_lcd ; Configura dirección x"40" de la LCD LOAD gral_reg0, $C3 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_d CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_d CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_t CALL escribir_lcd LOAD gral_reg0, caracter_o CALL escribir_lcd LOAD gral_reg0, caracter_s CALL escribir_lcd LOAD gral_reg0, caracter_colon CALL escribir_lcd ; Esperar 2 segundos CALL delay_1s CALL delay_500ms ; Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00" LOAD gral_reg1, rs_com LOAD gral_reg0, $01 CALL escribir_lcd CALL delay_1ms CALL delay_1ms ; Desplegar menú LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_sm CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_r CALL escribir_lcd LOAD gral_reg0, caracter_i CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_l CALL escribir_lcd
64
Apéndices
LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_pm CALL escribir_lcd LOAD gral_reg0, caracter_sm CALL escribir_lcd LOAD gral_reg0, caracter_division CALL escribir_lcd LOAD gral_reg0, caracter_2 CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd ; Configura dirección x"40" de la LCD LOAD gral_reg0, $C3 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_sm CALL escribir_lcd LOAD gral_reg0, caracter_wm CALL escribir_lcd LOAD gral_reg0, caracter_1 CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_sm CALL escribir_lcd LOAD gral_reg0, caracter_wm CALL escribir_lcd LOAD gral_reg0, caracter_0 CALL escribir_lcd elegir_gestion: IN scan_byte, gestion_port COMP scan_byte, $00 JUMP Z, elegir_gestion COMP scan_byte, $02 JUMP Z, serial_entrada ; ------------------------------------------------------------------------------ ps2_entrada: CALL introducir_texto LOAD sF, state ; direcciona el puntero al state LOAD s9, b16 ; inicializa la variable de cuenta ps2_in_state: CALL ps2_routine ; ingresa al sistema el código de la tecla presionada CALL deco_scan ; decodifica el código ó instrucción de la tecla presionada COMP gral_reg2, $01 JUMP Z, ps2_in_state STORE scan_byte, sF ; almacena el byte ingresado ADD sF, 1 ; incrementa el puntero del state SUB s9, 1 ; decrementa el valor del registro de soporte de cuenta JUMP NZ, ps2_in_state ; si el registro de soporte de cuenta es cero todos los bytes se han cargado en RAM CALL ps2_end_work COMP gral_reg2, $01 JUMP Z, ps2_in_state CALL introducir_llave LOAD sF, $10 ; direcciona el puntero a la entrada LOAD s9, b16 ; inicializa la variable de cuenta ps2_in_key: CALL ps2_routine CALL deco_scan ; decodifica el código ó instrucción de la tecla presionada COMP gral_reg2, $01 JUMP Z, ps2_in_key STORE scan_byte, sF ; almacena el byte ingresado ADD sF, 1 ; incrementa el puntero de la llave SUB s9, 1 ; decrementa el valor del registro de soporte de cuenta JUMP NZ, ps2_in_key ; si el registro de soporte de cuenta es cero todos los bytes se han cargado en RAM CALL ps2_end_work COMP gral_reg2, $01 JUMP Z, ps2_in_state RET
65
Apéndices
; ------------------------------------------------------------------------------ ps2_routine: LOAD cicl_supp, $00 LOAD scan_byte, $00 ps2_wait_low: COMP cicl_supp, $0B JUMP Z, ps2_dat_out ps2_wait: IN comp_supp, ps2_clk COMP comp_supp, $00 JUMP NZ, ps2_wait ps2_scan: ADD cicl_supp, $01 COMP cicl_supp, $01 JUMP Z, ps2_wait_high COMP cicl_supp, $0A JUMP Z, ps2_wait_high COMP cicl_supp, $0B JUMP Z, ps2_wait_high IN comp_supp, ps2_data COMP comp_supp, $00 JUMP Z, ps2_zero_rut ps2_one_rut: SR1 scan_byte JUMP ps2_wait_high ps2_zero_rut: SR0 scan_byte ps2_wait_high: IN comp_supp, ps2_clk COMP comp_supp, $00 JUMP Z, ps2_wait_high JUMP ps2_wait_low ps2_dat_out: RET ; ------------------------------------------------------------------------------ deco_scan: shift: COMP scan_byte, $12 JUMP Z, shift_work COMP scan_byte, $59 JUMP NZ, enter shift_work: LOAD s3, $01 OUT s3, mayusculas CALL delay_100ms CALL delay_100ms CALL ps2_routine JUMP deco_scan JUMP deco_out ; ------------------------------------------------------------------------------ enter: COMP scan_byte, $5A JUMP NZ, caps LOAD gral_reg2, $01 CALL delay_100ms CALL delay_100ms JUMP deco_end ; ------------------------------------------------------------------------------ caps: COMP scan_byte, $58 JUMP NZ, backspace COMP gral_reg4, $01 JUMP Z, uppcase_off uppcase_on: LOAD s3, $01 OUT s3, mayusculas LOAD gral_reg4, $01 LOAD gral_reg2, $01 CALL delay_100ms CALL delay_100ms JUMP deco_end uppcase_off: LOAD s3, $00 OUT s3, mayusculas LOAD gral_reg2, $01 LOAD gral_reg4, $00 CALL delay_100ms CALL delay_100ms JUMP deco_end ; ------------------------------------------------------------------------------ backspace: COMP scan_byte, $66 JUMP NZ, deco_out COMP sF, state JUMP NZ, backspace_work COMP sF, key
66
Apéndices
JUMP NZ, backspace_work LOAD gral_reg2, $01 CALL delay_100ms CALL delay_100ms JUMP deco_end backspace_work: SUB sF, $01 ADD s9, 1 LOAD gral_reg3, sF AND gral_reg3, $0F XOR gral_reg3, $40 OR gral_reg3, $80 ; Configura dirección a borrar de la LCD LOAD gral_reg0, gral_reg3 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_espacio CALL escribir_lcd ; Configura la nueva dirección a escribir de la LCD LOAD gral_reg0, gral_reg3 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD gral_reg1, rs_dat LOAD gral_reg2, $01 CALL delay_100ms CALL delay_100ms JUMP deco_end ; ------------------------------------------------------------------------------ deco_out: CALL delay_100ms CALL delay_100ms OUT scan_byte, scan_code_out IN scan_byte, ascii_in LOAD gral_reg0, scan_byte CALL escribir_lcd COMP gral_reg4, $01 JUMP Z, deco_end LOAD s3, $00 OUT s3, mayusculas deco_end: RET ; ------------------------------------------------------------------------------ ; ------------------------------------------------------------------------------ ps2_end_work: CALL ps2_routine CALL delay_100ms CALL delay_100ms COMP scan_byte, $5A JUMP Z, ps2_end_out COMP scan_byte, $66 JUMP NZ, ps2_end_work backspace_end_work: SUB sF, $01 ADD s9, 1 LOAD gral_reg3, sF AND gral_reg3, $0F XOR gral_reg3, $40 OR gral_reg3, $80 ; Configura dirección a borrar de la LCD LOAD gral_reg0, gral_reg3 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_espacio CALL escribir_lcd ; Configura la nueva dirección a escribir de la LCD LOAD gral_reg0, gral_reg3 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD gral_reg1, rs_dat LOAD gral_reg2, $01 ps2_end_out: RET ; ------------------------------------------------------------------------------ ; ------------------------------------------------------------------------------ serial_entrada: CALL esperando LOAD statep, state ; direcciona el puntero al state LOAD countint, b16 ; inicializa la variable de cuenta serial_in_state: CALL clean
67
Apéndices
CALL start_rx STORE scan_byte, statep ; almacena el byte ingresado CALL leds ADD statep, 1 ; incrementa el puntero del state SUB countint, 1 ; decrementa el valor del registro de soporte de cuenta JUMP NZ, serial_in_state ; si el registro de soporte de cuenta es cero todos los bytes se han cargado en RAM LOAD scan_byte, $08 CALL leds LOAD keyp, $10 ; direcciona el puntero a la entrada LOAD countint, b16 ; inicializa la variable de cuenta serial_in_key: CALL clean CALL start_rx STORE scan_byte, keyp ; almacena el byte ingresado CALL leds ADD keyp, 1 ; incrementa el puntero de la llave SUB countint, 1 ; decrementa el valor del registro de soporte de cuenta JUMP NZ, serial_in_key ; si el registro de soporte de cuenta es cero todos los bytes se han cargado en RAM LOAD scan_byte, $80 CALL leds RET ; ------------------------------------------------------------------------------ start_rx: wait_start: IN comp_supp, rx COMP comp_supp, $00 JUMP NZ, wait_start CALL delay_Rx0 polling: CALL delay_Rx1 ADD cicl_supp, $01 COMP cicl_supp, cicl JUMP Z, wait_stop IN comp_supp, rx COMP comp_supp, $00 JUMP Z, zero_rut one_rut: SR1 scan_byte JUMP polling zero_rut: SR0 scan_byte JUMP polling wait_stop: IN comp_supp, rx COMP comp_supp, $00 JUMP Z, wait_stop RET ; ------------------------------------------------------------------------------ encriptacion: preround: LOAD round, $00 ; ------------------------------------------------------------------------------ LOAD statep, state ; direcciona el puntero statep al inicio del state LOAD keyp, key ; direcciona el puntero keyp al inicio de la llave LOAD countint, b16 ; carga el valor con el número de bytes a procesar addroundkey0: FETCH regstate, statep ; carga al registro state el valor que está direccionando el puntero FETCH regkey, keyp ; carga al registro key el valor que está direccionando el puntero key XOR regstate, regkey ; realiza la operación lógica XOR entre el state y la llave, deposita el valor en el registro state STORE regstate, statep ; guarda el valor del registro state en el state ADD statep, $01 ; incrementa en uno el valor del puntero state ADD keyp, $01 ; incrementa en uno el valor del puntero llave SUB countint, $01 ; se decrementa el valor del registro de soporte de cuenta JUMP NZ, addroundkey0 ; si el registro de soporte de cuenta es cero el state ha sufrido la transformación addroundkey ; ------------------------------------------------------------------------------ cipher: LOAD round, rn LOAD rc, $01 ; ------------------------------------------------------------------------------ cleanbox: LOAD statep, state ; direcciona el puntero statep al inicio del state LOAD countint, b16 ; carga el valor con el número de bytes a procesar s_box: FETCH regstate, statep ; carga en el registro state el valor que está direccionando el puntero OUT regstate, sbox_out ; le indica a la BlockRam la dirección que se desea leer IN regstate, sbox_in ; ingresa el valor leído STORE regstate, statep ; se almacena el byte deseado en la memoria RAM scratchpad
68
Apéndices
ADD statep, $01 ; se incrementa en uno el valor del puntero SUB countint, $01 ; se decrementa el valor del registro de soporte de cuenta JUMP NZ, s_box ; si el registro de soporte de cuenta es cero todos los bytes se han cargado en RAM ; ------------------------------------------------------------------------------ shiftrow: FETCH s7, state + 1 FETCH s8, state + 1 + 4 FETCH s9, state + 1 + 4 + 4 FETCH sA, state + 1 + 4 + 4 + 4 STORE s8, state + 1 STORE s9, state + 1 + 4 STORE sA, state + 1 + 4 + 4 STORE s7, state + 1 + 4 + 4 + 4 FETCH s6, state + 2 FETCH s7, state + 2 + 4 FETCH s8, state + 2 + 4 + 4 FETCH sA, state + 2 + 4 + 4 + 4 STORE s8, state + 2 STORE sA, state + 2 + 4 STORE s6, state + 2 + 4 + 4 STORE s7, state + 2 + 4 + 4 + 4 FETCH sA, state + 3 FETCH s6, state + 3 + 4 FETCH s7, state + 3 + 4 + 4 FETCH s8, state + 3 + 4 + 4 + 4 STORE s8, state + 3 STORE sA, state + 3 + 4 STORE s6, state + 3 + 4 + 4 STORE s7, state + 3 + 4 + 4 + 4 ; ------------------------------------------------------------------------------ COMP round, $01 JUMP Z, roundkey ; ------------------------------------------------------------------------------ mixcolumns: FETCH s4, state + 0 FETCH s5, state + 1 FETCH s6, state + 2 FETCH s7, state + 3 CALL mixcolumn STORE s4, state + 0 STORE s5, state + 1 STORE s6, state + 2 STORE s7, state + 3 FETCH s4, state + 0 + 4 FETCH s5, state + 1 + 4 FETCH s6, state + 2 + 4 FETCH s7, state + 3 + 4 CALL mixcolumn STORE s4, state + 0 + 4 STORE s5, state + 1 + 4 STORE s6, state + 2 + 4 STORE s7, state + 3 + 4 FETCH s4, state + 0 + 4 + 4 FETCH s5, state + 1 + 4 + 4 FETCH s6, state + 2 + 4 + 4 FETCH s7, state + 3 + 4 + 4 CALL mixcolumn STORE s4, state + 0 + 4 + 4 STORE s5, state + 1 + 4 + 4 STORE s6, state + 2 + 4 + 4 STORE s7, state + 3 + 4 + 4 FETCH s4, state + 0 + 4 + 4 + 4 FETCH s5, state + 1 + 4 + 4 + 4 FETCH s6, state + 2 + 4 + 4 + 4 FETCH s7, state + 3 + 4 + 4 + 4 CALL mixcolumn STORE s4, state + 0 + 4 + 4 + 4 STORE s5, state + 1 + 4 + 4 + 4 STORE s6, state + 2 + 4 + 4 + 4 STORE s7, state + 3 + 4 + 4 + 4 ; ------------------------------------------------------------------------------ roundkey: FETCH s4, key + 12 ; carga la última columna de la llave FETCH s5, key + 13 FETCH s6, key + 14 FETCH s7, key + 15 LOAD s8, s4 ; Aplica la transformación rotword LOAD s4, s5 LOAD s5, s6 LOAD s6, s7 LOAD s7, s8
69
Apéndices
OUT s4, sbox_out ; SubWord( RotWord( temp ) ) IN s4, sbox_in ; ingresa el valor leído XOR s4, rc ; xor Rcon( i / Nk ) SL0 rc ; x^(i-1) (i+=1) JUMP NC, nowrap XOR rc, G nowrap: OUT s5, sbox_out ; SubWord( RotWord( temp ) ) IN s5, sbox_in OUT s6, sbox_out ; SubWord( RotWord( temp ) ) IN s6, sbox_in OUT s7, sbox_out ; SubWord( RotWord( temp ) ) IN s7, sbox_in LOAD keyp, key LOAD countint, b16 key96: FETCH s8, keyp ; k[i]=k[i - Nk] ^ temp XOR s4, s8 STORE s4, keyp ADD keyp, 1 FETCH s8, keyp ; k[i]=k[i - Nk] ^ temp XOR s5, s8 STORE s5, keyp ADD keyp, 1 FETCH s8, keyp ; k[i]=k[i - Nk] ^ temp XOR s6, s8 STORE s6, keyp ADD keyp, 1 FETCH s8, keyp ; k[i]=k[i - Nk] ^ temp XOR s7, s8 STORE s7, keyp ADD keyp, 1 SUB countint, 4 JUMP NZ, key96 ; ------------------------------------------------------------------------------ cleanark: LOAD statep, state ; direcciona el puntero statep al inicio del state LOAD keyp, key ; direcciona el puntero keyp al inicio de la llave LOAD countint, b16 ; carga el valor con el número de bytes a procesar addroundkey: FETCH regstate, statep ; carga al registro state el valor que está direccionando el puntero FETCH regkey, keyp ; carga al registro key el valor que está direccionando el puntero key XOR regstate, regkey ; realiza la operación lógica XOR entre el state y la llave, deposita el valor en el registro state STORE regstate, statep ; guarda el valor del registro state en el state ADD statep, $01 ; incrementa en uno el valor del puntero state ADD keyp, $01 ; incrementa en uno el valor del puntero llave SUB countint, $01 ; se decrementa el valor del registro de soporte de cuenta JUMP NZ, addroundkey ; si el registro de soporte de cuenta es cero el state ha sufrido la transformación addroundkey ; ------------------------------------------------------------------------------ SUB round, $01 ; se decrementa el valor del registro de soporte de cuenta JUMP NZ, cleanbox ; RET ; ------------------------------------------------------------------------------ ; ------------------------------------------------------------------------------ gestion_salida: transmision: LOAD countint, b16 ; carga el valor con el número de bytes a procesar LOAD statep, state ; direcciona el puntero statep al inicio de la llave out_state: CALL clean FETCH scan_byte, statep CALL leds CALL start_tx ADD statep, $01 ; se incrementa en uno el valor del puntero SUB countint, $01 ; se decrementa el valor del registro de soporte de cuenta JUMP NZ, out_state ; si el registro de soporte de cuenta es cero todos los bytes se han cargado en RAM LOAD countint, b16 ; se coloca nuevamente el valor de la cuenta para el registro de soporte de cuenta LOAD keyp, key ; direcciona el puntero keyp al inicio de la llave out_key: CALL clean FETCH scan_byte, keyp CALL leds CALL start_tx ADD keyp, $01 ; se incrementa en uno el valor del puntero SUB countint, $01 ; se decrementa el valor del registro de soporte de cuenta JUMP NZ, out_key ; si el registro de soporte de cuenta es cero todos los bytes se han cargado en RAM LOAD scan_byte, $01 CALL leds ; ------------------------------------------------------------------------------ lcd_salida: IN scan_byte, lcd_sel
70
Apéndices
COMP scan_byte, $00 JUMP NZ, escribir_keysch escribir_output: CALL texto_cifrado LOAD s4, state ; direcciona el puntero statep al inicio de la llave LOAD s5, b16 ; carga el valor con el número de bytes a procesar lcd_output: FETCH scan_byte, s4 LOAD gral_reg0, scan_byte CALL escribir_lcd ADD s4, $01 ; se incrementa en uno el valor del puntero SUB s5, $01 ; se decrementa el valor del registro de soporte de cuenta JUMP NZ, lcd_output ; si el registro de soporte de cuenta es cero todos los bytes se han cargado en RAM cambio_a: IN scan_byte, lcd_sel COMP scan_byte, $01 JUMP Z, escribir_keysch IN scan_byte, reload_port COMP scan_byte, $01 JUMP Z, reload JUMP cambio_a escribir_keysch: CALL llave_procesada LOAD s4, key LOAD s5, b16 ; carga el valor con el número de bytes a procesar lcd_keysch: FETCH scan_byte, s4 LOAD gral_reg0, scan_byte CALL escribir_lcd ADD s4, $01 ; se incrementa en uno el valor del puntero SUB s5, $01 ; se decrementa el valor del registro de soporte de cuenta JUMP NZ, lcd_keysch ; si el registro de soporte de cuenta es cero todos los bytes se han cargado en RAM cambio_b: IN scan_byte, lcd_sel COMP scan_byte, $00 JUMP Z, escribir_output IN scan_byte, reload_port COMP scan_byte, $01 JUMP Z, reload JUMP cambio_b reload: RET ; ------------------------------------------------------------------------------ ; Bloque que genera las formas de onda protocolarias necesarias para transmitir a la PC start_tx: LOAD gral_reg0, $00 OUT gral_reg0, tx CALL delay_Tx0 byte_tx: ADD cicl_supp, $01 COMP cicl_supp, cicl JUMP Z, stop_tx SRA scan_byte JUMP C, tx_1 tx_0: LOAD gral_reg0, $00 OUT gral_reg0, tx CALL delay_Tx1 JUMP byte_tx tx_1: LOAD gral_reg0, $01 OUT gral_reg0, tx CALL delay_Tx1 JUMP byte_tx stop_tx: LOAD gral_reg0, $01 LOAD gral_reg0, $01 LOAD gral_reg0, $01 OUT gral_reg0, tx CALL delay_Tx_fin RET ; ------------------------------------------------------------------------------ mixcolumn: LOAD s9, s4 ; t = c[0] ^ c[3] XOR s9, s7 LOAD sA, s5 ; u = c[1] ^ c[2] XOR sA, s6 LOAD sB, s9 ; v = t ^ u XOR sB, sA LOAD s8, s4 ; c[0] = c[0] ^ v ^ mul(0x02, c[0] ^ c[1]) XOR s8, s5 SL0 s8 JUMP NC, mcf1 XOR s8, G mcf1: XOR s8, sB XOR s4, s8 LOAD s8, sA ; c[1] = c[1] ^ v ^ mul(0x02, u)
71
Apéndices
SL0 s8 JUMP NC, mcf2 XOR s8, G mcf2: XOR s8, sB XOR s5, s8 LOAD s8, s6 ; c[2] = c[2] ^ v ^ mul(0x02, c[2] ^ c[3]) XOR s8, s7 SL0 s8 JUMP NC, mcf3 XOR s8, G mcf3: XOR s8, sB XOR s6, s8 LOAD s8, s9 ; c[3] = c[3] ^ v ^ mul(0x02, t) SL0 s8 JUMP NC, mcf4 XOR s8, G mcf4: XOR s8, sB XOR s7, s8 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 gral_reg0, lcd_data OUT gral_reg1, lcd_rs LOAD gral_reg2, ciclo_a OUT gral_reg2, lcd_ciclo CALL delay_240ns LOAD gral_reg2, ciclo_b OUT gral_reg2, lcd_ciclo CALL delay_1us_lcd LOAD gral_reg2, ciclo_c OUT gral_reg2, lcd_ciclo CALL delay_240ns LOAD gral_reg2, ciclo_b OUT gral_reg2, lcd_ciclo CALL 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 gral_reg1, rs_com LOAD gral_reg0, $01 CALL escribir_lcd CALL delay_1ms CALL delay_1ms ; Escribir "Texto a cifrar:" LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_tm CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_x CALL escribir_lcd LOAD gral_reg0, caracter_t CALL escribir_lcd LOAD gral_reg0, caracter_o CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_c CALL escribir_lcd LOAD gral_reg0, caracter_i CALL escribir_lcd LOAD gral_reg0, caracter_f CALL escribir_lcd LOAD gral_reg0, caracter_r
72
Apéndices
CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_r CALL escribir_lcd LOAD gral_reg0, caracter_colon CALL escribir_lcd ; Configura dirección x"40" de la LCD LOAD gral_reg0, $C0 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD 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 gral_reg1, rs_com LOAD gral_reg0, $01 CALL escribir_lcd CALL delay_1ms CALL delay_1ms ; ------------------------------------------------------------------------------ ; Escribir "Llave a utilizar" LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_lm CALL escribir_lcd LOAD gral_reg0, caracter_l CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_v CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_u CALL escribir_lcd LOAD gral_reg0, caracter_t CALL escribir_lcd LOAD gral_reg0, caracter_i CALL escribir_lcd LOAD gral_reg0, caracter_l CALL escribir_lcd LOAD gral_reg0, caracter_i CALL escribir_lcd LOAD gral_reg0, caracter_z CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_r CALL escribir_lcd ; Configura dirección x"40" de la LCD LOAD gral_reg0, $C0 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD 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 gral_reg1, rs_com LOAD gral_reg0, $01 CALL escribir_lcd CALL delay_1ms CALL delay_1ms ; Escribir "Texto cifrado:" LOAD gral_reg1, rs_dat
73
Apéndices
LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_tm CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_x CALL escribir_lcd LOAD gral_reg0, caracter_t CALL escribir_lcd LOAD gral_reg0, caracter_o CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_c CALL escribir_lcd LOAD gral_reg0, caracter_i CALL escribir_lcd LOAD gral_reg0, caracter_f CALL escribir_lcd LOAD gral_reg0, caracter_r CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_d CALL escribir_lcd LOAD gral_reg0, caracter_o CALL escribir_lcd LOAD gral_reg0, caracter_colon CALL escribir_lcd ; Configura dirección x"40" de la LCD LOAD gral_reg0, $C0 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD 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 gral_reg1, rs_com LOAD gral_reg0, $01 CALL escribir_lcd CALL delay_1ms CALL delay_1ms ; Escribir "Texto cifrado:" LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_em CALL escribir_lcd LOAD gral_reg0, caracter_s CALL escribir_lcd LOAD gral_reg0, caracter_p CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_r CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_n CALL escribir_lcd LOAD gral_reg0, caracter_d CALL escribir_lcd LOAD gral_reg0, caracter_o CALL escribir_lcd LOAD gral_reg0, caracter_punto CALL escribir_lcd LOAD gral_reg0, caracter_punto CALL escribir_lcd LOAD gral_reg0, caracter_punto CALL escribir_lcd ; Configura dirección x"40" de la LCD LOAD gral_reg0, $C0 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD gral_reg1, rs_dat RET ; ------------------------------------------------------------------------------
74
Apéndices
;Clear Display x"01", escribe x"20" en todas las direcciones de la DDRAM, y mueve el puntero a x"00" LOAD gral_reg1, rs_com LOAD gral_reg0, $01 CALL escribir_lcd CALL delay_1ms CALL delay_1ms ; Escribir "Llave a cifrar:" LOAD gral_reg1, rs_dat LOAD gral_reg0, caracter_lm CALL escribir_lcd LOAD gral_reg0, caracter_l CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_v CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_espacio CALL escribir_lcd LOAD gral_reg0, caracter_p CALL escribir_lcd LOAD gral_reg0, caracter_r CALL escribir_lcd LOAD gral_reg0, caracter_o CALL escribir_lcd LOAD gral_reg0, caracter_c CALL escribir_lcd LOAD gral_reg0, caracter_e CALL escribir_lcd LOAD gral_reg0, caracter_s CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_d CALL escribir_lcd LOAD gral_reg0, caracter_a CALL escribir_lcd LOAD gral_reg0, caracter_colon CALL escribir_lcd ; Configura dirección x"40" de la LCD LOAD gral_reg0, $C0 LOAD gral_reg1, rs_com CALL escribir_lcd LOAD gral_reg1, rs_dat RET ; ------------------------------------------------------------------------------ ; Bloque que genera un retardo para Rx0 delay_Rx0: LOAD gral_reg1, $04 wait_Rx0: CALL delay_1us SUB gral_reg1, $01 JUMP NZ, wait_Rx0 LOAD gral_reg1, $04 wait_Rx0_1: SUB gral_reg1, $01 JUMP NZ, wait_Rx0_1 RET ; ------------------------------------------------------------------------------ ; Bloque que genera un retardo para Rx1 delay_Rx1: LOAD gral_reg1, $08 wait_Rx1: CALL delay_1us SUB gral_reg1, $01 JUMP NZ, wait_Rx1 LOAD gral_reg1, $02 wait_Rx1_1: SUB gral_reg1, $01 JUMP NZ, wait_Rx1_1 RET ; ------------------------------------------------------------------------------ ; Bloque que genera un retardo para Tx0 delay_Tx0: LOAD gral_reg1, $08 wait_Tx0: CALL delay_1us SUB gral_reg1, $01
75
Apéndices
JUMP NZ, wait_Tx0 LOAD gral_reg1, $03 wait_Tx0_1: SUB gral_reg1, $01 JUMP NZ, wait_Tx0_1 RET ; ------------------------------------------------------------------------------ ; Bloque que genera un retardo para Tx1 delay_Tx1: LOAD gral_reg1, $07 wait_Tx1: CALL delay_1us SUB gral_reg1, $01 JUMP NZ, wait_Tx1 LOAD gral_reg1, $0F wait_Tx1_1: SUB gral_reg1, $01 JUMP NZ, wait_Tx1_1 RET ; ------------------------------------------------------------------------------ ; Bloque que genera un retardo para Tx_fin delay_Tx_fin: LOAD gral_reg1, $07 wait_Tx_fin: CALL delay_1us SUB gral_reg1, $01 JUMP NZ, wait_Tx_fin LOAD gral_reg1, $18 wait_Tx1_fin: SUB gral_reg1, $01 JUMP NZ, wait_Tx1_fin RET ; ------------------------------------------------------------------------------ ; Bloque que genera un retardo de 1us delay_1us: LOAD gral_reg0, delay_1us_cnt wait_1us: SUB gral_reg0, $01 JUMP NZ, wait_1us RET ; ------------------------------------------------------------------------------ delay_1us_lcd: LOAD s0, cnt_1us_lcd wait_1us_lcd: SUB s0, 1 JUMP NZ, wait_1us_lcd RET ; ------------------------------------------------------------------------------ delay_40us: LOAD s1, $28 ; 40 x 1us = 40us wait_40us: CALL delay_1us_lcd SUB s1, $01 JUMP NZ, wait_40us RET ; ------------------------------------------------------------------------------ delay_100us: LOAD s1, $64 ; 25 x 40us = 1ms wait_100us: CALL delay_1us_lcd SUB s1, $01 JUMP NZ, wait_100us RET ; ------------------------------------------------------------------------------ delay_1ms: LOAD s2, $19 ; 25 x 40us = 1ms wait_1ms: CALL delay_40us SUB s2, $01 JUMP NZ, wait_1ms RET
76
Apéndices
; ------------------------------------------------------------------------------ delay_5ms: LOAD s3, $05 ; 25 x 40us = 1ms wait_5ms: CALL delay_40us SUB s2, $01 JUMP NZ, wait_5ms RET ; ------------------------------------------------------------------------------ delay_20ms: LOAD s3, $14 ; 20 x 1ms = 20ms wait_20ms: CALL delay_1ms SUB s3, $01 JUMP NZ, wait_20ms RET ; ------------------------------------------------------------------------------ delay_100ms: LOAD s4, $05 ; 50 x 20ms = 1000ms wait_100ms: CALL delay_20ms SUB s4, $01 JUMP NZ, wait_100ms RET ; ------------------------------------------------------------------------------ delay_500ms: LOAD s4, $19 ; 25 x 20ms = 500ms wait_500ms: CALL delay_20ms SUB s4, $01 JUMP NZ, wait_500ms RET ; ------------------------------------------------------------------------------ delay_1s: LOAD s4, $32 ; 50 x 20ms = 1000ms wait_1s: CALL delay_20ms SUB s4, $01 JUMP NZ, wait_1s RET ; ------------------------------------------------------------------------------ ; Bloque que genera un retardo de 1us delay_240ns: LOAD gral_reg0, $07 wait_240ns: SUB gral_reg0, $01 JUMP NZ, wait_240ns RET ; ------------------------------------------------------------------------------ ; Bloque para limpiar los registros de control del sistema clean: LOAD cicl_supp, $01 ; limpia el registro "cicl_supp" LOAD scan_byte, $00 ; limpia el registro "scan_byte" RET ; ------------------------------------------------------------------------------ VHDL "ROM_form.vhd", "aes_mem.vhd", "aes_mem" ; ------------------------------------------------------------------------------
77
Apéndices
Apéndice C. Código 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 : in std_logic; write_strobe : in std_logic; read_strobe : in std_logic; port_id_pB : in std_logic_vector(7 downto 0); out_port_pB : in std_logic_vector(7 downto 0); sw : in std_logic_vector(1 downto 0); Rx : in std_logic; clk : in std_logic; ps2_clk : in std_logic; ps2_data : in std_logic; lcd_sel : in std_logic; reload_port : in 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 -------------------------------------------------------------------------------------------------------------------- --Señales 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); 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; end if; end process; -------------------------------------------------------------------------------------------------------------------- --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;
78
Apéndices
-------------------------------------------------------------------------------------------------------------------- --Seleccion de gestion I/O -------------------------------------------------------------------------------------------------------------------- process(rst,clk,sw) begin if rst = '1' then gestion <= "00"; elsif rising_edge(clk) then case sw is when "01" => gestion <= "01"; when "10" => gestion <= "10"; when others => gestion <= "00"; end case; end if; end process; -------------------------------------------------------------------------------------------------------------------- --Ciclos LCD -------------------------------------------------------------------------------------------------------------------- process(rst,clk,ciclo) begin if rising_edge(clk) then case ciclo is when x"A" => lcd_rs <= rs_to_lcd; lcd_rw <= '0'; lcd_e <= '1'; lcd_data <= lcd_dat(7 downto 4); when x"B" => lcd_rw <= '1'; lcd_e <= '0'; when x"C" => lcd_rs <= rs_to_lcd; lcd_rw <= '0'; lcd_e <= '1'; lcd_data <= lcd_dat(3 downto 0); when 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 case rs is when x"C" => rs_to_lcd <= '0'; when x"D" => rs_to_lcd <= '1'; when others => null; end case; end if; end process; -------------------------------------------------------------------------------------------------------------------- --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 x"10" => dato <= x"CA"; when x"11" => dato <= x"82"; when x"12" => dato <= x"C9"; when x"13" => dato <= x"7D"; when x"14" => dato <= x"FA"; when x"15" => dato <= x"59"; when x"16" => dato <= x"47"; when x"17" => dato <= x"F0"; when x"18" => dato <= x"AD"; when x"19" => dato <= x"D4"; when x"1A" => dato <= x"A2"; when x"1B" => dato <= x"AF"; when x"1C" => dato <= x"9C"; when x"1D" => dato <= x"A4"; when x"1E" => dato <= x"72"; when x"1F" => dato <= x"C0"; when x"20" => dato <= x"B7"; when x"21" => dato <= x"FD"; when x"22" => dato <= x"93"; when x"23" => dato <= x"26";
79
Apéndices
when x"24" => dato <= x"36"; when x"25" => dato <= x"3F"; when x"26" => dato <= x"F7"; when x"27" => dato <= x"CC"; when x"28" => dato <= x"34"; when x"29" => dato <= x"A5"; when x"2A" => dato <= x"E5"; when x"2B" => dato <= x"F1"; when x"2C" => dato <= x"71"; when x"2D" => dato <= x"D8"; when x"2E" => dato <= x"31"; when x"2F" => dato <= x"15"; when x"30" => dato <= x"04"; when x"31" => dato <= x"C7"; when x"32" => dato <= x"23"; when x"33" => dato <= x"C3"; when x"34" => dato <= x"18"; when x"35" => dato <= x"96"; when x"36" => dato <= x"05"; when x"37" => dato <= x"9A"; when x"38" => dato <= x"07"; when x"39" => dato <= x"12"; when x"3A" => dato <= x"80"; when x"3B" => dato <= x"E2"; when x"3C" => dato <= x"EB"; when x"3D" => dato <= x"27"; when x"3E" => dato <= x"B2"; when x"3F" => dato <= x"75"; when x"40" => dato <= x"09"; when x"41" => dato <= x"83"; when x"42" => dato <= x"2C"; when x"43" => dato <= x"1A"; when x"44" => dato <= x"1B"; when x"45" => dato <= x"6E"; when x"46" => dato <= x"5A"; when x"47" => dato <= x"A0"; when x"48" => dato <= x"52"; when x"49" => dato <= x"3B"; when x"4A" => dato <= x"D6"; when x"4B" => dato <= x"B3"; when x"4C" => dato <= x"29"; when x"4D" => dato <= x"E3"; when x"4E" => dato <= x"2F"; when x"4F" => dato <= x"84"; when x"50" => dato <= x"53"; when x"51" => dato <= x"D1"; when x"52" => dato <= x"00"; when x"53" => dato <= x"ED"; when x"54" => dato <= x"20"; when x"55" => dato <= x"FC"; when x"56" => dato <= x"B1"; when x"57" => dato <= x"5B"; when x"58" => dato <= x"6A"; when x"59" => dato <= x"CB"; when x"5A" => dato <= x"BE"; when x"5B" => dato <= x"39"; when x"5C" => dato <= x"4A"; when x"5D" => dato <= x"4C"; when x"5E" => dato <= x"58"; when x"5F" => dato <= x"CF"; when x"60" => dato <= x"D0"; when x"61" => dato <= x"EF"; when x"62" => dato <= x"AA"; when x"63" => dato <= x"FB"; when x"64" => dato <= x"43"; when x"65" => dato <= x"4D"; when x"66" => dato <= x"33"; when x"67" => dato <= x"85"; when x"68" => dato <= x"45"; when x"69" => dato <= x"F9"; when x"6A" => dato <= x"02"; when x"6B" => dato <= x"7F"; when x"6C" => dato <= x"50"; when x"6D" => dato <= x"3C"; when x"6E" => dato <= x"9F"; when x"6F" => dato <= x"A8"; when x"70" => dato <= x"51"; when x"71" => dato <= x"A3"; when x"72" => dato <= x"40"; when x"73" => dato <= x"8F"; when x"74" => dato <= x"92"; when x"75" => dato <= x"9D"; when x"76" => dato <= x"38"; when x"77" => dato <= x"F5"; when x"78" => dato <= x"BC"; when x"79" => dato <= x"B6"; when x"7A" => dato <= x"DA"; when x"7B" => dato <= x"21"; when x"7C" => dato <= x"10";
80
Apéndices
when x"7D" => dato <= x"FF"; when x"7E" => dato <= x"F3"; when x"7F" => dato <= x"D2"; when x"80" => dato <= x"CD"; when x"81" => dato <= x"0C"; when x"82" => dato <= x"13"; when x"83" => dato <= x"EC"; when x"84" => dato <= x"5F"; when x"85" => dato <= x"97"; when x"86" => dato <= x"44"; when x"87" => dato <= x"17"; when x"88" => dato <= x"C4"; when x"89" => dato <= x"A7"; when x"8A" => dato <= x"7E"; when x"8B" => dato <= x"3D"; when x"8C" => dato <= x"64"; when x"8D" => dato <= x"5D"; when x"8E" => dato <= x"19"; when x"8F" => dato <= x"73"; when x"90" => dato <= x"60"; when x"91" => dato <= x"81"; when x"92" => dato <= x"4F"; when x"93" => dato <= x"DC"; when x"94" => dato <= x"22"; when x"95" => dato <= x"2A"; when x"96" => dato <= x"90"; when x"97" => dato <= x"88"; when x"98" => dato <= x"46"; when x"99" => dato <= x"EE"; when x"9A" => dato <= x"B8"; when x"9B" => dato <= x"14"; when x"9C" => dato <= x"DE"; when x"9D" => dato <= x"5E"; when x"9E" => dato <= x"0B"; when x"9F" => dato <= x"DB"; when x"A0" => dato <= x"E0"; when x"A1" => dato <= x"32"; when x"A2" => dato <= x"3A"; when x"A3" => dato <= x"0A"; when x"A4" => dato <= x"49"; when x"A5" => dato <= x"06"; when x"A6" => dato <= x"24"; when x"A7" => dato <= x"5C"; when x"A8" => dato <= x"C2"; when x"A9" => dato <= x"D3"; when x"AA" => dato <= x"AC"; when x"AB" => dato <= x"62"; when x"AC" => dato <= x"91"; when x"AD" => dato <= x"95"; when x"AE" => dato <= x"E4"; when x"AF" => dato <= x"79"; when x"B0" => dato <= x"E7"; when x"B1" => dato <= x"C8"; when x"B2" => dato <= x"37"; when x"B3" => dato <= x"6D"; when x"B4" => dato <= x"8D"; when x"B5" => dato <= x"D5"; when x"B6" => dato <= x"4E"; when x"B7" => dato <= x"A9"; when x"B8" => dato <= x"6C"; when x"B9" => dato <= x"56"; when x"BA" => dato <= x"F4"; when x"BB" => dato <= x"EA"; when x"BC" => dato <= x"65"; when x"BD" => dato <= x"7A"; when x"BE" => dato <= x"AE"; when x"BF" => dato <= x"08"; when x"C0" => dato <= x"BA"; when x"C1" => dato <= x"78"; when x"C2" => dato <= x"25"; when x"C3" => dato <= x"2E"; when x"C4" => dato <= x"1C"; when x"C5" => dato <= x"A6"; when x"C6" => dato <= x"B4"; when x"C7" => dato <= x"C6"; when x"C8" => dato <= x"E8"; when x"C9" => dato <= x"DD"; when x"CA" => dato <= x"74"; when x"CB" => dato <= x"1F"; when x"CC" => dato <= x"4B"; when x"CD" => dato <= x"BD"; when x"CE" => dato <= x"8B"; when x"CF" => dato <= x"8A"; when x"D0" => dato <= x"70"; when x"D1" => dato <= x"3E"; when x"D2" => dato <= x"B5"; when x"D3" => dato <= x"66"; when x"D4" => dato <= x"48";
81
Apéndices
when x"D5" => dato <= x"03"; when x"D6" => dato <= x"F6"; when x"D7" => dato <= x"0E"; when x"D8" => dato <= x"61"; when x"D9" => dato <= x"35"; when x"DA" => dato <= x"57"; when x"DB" => dato <= x"B9"; when x"DC" => dato <= x"86"; when x"DD" => dato <= x"C1"; when x"DE" => dato <= x"1D"; when x"DF" => dato <= x"9E"; when x"E0" => dato <= x"E1"; when x"E1" => dato <= x"F8"; when x"E2" => dato <= x"98"; when x"E3" => dato <= x"11"; when x"E4" => dato <= x"69"; when x"E5" => dato <= x"D9"; when x"E6" => dato <= x"8E"; when x"E7" => dato <= x"94"; when x"E8" => dato <= x"9B"; when x"E9" => dato <= x"1E"; when x"EA" => dato <= x"87"; when x"EB" => dato <= x"E9"; when x"EC" => dato <= x"CE"; when x"ED" => dato <= x"55"; when x"EE" => dato <= x"28"; when x"EF" => dato <= x"DF"; when x"F0" => dato <= x"8C"; when x"F1" => dato <= x"A1"; when x"F2" => dato <= x"89"; when x"F3" => dato <= x"0D"; when x"F4" => dato <= x"BF"; when x"F5" => dato <= x"E6"; when x"F6" => dato <= x"42"; when x"F7" => dato <= x"68"; when x"F8" => dato <= x"41"; when x"F9" => dato <= x"99"; when x"FA" => dato <= x"2D"; when x"FB" => dato <= x"0F"; when x"FC" => dato <= x"B0"; when x"FD" => dato <= x"54"; when x"FE" => dato <= x"BB"; when x"FF" => dato <= x"16"; when others => null; end case; end if; end process; -------------------------------------------------------------------------------------------------------------------- --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 '0' => case code is when x"1C" => ascii <= x"61"; --a when x"32" => ascii <= x"62"; --b when x"21" => ascii <= x"63"; --c when x"23" => ascii <= x"64"; --d when x"24" => ascii <= x"65"; --e when x"2B" => ascii <= x"66"; --f when x"34" => ascii <= x"67"; --g when x"33" => ascii <= x"68"; --h when x"43" => ascii <= x"69"; --i when x"3B" => ascii <= x"6A"; --j when x"42" => ascii <= x"6B"; --k when x"4B" => ascii <= x"6C"; --l when x"3A" => ascii <= x"6D"; --m when x"31" => ascii <= x"6E"; --n when x"4C" => ascii <= x"EE"; --ñ when x"44" => ascii <= x"6F"; --o when x"4D" => ascii <= x"70"; --p when x"15" => ascii <= x"71"; --q when x"2D" => ascii <= x"72"; --r when x"1B" => ascii <= x"73"; --s when x"2C" => ascii <= x"74"; --t when x"3C" => ascii <= x"75"; --u when x"2A" => ascii <= x"76"; --v when x"1D" => ascii <= x"77"; --w when x"22" => ascii <= x"78"; --x when x"35" => ascii <= x"79"; --y when x"1A" => ascii <= x"7A"; --z when x"45" => ascii <= x"30"; --0 when x"16" => ascii <= x"31"; --1 when x"1E" => ascii <= x"32"; --2 when x"26" => ascii <= x"33"; --3
82
Apéndices
when x"25" => ascii <= x"34"; --4 when x"2E" => ascii <= x"35"; --5 when x"36" => ascii <= x"36"; --6 when x"3D" => ascii <= x"37"; --7 when x"3E" => ascii <= x"38"; --8 when x"46" => ascii <= x"39"; --9 when x"0E" => ascii <= x"7C"; --vertical | when x"61" => ascii <= x"3C"; --menor que < when x"41" => ascii <= x"2C"; --coma , when x"49" => ascii <= x"2E"; --punto . when x"4A" => ascii <= x"B0"; --guión - when x"29" => ascii <= x"20"; --espacio when x"52" => ascii <= x"7B"; --corchete a { when x"5D" => ascii <= x"7D"; --corchete b } when x"54" => ascii <= x"5B"; --parentesis c_a[ when x"5B" => ascii <= x"5D"; --parentesis c_b ]
when x"7C" => ascii <= x"78"; --multiplicacion when x"79" => ascii <= x"2B"; --suma when x"7B" => ascii <= x"2D"; --resta when others => ascii <= x"40"; end case;
when '1' =>
case code is when x"1C" => ascii <= x"41"; --A when x"32" => ascii <= x"42"; --B when x"21" => ascii <= x"43"; --C when x"23" => ascii <= x"44"; --D when x"24" => ascii <= x"45"; --E when x"2B" => ascii <= x"46"; --F when x"34" => ascii <= x"47"; --G when x"33" => ascii <= x"48"; --H when x"43" => ascii <= x"49"; --I when x"3B" => ascii <= x"4A"; --J when x"42" => ascii <= x"4B"; --K when x"4B" => ascii <= x"4C"; --L when x"3A" => ascii <= x"4D"; --M when x"31" => ascii <= x"4E"; --N when x"4C" => ascii <= x"EE"; --Ñ when x"44" => ascii <= x"4F"; --O when x"4D" => ascii <= x"50"; --P when x"15" => ascii <= x"51"; --Q when x"2D" => ascii <= x"52"; --R when x"1B" => ascii <= x"53"; --S when x"2C" => ascii <= x"54"; --T when x"3C" => ascii <= x"55"; --U when x"2A" => ascii <= x"56"; --V when x"1D" => ascii <= x"57"; --W when x"22" => ascii <= x"58"; --X when x"35" => ascii <= x"59"; --Y when x"1A" => ascii <= x"5A"; --Z when x"0E" => ascii <= x"DF"; --grados ° when x"16" => ascii <= x"21"; --exclamacion ! when x"1E" => ascii <= x"22"; --parentesis " when x"26" => ascii <= x"23"; --número # when x"25" => ascii <= x"24"; --pesos $ when x"2E" => ascii <= x"25"; --porcentaje % when x"36" => ascii <= x"26"; --ampersand & when x"3D" => ascii <= x"2F"; --diagonal / when x"3E" => ascii <= x"28"; --paréntesis a ( when x"46" => ascii <= x"29"; --paréntesis b ) when x"45" => ascii <= x"3F"; --interrogación ? when x"61" => ascii <= x"3E"; --mayor que > when x"29" => ascii <= x"20"; --espacio when x"4A" => ascii <= x"5F"; --guion bajo when x"70" => ascii <= x"30"; --0 when x"69" => ascii <= x"31"; --1 when x"72" => ascii <= x"32"; --2 when x"7A" => ascii <= x"33"; --3 when x"6B" => ascii <= x"34"; --4 when x"73" => ascii <= x"35"; --5 when x"74" => ascii <= x"36"; --6 when x"6C" => ascii <= x"37"; --7 when x"75" => ascii <= x"38"; --8 when x"7D" => ascii <= x"39"; --9 when x"7C" => ascii <= x"78"; --multiplicacion when x"79" => ascii <= x"2B"; --suma when x"7B" => ascii <= x"2D"; --resta when others => ascii <= x"40"; end case;
when others => null; end case; end if; end process; -------------------------------------------------------------------------------------------------------------------- end Behavioral;
83
Apéndices
Apéndice D. Código-M para el intercambio de datos FPGA-PC a través 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))
84
Listado de referencias
[1] Chapman, Ken; Xilinx® Ltd. “PicoBlaze™ KCSPM3 Manual 2 (Rev. 7)” [en línea]. USA Octubre
de 2003. Disponible en Internet: <http://www.xilinx.com>
[2] Federal Information Processing Standards Publication 197. “Announcing the Advanced Encryption Standard (AES)” [en línea]. USA Noviembre 26 2001. Disponible en Internet: <http://www.csrc.nist.gov>
[3] “Cryptography and Network Security. Principles and Practices” William Stallings 3º Edición Pearson/Prentice Hall USA, 2003
[4] Xilinx®. “Spartan‐3E Starter Kit Board User Guide (UG230 v1.0)” [en línea]. USA Marzo 9 2006. Disponible en Internet: <http://www.xilinx.com>
[5] “The Design of Rijndael: AES, The Advanced Encryption Standard” Daemen Joan, Rijmen Vincent. 1º Edición Springer/Verlag USA, 2002
[6] “Handbook of Applied Cryptography”
Menezez Alfred J., Van Oorschot Paul C., Vanstone Scott A. 5º Edición USA, 2001
[7] “Security on FPGA’s: State of the art implementations and attacks” In ACM Transactions on Embedded Computing Systems (TECS) volume 3 USA, 2004
[8] “Efficient modular pipelined AES implementation in counter mode on Altera® FPGA” In field programmable logic and applications, pages: 282‐291, 534‐574. System TECS volume 3 USA, 2004
[9] Techinical report, U.C. Berkeley BRASS group. “High performance, compact AES implementations in Xilinx® FPGA’s” [en línea]. USA 2002. Disponible en internet: <http://www.cs.berkey.edu/˜nnweaver/sfra/rijndael.pdf>
[10] Labbé A. Pérez A. “AES implementations on FPGA: Time flexibility tradeoff”.
Listado de Referencias
85
[11] “An FPGA‐based performance analysis of the unrolling, tiling and pipelining of the AES algorithm in field programmable logic and applications”. Saggese G.P., Mazzeo A., Mazzocca N. and Strollo A.G.M. Ches 2003 Páginas: 292‐302 Köln, 2003
[12] “Very compact FPGA implementation of the AES algorithm in cryptographic hardware and
embedded systems”. Chodowiec, Pawel and Gaj Kris. Ches 2003 Páginas: 319‐333 Köln, 2003
[13] “Efficient implementation of Rijndael encryption in reconfigurable hardware: Improvments
and Design tradeoffs”. Standaert François Xavier, Rouvroy Gael, Quisquart Jean Jacques and Legat Jean Didier. Ches 2003 Páginas: 334‐350 Köln, 2003
[14] “Comparison of the hardware performance of the AES candidates using reconfigurable
hardware”. Gaj Kris and Chodowiec Pawel. In the third AES candidate conference. New York, 2000
[15] “4.2 Gbit/s single chip FPGA implementation of AES algorithm”. Rodriguez Henriquez F., Saqib N.A. and Diaz Perez A. Electronics letters volumen 39. Páginas: 1115‐1116 USA, 2003
[16] Amphion. “CS5210‐10: High performance AES encryption cores”. 2003
[17] “Diseño de un procesador criptográfico Rijndael en FPGA”. Segredoas Alejandro, Zabala Enrique y Bello Gustavo. In X Workshop IBERCHIP Página: 64 Cartagena, 2004
[18] “Implementación en Hardware del algoritmo Rijndael”.
Jácome Calderón Germán, Velazco Medina Jaime, López Hernández Julio. In X Workshop IBERCHIP Página: 113 Cartagena, 2004
Listado de Referencias
86
[19] Daniel Julius Bernstein. “AES Speed”. [en línea]. USA Marzo 2008. Disponible en internet: <http://cr.yp.to/aes‐speed.html>
[20] Chung‐Huang Yang. “Performance of AES on microcontrollers”. [en línea]. USA Marzo 2008. Disponible en internet: <http://www.crypto.idv.tw/AES/index.htm>
[21] Edi Permadi. “Implementing AES using PIC16F84”. [en línea]. USA Marzo 2008. Disponible
en internet: <http://edipermadi.wordpress.com/2008/01/21/implementing‐aes‐using‐pic16f84>
[22] Stiftung Secure Information and Communication Technologies. “Performance‐optimized AES implementation for 8051‐based microcontrollers”. [en línea]. Austria Marzo 2008. Disponible en internet: <http://jce.iaik.tugraz.at>
[23] David Flowers and Howard Henry Schlunder; Microchip® Technology Inc. “Data Encryption
Routines for PIC24 and dsPIC® devices”. [en línea]. USA Marzo 2008. Disponible en internet: <http://ww1.microchip.com/downloads/en/AppNotes/0144a.pdf>
[24] “Analysis and design of digital systems with VHDL”. Allen M. Dewey. PSW pub. Boston, 1997
[25] “Introductory VHDL from simulation to synthesys”. Sudhakar Yalamanchili. Prentice Hall USA, 2001
[26] “Programmable logic handbook”. Sharma, Ashok K. McGraw Hill. USA, 1998
[27] “Programmable logic, PLD’s and FPGA’s”.
Seals R. C. McGraw Hill. USA, 1997
[28] “Digital Signal Processing with Field Programmable Gate Arrays”. Uwe Meyer‐Baese. Springer. USA, 2007