21
Centro de Investigación y Estudios Avanzados del IPN Aritmética Computacional Cifrador De Flujo de Datos Basado En El Sistema Hdcp (High-Bandwidth Digital Content Protection) Francisco Javier Zuluaga Ramírez

Centro de Investigación y Estudios Avanzados del IPN

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Centro de Investigación y Estudios Avanzados del IPN

Centro de Investigación y Estudios Avanzados del IPN Aritmética Computacional

Cifrador De Flujo de Datos Basado En El Sistema Hdcp (High-Bandwidth Digital Content Protection)

Francisco Javier Zuluaga Ramírez

Page 2: Centro de Investigación y Estudios Avanzados del IPN

2

Índice Tema Página Introducción 3 Descripción General del Sistema 5 Operación del Cifrador de Flujo de Datos 6 Implementación en VHDL 7 Desempeños Obtenidos 19 Descripción de las Entidades Incluidas en el Diseño

19

Referencias 21

Page 3: Centro de Investigación y Estudios Avanzados del IPN

3

CIFRADOR DE FLUJO DE DATOS BASADO EN EL SISTEMA HDCP (HIGH-BANDWIDTH DIGITAL CONTENT PROTECTION)

INTRODUCCIÓN 1 Para entender de mejor forma la estructura y el funcionamiento, del cifrador de flujo de datos desarrollado, se presentan a continuación una serie de conceptos. Los cifradores de flujo de datos corresponden a una clase de algoritmos de codificación muy importante. Este tipo de cifradores permiten codificar de manera individual, a cada uno de los caracteres de un texto plano dado, para lo cual, emplean una transformación que varia con el tiempo. Los cifradores de flujo de datos son empleados en diferentes aplicaciones, en las cuales cada carácter de los datos recibidos debe de ser procesado de manera individual ó en situaciones en las que, los errores son altamente probables (aplicaciones de telecomunicaciones). Un cifrador de flujo de datos síncrono, es aquel en el que, el flujo de llave (keystream), empleado para realizar la codificación del mensaje, es generado de manera independiente al valor del mensaje a cifrar y del valor del texto cifrado. Las siguientes ecuaciones describen el proceso de codificación en un cifrador de flujo de datos.

σ i+1 = f(σi , k) zi = g(σi , k) ci = h(zi , mi)

Donde σi, representa el estado actual del cifrador, σ0 el estado inicial del cifrador, el cual es determinado mediante la llave de entrada k, f es la función que determina el siguiente estado del cifrador, g es la función productora del flujo de llave zi (keystream) y h es la función que se encarga de combinar el flujo de llave con el mensaje mi a cifrar, para de esta forma producir el mensaje cifrado, ci. La siguiente imagen (figura 1), muestra el proceso de codificación y decodificación, en un cifrador de flujo de datos síncrono.

Figura 1

Los cifradores de flujo de datos tienen tres principales características:

• Requerimientos de sincronización. En un cifrador de flujo de datos síncrono, el emisor y el receptor deben de encontrase trabajando de manera sincronía, es decir, deberán emplear

1 Para una descripción más amplia de los conceptos presentados consultar Handbook of Applied Cryptography de A. Menezes, P. Van Oorschot and S. Vanstone

Page 4: Centro de Investigación y Estudios Avanzados del IPN

4

la misma llave y deberán encontrase en el mismo estado. De no existir sincronía entre emisor y receptor, el segundo no podrá decodificar enviado por el primero. Existen varias causas por las que se pierda la sincronía, como por ejemplo un ataque en el que se borren o se inserten caracteres en la transmisión.

• No existe error de propagación. Si un carácter codificado es modificado (no borrado), no

afectará a la decodificación de los demás caracteres. • Debido a la sincronización requerida, un carácter insertado ó borrado, provocará

inmediatamente que el sistema falle, a menos de que métodos de resincronización sean agregados.

El bloque principal para la construcción de un cifrador de flujo de datos corresponde a los registros lineales de corrimiento (Linear Feedback Shift Registers). Los LFSR, son empleados en los cifradores para generar el flujo de llave (keystream), esto debido a que, su implementación en hardware es simple y eficiente, producen secuencias con periodos muy largos y porque su estructura puede ser analizada mediante el uso de técnicas algebraicas. La operación de un registro lineal de corrimiento es simple, en cada ciclo de tiempo se ejecuta lo siguiente:

a) El bit más significativo forma parte de la secuencia de salida b) El bit en la posición i, toma el valor en la posición i-1 c) El bit en la posición menos significativa, toma el valor de la suma módulo dos, del

contenido previo de un conjunto determinado de bits. Un registro lineal de corrimiento, puede ser representado mediante su conexión polinomial, la cual indica el conjunto de bits empleados en el cálculo del nuevo valor del bit en la posición menos significativa, por ejemplo:

x13 + x11 + x9 + x5 +1 Representa al registro lineal de corrimiento, en el cual los bits 5, 9, 11 y 13 son empleados para calcular el nuevo valor del bit en la posición menos significativa. Una desventaja del uso de los registros lineales de corrimiento es que, la conexión polinomial que los describe, puede ser determinada mediante algoritmos como, el algoritmo de Berlekamp-Massey2, esto debido a la propiedad de linealidad que poseen. Para acabar con las propiedades de linealidad de los registros, se pueden emplear algunas metodologías como:

• Usar una función no lineal de combinación en la salida de varios regis tros lineales de corrimiento.

• Usar una función no lineal de filtrado en el contenido de un registro lineal de corrimiento.

• Usar la salida de uno o más registros lineales de corrimiento, para controlar el reloj de

algún (os) otro (s) registros lineales de corrimiento. 2 Consultar sección 6.2.3 del Handbook of Applied Cryptography para revisar todos los detalles respecto a este tema.

Page 5: Centro de Investigación y Estudios Avanzados del IPN

5

En nuestro sistema, como se describe más adelante tampoco empleamos un solo registro lineal de corrimiento, para la generación del flujo de llave (keystream). El cifrador desarrollado, es un cifrador de flujo de datos síncrono. Recibe como entrada una llave de 56 bits, la cual es empleada para definir el estado inicial del cifrador. Los datos a cifrar consisten de 24 bits correspondientes al código RGB de pixeles de una imagen dada, para cada píxel a codificar el cifrador genera un flujo de llave (keystream), de manera independiente a los pixeles previamente cifrados y a los valores anteriores del flujo de llave. Para construir el generador de flujo de llave, se emplearon cuatro registros lineales de corrimiento, el contenido de los cuatro registros es empleado para controlar la operación de cuatro cajas de barajeo de bits, de esta forma no se toma de manera directa la salida de ellos y sus propiedades de linealidad no pondrán en riesgo la confiabilidad del sistema. DESCRIPCIÓN GENERAL DEL SISTEMA El estándar HDCP ha sido diseñado para la protección del contenido audiovisual transmitido a través de interfaces de gran ancho de banda, se dice que, un conjunto de datos corresponden a un contenido audiovisual, si contienen texto e imágenes.

Figura 2

Page 6: Centro de Investigación y Estudios Avanzados del IPN

6

El cifrador tiene como objetivo, cifrar cada uno de los píxeles (representados en RGB, empleando 24 bits) correspondientes a dicho contenido audiovisual. El cifrador de flujo de datos que se ha implementando, esta constituido de tres bloques funcionales, los cuales son mostrados en la figura 2. Cada módulo, lo describimos a continuación.

• Módulo de registros lineales de corrimiento : Este módulo consta de cuatro registros lineales de corrimiento y cuatro cajas de barajeo3. La operación de las cajas de barajeo, es controlada por el estado de los cuatro registros de corrimiento. La salida de este módulo, es un bit, el cual es empleado como entrada en el módulo de bloque. Este módulo corresponde al generador de flujo de llave.

• Módulo de bloque : Este módulo es integrado por dos submódulos (K y B), cada uno

cuenta con tres registros de 28 bits (Kx, Ky y Kz o Bx, By y Bz), a dos de los cuales, se les aplica un transformación lineal (una suma módulo dos entre sus bits ). En tanto que, al tercero de estos registros se le aplica una función de intercambio de bits. En el submódulo K, del módulo de bloque, el bit 13 de unos de los registros es modificado mediante el valor entregado por el generador de flujo de llave.

• Función de salida: Este módulo toma como entrada, la salida del módulo de bloque. La

salida del módulo de bloque consiste de seis conjuntos de 28 bits. Mediante la función de salida, los 168 bits del módulo de bloque, son conjuntados para obtener 24 bits, los cuales son aplicados al mensaje a cifrar. Este módulo consiste de una función xor, aplicada a los bits de los registros. Los bits y registros empleados en esta función, se encuentran definidos de manera muy clara en el estándar.

OPERACIÓN DEL CIFRADOR DE FLUJO DE DATOS El cifrador de flujo de datos opera de la manera siguiente.

• Recibe como entrada una llave de 56 bits, la cual es empleada para inicializar los registros que componen el módulo de los registros lineales de corrimiento, así como a los registros del módulo de bloque. Para inicializar los registros del módulo de bloque, a la llave se le aplica una expansión, que consiste en simplemente agregar 28 ceros adicionales, en las posiciones más significativas, para contar con los 84 bits requeridos para inicializar a los tres registros de este módulo.

• Para cada píxel, el módulo de registros lineales, genera un bit (seudo aleatorio), el valor

del bit 13 del registro Ky toma el valor de este bit seudo aleatorio. • Las registros del módulo de bloque sufren una transformación lineal. La transformación

lineal consiste en una suma módulo dos entre los bits de los registros, los bits involucrados en esta transformación lineal, son especificados en el estándar de HDCP. Como se menciono, solo a dos de los registros en cada submódulo se les aplica la

3 Aquí hemos traducido literalmente la palabra shuffle, que es la que se emplea en las especificaciones de HDCP, esperamos no abusar del idioma.

Page 7: Centro de Investigación y Estudios Avanzados del IPN

7

transformación lineal, el contenido del registro restante entra a una caja de intercambio de bits.

• Finalmente, el nuevo contenido de los registros es reducido a 24 bits mediante el bloque de la función de salida. Este bloque consiste nuevamente, en una operación de adición módulo dos entre los bits de los registros. El resultado de esta función de salida, es aplicado a el píxel a cifrar, para así, obtener el código correspondiente a él.

Como se observa, los pasos no han sido numerados, esto debido a que en el cifrador, todos los pasos excepto la inicialización, se realizan en el mismo ciclo de reloj. La inicialización de los registros es requerida, solo antes de iniciar a cifrar los datos correspondientes al contenido audiovisual. Una vez realizada la inicialización, es posible realizar el proceso de codificación de cada uno de los datos, la cual consiste en los últimos tres pasos antes listados. IMPLEMENTACIÓN EN VHDL Para la implementación del cifrador de flujo de datos, se ha hecho uso de la herramienta ISE 6.0 de Xinlix. El enfoque empleado en la implantación de los módulos, ha sido un enfoque jerárquico, es decir, en principio se codificaron las entidades más simples y básicas, como compuertas AND, OR y XOR, así como multiplexores, flip- flops y memorias ROM, una vez hecho lo anterior, se procedió a la codificación de módulos más complejos como registros de corrimiento y las cajas de barajeo, para finalmente conjuntar esos módulos y obtener el módulo de registros lineales de corrimiento, el módulo de bloque y la función de salida, los cuales finalmente son conjuntados y así obtendremos nuestro sistema final.

Figura 3

Módulo De Registros Lineales De Corrimiento En la figura 3, se muestra en conjunto de las diferentes entidades empleadas en la construcción del módulo de registros lineales de corrimiento. Se observa, la relación existente entre cada una de las entidades, y cómo cada entidad de los niveles superiores es construida mediante entidades de niveles inferiores, es decir, entidades más simples. La construcción de entidades en los niveles superiores, consiste de simples mapeos de los puertos de entrada y salida de la entidad, hacia los puertos de entrada y salida de diferentes entidades, en los niveles inferiores.

Page 8: Centro de Investigación y Estudios Avanzados del IPN

8

Un diagrama esquemático del módulo de registros lineales de corrimiento, se muestra en la figura 4.

Figura 4

Las etiquetas LFSR0, LFSR1, LFSR2 y LFSR3, se refieren a bits tomados de los registros lineales de corrimiento. De cada registro, se toman tres bits (Tap0, Tap1 y Tap2) los cuales, como se ve, son aplicados a las cajas de barajeo. Anteriormente se menciono que, para no poner en riesgo la integridad del sistema, debido a la linealidad de los registros lineales de corrimiento, se pueden emplear diversas metodologías, en nuestro caso, el flujo de llave no es tomado directamente de la salida de algún registro, en lugar de esto, un bit de cada registro es empleado como entrada a la red de cajas de barajeo, otro bit de caja registro sirva para controlar a dichas cajas, y el restante bit de cada registro es empleado como entrada a una operación de suma módulo 2. Cada registro lineal de corrimiento, tiene la estructura mostrada en la figura 5.

Figura 5

En la implementación en VHDL, cada uno de los registros lineales de corrimiento, se encuentra definido como una entidad, constituida por tres entidades más simples (como se puede ver en la figura 3),

• un registro de corrimiento • una compuerta xor • un flip-flop tipo de D

Page 9: Centro de Investigación y Estudios Avanzados del IPN

9

El código VHDL para la entidad es similar al siguiente, entity lreg14 is

port( A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,L,S : in bit; T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 : out bit

); end lreg14;

Se puede ver en el código, que además de las entradas de datos Ai, el registro lineal de corrimiento, cuenta con dos entradas adicionales, L y S. Las líneas de datos Ai, son mapeadas hacia las entradas de un registro de corrimiento. En tanto que, cuando la señal L es activa, los datos en cada una de las entradas Ai, son almacenadas en el registro, y cada vez que la señal S es puesta en 1 lógico, un corrimiento de bits a la izquierda, es aplicado al registro. El resultado de la operación xor aplicada a algunos bits del registro (definidos por su conexión polinomial, en las especificaciones del estándar), es almacenada temporalmente en un flip-flop D. Cuando un corrimiento es aplicado al registro, el contenido del flip- flop es tomado como bit de entrada en el registro. Debido a que, en el diseño se incluyen cuatro registros lineales de corrimiento de diferente tamaño, en nuestra codificación vhdl incluimos cuatro entidades diferentes correspondientes a cada uno de estos registros. Las entidades son lreg13, lreg14, lreg16 y lreg17, los cuales difieren en el tamaño del registro de corrimiento con el cual son construidos, y los bits empleados para generar el bit de entrada en cada corrimiento. Las cajas de barajeo, tienen una estructura como la mostrada enseguida,

Figura 6

El código VHDL para una caja de barajeo es simple, habiendo definido una entidad que represente un flip-flop y otra que represente un multiplexor, la arquitectura de una caja de barajeo sería la siguiente.

Page 10: Centro de Investigación y Estudios Avanzados del IPN

10

architecture bshuffle of shuffle is begin

mux1 : mux port map(D,o4,S,o1); -- D es el dato de entrada a la caja mux2 : mux port map(o3,D,S,o2); -- la otra entrada S, es la señal de

selección ff1 : ffd3 port map(o1,clk,o3); -- representa registro A de la red ff2 : ffd3 port map(o2,clk,o4); -- representa registro B de la red ff3 : ffd2 port map(o3,CLK,o5); ff7 : ffd2 port map(o4,CLK,o6); mux3 : mux port map(o6,o5,S,O); -- O corresponde a la señal de salida de

la caja end bshuffle; Los puertos de entrada y los puertos de salida de la caja de barajeo, se muestran en la definición de la entidad. entity shuffle is

port( CLK,D,S : in bit; O : out bit );

end shuffle; Nuevamente se ve que, habiendo definido las entidades que representan un flip-flop y un multiplexor, la definición de las cajas de barajeo es muy simple. Se incluyen dos flip-flop’s extras a los del diseño original , para evitar oscilaciones de la caja, debido a la realimentación existente. Cuando las entidades correspondientes a los registros lineales de corrimiento y a las cajas de barajeo, han sido definidas es posible definir la entidad que represente el módulo de los registros lineales de corrimiento. La entidad que representa dicho módulo se llama net, el código vhdl de su arquitectura es la siguiente. architecture bnet of net is begin --- las entradas de la entidad son K0 a K55, L y S lfr0 : lreg13 port

map(K0,K1,K2,K3,K4,K5,K6,K7,K8,K9,K10,K11,E,L,S,TA(0),TA(1),TA(2),TA(3),TA(4),TA(5),TA(6),TA(7),TA(8),TA(9),TA(10),TA(11),TA(12));

lfr1 : lreg14 port map(K12,K13,K14,K15,K16,K17,K18,K19,K20,K21,K22,K23,K24,E,L,S,TB(0),TB(1),TB(2),TB(3),TB(4),TB(5),TB(6),TB(7),TB(8),TB(9),TB(10),TB(11),TB(12),TB(13));

Page 11: Centro de Investigación y Estudios Avanzados del IPN

11

lfr2 : lreg16 port map(K25,K26,K27,K28,K29,K30,K31,K32,K33,K34,K35,K36,K37,K38,K39,E,L,S,TC(0),TC(1),TC(2),TC(3),TC(4),TC(5),TC(6),TC(7),TC(8),TC(9),TC(10),TC(11),TC(12),TC(13),TC(14),TC(15));

lfr3 : lreg17 port map(K40,K41,K42,K43,K44,K45,K46,K47,K48,K49,K50,K51,K52,K53,K54,K55,E,L,S,TD(0),TD(1),TD(2),TD(3),TD(4),TD(5),TD(6),TD(7),TD(8),TD(9),TD(10),TD(11),TD(12),TD(13),TD(14),TD(15),TD(16));

ff1 : ffd2 port map(TA(3),S,FTA3); ff2 : ffd2 port map(TA(7),S,FTA7); ff3 : ffd2 port map(TA(12),S,FTA12); ff4 : ffd2 port map(TB(4),S,FTB4); ff5 : ffd2 port map(TB(8),S,FTB8); ff6 : ffd2 port map(TB(13),S,FTB13); ff7 : ffd2 port map(TC(5),S,FTC5); ff8 : ffd2 port map(TC(9),S,FTC9); ff9 : ffd2 port map(TC(15),S,FTC15); ff10: ffd2 port map(TD(5),S,FTD5); ff11: ffd2 port map(TD(11),S,FTD11); ff12 : ffd2 port map(TD(16),S,FTD16);

xor4i1 : xor4i port map(FTA3,FTB4,FTC5,FTD5,o0); s1 : shuffle port map(S,o0,FTA7,o1); s2 : shuffle port map(S,o1,FTB8,o2); s3 : shuffle port map(S,o2,FTC9,o3); s4 : shuffle port map(S,o3,FTD11,o4); xor5i1 : xor5i port map(FTA12,FTB13,FTC15,FTD16,o4,O); -- O representa la señal de

- --- salida del módulo

end bnet; La entidad net, ha sido definida considerando el diagrama esquemático de la figura 2. Consta de cuatro registros lineales de corrimiento y cuatro cajas de barajeo. La entidad cuenta con 56 entradas que son empleadas para inicializar a cada uno de los registros de corrimiento, según la tabla siguiente.

Bit Valor inicial [16] 0 LFSR3

[15:0] Bits de entrada [55:40] [15] 0 LFSR2

[14:0] Bits de entrada [39:25] [13] 0 LFSR1

[12:0] Bits de entrada [24:12] [12] 0 LFSR0

[11:0] Bits de entrada [11:0]

Page 12: Centro de Investigación y Estudios Avanzados del IPN

12

La entidad incluye tres entradas más, E, L y S, además de una salida O. Cuando en la señal L existe un flanco de subida, los datos en las entradas K0-K55, son cargados en los correspondientes registros lineales de corrimiento. La señal L deberá ser habilitada siempre que se desee inicializar el sistema. La señal de entrada S, indica que un corrimiento debe ser realizado en cada uno de los registros de la red. De esta forma, cada vez que la señal S sea habilitada, el valor en cada una de las cajas de barajeo cambiará, y el módulo entregará una señal de salida, la cual será tomada por el módulo de bloque. La definición de la entidad es la siguiente. entity net is port( K0,K1,K2,K3,K4,K5,K6,K7,K8,K9,K10,K11 : in bit; K12,K13,K14,K15,K16,K17,K18,K19,K20,K21,K22,K23,K24 : in bit; K25,K26,K27,K28,K29,K30,K31,K32,K33,K34,K35,K36,K37,K38,K39 : in bit; K40,K41,K42,K43,K44,K45,K46,K47,K48,K49,K50,K51,K52,K53,K54,K55 : in bit; E : in bit; L,S : in bit; O : out bit ); end net; La señal de entrada restante E, es utilizada para inicializar los bits correspondientes a cero, esta señal esta siempre conectada a tierra. Módulo De Bloque El segundo módulo del cifrador de flujo de datos es, el módulo de bloque. Este módulo es más simple que el anterior, pero su codificación resulta ser más engorrosa. La figura 7 muestra un diagrama correspondiente a este módulo.

Figura 7

Page 13: Centro de Investigación y Estudios Avanzados del IPN

13

El módulo contiene dos submódulos muy similares, el módulo K y el módulo B. En cada módulo existen tres registros (Kx, Ky y Kz , en el módulo K y Bx, By y Bz, en el módulo B), una caja de intercambio de bits (s-box) y un bloque donde se aplica una transformación lineal a los bits de dos de los registros. Después de aplicar el intercambio de bits y la transformación a los registros, los resultados son almacenados en los registros nuevamente. En nuestro caso, contamos con dos registros para representar a cada registro, es decir, para representar al registro Kx, por ejemplo, contamos con dos registros, uno que llamaremos de entrada y otro al que llamaremos registro de salida . El registro de entrada, opera cuando en el reloj hay un flanco de bajada, en tanto que, el otro opera en los flancos de subida del reloj. Esta situación es requerida para que, mientras el contenido del registro de entrada no cambia (que opera en flancos de bajada), el nuevo valor del registro de salida es calculado mediante la transformación lineal ( o mediante la caja de intercambio de bits), y una vez almacenado ese nuevo valor, en el flanco de bajada del mismo ciclo de reloj, el contenido del registro de entrada a la función de transformación, es actualizado con el valor recién calculado. Para el diseño de este módulo, se tomó un enfoque jerárquico nuevamente, la figura 8 muestra las entidades involucradas y la relación entre ellas.

Figura 8

Cada caja de intercambio en realidad esta constituida por 7 cajas de intercambio, cuyo comportamiento esta definido en la siguiente tabla.

Valores de las cajas de intercambio

Page 14: Centro de Investigación y Estudios Avanzados del IPN

14

Las cajas SK0-SK6, son las cajas de intercambio empleadas en el módulo K, en tanto que las cajas de intercambio SB0-SB6, son aplicadas en el módulo B. Las cajas de intercambio tienen 4 bits de entrada y cuatro bits de salida, la salida depende del valor de entrada y del número de caja de intercambio. Por ejemplo, si a la caja de intercambio SK0 entra un valor de 0, se tendrá en la salida un valor de 8, pero si a la caja SB5 entra el mismo valor de 0, la salida será ahora 1. Para la implantación de las cajas de intercambio se hizo uso de dos instancias de una entidad que representará una memoria de solo lectura (ROM), una instancia representa las cajas SK0-SK6 y la otra representa a SB0-SB6. La memoria cuenta con entradas correspondientes a las direcciones, cada dirección es formada mediante el numero de caja (tres bits) y el valor de entrada (cuatro bits). El número de la caja, es empleado como la parte alta de la dirección, y el valor de entrada es empleado como la parte baja de la dirección. Por ejemplo para obtener el valor de salida de la caja SK3, cuando el valor de entrada es 7, se emplea como dirección de entrada el valor 0110111. Los primeros tres bits (011) corresponden al número de caja, 3 y los bits 0111 corresponden al valor de entrada a la caja de intercambio, 7. Debido al número de bits empleados en la dirección y al tamaño de los datos almacenados, requerimos memorias de 128 x 4. Como se menciono, hemos definido dos entidades diferentes, en una se almacenan todos los datos correspondientes a SK0-SK6 y en otra los valores correspondientes a SB0-SB6. Un ejemplo de código VHDL empleado en la definición de la memoria es el siguiente. entity mem8x4 is

port( A : in bit_vector(2 downto 0); D : out bit_vector(3 downto 0)

); end mem8x4; architecture bmem128x4 of mem128x4 is type SP7 is array (127 downto 0) of bit_vector(3 downto 0);

constant Content: SP7 := ( 0=>"1000", 1=>"1110", 2=>"0101",3=>"1001", 4=>"0011", 5=>"0000", 6=>"1100",7=>"0110", 8=>"0001", 9=>"1011", 10=>"1111",11=>"0010", );

begin direccionamiento : process(A)

begin D <=Content( conv_integer( To_StdLogicVector(A)) );

end process direccionamiento;

end bmem8x4;

Page 15: Centro de Investigación y Estudios Avanzados del IPN

15

La memoria consiste en un arreglo que, es indexado mediante el valor de la dirección de entrada. En cada posición del arreglo se han definido los valores correspondientes al contenido de la memoria. La única diferencia de la memoria aquí presentada, con la memoria incluida en el diseño es, el tamaño de la dirección de entrada y el tamaño del arreglo que representa el contenido. Aquí cabe señalar que, este tipo de entidades pueden ser implementadas haciendo uso de los bloque de memoria contenidos en el FPGA (BRAM), ganando así en velocidad y en espacio sin embargo, debido a la licencia de ISE con que se cuenta, no podemos hacer uso de esta facilidad. Las transformaciones lineales no son otra cosa sino operaciones xor, aplicadas a un conjunto de bits de los registros. Esta transformación lineal esta constituida por ocho redes de difusión, cada red cuenta con 7 entradas y 7 salidas, dando un total de 56 entradas y 56 salidas. La aplicación de estas reglas de transformación está dada en la siguiente tabla.

Como se puede observar en la tabla anterior, las redes de difusión no son otra cosa sino un conjunto de compuertas xor. Cada salida de la red de difusión corresponde a la salida de una compuerta xor de 7 entradas, en algunos casos, y de ocho entradas en otros. La implantación de estas redes de difusión consisten en un conjunto de entidades que representan a las compuertas xor. El valor de K0-K6 y de I0-I6, están definidos en los estándares del cifrador, y corresponden a bits de los registros Ky y Kz, en el módulo K y a los bits de los registros By y Bz en el módulo B. Las 56 salidas obtenidas de las ocho redes de difusión, son empleadas para actualizar el valor de los registros Kx y Ky en el módulo K y el de los registros Bx y By en el módulo B. La correspondencia entre estas salidas obtenidas y las entradas a los registros Kx, Ky, Bx y By, también se encuentran definidas en las especificaciones del cifrador, y se muestran en las siguientes dos tablas.

Entradas a la transformación lineal en el módulo K

Page 16: Centro de Investigación y Estudios Avanzados del IPN

16

Entradas a la transformación lineal en el módulo B

Habiendo implantado las entidades correspondientes a las cajas de intercambio y a las transformaciones lineales, la implantación del módulo de bloque es sencillo, basta paciencia y seguir con cuidado las tablas dadas en las especificaciones del cifrador para realizar las “conexiones” necesarias de los registros hacia las entradas en las entidades de transformaciones lineales y a las entradas de las entidades de las cajas de intercambio. Para implantar estas conexiones, se generaron dos entidades, una correspondiente al módulo K (roundk) y otra correspondiente al módulo B (roundb). Cada entidad cuenta con 56 líneas de entrada, empleadas para inicializar el valor de los registros. Los 56 bits de entrada son expandidos a 84 bits, agregando 28 ceros en la parte mas significativa. La definición de las entidades es la siguiente, entity roundk is

port( A : in bit_vector(55 downto 0); L,K13,CLK : in bit; O : out bit_vector(83 downto 0)

);

end roundk;

Page 17: Centro de Investigación y Estudios Avanzados del IPN

17

entity roundb is

port( A : in bit_vector(55 downto 0); K : in bit_vector(27 downto 0); L,CLK : in bit; O : out bit_vector(83 downto 0)

); end roundb; La entidad roundk además de contar con las 56 entradas, correspondientes a los valores iniciales de los registros, cuenta con las señales de entrada L, K13 y CLK. Toda la operación de la entidad es sincronizada mediante la señal CLK. Cuando hay un flanco de subida en la señal CLK, los valores obtenidos en las cajas de intercambio y en las transformaciones lineales, son puestos en las salidas del bloque (O), y posteriormente en el flanco de bajada son colocados en los registros Kx, Ky y Kz de entrada (Recuerde que contamos con dos registros para representar a cada uno de los registros en el módulo de bloque). Cabe mencionar que, el bit trece del registro Ky no es actualizado con el valor calculado en las transformaciones lineales, en su lugar, este bit toma el valor de la señal de entrada K13, la cual en el sistema final corresponderá a la salida del primer módulo del cifrador, el módulo de los registros lineales de corrimiento. Un flanco positivo en la señal L indica que, los registros deben ser cargados con el valor presente en las entradas Ai. Esta señal debe ser habilitada para inicializar el sistema. La entidad roundb, difiere ligeramente de la entidad roundk. Cuenta con 56 bits de entrada, mediante los cuales se inicializan los registros correspondientes al bloque B, para inicializar estos registros, la señal L debe ser habilitada (debe haber un flanco positivo en ella). La entrada K, es un conjunto de 28 bits, tomados del módulo K, empleados en la transformación lineal4, y al igual que en la entidad roundk, la señal CLK sincroniza la operación en esta entidad. Cuando hay un flanco de subida en la señal CLK, se calculan los valores de la transformación lineal, estos valores son puestos en la salida (O) de la entidad y en el flanco de bajada son almacenados nuevamente en los registros Bx, By y Bz. Función De Salida El tercer módulo del sistema es, el módulo de la función de salida. Este módulo corresponde a la siguiente función: (B0•K0)⊕(B1•K1)⊕(B2•K2)⊕(B3•K3)⊕(B4•K4)⊕(B5•K5)⊕(B6•K6)⊕B7⊕K7. Las entradas B0-B7 y K0-K7, corresponden a bits tomados del módulo de bloque. Con base a esta función, se obtienen 24 bits que son aplicados a los datos de entrada a cifrar. El código VHDL correspondiente a esta entidad es el siguiente.

4 ver la definición de las redes de difusión y la tabla que muestra las entradas a estas redes, presentadas antes

Page 18: Centro de Investigación y Estudios Avanzados del IPN

18

entity ofunction is port( B,K : in bit_vector(0 to 7); O : out bit ); end ofunction; Como se observa, su entrada corresponde a dos vectores de 8 bits cada uno, el vector B y el vector K, y su salida es simplemente un bit. La arquitectura de la entidad es la siguiente: architecture bofunction of ofunction is begin a0 : and2i port map(K(0),B(0),o0); a1 : and2i port map(K(1),B(1),o1); a2 : and2i port map(K(2),B(2),o2); a3 : and2i port map(K(3),B(3),o3); a4 : and2i port map(K(4),B(4),o4); a5 : and2i port map(K(5),B(5),o5); a6 : and2i port map(K(6),B(6),o6); x0 : xor9i port map(o0,o1,o2,o3,o4,o5,o6,K(7),B(7),O); end bofunction; En el código de la arquitectura se ve que, la operación de esta función de salida es muy simple. Realiza una operación And entre algunos de los bits de los vectores recibidos, y las salidas de cada una de estas operaciones son, junto con los bits restantes de los vectores de entrada, la entrada a una compuerta xor, de donde se toma la salida final de la función. Las entradas a esta función de salida, están especificadas en los estándares de HDCP. En el diseño se cuenta con veinticuatro entidades de este tipo, la salida de cada una de ellas es aplicada a los bits de entrada que se desea cifrar.

Page 19: Centro de Investigación y Estudios Avanzados del IPN

19

DESEMPEÑOS OBTENIDOS La siguiente tabla muestra el desempeño del sistema en distintos circuitos FPGA de Xinlix. Estos datos fueron obtenidos mediante la herramienta ISE 6.0, del mismo propietario.

Tabla de desempeño del sistema desarrollado

En la tabla se puede ver, que existen dos circuitos de las familias Virtex 2 y Virtex 2P, que presentan periodos de trabajo superiores a los demás. La desventaja de uno de ellos (el de la familia Virtex 2) es que, el número de bloques de entrada / salida, no son suficientes para nuestro diseño, pues mientras nosotros requerimos 106 bloques, el dispositivo cuenta con 92. DESCRIPCIÓN DE LAS ENTIDADES INCLUIDAS EN EL DISEÑO Por último, presentamos una lista de todas las entidades, definidas en vhdl que, han sido empleadas en la construcción del módulo de registros lineales de corrimiento y del módulo de bloque. Se muestran de manera que, enfaticen la jerarquía existente.

• net : Entidad que representa al módulo de registros lineales de corrimiento o lreg13 : Representa un registro lineal de corrimiento de 13 bits

§ ffd2 : Flip-flop tipo D, cuya señal de reloj es activa en alto § xor4i : Compuerta lógica or exclusiva de 4 entradas § shift13 : Registro de corrimiento de 13 bits

• boxselect : Caja de selección, cuenta con dos entradas de datos y dos entradas de selección, las entradas de selección no son mutuamente exclusivas, por lo que no se emplea como multiplexor

• ffd3 : Flip-flop tipo D, cuya señal de reloj es activa en bajo • or2i : Compuerta lógica or de 2 entradas

o lreg14 : Registro lineal de corrimiento de 14 bits

§ ffd2 : Ver descripción previa § xor6i : Compuerta lógica or exclusiva de 6 entradas § shift14 : Registro de corrimiento de 14 bits

Page 20: Centro de Investigación y Estudios Avanzados del IPN

20

• boxselect : Ver descripción previa • ffd3 : Ver descripción previa • or2i : Ver descripción previa

o lreg16 : Registro lineal de corrimiento de 16 bits

§ ffd2 : Ver descripción previa § xor6i : Ver descripción previa § shift16 : Registro de corrimiento de 16 bits

• boxselect : Ver descripción previa • ffd3 : Ver descripción previa • or2i : Ver descripción previa

o lreg17 : Registro lineal de corrimiento de 17 bits

§ ffd2 : Ver descripción previa § xor4i : Ver descripción previa § shift17 : Registro de corrimiento de 17 bits

• boxselect : Ver descripción previa • ffd3 : Ver descripción previa • or2i : Ver descripción previa

o shuffle Entidad que representa una caja de barajeo

§ ffd2 : Flip-flop tipo D, su señal de reloj es activa en alto § ffd3 : Flip-flop tipo D, su señal de reloj es activa en bajo § mux : Multiplexor de 2 entradas

• roundb : entidad que representa el submódulo B, del módulo de bloque

o dnetb : Representa una red de difusión, en la cual se aplica a los bits de entrada la transformación lineal (xor) definida en los estándares del cifrador § xor7i : Compuerta or exclusiva de 7 entradas § xor8i : Compuerta or exclusiva de 8 entradas

o dnetk : Red de difusión, en la cual se aplica una transformación lineal a los bits de entrada § xor6i : Compuerta or exclusiva de 6 entradas § xor7i : Compuerta lógica or exlusiva de 7 entradas

o mem128x4b : Memoria de 128 x 4 bits, empleada para simular una caja de intercambio de bits

o reg28h : registro de 28 bits. En este registro se almacenan los resultados de la transformación lineal y la caja de intercambio de bits, aplicadas al contenido del registro rregi § ffd2 : Flip-flop tipo D, del cual su señal de reloj es activa en alto

o rregi : Registro de 28 bits. Este registro cuenta con 56 bits de entrada, dos por cada bit de almacenamiento. Una de las entradas es conectada a terminales externas, de modo que, el registro pueda ser inicializado con un valor dado por el usuario. La entrada restante en cada bit, es conectada a la salida del registro reg28h, que almacena los resultados de la transformación lineal aplicada al contenido de este registro. § mux : multiplexor de dos entradas de datos § reg28l : Registro de 28 bits

Page 21: Centro de Investigación y Estudios Avanzados del IPN

21

• ffd3 : Flip-flop tipo D, en el cual su señal de reloj es activa en bajo

• roundk : entidad que representa el submódulo K, del módulo de bloque o dnetk : Red de difusión, en la cual se aplica una transformación lineal a los bits de

entrada § xor6i : Compuerta or exclusiva de 6 entradas § xor7i : Compuerta lógica or exlusiva de 7 entradas

o mem128x4 : Memoria de 128 x 4 bits, empleada para simular una caja de intercambio de bits

o reg28h : registro de 28 bits. En este registro se almacenan los resultados de la transformación lineal y la caja de intercambio de bits, aplicadas al contenido del registro rregi § ffd2 : Flip-flop tipo D, del cual su señal de reloj es activa en alto

o rregi : Registro de 28 bits. Este registro cuenta con 56 bits de entrada, dos por cada bit de almacenamiento. Una de las entradas es conectada a terminales externas, de modo que, el registro pueda ser inicializado con un valor dado por el usuario. La entrada restante en cada bit, es conectada a la salida del registro reg28h, que almacena los resultados de la transformación lineal aplicada al contenido de este registro. § mux : multiplexor de dos entradas de datos § reg28l : Registro de 28 bits

• ffd3 : Flip-flop tipo D, en el cual su señal de reloj es activa en bajo

Referencias.

• Handbook of Applied Cryptography, by A. Menezes, P. vanOorschot, and S. Vanstone, CRC Press, 1996.

• Especificaciones de HDCP 1.1