Cifrado A5-1

21
SISTEMES DIGITALS AVANÇATS PRÁCTICAS DE SISTEMAS PARA EL CIFRADO DE DATOS ÍNDICE PRÁCTICA 1: DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO A5/1. PRÁCTICA 2: DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO DES. PRÁCTICA 3: DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO AES.

Transcript of Cifrado A5-1

Page 1: Cifrado A5-1

SISTEMES DIGITALS AVANÇATS

PRÁCTICAS DE SISTEMAS PARA EL CIFRADO DE DATOS

ÍNDICE PRÁCTICA 1: DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO A5/1. PRÁCTICA 2: DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO DES. PRÁCTICA 3: DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO AES.

Page 2: Cifrado A5-1

SISTEMES DIGITALS AVANÇATS

PRÁCTICAS DE SISTEMAS PARA EL CIFRADO DE DATOS

PRÁCTICA 1

DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO A5/1

ÍNDICE

1. OBJETIVOS

2. EL ALGORITMO A5/1

3. IMPLEMENTACIÓN

4. VECTORES DE TEST

Page 3: Cifrado A5-1

PRÁCTICA 1 DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO A5/1 1. OBJETIVOS Esta práctica tiene como objetivo implementar en VHDL el algoritmo de cifrado A5/1. Dicho algoritmo pertenece al grupo de cifradores de flujo, pensados para aplicaciones en tiempo real. Existen dos versiones del algoritmo, la versión fuerte A5/1 (Europa) y la versión débil (A5/2), utilizada en exportación. A5/1 es el algoritmo de cifrado utilizado en Europa para telefonía móvil GSM (“Global System for Mobile Communication”). Dicho algoritmo fue desarrollado en 1989 para preservar la privacidad de las comunicaciones digitales en teléfonos móviles. En el sistema GSM, una conversación telefónica es enviada como una secuencia de tramas (“frames”). Cada trama se envía cada 4,6ms, con una longitud de 228 bits, 114 bits en cada dirección (emisor-receptor, receptor-emisor). El algoritmo A5/1 se utiliza para generar una secuencia cifrante pseudo aleatoria S. Dicha secuencia se suma (XOR) a la trama a enviar, de manera que se preserva la privacidad en el canal de comunicación, tal y como se muestra en la siguiente figura.

ALGORITMO A5/1

Mensaje en Claro (bit a bit)

Secuencia Cifrante S

Mensaje Cifrado (bit a bit)

Frame Number, 22 bits Clave Secreta, 64 bits

El algoritmo A5/1 utiliza 3 registros de desplazamiento realimentados linealmente, de dimensiones diferentes, con un sistema de reloj irregular. El sistema se inicializa con una clave secreta K de 64 bits y un número público de trama Fn (“Frame Number”) de 22 bits.

Page 4: Cifrado A5-1

2. EL ALGORITMO A5/1 El núcleo central del algoritmo A5/1 está formado por tres registros (R1, R2 y R3) de desplazamiento realimentados linealmente (LFSRs), tal y como se muestra en la siguiente figura. La secuencia cifrante S se obtiene a partir de la suma exclusiva de la salida serie de cada uno de los registros.

Figura 1. Esquema del núcleo del algoritmo A5/1.

Los tres registros R1, R2 y R3 tienen longitudes y funciones de realimentación distinta, tal y como se muestra en la tabla adjunta. LFSR Longitud Polinomio

característico Bit de Reloj Bits de

realimentación R1 19 x

19 + x

18 + x

17 + x

14 +1 8 13, 16, 17 y 18

R2 22 x22 + x

21 + 1 10 20 y 21

R3 23 x23 + x

22 + x

21 + x

8 +1 10 7, 20, 21, 22

Tabla 1. Características de los registros tipo LFSR del algoritmo A5/1. El sistema de reloj es irregular para cada uno de los registros de desplazamiento. Una función mayoría de los bits centrales (bits 8, 10 y 10) de cada registro habilita/deshabilita el desplazamiento irregular en cada flanco de reloj. Dicha función mayoría puede especificarse como:

F(C1, C2, C3) = C1 C2 ⊕ C1 C3 ⊕ C2 C3,

donde C1, C2, C3 son los bits de reloj para los registros R1, R2, R3, respectivamente. Si el bit de reloj de un registro coincide con la función mayoría, dicho registro se desplaza. En caso contrario, el registro mantiene su valor. Dicha función mayoría fuerza a que al menos 2 de los registros se desplacen en cada momento.

Page 5: Cifrado A5-1

El algoritmo tiene un total de 84 bits de datos de entrada, 64 bits para la clave secreta K y 22 bits para el “Frame Number” Fn. El funcionamiento del algoritmo puede resumirse en los siguientes pasos:

• Paso 1: Inicialización (reset). R1 = R2 = R3 = 0. La salida está deshabilitada.

• Paso 2: Entrada de la Clave K (64 bits): El bit menos significativo de cada registro es sumado (XOR) con cada bit de la clave durante 64 flancos de reloj (LSB->MSB). La función mayoría está deshabilitada. La salida está deshabilitada.

• Paso 3: Entrada del Frame Number Fn (22 bits): El bit menos significativo de cada registro es sumado (XOR) con cada bit del Frame Number durante 22 flancos de reloj (LSB->MSB). La función mayoría está deshabilitada. La salida está deshabilitada.

• Paso 4: Mezcla de bits. Durante 100 flancos de reloj se desplazan los registros utilizando la función de mayoría. La salida continúa deshabilitada.

• Paso 5: Generación de secuencia cifrante de 228 bits. Utilizando la función mayoría y habilitando la salida, se van desplazando los bits de cada registro durante 228 flancos de reloj. La XOR de cada una de las salidas serie de cada registro genera un total de 228 bits (114 bits y 114 bits).

3. IMPLEMENTACIÓN Se recomienda realizar los siguientes pasos para la implementación: - Crear un nuevo proyecto y añadir un fichero denominado “a51.vhd”. - El sistema debería tener las siguientes entradas: Clave secreta K (64 bits), Frame Number Fn (22 bits), Clock, Reset y las siguientes salidas: Output (secuencia cifrante S) y Valid_Output (indicación de cuándo es válida la salida).

- Crear los componentes para el algoritmo A5/1 (LFSRs, función de mayoría, etc.). Se recomienda utilizar un SHR para almacenar la clave secreta K y el “Frame Number” Fn tras activar la señal de reset.

- Completar el fichero “a51.vhd”, instanciando los componentes necesarios. - Crear un banco de pruebas con vectores de test para comprobar los resultados del algoritmo.

Page 6: Cifrado A5-1

4. VECTORES DE TEST Se recomienda, a fin de comprobar el correcto funcionamiento del sistema, utilizar los siguientes vectores de test. Test 1: Clave K (63..0) = 0xFEDCBA9876543211 Frame number Fn (21..0) = 0x001234 Secuencia = 0xC3C6C02CD8020FA1258CCFB579764179CD2AE559B5F2A92A894A6F088 Test 2: Clave K (63..0) = 0xEFCDAB8967452312 Frame number Fn (21..0) = 0x00134 Secuencia = 0x534EAA582FE8151AB6E1855A728C093F4D68D757ED949B4CBE41B7C6B

Page 7: Cifrado A5-1

SISTEMES DIGITALS AVANÇATS

PRÁCTICAS DE SISTEMAS PARA EL CIFRADO DE DATOS

PRÁCTICA 2

DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO DES

(“Data Encryption Standard”)

ÍNDICE

1. OBJETIVOS

2. EL ALGORITMO DES

3. IMPLEMENTACIÓN

4. VECTORES DE TEST

5. CLAVES DÉBILES

6. REFERENCIAS

7. ANEXO. CAJAS S.

Page 8: Cifrado A5-1

PRÁCTICA 2 DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO DES 1. OBJETIVOS Esta práctica tiene como objetivo implementar en VHDL el algoritmo de cifrado DES (“Data Encryption Standard”) [1]. Dicho algoritmo pertenece al grupo de cifradores denominados en bloque. Utiliza bloques de 64 bits junto con una clave secreta de 64 bits (incluyendo bit de paridad), de cuales únicamente 56 son efectivos. El algoritmo de cifrado es reversible, es decir, con muy pocas variaciones es posible utilizar el mismo código para el cifrado y para el descifrado. A partir de la implementación, se comprobará el correcto funcionamiento mediante unos vectores de test conocidos y se comprobará que determinadas claves son débiles o semidébiles. DES es un algoritmo de cifrado, es decir, un método para cifrar información, escogido como FIPS (Federal Information Processing Standards Publications) en los Estados Unidos en 1976, y cuyo uso se ha propagado ampliamente por todo el mundo. El algoritmo fue controvertido al principio, con algunos elementos de diseño clasificados, una longitud de clave relativamente corta, y las continuas sospechas sobre la existencia de alguna puerta trasera para la “National Security Agency” (NSA). Posteriormente DES fue sometido a un intenso análisis académico y motivó el concepto moderno del cifrado por bloques y su criptoanálisis. Hoy en día, DES se considera inseguro para muchas aplicaciones. Esto se debe principalmente a que el tamaño de clave de 56 bits es corto; las claves de DES se han roto en menos de 24 horas. Existen también resultados analíticos que demuestran debilidades teóricas en su cifrado, aunque son inviables en la práctica. Se cree que el algoritmo es seguro en la práctica en su variante de Triple DES, aunque existan ataques teóricos. Desde hace algunos años, el algoritmo ha sido sustituido por el nuevo AES (“Advanced Encryption Standard”). En algunas ocasiones, DES es denominado también DEA (“Data Encryption Algorithm”). Para más información sobre la historia del algoritmo DES, vea la referencia [2].

Page 9: Cifrado A5-1

2. EL ALGORITMO DES El funcionamiento del algoritmo DES puede observarse en la siguiente figura, en la que se realizan 16 vueltas o rondas para manipular los bits. El algoritmo puede resumirse de la siguiente forma:

- El algoritmo parte de un bloque de datos (texto en claro) de 64 bits, 8 bytes que incluyen bit de paridad. El estándar numera los bits desde el 1 hasta el 64. El bit 1 es el MSB y el bit 64 es el LSB.

- El primer paso del algoritmo es realizar una permutación de los bits, denominada permutación inicial IP (véase las siguientes páginas). Una vez permutados los bits, el nuevo bloque de 64 bits es dividido en 2 bloques de 32 bits, denominados L0 y R0 (corresponden a la primera vuelta del algoritmo).

- A partir de este momento se realiza un bucle de 16 vueltas o rondas idénticas, en las que se aplican las siguientes transformaciones:

( )161;

,11

1÷=

⊕=

=

−−

−i

KRfLR

RL

iiii

ii

- En la última vuelta, el bloque izquierdo y derecho se intercambian, siendo el bloque izquierdo R16 y el bloque derecho L16.

- Una vez juntos ambos bloques de 32 bits para formar un bloque de 64 bits, se aplica una permutación inversa a la inicial, denominada IP-1 o permutación inicial inversa, generando el bloque cifrado de 64 bits (criptograma).

Nótese que en cada una de las vueltas o rondas del algoritmo aparece una función de cifrado f cuyas entradas son el bloque R y una subclave Ki. Las siguientes páginas detallan el funcionamiento de la función de cifrado f y el algoritmo de generación de subclaves.

Page 10: Cifrado A5-1

Texto en Claro, Bloque 64 bits

PERMUTACIÓN INICIAL IP

64

32 32

L0 R0

f(R0, K1) +

K1

L1 = R0 R1 = L0 ⊕ f(R0, K1)

L15 = R14 R15 = L14 ⊕ f(R14, K15)

f(R15, K16) +

R16 = L15 ⊕ f(R15, K16 L16 = R15

K16

PERMUTACIÓN INVERSA IP-1

Texto Cifrado, Bloque 64 bits

32 32

f(R1, K2) +

K2

Figura 1. Diagrama de bloques del algoritmo DES.

Page 11: Cifrado A5-1

Permutación Inicial IP

La permutación inicial (IP) viene dada por la siguiente tabla:

58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7 Tabla 1. Permutación inicial (IP) de bits en el algoritmo DES.

El bit 1 del nuevo bloque corresponde al bit 58 de bloque original, el bit 2 corresponde al bit 50 del bloque inicial y así sucesivamente hasta el bit 64, que corresponde al bit 7 del bloque inicial (recorrido de la tabla por filas). Función de cifra f(R,K)

La fortaleza del algoritmo DES está basada en la función de cifra. Se trata de una función altamente no lineal que garantiza que cada bit del criptograma depende de cada bit del texto en claro y de cada bit de la clave. La función f(R,K) está descrita en el siguiente diagrama de bloques, en los que se utiliza un método de expansión, permutación y sustitución de bits, tal y como se describe en los siguientes párrafos.

R (32 bits)

E

48 bits K (48 bits)

+

S1

6

S2 S3 S4 S5 S6 S7 S8

6 6 6 6 6 6 6

4 4 4 4 4 4 4 4

32

P

32 bits

f(R, K)

Figura 2. Cálculo de la función de cifra f(R, K).

Page 12: Cifrado A5-1

La función de cifra ( ) ( )( )( )KRESPKRf ⊕=, , toma como entrada un bloque R de 32 bits y una subclave K de 48 bits. Dado que las dimensiones de ambas entradas son distintas, primero se procede a una expansión (E) de los bits del bloque R, convirtiendo dicho bloque en uno de 48 bits, a los cuales se les sumará, utilizando la función XOR, los bits de la subclave K. La siguiente tabla muestra la expansión de 32 a 48 bits.

32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1

Tabla 2. Expansión de 32 a 48 bits en la función de cifrado.

El primer bit del nuevo bloque será el bit 32, el segundo el bit 1 y así sucesivamente hasta llegar al bit 48, que será el bit 1 del bloque original (recorrido por filas). Una vez realizada la XOR de ambos bloques de 48 bits, se utilizan lo que el estándar llama las cajas S (S-Box), hasta un total de 8 cajas distintas. Cada una de estas cajas tiene una entrada de 6 bits y una salida de 4 bits. Para la utilización de las cajas, se coge el primer y último bit de la entrada, cuyo código en binario natural es la fila de la tabla. Los 4 bits centrales de la entrada, en binario natural es la columna de la tabla. Fila y columna generan una salida de 4 bits por cada caja S. Al final del manual se han incluido todas y cada una de las cajas S (S1-S8). Finalmente, tras pasar por las cajas S, se obtiene un bloque de 32 bits que se permuta (P) mediante la siguiente tabla.

16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25

Tabla 3. Tabla para la permutación P en el cálculo de f(R, K).

Permutación Inversa IP-1 La permutación inversa IP-1, viene dada por la siguiente tabla:

40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25 Tabla 4. Permutación inversa (IP-1) de bits en el algoritmo DES.

Page 13: Cifrado A5-1

El bit 1 del nuevo bloque corresponde al bit 40 de bloque original, el bit 2 corresponde al bit 8 del bloque inicial y así sucesivamente hasta el bit 64, que corresponde al bit 25 del bloque inicial (recorrido de la tabla por filas). Generación de Subclaves Ki

La siguiente figura muestra el algoritmo de generación de las subclaves a partir de la clave de entrada K de 64 bits. El algoritmo puede resumirse en los siguientes pasos:

- La entrada al algoritmo es una clave K de 64 bits. - Inicialmente, se aplica una permutación de los 64 bits mediante lo que el

estándar llama Permutation Choice 1 (véase la tabla 5), generando un total de 56 bits (los bits de paridad no se consideran).

- A partir de la primera permutación, se parte el bloque en 2 partes de 28 bits, denominados C0 y D0 (primera vuelta).

- El algoritmo consta de 16 rondas, en las que en función de la vuelta, se realiza una desplazamiento cíclio (rotación) a la izquierda de los bits y se aplica una permutación, en este caso denominada Permutation Choice 2 (véase la tabla 6).

Los bits de la clave K (Key) se numeran desde el 1 hasta el 64. Un bit de paridad para cada byte permite la detección de errores en la generación de subclaves. En concreto, los bits 8, 16, 32, ..., 64 corresponden a los bits de paridad par. La permutación 1 (Permutation Choice 1) en la generación de las subclaves viene dada por la siguiente tabla (obsérvese que no aparecen los bits de paridad 8, 16, 32, ..., 64):

57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4

Tabla 5. Bits para la permutación 1 en el algoritmo de generación de subclaves.

La permutación 2 (Permutation Choice 2) en la generación de las subclaves viene dada por la siguiente tabla (obsérvese que no aparecen los bits de paridad 8, 16, 32,..., 64):

14 17 11 24 1 5 3 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32

Tabla 6. Bits para la permutación 2 en el algoritmo de generación de subclaves. Por tanto, el primer bit de Kn es el bit 14º de CnDn, el segundo bit el 17º y así sucesivamente, siendo el bit 47º el 29º y el 48º el 32º.

Page 14: Cifrado A5-1

KEY (64 bits)

Permutation Choice 1

64

C0 D0

28 28

Left Rotation (1 position)

C1

Left Rotation (1 position)

D1

Left Rotation (x positions)

Cn

Left Rotation (x positions)

C16

Left Rotation (x positions)

Dn

Left Rotation (x positions)

D16

56 Permutation Choice 2

K1

56 Permutation Choice 2

Kn

56 Permutation Choice 2

K16

Figura 3. Algoritmo de generación de las subclaves K1-K16 en el algoritmo DES.

Page 15: Cifrado A5-1

Para cada una de las rondas del algoritmo de generación de subclaves se debe hacer un desplazamiento cíclico (rotación) a izquierdas. La siguiente tabla muestra el número de rotaciones en función de la ronda correspondiente:

Número de ronda Número de rotaciones 1 1 2 1 3 2 4 2 5 2 6 2 7 2 8 2 9 1 10 2 11 2 12 2 13 2 14 2 15 2 16 1

Tabla 7. Número de rotaciones dependiendo del número de ronda en la generación de las subclaves.

Obsérvese que para las rondas 1, 2, 9 y 16 se ha de rotar una posición a la izquierda, mientras que para el resto de rondas es necesario rotar dos posiciones a la izquierda. ALGORITMO DE DESCIFRADO EN DES El algoritmo descrito anteriormente es válido tanto para el cifrado como para el descifrado. Únicamente se ha de tener en cuenta la siguiente condición:

- Las claves se toman en sentido contrario, es decir, se empieza por K16 y se acaba por K1.

Page 16: Cifrado A5-1

3. IMPLEMENTACIÓN Se recomienda realizar los siguientes pasos para la implementación: - Crear un nuevo proyecto y añadir un fichero denominado “des.vhd”. - El sistema debería tener las siguientes entradas: Bloque de 64 bits (texto en claro/criptograma), Clave secreta K (64 bits), Clock, Reset y Cifrado/Descifrado. La salida debería ser un bloque de 64 bits (criptograma/texto en claro), dependiendo de la señal de control Cifrado/Descifrado.

- Crear los componentes para el algoritmo DES. Se puede utilizar un enfoque combinacional o secuencial, dependiendo de si se requiere velocidad de cifrado o mínima área de silicio a utilizar.

- Completar el fichero “des.vhd”, instanciando los componentes necesarios. - Crear un banco de pruebas con vectores de test para comprobar los resultados del algoritmo.

- Crear un banco de pruebas con claves débiles para comprobar su debilidad. 4. VECTORES DE TEST

K(1..64) Texto en Claro (1..64) Criptograma (1..64) 0x5052554542414C4F 0x5052554542414C4F 0xA756E803A090FD33 0x0123456789ABCDEF 0x4E6F772069732074 0x3FA40E8A984D4815 0x0123456789ABCDEF 0x68652074696D6520 0x6A271787AB8883F9 0x0123456789ABCDEF 0x0123456789ABCDEF 0x56CC09E7CFDC4CEF 0xFEDCBA9876543210 0xFEDCBA9876543210 0xA933F6183023B310 0xFEDCBA9876543210 0x0000000000000000 0xA68CDCA90C9021F9

5. CLAVES DÉBILES Una clave es débil si se verifica que Ek[Ek (M)] = M. Comprobar por simulación que las siguientes claves son débiles:

Claves Débiles 0x0000000000000000 0xFFFFFFFFFFFFFFFF 0x0101010101010101 0xFEFEFEFEFEFEFEFE 0xE0E0E0E0F1F1F1F1 0x1F1F1F1F0E0E0E0E

6. REFERENCIAS [1] “DATA ENCRYPTION STANDARD (DES)”, FIPS PUB 46-3, Federal

Information Processing Standards Publication, 25 Octubre 1995. http://www.itl.nist.gov/div897/pubs/fip46-2.htm.

[2] http://es.wikipedia.org/wiki/Data_Encryption_Standard.

Page 17: Cifrado A5-1

7. ANEXO. CAJAS S.

Número de Columna

Fila 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7

1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8

2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0

3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

Tabla A1. Función de sustitución S1 (Caja S1).

Número de Columna

Fila 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10

1 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5

2 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15

3 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9

Tabla A2. Función de sustitución S2 (Caja S2).

Número de Columna

Fila 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8

1 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1

2 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7

3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12

Tabla A3. Función de sustitución S3 (Caja S3).

Número de Columna

Fila 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15

1 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9

2 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4

3 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14

Tabla A4. Función de sustitución S4 (Caja S4).

Page 18: Cifrado A5-1

Número de Columna

Fila 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9

1 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6

2 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14

3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3

Tabla A5. Función de sustitución S5 (Caja S5).

Número de Columna

Fila 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11

1 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8

2 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6

3 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13

Tabla A6. Función de sustitución S6 (Caja S6).

Número de Columna

Fila 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1

1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6

2 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2

3 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12

Tabla A7. Función de sustitución S7 (Caja S7).

Número de Columna

Fila 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7

1 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2

2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8

3 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

Tabla A8. Función de sustitución S8 (Caja S8).

Page 19: Cifrado A5-1

SISTEMES DIGITALS AVANÇATS

PRÁCTICAS DE SISTEMAS PARA EL CIFRADO DE DATOS

PRÁCTICA 3

DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO AES

(“Advanced Encryption Standard”)

ÍNDICE

1. OBJETIVOS

2. EL ALGORITMO AES

3. IMPLEMENTACIÓN

4. VECTORES DE TEST

5. REFERENCIAS

Page 20: Cifrado A5-1

PRÁCTICA 3 DISEÑO EN VHDL DEL ALGORITMO DE CIFRADO AES 1. OBJETIVOS Esta práctica tiene como objetivo implementar en VHDL el algoritmo de cifrado AES (“Data Encryption Standard”) [1], en su versión de 128 bits. Dicho algoritmo pertenece al grupo de cifradores denominados en bloque. 2. EL ALGORITMO AES Advanced Encryption Standard (AES), también conocido como Rijndael (pronunciado "Rain Doll" en inglés), es un algoritmo de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años (véase proceso de Advanced Encryption Standard para más detalles). Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica [2]. El cifrador fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen, ambos estudiantes de la Katholieke Universiteit Leuven, y enviado al proceso de selección AES bajo el nombre "Rijndael" [2]. 3. IMPLEMENTACIÓN Se recomienda realizar los siguientes pasos para la implementación del algoritmo AES-128: - Crear un nuevo proyecto y añadir un fichero denominado “aes.vhd”. - El sistema (AES-128) debería tener las siguientes entradas: Bloque de 128 bits (texto en claro/criptograma), Clave secreta K (128 bits), Clock, Reset y Cifrado/Descifrado. La salida debería ser un bloque de 128 bits (criptograma/texto en claro), dependiendo de la señal de control Cifrado/Descifrado.

- Crear los componentes para el algoritmo AES-128. Se puede utilizar un enfoque combinacional o secuencial, dependiendo de si se requiere velocidad de cifrado o mínima área de silicio a utilizar.

- Completar el fichero “aes.vhd”, instanciando los componentes necesarios. - Crear un banco de pruebas con vectores de test para comprobar los resultados del algoritmo.

Page 21: Cifrado A5-1

4. VECTORES DE TEST En la referencia [1] se pueden encontrar vectores de test para comprobar el correcto funcionamiento de la implementación del algoritmo AES-128, entre otros. Además, la publicación en cuestión detalla paso a paso los resultados parciales del algoritmo, facilitando no sólo la compresión del funcionamiento de dicho algoritmo, sino también la verificación de la implementación en hardware. 5. REFERENCIAS [1] “ADVANCED ENCRYPTION STANDARD (AES)”, FIPS PUB 197, Federal

Information Processing Standards Publication, 26 Noviembre 2001. http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf.

[2] http://es.wikipedia.org/wiki/Advanced_Encryption_Standard.