INSTITUTO POLITÉCNICO NACIONALsappi.ipn.mx/cgpi/archivos_anexo/20061005_3713.pdf · no es...
Transcript of INSTITUTO POLITÉCNICO NACIONALsappi.ipn.mx/cgpi/archivos_anexo/20061005_3713.pdf · no es...
INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACIÓN EN COMPUTACIÓN
LABORATORIO DE SISTEMAS DIGITALES
REPORTE FINAL DEL PROYECTO:
CIRCUITOS PARA SEGURIDAD EN MICROPROCESADORES
REGISTRO CGPI: 20061005
DIRECTOR DEL PROYECTO:
M. EN C. OSVALDO ESPINOSA SOSA
2
ÍNDICE
Resumen 3
Importancia de la seguridad y la criptografía 4
Criptografía de llave secreta 5
Criptografía de llave pública 6
Operaciones fundamentales en algoritmos criptográficos 6
Procesadores seguros para disminuir el efecto de la piratería y
alteración de datos
7
El algoritmo RC5 como caso de estudio 8
Propuesta de circuitos 10
Encriptación a nivel del microprocesador 13
Metodología 15
Resultados 20
Conclusiones 22
Referencias 22
3
RESUMEN
Las grandes compañías están invirtiendo cada vez más recursos para lograr
procesamiento seguro y a la vez para disminuir los efectos perjudiciales de la
piratería, por lo que se está pensando en codificar la información de los programas
tanto para la instalación de las aplicaciones como para su almacenamiento en
memoria. En ese sentido, se está pensando en colocar unidades de encriptación y
desencriptación en diversas partes del sistema computador. Las comunicaciones
por red, con el teclado, la unidad de disco etc. tendrán componentes de
codificación a fin de evitar que personas malintencionadas puedan espiar el
trabajo de otros. En particular se espera proponer un esquema de
encriptado/desencriptado ubicado entre alguno de los niveles de la memoria caché
y la unidad de búsqueda de instrucciones y de acceso a datos por parte del
procesador. El estudio se basa principalmente en simulación. Se utiliza para este
propósito un simulador como el "simplescalar 3.0" para realizar el estudio del
impacto sobre el rendimiento que tiene el incorporar la seguridad al
microprocesador.
4
IMPORTANCIA DE LA SEGURIDAD Y LA CRIPTOGRAFÍA
La seguridad en los procesos de comunicación para información confidencial ya
no es exclusiva del ejército o del gobierno. Todo intercambio de información como
transacciones bancarias, números de tarjetas de crédito a través de la red y las
comunicaciones son ahora práctica comunes.
Para proteger los datos en una computadora y en sistemas de comunicación de
acceso no autorizado y modificación, medios con cualidades de no intercepción
para almacenamiento de datos y transmisión deben ser adoptados. Un cifrador
criptográfico puede ocultar el contenido actual de cada mensaje, transformándolo
(cifrándolo) antes de la transmisión o el almacenamiento.
Las técnicas necesarias para proteger la información pertenecen al campo de la
criptografía. La criptografía es el estudio de las técnicas matemáticas relacionadas
a aspectos de seguridad de la información tales como: confidencialidad, integridad
de los datos, autenticación de la entidad y autenticación del origen de los datos.
Estas características se muestran como sigue:
Confidencialidad: Consiste en garantizar que los datos sean entendidos
sólo por aquellos a los que están destinados.
Integridad de los datos: Es una propiedad que está relacionada con evitar la
alteración no autorizada de la información (cambios, destrucción o
pérdidas).
Autenticación: Es decir identificación de las partes en comunicación y de la
información.
No repudiación: Característica la cual previene a una entidad de denegar
previos acuerdos o acciones.
5
En el lenguaje da la criptografía, el mensaje es llamado texto plano.
Codificar la información para ocultarla de extraños es un proceso llamado
encriptación.
El mensaje encriptado es llamado texto cifrado.
El proceso de recuperar el texto plano a partir del texto cifrado es llamado
desencriptación.
La encriptación y la desencriptación usualmente usan una llave. Una vez que el
texto plano ha sido encriptado con una llave, sólo podrá recuperarse conociendo la
llave adecuada.
La criptografía puede dividirse en dos: criptografía de llave secreta y criptografía
de llave pública. En algunos casos una combinación de ambas es deseable.
CRIPTOGRAFÍA DE LLAVE SECRETA
La criptografía de llave secreta o simétrica hace uso de la misma llave para la
encriptación y la desencriptación (o la llave para desencriptar se deriva fácilmente
de la llave de encriptación). Las llaves en este tipo de criptografía son mantenidas
en secreto y deben ser conocidas sólo por las dos entidades en comunicación
para realizar la encriptación y la desencriptación. Este tipo de algoritmos son
rápidos y utilizados para procesar grandes volúmenes de datos.
Algunos de los más populares algoritmos de este tipo son: DES (Data Encryption
Standard) que es ampliamente utilizado así como TripleDES (Una variación de
DES). Un nuevo algoritmo llamado “Rijndael” se ha elegido como AES (Advanced
Encryption Standard) otro ejemplo muy popular.
6
CRIPTOGRAFÍA DE LLAVE PÚBLICA
Los algoritmos asimétricos usan diferentes llaves para la encriptación y la
desencriptación, y la llave para desencriptar no es fácilmente derivable de la llave
para encriptación. Estos algoritmos usan dos llaves distintas conocidas como
públicas y privadas, éstas están relacionadas de tal forma que la pública permite
encriptar mensajes y sólo la correspondiente llave privada puede usarse para
desencriptarlos. La criptografía de curvas elípticas cae en este campo y es ahora
muy popular por su fuerza utilizando llaves más cortas que otros algoritmos.
OPERACIONES FUNDAMENTALES EN ALGORITMOS CRIPTOGRÁFI COS
Los algoritmos de llave simétrica o secreta tienen como primitivas más comunes la
permutación, sustitución, rotación, operaciones lógicas “bit-wise”, desplazamientos
circulares etc. Esta es una de las razones por las que son muy rápidos para el
proceso de encriptación.
Por otro lado, los algoritmos asimétricos o de llave pública, están basados en
problemas matemáticos más difíciles de resolver. Las primitivas más comunes en
éstos tipos de algoritmos incluyen suma/resta modular, multiplicación modular,
rotaciones de longitud variable etc. Estas operaciones proporcionan fortaleza al
algoritmo pero también incrementan la complejidad de la implementación: ocupan
más espacio y consumen más tiempo. Los algoritmos de este tipo no son usados
para manejar grandes volúmenes de información, pero sí son útiles en
aplicaciones como intercambio de llaves, firma y verificación etc.
En ambos casos es importante considerar la longitud de la llave, pues a mayor
número de bits, mayor fuerza tendrá el algoritmo. Los algoritmos modernos no
tienen menos de 80 bits y sin embargo existen algunos que pueden tener más de
mil.
7
La longitud de las llaves de los algoritmos criptográficos restringe el flujo paralelo
de los datos en procesadores de propósito general de 8, 16 y 32 bits, resultando
en altos retardos en tiempo para la ejecución de algoritmos. El anterior no es el
caso de arquitecturas en “hardware” dedicadas.
En “software”, todas las iteraciones son ejecutadas secuencialmente mientras que
en “hardware”, todas la iteraciones pueden ser implementadas en forma paralela
asegurando significativas mejoras en los tiempos de ejecución.
PROCESADORES SEGUROS PARA DISMINUIR EL EFECTO DE LA
PIRATERÍA Y ALTERACIÓN DE DATOS.
Debido a la piratería del “software” y a los ataques de virus, se están realizando
esfuerzos para mejorar la seguridad en los sistemas de cómputo. La idea principal
es que cualquier elemento distinto del procesador es vulnerable a los ataques.
Recientemente, una arquitectura de memoria de solo-ejecución XOM (por sus
siglas en inglés) ha sido propuesta para evitar los problemas ya mencionados. En
el diseño, programa y datos son almacenados en forma encriptada fuera de la
frontera del procesador. La desencriptación es llevada a cabo después buscar y
traer datos desde la memoria y antes de ser usados por el CPU. Como resultado
la trayectoria de acceso es ahora más larga y eso puede causar una degradación
importante del rendimiento del sistema.
En un articulo escrito por Jun Yang, Youtao Zhang y Lan Gao denominado “Fast
Secure Processor for Inhibiting Software Piracy and Tampering” se presenta una
técnica en la cual el cómputo relacionado con la criptografía se realiza en paralelo
con los accesos a memoria, lo cual requiere sólo de un poco de almacenamiento
extra, disminuyendo la penalización de acceso a la memoria.
8
Experimentos realizados muestran la relación entre el tamaño del almacenamiento
y la pérdida de rendimiento.
En otro trabajo denominado “Efficient Memory Integrity Verification and Encryption
for Secure Processors” se ve la conveniencia de contar con elementos de
procesamiento seguro para las aplicaciones como comercio a través de la red,
para proteger al software contra copias, el poder tener agentes seguros etc. En
este artículo se proponen mecanismos de “hardware” para verificar la integridad
de la memoria y encriptación, los cuales son dos componentes importantes en
procesadores seguros.
EL ALGORITMO RC5 COMO CASO DE ESTUDIO
El algoritmo de encriptación RC5 tiene varias características importantes entre las
que destacan:
Es un algoritmo muy simple en su estructura por lo que la rapidez está
garantizada así como la facilidad de implementación.
Consta de sólo tres operaciones básicas: sumas/restas, operaciones XOR
(OR exclusivas) y rotaciones.
La llave utilizada para encriptar es la misma para desencriptar (simétrico).
El grado de seguridad ofrecido depende en gran medida del número de
iteraciones empleado.
El algoritmo es parametrizado, es decir se emplean tres datos importantes en su
definición: w que es la longitud de la palabra a encriptar, típicamente 32. El
siguiente parámetro es r, que indica el número de iteraciones. Es evidente que a
9
mayor número de iteraciones el algoritmo ofrecerá mayor seguridad aunque
requerirá más tiempo. Típicamente el valor de r es 12. Finalmente se utiliza una
llave K la cual puede ser de cualquier longitud y cuya longitud en bytes está dada
por el parámetro b. La notación para una particular parametrización del algoritmo
es la siguiente: RC5-w/r/b. Una elección muy utilizada de los parámetros es RC5-
32/12/16. Adicionalmente debe tomarse en cuenta una tabla de coeficientes
generados a partir de la llave y que se denomina S cuyo tamaño es 2(r+1).
El algoritmo de encriptación está definido en pseudo-código a continuación:
A=A+S[0];
B=B+S[1];
for i= 1 to r do
A=((A xor B) <<< B)+S[2*i];
B=((B xor A) <<< A)+S[2*i+1];
De la misma manera el algoritmo de desencriptación está dado por:
for i=r downto 1 do
B=((B-S[2*i+1])>>>A) xor A;
A=((A-S[2*i])>>>B) xor B;
B=B-S[1];
A=A-S[0];
Las rotaciones están determinadas por los bits menos significativos del registro en
cuestión, donde dicho número de bits corresponde al log2 del número w. Los
detalles sobre la expansión de la llave K para formar la tabla S se pueden
consultar en [1].
10
PROPUESTAS DE CIRCUITOS
El primer circuito a considerar es un esquema cuyo propósito es implementar el
algoritmo RC5 con una cantidad de recursos que prácticamente no cambia con el
número de iteraciones (a excepción de las tablas de coeficientes implementadas
en memorias ROM). El esquema con recursos mínimos para encriptar lo
llamaremos circuito 1-a y se presenta a continuación en la figura 1:
figura 1. Diagrama del circuito 1-a. El circuito funciona de la siguiente manera: Durante el primer ciclo los registros A
y B se cargan con el resultado de la suma de las entradas A y B con los
elementos S[0] y S[1] respectivamente, a partir del segundo ciclo se calculan las
iteraciones o rounds, cada uno consiste en obtener el resultado de la operación
OR exclusiva entre los valores de los registros A y B para sufrir posteriormente
una rotación a la izquierda (<<<). Por la rama del registro A se produce una
rotación a la izquierda usando los bits menos significativos del registro B y del
mismo modo por la rama del registro B se produce una rotación a la izquierda
11
pero ahora usando los bits menos significativos del registro A. Los resultados se
sumarán a sus respectivos elementos de la tabla S.
El segundo circuito es el 1-b y corresponde al desencriptador, donde de igual
forma podemos decir que en el primer ciclo de reloj se aplican los datos A y B
para desencriptarlos, a partir del segundo ciclo comienzan las iteraciones o
rounds del algoritmo. En este caso se restan los elementos de la tabla primero
para que el resultado pueda sufrir ahora rotaciones a la derecha (>>>). La salida
del rotador sufre una operación OR exclusiva con el dato de entrada contrario, es
decir, la rama A utiliza la entrada B y visceversa. Finalmente después de la última
iteración se restan los coeficientes S[0] y S[1]. La figura 2 muestra el circuito
desencriptador llamado circuito 1-b:
figura 2. Diagrama del circuito 1-b.
Considerando que el número de iteraciones es usualmente 12, la latencia que
presentan estos circuitos es de 13 ciclos de reloj. Ambos circuitos forman el
sistema encriptador/desencriptador. Es evidente que el circuito desencriptador es
utilizado para lecturas y el encriptador se utiliza en las escrituras. Las
posibilidades de ubicar al sistema encriptador/desencriptador dentro de la
jerarquía de memoria de un procesador típico se muestran en la figura
12
Los dos diagramas anteriores muestran la solución que ofrece el menor espacio
dentro del FPGA. A continuación se muestra el circuito 2-a en la figura 3, que es
un encriptador segmentado que aumenta el número de recursos a emplear dentro
del FPGA pero que potencialmente mejora la productividad.
figura 3. Diagrama del circuito 2-a En esta versión se puede notar que se han replicado los recursos para calcular
cada iteración del algoritmo. Lo cual aumentará su espacio y la cantidad de
recursos utilizados pero debido a la segmentación (que se obtiene gracias al
13
conjunto de registros A y B) mejorará la productividad al trabajar como un sistema
de producción en serie. De igual modo el circuito desencriptador se muestra en la
figura 4 y será llamado 2-b.
figura 4. Diagrama del circuito 2-b ENCRIPTACIÓN A NIVEL MICROPROCESADOR
Es evidente que en la actualidad se tienen pérdidas billonarias en la industria del
software debido a la duplicación ilegal de los programas, lo que comúnmente
llamamos piratería [1]. Aunado a lo anterior están los constantes ataques por parte
14
de software malintencionado que aprovechan las vulnerabilidades de los sistemas
operativos y del hardware de los sistemas de cómputo, especialmente el sistema
de memoria. Debido a lo anterior, se han propuesto técnicas basadas en soporte a
nivel del microprocesador para tratar de disminuir estos problemas, donde el
microprocesador es la única entidad autorizada para accesar a la información,
cualquier otro componente de hardware se considera vulnerable a los ataques
debido a que se puede estar monitoreando el paso de información a través de los
buses [4]. Los programas son entonces almacenados en memoria en forma
encriptada y sólo pueden ser desencriptados en el interior del microprocesador,
recordando que en procesadores actuales los dos primeros niveles de la memoria
se encuentran en el silicio que contiene al procesador, es decir en el mismo
circuito integrado.
El propósito de este trabajo es mostrar el efecto que tiene en el rendimiento de un
microprocesador superescalar (Alpha 21264) la inclusión de un sistema
encriptador/desencriptador, que como es de esperarse producirá una disminución
en el desempeño de los procesadores al aumentar la latencia de acceso a la
información contenida en algún nivel del sistema de memoria. Es importante
seleccionar el punto adecuado para realizar el proceso de encriptación y
desencriptación de modo que la pérdida de rendimiento sea la menor posible. El
sistema se puede incluir antes del nivel 1 de la memoria cache, antes del nivel 2 ó
bien en la memoria principal. Para lo anterior es importante considerar que el
acceso a la memoria cache de nivel 1 requiere sólo de uno a tres ciclos en caso
de acierto, para el caso de la cache de nivel 2 la latencia de acceso en caso de
acierto es de 6 a 12 ciclos en procesadores actuales y que para accesar a la
memoria pricipal se requieren de 100 ó más ciclos en caso de acierto.
El algoritmo de encriptación seleccionado es el RC5 debido a sus características y
muy especialmente porque es un algoritmo que es muy fácil de implementar en
hardware. El artículo nos muestra una breve descripción del algoritmo RC5, de los
circuitos que se utilizan para realizar el proceso de encriptado y desencriptado.
15
También se habla de la metodología utilizada para llevar a cabo este trabajo, la
cual contempla el uso de un simulador conducido por ejecución para obtener
estadísticas detalladas de los experimentos realizados. Se muestran los
resultados de las simulaciones y finalmente aparecen las conclusiones y las
referencias bibliográficas.
El circuito encriptador/desencriptador modificará la latencia de acceso a los
distintos niveles del sistema jerarquizado de la memoria, cambiando el rendimiento
del sistema
Fig. 3. Posiciones del sistema encriptador/desencriptador a) antes de la cache de nivel 1 b) antes de la cache de nivel 2 c) antes de la memoria principal.
METODOLOGÍA
Para realizar este trabajo se utilizó el simulador Simplescalar versión 3.0 que
realiza la simulación detallada de un procesador superescalar con ejecución fuera
de orden [3], siendo este tipo de arquitectura la más utilizada en la actualidad en
procesadores para computadoras de escritorio y servidores. El simulador se
configuró con las características de un procesador Alpha 21264 debido a que ha
sido considerado como la mejor arquitectura en procesadores superescalares al
momento de su aparición. Este procesador cuenta con dos memorias caché de
16
nivel 1 (Instrucciones y datos) de 64KB del tipo asociativa en dos vías con bloques
de 64 bytes. La cache de nivel 2 es unificada con un tamaño de 1 MB siendo ésta
del tipo asociativa en ocho vías con bloques de 64 bytes. Al simulador se le
aplicaron como cargas representativas de trabajo el conjunto de programas
benchmarks conocidos como SPEC CPU 2000, que se compone de 12
aplicaciones de números enteros y 14 de punto flotante. Estas aplicaciones son
programas reales de uso común. Las estadísticas que genera el simulador son
muy precisas debido a que es conducido por ejecución. En este trabajo vamos a
ver como cambia el IPC (Instrucciones por ciclo) como medida de rendimiento
conforme cambia la posición del sistema encriptador dentro de la jerarquía de
memoria del procesador. Las simulaciones se han hecho ejecutando 2x108
instrucciones de cada programa, comenzando a colectar estadísticas después de
las primeras 1x108 instrucciones con el objetivo de eliminar el efecto de la
inicialización en las estadísticas. En cada simulación se ha modificado la latencia
de acierto para el acceso a la memoria correspondiente incluyendo la latencia
debida a la inclusión del sistema de encriptación/desencriptación (13 ciclos de reloj
para el esquema propuesto).
Los microprocesadores modernos son increíbles maravillas de ingeniería que cada
vez están siendo más difíciles de evaluar. Para este trabajo se ha optado por usar
el conjunto de simuladores y herramientas conocidas como “simplescalar 3.0” que
ejecuta en forma rápida, flexible y precisa las simulaciones de un procesador
superescalar moderno (en nuestro caso hemos escogido el procesador Alpha
21264 como arquitectura de referencia debido a que los expertos lo consideran
como el procesador mejor planeado). La herramienta toma archivos ejecutables
compilados especialmente para la arquitectura y simula sus ejecuciones en uno de
varios simuladores provistos para tal efecto. Las ventajas de este conjunto de
herramientas son la alta flexibilidad, portabilidad y desempeño. Las herramientas
incluyen cinco simuladores conducidos por ejecución, los cuales varían de una
simulación funcional extremadamente rápida hasta un simulador muy detallado de
un procesador superescalar con ejecución fuera de orden que soporta caches no
17
bloqueantes y ejecución especulativa. El conjunto de herramientas se muestra en
la siguiente figura:
Los componentes del conjunto de herramientas simplescalar
El simulador usado de este conjunto de herramientas se denomina sim-outorder, y
define una arquitectura como la que se muestra a continuación en un diagrama a
bloques:
18
El procesador modelado por el simulador
Las características propias del procesador a simular se incluyen en un archivo de
configuración que como se había comentado incluye las características del Alpha
21264 como arquitectura referencia, dicho archivo se muestra a continuación:
# # sim-outorder configuration ALpha 21264 # # random number generator seed (0 for timer seed) -seed 1 # instruction fetch queue size (in insts) -fetch:ifqsize 4 # extra branch mis-prediction latency -fetch:mplat 3 # branch predictor type {nottaken|taken|perfect|bim od|2lev} -bpred bimod # numero de instrucciones a ejecutar -max:inst 1000000 # numero de instrucciones para comenzar a tomar est adisticas -fastfwd 500000 # bimodal predictor BTB size -bpred:bimod 2048 # 2-level predictor config (<l1size> <l2size> <hist _size>) -bpred:2lev 1 1024 8 # instruction decode B/W (insts/cycle)
19
-decode:width 4 # instruction issue B/W (insts/cycle) -issue:width 4 # run pipeline with in-order issue -issue:inorder false # issue instructions down wrong execution paths -issue:wrongpath true # register update unit (RUU) size -ruu:size 16 # load/store queue (LSQ) size -lsq:size 8 # l1 data cache config, i.e., {<config>|none} -cache:dl1 dl1:128:32:4:l # l1 data cache hit latency (in cycles) -cache:dl1lat 1 # l2 data cache config, i.e., {<config>|none} -cache:dl2 ul2:1024:64:4:l # l2 data cache hit latency (in cycles) -cache:dl2lat 6 # l1 inst cache config, i.e., {<config>|dl1|dl2|non e} -cache:il1 il1:512:32:1:l # l1 instruction cache hit latency (in cycles) -cache:il1lat 1 # l2 instruction cache config, i.e., {<config>|dl2| none} -cache:il2 dl2 # l2 instruction cache hit latency (in cycles) -cache:il2lat 6 # flush caches on system calls -cache:flush false # convert 64-bit inst addresses to 32-bit inst equi valents -cache:icompress false # memory access latency (<first_chunk> <inter_chunk >) -mem:lat 18 2 # memory access bus width (in bytes) -mem:width 8 # instruction TLB config, i.e., {<config>|none} -tlb:itlb itlb:16:4096:4:l # data TLB config, i.e., {<config>|none} -tlb:dtlb dtlb:32:4096:4:l # inst/data TLB miss latency (in cycles) -tlb:lat 30 # total number of integer ALU's available -res:ialu 4 # total number of integer multiplier/dividers avail able -res:imult 1 # total number of memory system ports available (to CPU) -res:memport 2
20
# total number of floating point ALU's available -res:fpalu 4 # total number of floating point multiplier/divider s available -res:fpmult 1 # operate in backward-compatible bugs mode (for tes ting only) -bugcompat false
Archivo de configuración del simulador
RESULTADOS
El resultado de la implementación de los circuitos de encriptación 1-a y 1-b nos
indica una utilización de 12% de los recursos del FPGA utilizados por cada uno, si
deseáramos tener ambos circuitos en el FPGA el consumo de recursos sería del
24%. Es importante hacer notar que la latencia mostrada por este circuito para
entregar un dato es de r+1 ciclos de reloj y dicha latencia se presenta por cada
par de datos a encriptar por lo que si quisiéramos encriptar 10 pares de datos el
número total de ciclos requeridos para realizar el cálculo sería de 130, recordar
que nos estamos basando en un parámetro r = 12.
Por otro lado los circuitos 2-a y 2-b muestran un incremento notable en el número
de recursos utilizados dependiendo del número de iteraciones o rounds
empleados. Cuando el circuito itera solo una vez, se consume un 9% de los
recursos del FPGA, cuando itera 2 veces aumenta a 17, con tres iteraciones a
25% y así sucesivamente incrementando 8% de los recursos del FPGA a utilizar
por cada iteración adicional. Si el valor de r=12, el total de recursos utilizados es
del 97%, con lo que el dispositivo utilizado prácticamente no tiene espacio para
otro circuito adicional y en este caso cabría solo en encriptador o el
desencriptador. Cabe hacer notar que la latencia presentada por estos circuitos
es también de 13 ciclos de reloj pero a diferencia de los dos circuitos anteriores
ésta se aprecia una sola vez, ya que si los pares de datos se procesan uno tras
otro el número de ciclos requerido para procesar 10 pares de datos será de
13+9=22 es decir 13 ciclos del primer dato y 9 ciclos para arrojar los restantes
21
pares, uno par por cada ciclo. Lo que aumenta notablemente la productividad (22
ciclos contra 130).
Los procesos de simulación arrojaron como resultado la gráfica que se observa en
la figura 4. Se pueden obtener varios datos importantes. El IPC mostrado cuando
el sistema no tiene encriptación es siempre el mayor. El peor de los casos se
presenta cuando el sistema de encriptación/desencriptación se coloca entre el
procesador y el primer nivel de la memoria cache obteniéndose en uno de los
programas una baja de 32% en el IPC. Los mejores resultados se obtuvieron
cuando el sistema se coloca entre los niveles 1 y 2 de la memoria cache, donde el
peor de los casos disminuye en sólo 11% el IPC. Para el caso de colocar el
sistema al nivel de la memoria principal (RAM) se obtuvo que en el peor de los
casos disminuye el IPC en 29%. Este resultado puede parecer sorprendente, ya
que se podría pensar que la latencia de acceso a la memoria principal (que es la
mayor de todas) podría ocultar mejor la latencia del circuito
encriptador/desencriptador. Al parecer la latencia del circuito (13 ciclos por cada
par de datos) afecta en forma importante al sistema de memoria RAM, ya que
extiende la latencia de acceso a los bloques posteriores al primero (que es el que
muestra la latencia inicial) en una búsqueda pasando de ser de dos ciclos
(típicamente en procesadores actuales) a un número mayor.
22
Efecto de un encriptador RC5
00,5
11,5
22,5
33,5
4
amm
p:aps
i:
bzip2
:eo
n:
face
rec:
galg
el: gcc:
lucas
:
mes
a:
pars
er:
sixtra
ck:
twolf
:vp
r:
IPC
s/enc
L1
L2
RAM
fig 4. Efecto del encriptador RC5 en los distintos niveles de la jerarquía de la memoria.
CONCLUSIONES Como se pude apreciar en los resultados los circuitos 1-a y 1-b son compactos y
ocupan poco espacio en el FPGA pudiendo tener a ambos dentro del mismo,
pagando el costo de una elevada influencia de la latencia. Los circuitos 2-a y 2-b
mejoran en mucho este aspecto aumentando la productividad del circuito a costa
de un elevado uso de los recursos del FPGA. El uso de uno u otro par de circuitos
dependerá de las características del diseño, debiendo elegir entre rapidez o
tamaño, o bien realizando un balance entre tamaño y rapidez disminuyendo el
número de iteraciones o rounds.
En este trabajo se analizó el efecto de incluir un circuito de encriptación en el
sistema jerarquizado de la memoria de un procesador superescalar,
encontrándose que la mejor opción con los parámetros dados del algoritmo
elegido (RC5) es colocarlo en el nivel 2 de la memoria cache, en donde la
disminución del IPC es de sólo 11%, lo cual es un resultado aceptable
incrementando el nivel de seguridad de los sistemas de cómputo.
REFERENCIAS � Rivest,R.L. The RC5 encryption algorithm. � ISE WebPack. User’s guide. www.xilinx.com
23
� Yang,Zhang,Gao. Fast secure processorfor inhibiting software piracy and tampering. Proceedings of the 36th International Symposium on Microarchitecture MICRO 36-2003.
� Ruby B. Lee, Peter C. S. Kwan. Architecture for protecting critical secrets in microprocessors. Proceedings of the 32nd Annual International Symposium on Computer Architecture 2005.
� “An Introduction to Cryptography,” Network Associates, Inc., http://www.pgpi.org/doc/pgpintro, 1999.
� T. Gilmont, J.-D. Legat, and J.-J. Quisquater, “Enhancing the Security in the Memory Management Unit,” Proceedings of the 25th EuroMicro Conference, pages 449–456, September 1999.
� http://www.specbench.org/osg/cpu2000. � M. Kuhn, “The TrustNo1 Cryptoprocessor Concept,” Technical Report, Purdue University, April
1997. � D. Lie, J.Mitchell, C. A. Thekkath, and M. Horwitz, “Specifying and Verifying Hardware for
Tamper-Resistant Software,” IEEE Symposium on Security and Privacy, 2003. � D. Lie, C. Thekkath, M. Mitchell, P. Lincoln, D. Boneh, J. Mitchell, and M. Horwitz,
“Architectural Support for Copy and Tamper Resistant Software,” ACM 9th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS-IX), pages 168–177, November 2000.
� T. Maude and D. Maude, “Hardware Protection Against Software Piracy,” Communication of the ACM, Volume 27,Number 9, pages 950–959, September 1984.
� G. E. Suh, D. Clarke, B. Gassend, M. van Dijk, and S. � Devadas, "AEGIS: Architecture for Tamper-Evident and Tamper-Resistant Processing," Proc.
of the 17th Int’l Conf. on Supercomputing (ICS), 2003.