tesis aes fpga

96
B F T E (A u P Te A A H Benemé Facultad Tesina par Implem Estánda AES), en utilizand PicoBlaz esista: Jua Asesor inte Asesor exte . Puebla de érita U d de Cie ra el grado mentaci ar de En n una p do el M ze™” n Fernand rno: MC R erno: MC A e Z. Abril de Univers encias d o de Licen ón en H ncriptac platafor icrocon do Piñal Mo icardo Álva Alba Marib e 2008 sidad A de la El nciatura e Hardwa ción Ava rma FPG ntrolado octezuma arez Gonzá el Sánchez Autóno lectrón en Electró are del anzado GA, or ález. FCEB z Gálvez. F oma de nica ónica: BUAP CCBUAP e Puebl la

Upload: fernando-pinal-moctezuma

Post on 05-Dec-2015

101 views

Category:

Documents


7 download

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®.

TRANSCRIPT

Page 1: Tesis AES FPGA

        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 

Page 2: Tesis AES FPGA

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®.  

Page 3: Tesis AES FPGA

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®.  

Page 4: Tesis AES FPGA

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

Page 5: Tesis AES FPGA

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

Page 6: Tesis AES FPGA

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 

Page 7: Tesis AES FPGA

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 

Page 8: Tesis AES FPGA

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 

Page 9: Tesis AES FPGA

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.

Page 10: Tesis AES FPGA

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.

Page 11: Tesis AES FPGA

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.

Page 12: Tesis AES FPGA

A conti

historia

1.

El

Es

m

lla

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

Page 13: Tesis AES FPGA

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

Page 14: Tesis AES FPGA

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

Page 15: Tesis AES FPGA

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

Page 16: Tesis AES FPGA

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

Page 17: Tesis AES FPGA

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.

Page 18: Tesis AES 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

Page 19: Tesis AES FPGA

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.

Page 20: Tesis AES FPGA

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.

Page 21: Tesis AES FPGA

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.

Page 22: Tesis AES FPGA

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.

Page 23: Tesis AES FPGA

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=

+ + + + + + + = ∑ .

Page 24: Tesis AES FPGA

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

Page 25: Tesis AES FPGA

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

Page 26: Tesis AES FPGA

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.

Page 27: Tesis AES FPGA

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).

Page 28: Tesis AES FPGA

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= ⊕

Page 29: Tesis AES FPGA

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).

Page 30: Tesis AES FPGA

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}.

Page 31: Tesis AES FPGA

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.

Page 32: Tesis AES FPGA

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].

Page 33: Tesis AES FPGA

2.3

El flujo

2.

La

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

Page 34: Tesis AES FPGA

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

Page 35: Tesis AES FPGA

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.

Page 36: Tesis AES FPGA

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.

Page 37: Tesis AES FPGA

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

Page 38: Tesis AES FPGA

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

Page 39: Tesis AES FPGA

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,

Page 40: Tesis AES FPGA

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

Page 41: Tesis AES FPGA

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.

Page 42: Tesis AES FPGA

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.

Page 43: Tesis AES FPGA

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

Page 44: Tesis AES FPGA

34

Diseño del SistemaCapítulo III 

3.7 Implementación del sistema

Figura 21. Programa que ejecuta el microcontrolador PicoBlaze™.

No

Comunicación PS/2

Comunicación Serial

El usuario aún no ha elegido una gestión

No

No

No Sí

No

No

No No

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

Page 45: Tesis AES FPGA

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

Page 46: Tesis AES FPGA

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

Page 47: Tesis AES FPGA

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

Page 48: Tesis AES FPGA

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

No

No Sí

Page 49: Tesis AES FPGA

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

Page 50: Tesis AES FPGA

Figura 29. Secuencia del me

40

enú de usuario del

l sistema criptográ

Capít

áfico.

Distulo III  seño del Sisstema

Page 51: Tesis AES FPGA

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

Page 52: Tesis AES FPGA

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

Page 53: Tesis AES FPGA

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

Page 54: Tesis AES FPGA

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

Page 55: Tesis AES FPGA

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™

Page 56: Tesis AES FPGA

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™

Page 57: Tesis AES FPGA

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

No Sí

No

No

Page 58: Tesis AES FPGA

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

Page 59: Tesis AES FPGA

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.

Page 60: Tesis AES FPGA

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

Page 61: Tesis AES FPGA

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

Page 62: Tesis AES FPGA

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

Page 63: Tesis AES FPGA

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

Page 64: Tesis AES FPGA

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.

Page 65: Tesis AES FPGA

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

Page 66: Tesis AES FPGA

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.

Page 67: Tesis AES FPGA

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.

Page 68: Tesis AES FPGA

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.

Page 69: Tesis AES FPGA

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

Page 70: Tesis AES FPGA

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ª

Page 71: Tesis AES FPGA

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 ; ------------------------------------------------------------------------------

Page 72: Tesis AES FPGA

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

Page 73: Tesis AES FPGA

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

Page 74: Tesis AES FPGA

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

Page 75: Tesis AES FPGA

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

Page 76: Tesis AES FPGA

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

Page 77: Tesis AES FPGA

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

Page 78: Tesis AES FPGA

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

Page 79: Tesis AES FPGA

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

Page 80: Tesis AES FPGA

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)

Page 81: Tesis AES FPGA

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

Page 82: Tesis AES FPGA

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

Page 83: Tesis AES FPGA

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 ; ------------------------------------------------------------------------------

Page 84: Tesis AES FPGA

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

Page 85: Tesis AES FPGA

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

Page 86: Tesis AES FPGA

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" ; ------------------------------------------------------------------------------

Page 87: Tesis AES FPGA

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;

Page 88: Tesis AES FPGA

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";

Page 89: Tesis AES FPGA

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";

Page 90: Tesis AES FPGA

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";

Page 91: Tesis AES FPGA

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

Page 92: Tesis AES FPGA

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;

Page 93: Tesis AES FPGA

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))

Page 94: Tesis AES FPGA

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”.  

Page 95: Tesis AES FPGA

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  

Page 96: Tesis AES FPGA

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