Método Criptográfico de Sustitución Simétrica para el Análisis del

Anuncio
1
Método Criptográfico de Sustitución
Simétrica para el Análisis del Cómputo
Matricial en Sistemas Embebidos
Fausto Abraham Jacques García1, Ruth Angélica Rico Hernández1, Juan Salvador Hernández
Valerio1, Carlos Alberto Olmos Trejo1, Gabriela Xicoténcatl Ramírez1, Ubaldo Chávez Morales1, Antonio
Trejo Morales2 y Víctor Hugo Guerrero Cruz2.
1 Profesor e Investigador de la Facultad de Informática de la Universidad Autónoma de Querétaro
Querétaro, México.
2 Ingeniero de Software en el Centro de Ingeniería y Desarrollo Industrial, Querétaro, México.
jacques@uaq.edu.mx, rico@uaq.mx, valerio@uaq.mx, caolmos@uaq.mx, gabyxico@uaq.mx,
ubald.chavez@gmail.com, atrejo@cidesi.mx, victor.guerrero@cidesi.mx.
Resumen— En el presente artículo se describe el
procedimiento utilizado para la implementación del método
criptográfico de sustitución simétrica Hill Cipher en un Sistema de
Software Embebido, usando una Tarjeta Raspberry Pi para la
ocultación de datos. Este estudio se realiza con la finalidad de
obtener el desempeño de este algoritmo en una tarjeta con
procesamiento limitado y así ver las capacidades que tiene la tarjeta
para realizar cálculos matemáticos básicos, los cuales permiten
realizar todo el proceso para encriptar y desencriptar un mensaje.
Para este algoritmo se requiere el uso de las operaciones que se dan
lugar en los espacios lineales aritméticos.
Palabras claves— Encriptación, Hill Cipher, Raspberry
Pi, Python, Sistemas Embebidos.
I. INTRODUCCIÓN
Un sistema embebido consiste en un sistema de
computación cuyo hardware y software están
específicamente diseñados y optimizados para resolver un
problema concreto eficientemente. El término "embebido"
(también se le conoce como “empotrado”), cuya función
principal no es computacional, pero es controlado por una
computadora integrada. Esta computadora puede ser un
microcontrolador o un microprocesador (Alejandro A.D.,
2012).
La palabra embebido implica que se encuentra
dentro del sistema general, oculto a la vista, y forma parte de
un todo de mayores dimensiones. La característica principal
que diferencia a los “embebidos” de los demás sistemas
electrónicos es que, por estar insertados dentro del
dispositivo que controlan, están sujetos en mayor medida a
cumplir requisitos de tamaño, fiabilidad, consumo y costo.
A lo largo de la historia, la humanidad ha tenido,
por diversas razones, la necesidad de transmitir mensajes
cuyo contenido permanezca oculto. La criptografía nació, en
principio, como la habilidad para esconder información a
cualquier persona que no le estuviera permitido leerla. A
través de los siglos, se desarrollaron distintas técnicas,
métodos e instrumentos que permitieron el desarrollo de este
arte; la criptografía clásica abarca éstas técnicas
(Universidad Nacional Autónoma de México Facultad de
Ingerniería, 2012).
La palabra criptografía proviene del griego krypto,
(oculto), y graphos, (escribir), que literalmente sería
escritura oculta, con esta definición podemos decir que es un
arte de antiguo uso. Se divide en dos grandes ramas, la
Criptografía de clave privada o simétrica y la Criptografía de
clave pública o asimétrica (The Raspberry Pi Foundation,
2006).
La Criptografía simétrica, se ha implementado en
diferentes tipos de dispositivos: manuales, mecánicos,
eléctricos, hasta llegar a las computadoras, donde se
programan los algoritmos actuales. La idea general es aplicar
diferentes funciones al mensaje que se desea cifrar de modo
tal, que sólo conociendo la clave, pueda descifrarse
(Amicelli, 2012).
El cifrado simétrico es una forma de criptosistema
en la cual la encriptación y desencriptación se realiza usando
la misma clave. El cifrado simétrico transforma un texto
plano en un texto cifrado utilizando una clave secreta y un
algoritmo de cifrado (Stallings, 2011). A su vez se utiliza la
misma clave y un algoritmo de descifrado lo cual permite
recuperar el texto cifrado.
Las técnicas tradicionales de cifrado simétrico
utilizan la sustitución o transposición, estas técnicas
Memorias del “2do. Congreso Nacional de Tecnologías de la Información”, Universidad del SABES, San José Iturbide,
Gto., México, 29 y 30 de Agosto del 2014.
1
convierten elementos de texto sin formato (caracteres, bits)
en elementos de texto cifrado (Stallings, 2011).
El método de encriptación por medio de la
transposición transpone sistemáticamente las posiciones de
los elementos de texto plano para cifrar el texto (Stallings,
2011).
tiene un alfabeto predefinido de 26 caracteres, los cuales no
son modificables (Valeiras, 2011).
Otro ejemplo donde se utiliza esta técnica de
encriptación es en el artículo titulado “Development of
secure encoder-decoder for JPEG images”, es un desarrollo
orientado a la encriptación y desencriptación de imágenes en
formato jpeg implementado en Matlab por el autor Hamissa,
G. (Hamissa, et al., 2011)
II. MÉTODOS
Consideraciones previas:
Figura 1 Encriptación Simétrica Cipher.
“Python es un lenguaje de programación poderoso
y fácil de aprender. Cuenta con estructuras de datos
eficientes y de alto nivel y un enfoque simple pero efectivo
a la programación orientada a objetos. La elegante sintaxis
de Python y su tipado dinámico, junto con su naturaleza
interpretada, hacen de éste un lenguaje ideal para scripting y
desarrollo rápido de aplicaciones en diversas áreas y sobre la
mayoría de las plataformas” (Rossum, 2009).
“El algoritmo de Hill Cipher es un sistema que está
basado en el álgebra lineal y ha sido importante en la historia
de la criptografía. Fue inventado por Lester S. Hill en 1929,
y fue el primer sistema criptográfico polialfabético que era
práctico para trabajar con más de tres símbolos
simultáneamente. Este sistema es polialfabético pues puede
darse que un mismo caracter en un mensaje a enviar se
encripte en dos caracteres distintos en el mensaje
encriptado” (Rossum, 2009).
La Raspberry Pi es una placa computadora que es
desarrollada en Reino Unido por la fundación Raspberry Pi,
es de bajo costo y su propósito fundamental es promover el
desarrollo en las ciencias de la computación. El diseño de la
tarjeta cuenta con un System-on-a-chip Broadcom
BCM2835, que contiene un procesador central (CPU)
ARM1176JZF-S a 700 MHz. Actualmente se encuentran en
el mercado dos tipos de esta tarjeta, el modelo A y el modelo
B, su diferencia; el modelo A solo tiene un puerto USB,
carece de puerto Ethernet y presenta menor capacidad en
memoria RAM (256 MB modelo A y 512 MB modelo B)
(ALEJANDRO, 2012).
Existen algunos desarrollos inspirados en este
algoritmo de encriptación, en ejemplo de ellos es CryptoHill,
desarrollado bajo la plataforma de Visual Studio 2008 y su
código está escrito en su totalidad en C#. Este programa tiene
la capacidad de calcular las matrices de diferente tamaño
según las necesidades del usuario, como única restricción
Trabajaremos en la aritmética modular acotada a
26, 28 y 29. Esto quiere decir que nuestro método
criptográfico nunca usará valores diferentes a los antes
citados. El alfabeto que usaremos estará formado por 26, 27
o 29 letras previamente definidas por el usuario, por ejemplo,
para utilizar la aritmética modular 26 se proponen los
siguientes caracteres: A, B, C, D, E, F, G, H, I, J, K, L, M,
N, O, P, Q, R, S, T, U, V, W, X, Y, Z, ver Tabla 1.
Letra
A
E
I
M
Q
U
Y
Cifrado
0
4
8
12
16
20
24
Letra
B
F
J
N
R
V
Z
Cifrado
1
5
9
13
17
21
25
Letra
C
G
K
O
S
W
Cifrado
2
6
10
14
18
22
Letra
D
H
L
P
T
X
Cifrado
3
7
11
15
19
23
Tabla 1 Alfabeto para aritmética modular 26.
No obstante el cifrado y descifrado del método de
encriptación Hill Cipher funciona si tomamos una aritmética
modular 28 o 29, agregando los caracteres faltantes para
completar la tabla de caracteres a utilizar, se pueden elegir
otras letras del alfabeto, signo, números, etc.
Para la realización de la encriptación de texto se
utiliza la siguiente fórmula matemática:
C = PK mod n




C = Equivale al texto encriptado.
P = Es el vector de texto a encriptar.
K = Es la llave para encriptar (sistema de n
ecuaciones lineales).
Mod n = Es la operación modular según
Euclides, y n es el número de símbolos totales,
los cuales conforman un alfabeto determinado.
Así mismo para la desencriptación del mensaje
generado se utiliza la siguiente fórmula
P = K-1C mod n

P = Es el texto desencriptado.
Memorias del “2do. Congreso Nacional de Tecnologías de la Información”, Universidad del SABES, San José Iturbide, Gto., México, 29 y 30
de Agosto del 2014.
1



K-1 = Es la llave inversa (transformación de la
original) para realizar las operaciones de
desencriptación.
C = Es el mensaje cifrado.
Mod n = Es la operación modular según
Euclides, y n es el número de símbolos totales,
los cuales conforman un alfabeto determinado.
Una restricción para que el método de encriptación
Hill Cipher funcione es que la matriz clave privada tenga
matriz inversa asociada. Esto, en aritmética modular, quiere
decir que:


El determinante de la matriz clave privada tiene
que ser distinto de cero.
El máximo común divisor entre el
determinante de la matriz clave privada y los
escalares 26, 28 ó 29 (aritméticas modulares
con la que podemos trabajar) tiene que ser igual
a 1.
8.
9.
Procedimiento del algoritmo para desencriptar:
1.
2.
3.
4.
Procedimiento del algoritmo para encriptar:
1.
2.
3.
4.
5.
6.
7.
Seleccionar la aritmética modular a utilizar (26,
27 ó 29).
Tener la clave privada que se va a utilizar para
encriptar, esta clave debe ser cuadrada, 2x2,
3x3, junto con su clave privada inversa.
Primero se traduce el texto plano en su
equivalente numérico, teniendo en cuenta que
el carácter A corresponde al número 0, el B al
1, el C al 2, etc.
Una vez obtenido el texto plano numérico, se
toma sus primeros n números, donde n es la
dimensión de la matriz clave privada K
(número de filas o columnas de la matriz), es
decir, el tamaño del bloque a cifrar.
Los n números obtenidos del paso anterior
conforman los elementos de un vector P
(bloques de 2 o 3 caracteres dependiendo la
aritmética modular utilizada) de una única
columna y n filas. Los elementos se colocan de
forma ordenada en el vector P.
Se realiza el producto de la matriz clave
privada K por el vector P, obteniéndose un
nuevo vector C de una única columna y n filas
(bloques de 2 o 3 caracteres).
Al valor de cada elemento del vector P se le
aplica modulo correspondiente (26, 28 o 29).
Se traduce cada elemento numérico del vector
C en su carácter equivalente, teniendo en
cuenta que el número 0 corresponde al carácter
A, el 1 al B, el 2 al C, etc.
Los caracteres obtenidos en el paso anterior
corresponden al texto cifrado. Si hay más texto
plano por cifrar, se comienza desde el paso 4
para volver a iterar con los siguientes n
números del texto plano.
5.
6.
7.
8.
Primero se calcula la matriz inversa K-1 de la
matriz clave privada K.
A continuación se traduce el texto cifrado en su
equivalente numérico, teniendo en cuenta que
el carácter A corresponde al número 0, el B al
1, el C al 2, etc.
Una vez obtenido el texto cifrado numérico, se
toma sus primeros n números, donde n es la
dimensión de la matriz clave privada K
(número de filas o columnas de la matriz), es
decir, el tamaño del bloque a descifrar.
Los n números obtenidos del paso anterior
conforman los elementos de un vector C de una
única columna y n filas. Los elementos se
colocan de forma ordenada en el vector C.
Se realiza el producto de la matriz K-1 por el
vector C, obteniéndose un nuevo vector P de
una única columna y n filas.
Al valor de cada elemento del vector P se le
aplica modulo correspondiente (26, 28 o 29).
Se traduce cada elemento numérico del vector
P en su carácter equivalente, teniendo en
cuenta que el número 0 corresponde al carácter
A, el 1 al B, el 2 al C, etc.
Los caracteres obtenidos en el paso anterior
corresponden al texto plano. Si queda texto
cifrado por descifrar, se comienza desde el
paso 3 para volver a iterar con los siguientes n
números del texto cifrado.
III. DESARROLLO
El programa desarrollado está implementado en el
entorno de desarrollo Python 2.7. Para ello se utiliza la
interfaz de programación de aplicaciones gráfica
denominada Tkinter, que está basada en la programación de
ventanas típicas de Windows usadas como formularios.
Memorias del “2do. Congreso Nacional de Tecnologías de la Información”, Universidad del SABES, San José Iturbide, Gto., México, 29 y 30
de Agosto del 2014.
1
Esta librería gráfica es parte de Python. Este
programa esta embebido en la memoria de una tarjeta
Raspberry Pi de características mencionadas en el apartado
de introducción, que es compilado y ejecutado para
comprobar el funcionamiento del algoritmo sobre esta tarjeta
de recursos limitados.
A continuación se muestran partes del código
desarrollado para el método criptográfico Hill Cipher en un
Sistema de Software Embebido usando una Tarjeta
Raspberry Pi para la ocultación de datos.
En la Figura 2, se muestra la clase principal del
programa, así como la importación de las librerías necesarias
para la correcta ejecución del programa.
Figura 3 Función de encriptación.
En la Figura 4, se muestra el código
correspondiente a la función llamada DencryptMessage, la
cual tiene como objetivo principal, desencriptar el mensaje
encriptado en base a la clave privada inversa seleccionada.
Figura 2 Clase Principal del programa.
Para la función de encriptación, se desarrolló una
función llamada EncryptMessage, la cual tiene como
objetivo implementar el algoritmo de encriptación basado en
el método de Hill Cipher, ver Figura 3.
Memorias del “2do. Congreso Nacional de Tecnologías de la Información”, Universidad del SABES, San José Iturbide, Gto., México, 29 y 30
de Agosto del 2014.
1

HOLAMUNDO.
Se puede observar en la Figura 5, la interfaz gráfica
correspondiente a la pantalla principal, donde se ingresa los
símbolos a utilizar según un alfabeto determinado, el
modulo, la llave privada, separando cada renglón de la
matriz por corchetes, la llave inversa de la misma forma, así
como parámetros que dictan el tamaño de la llave, para
culminar con el texto plano.
Figura 5 Pantalla principal de la aplicación.
Figura 4 Función de desencriptar.
IV. RESULTADOS
Primero se procede con la selección de la aritmética
modular a utilizar, una vez realizado esto, se definió la
simbología a utilizar para la encriptación y desencriptación
del mensaje, por ejemplo:





n = 26
Simbología = A, B, C, D, E, F, G, H, I, J, K, L, M,
N, O, P, Q, R, S, T, U, V, W, X, Y, Z
matriz K = [17,17,5],[21,18,21],[2,2,19]
matriz K-1 = [4,9,15],[15,17,6],[24,0,17]
mensaje = “Hola Mundo”
En base a los parámetros ingresados anteriormente,
se procedió a realizar la encriptación del mensaje,
obteniendo como resultado el siguiente texto en su forma
encriptada:

A continuación se presentan las capturas de pantalla
de cada uno de los módulos de encriptación. Se puede
apreciar en la parte superior de las Figuras siguientes, el
historial de uso del CPU, en cada una de ellas, se encierra en
un círculo de color azul el área donde se encripta y
desencripta el texto, por ejemplo: “UNIVERSIDAD
AUTONOMA DE QUERETARO”, así como el consumo de
memoria utilizado antes de iniciar cada función. Se puede
observar también el pico máximo generado durante la
ejecución de cada una de las funciones.
El sistema tarda aproximadamente 1.5 segundos en
realizar cada una de las funciones, se pudo observar que si
se ejecutaba el programa principal desde el IDLE de Python,
este consumía más recursos de procesamiento, razón por la
que se optó ejecutarlo desde la consola de Linux, para
enfocarse, de esta forma, en el consumo de CPU.
WGRSMOEXM
Posteriormente se realizó la desencriptación del
texto encriptado para descifrar el mensaje original,
obteniendo como resultado el mensaje original sin el carácter
espacio, ya que no está contemplado este carácter en la
simbología, y se obtuvo la siguiente cadena de texto:
Memorias del “2do. Congreso Nacional de Tecnologías de la Información”, Universidad del SABES, San José Iturbide, Gto., México, 29 y 30
de Agosto del 2014.
1
Figura 6 Módulo 26 matriz 3x3.
Figura 7 Módulo 26 matriz 2x2.
En la Figura 6 se muestra la prueba generada con
el módulo 26 utilizando una matriz de 3x3, el proceso de
encriptación utilizó un máximo de 16% del CPU, mientras
que para desencriptar utilizó un 21% del CPU, ambas
funciones tardaron menos de 2 segundos en generarse.
En la Figura 7, se muestra el mismo ejercicio
utilizando módulo 26 pero con una matriz de 2x2, se puede
apreciar que la rutina de encriptación y desencriptación
utilizaron un 19% del CPU, en esta prueba, el tiempo de
respuesta y la utilización del CPU fueron iguales.
La siguiente prueba fue realizar la encriptación del
mensaje:
“UNIVERSIDAD
AUTONOMA
DE
QUERETARO”, utilizando el módulo 28 con una llave de
3x3, se puede observar que la rutina de encriptación ocupo
un 16% del CPU y tardo 2 segundos en realizarse, mientras
que para la desencriptación ocupo 18% del CPU y un tiempo
menor de 2 segundos, ver Figura 8.
Figura 8 Módulo 28 en llave de tamaño 3x3.
Memorias del “2do. Congreso Nacional de Tecnologías de la Información”, Universidad del SABES, San José Iturbide, Gto., México, 29 y 30
de Agosto del 2014.
1
En la Figura 9 se muestra el mismo ejercicio
utilizando el módulo 28, pero con una matriz de 2x2, se
puede apreciar que la rutina de encriptación y
desencriptación ocuparon un 17% y 15% del CPU
respectivamente, en esta prueba el tiempo de respuesta fue
de 1.5 segundos para ambas rutinas.
Figura 10 Módulo 29 en llave de tamaño 3x3.
Finalmente en la Figura 11 se utilizó el módulo 29
con una matriz de 2x2, en ella se puede apreciar que para la
rutina de encriptación se consumió un 21% del CPU,
mientras que la función de desencriptación consumió un
14% del CPU, ambas con un tiempo de respuesta de 1.5
segundos.
Figura 9 Módulo 28 en llave de tamaño 2x2.
La siguiente prueba fue realizada utilizando el
módulo 29 con una matriz de 3x3 para el mismo mensaje
utilizado en las pruebas anteriores, ver Figura 10. Se puede
apreciar que la rutina de encriptación consumió un 19% del
CPU, mientras que la rutina correspondiente a la
desencriptación solamente consumió un 17% del CPU y de
la misma forma, el tiempo de respuesta aproximado fue de
1.5 segundos en ambas rutinas.
Figura 11 Módulo 29 en llave de tamaño 2x2.
V. CONCLUSIONES
Una vez realizadas las pruebas con el algoritmo de
encriptación Hill Cipher, y teniendo en cuenta que la tarjeta
Raspberry Pi aun con su limitación en procesamiento como
lo son sus 512 Mb en RAM y sus 700MHz en su núcleo,
obtuvimos resultados interesantes, la tarjeta Raspberry Pi
Memorias del “2do. Congreso Nacional de Tecnologías de la Información”, Universidad del SABES, San José Iturbide, Gto., México, 29 y 30
de Agosto del 2014.
1
mostró un desempeño óptimo durante la encriptación y
desencriptación de los diversos textos introducidos. Las
pruebas realizadas nos mostraron el potencial que tiene la
tarjeta aún con sus limitantes en procesamiento. Ha quedado
demostrado que los algoritmos de encriptación tales como el
Hill Cipher, pueden ser empleados en dispositivos
embebidos similares la Raspberry Pi, y pueden ser
empleados para aplicaciones más elaboradas enfocadas a
brindar un sistema de encriptación portable para sistemas
embebidos. También queda demostrado que las capacidades
de la tarjeta Raspberry Pi son necesarias para ejecutar estas
aplicaciones, las cuales tienen gran potencial para ser
utilizadas en diversas áreas de investigación.
En base a los resultados obtenidos en las diversas
pruebas realizadas, se concluye que el utilizar el módulo 28
con una matriz de 2x2 es el método más óptimo para realizar
estas funciones, ya que se comportó brindando el mejor
desempeño en cuanto a rendimiento del CPU y tiempo de
respuesta.
Una restricción importante a considerar al trabajar
en el entorno gráfico de la Raspberry Pi, es el uso de la
memoria, ya que al cargar el entorno gráfico sobrecargamos
aún más la memoria RAM, esto genera como consecuencias
un desempeño menos óptimo para la aplicación, es por ello
que se recomienda no utilizar gráficos en aplicaciones
embebidas, y realizar todo mediante la consola. Lo anterior
para obtener un mejor rendimiento en nuestro proceso y así
se puede utilizar de forma óptima el potencial de
procesamiento de la Raspberry Pi, dedicada simplemente a
la realización de los cálculos correspondientes.
Con este proyecto se buscó mostrar los alcances de
la tarjeta Raspberry Pi en conjunto con el lenguaje de
programación Python, para la implementación del algoritmo
de encriptación Hill Cipher, y así poner en práctica los
conocimientos adquiridos en el Álgebra Lineal y durante la
fases de Mantenimiento Pruebas y Especificaciones de
Software, específicamente en el software embebido y
obteniendo una correlación a nivel neuronal entre la teoría y
la práctica.
primera-parte/
[Último acceso: 2014 Marzo 27].
A, P. D. A. P., 2009. Sistemas Embebidos y
Sistemas Operativos Embebidos, Venezuela: Centro de
Investigación en Comunicación y Redes (CICORE).
Flores, P. S. d. J. C., 2014. Criptografía cuántica.
Seguridad Cultura de prevención para TI, 1(20), p. 28.
Hamissa, G. y otros, 2011. Development of secure
encoder-decoder for JPEG images. Cairo, IEEE Xplorer, pp.
260 - 266.
Rossum, G. v., 2009. El tutorial de Python. [En
línea]
Available
at:
http://docs.python.org.ar/tutorial/pdfs/TutorialPython2.pdf
[Último acceso: 19 Marzo 2014].
Stallings, W., 2011. Cryptography and network
security. Quinta edición ed. New York: Pearson.
The Raspberry Pi Foundation, 2006. What is a
Raspberry
Pi?.
[En
línea]
Available
at:
http://www.raspberrypi.org/faqs
[Último acceso: 20 Marzo 2014].
Universidad Nacional Autónoma de México
Facultad de Ingerniería, 2012. Fundamentos de
Criptografía.
[En
línea]
Available
at:
http://redyseguridad.fip.unam.mx/proyectos/criptografia/criptografia/index.php/1panorama-general/12-historia-de-la-criptografia
[Último acceso: 28 Marzo 2014].
Valeiras, D. G., 2011. CryptoHill. [En línea]
Available
at:
http://cryptohill.blogspot.mx/
[Último acceso: 31 Marzo 2014].
VI. REFERENCIAS
ALEJANDRO, A. D. J., 2012. Criptografía. FI.
UNAM.
[En
línea]
Available
at:
http://criptounam2012.blogspot.mx/2012/10/algoritmohill.html
[Último acceso: 20 Marzo 2014].
Amicelli, C., 2012. Criptografía. [En línea]
Available at: http://www.mkit.com.ar/blog/criptografiaMemorias del “2do. Congreso Nacional de Tecnologías de la Información”, Universidad del SABES, San José Iturbide, Gto., México, 29 y 30
de Agosto del 2014.
Descargar