implementación de algoritmos criptográficos y de digestión de mensajes

4
ResumenEl presente reporte cubre la investigación e implementación de dos algoritmos criptográficos y uno de digestión de mensajes para ser utilizados en un prototipo de Sistema de cómputo que permite realizar la firma digital de calificaciones de estudiantes por parte del docente encargado de una asignatura y la posterior verificación de la calificación por parte de los estudiantes de dicha asignatura desde sus dispositivos móviles Android, con el propósito de profundizar en el conocimiento y requerimientos de dichos algoritmos. Este documento asume conocimiento del prototipo original del sistema. Palabras ClaveAndroid, Infraestructura de llave pública, Java, RSA, Seguridad. I. INTRODUCCION El presente proyecto fue desarrollado con el propósito de profundizar en el conocimiento de los algoritmos de cifrado y digestión de mensajes utilizados en la versión 1 del proyecto. Originalmente el prototipo se creó utilizando la librería Bouncy Castle como proveedor de servicios criptográficos para el prototipo, en esta versión, se codificaron los algoritmos a partir de las especificaciones FIPS correspondientes y en el caso de RSA a partir del pseudocódigo del algoritmo y de los diferentes algoritmos necesarios para calcular los pasos del algoritmo RSA. La arquitectura del proyecto cambia con respecto al prototipo original debido a que se suprime la funcionalidad de OpenSSL. Para el funcionamiento del prototipo se tienen 3 módulos: Una aplicación Java Swing para la generación de la llave privada del docente y almacenamiento de la llave pública en una ubicación accesible. De momento se deja de lado la noción de certificación de la llave pública. Una aplicación móvil Android (compatible con API 14 o superior) que permite la consulta y verificación de la firma digital de las notas por parte de los estudiantes. Un conjunto de APIs Web que permiten el acceso tanto de la aplicación swing y Android a los datos. II. OBJETIVO DEL PROYECTO Implementar el algoritmo AES-128, RSA y SHA256 para utilizarlos en el prototipo de sistema de firma digital de calificaciones. III. ALCANCES Y LIMITACIONES A. Alcances: Se mantendrá la funcionalidad de firma digital del prototipo solamente sustituyendo los servicios criptográficos de Java anteriormente utilizados. . B. Limitaciones: El formato de almacenamiento de las llaves RSA no será implementando el estándar PKCS1. IV. ARQUITECTURA Y DISEÑO DEL PROTOTIPO La figura 1. Muestra la arquitectura del prototipo desarrollado. La comunicación entre los componentes se hace por medio de unas APIs simples desarrolladas en PHP. Figura 1. Arquitectura del Sistema Desarrollado La implementación de la base de datos y de las APIs de comunicación se hizo en una instancia de Google Cloud Compute Engine, esta instancia ejecuta Linux Ubuntu 14, Apache Web Server y PostgreSQL 9.3. Implementación de Algoritmos Criptográficos y de Digestión de Mensajes para un Sistema de Control Escolar con Firma Digital de Calificaciones y Verificación de Firma Digital desde dispositivos Móviles David E. Martínez

Upload: david-eliseo-martinez-castellanos

Post on 07-Aug-2015

78 views

Category:

Software


5 download

TRANSCRIPT

Page 1: Implementación de Algoritmos Criptográficos y de Digestión de Mensajes

Resumen— El presente reporte cubre la investigación e

implementación de dos algoritmos criptográficos y uno de

digestión de mensajes para ser utilizados en un prototipo de

Sistema de cómputo que permite realizar la firma digital de

calificaciones de estudiantes por parte del docente encargado de

una asignatura y la posterior verificación de la calificación por

parte de los estudiantes de dicha asignatura desde sus dispositivos

móviles Android, con el propósito de profundizar en el

conocimiento y requerimientos de dichos algoritmos. Este

documento asume conocimiento del prototipo original del sistema.

Palabras Clave— Android, Infraestructura de llave pública,

Java, RSA, Seguridad.

I. INTRODUCCION

El presente proyecto fue desarrollado con el propósito de

profundizar en el conocimiento de los algoritmos de cifrado y

digestión de mensajes utilizados en la versión 1 del proyecto.

Originalmente el prototipo se creó utilizando la librería Bouncy

Castle como proveedor de servicios criptográficos para el

prototipo, en esta versión, se codificaron los algoritmos a partir

de las especificaciones FIPS correspondientes y en el caso de

RSA a partir del pseudocódigo del algoritmo y de los diferentes

algoritmos necesarios para calcular los pasos del algoritmo

RSA.

La arquitectura del proyecto cambia con respecto al prototipo

original debido a que se suprime la funcionalidad de OpenSSL.

Para el funcionamiento del prototipo se tienen 3 módulos:

Una aplicación Java Swing para la generación de la llave

privada del docente y almacenamiento de la llave

pública en una ubicación accesible. De momento se deja

de lado la noción de certificación de la llave pública.

Una aplicación móvil Android (compatible con API 14

o superior) que permite la consulta y verificación de la

firma digital de las notas por parte de los estudiantes.

Un conjunto de APIs Web que permiten el acceso tanto

de la aplicación swing y Android a los datos.

II. OBJETIVO DEL PROYECTO

Implementar el algoritmo AES-128, RSA y SHA256 para

utilizarlos en el prototipo de sistema de firma digital de

calificaciones.

III. ALCANCES Y LIMITACIONES

A. Alcances:

Se mantendrá la funcionalidad de firma digital del

prototipo solamente sustituyendo los servicios

criptográficos de Java anteriormente utilizados.

.

B. Limitaciones:

El formato de almacenamiento de las llaves RSA no

será implementando el estándar PKCS1.

IV. ARQUITECTURA Y DISEÑO DEL PROTOTIPO

La figura 1. Muestra la arquitectura del prototipo

desarrollado. La comunicación entre los componentes se

hace por medio de unas APIs simples desarrolladas en PHP.

Figura 1. Arquitectura del Sistema Desarrollado

La implementación de la base de datos y de las APIs de

comunicación se hizo en una instancia de Google Cloud

Compute Engine, esta instancia ejecuta Linux Ubuntu 14,

Apache Web Server y PostgreSQL 9.3.

Implementación de Algoritmos Criptográficos y de

Digestión de Mensajes para un Sistema de Control

Escolar con Firma Digital de Calificaciones y Verificación

de Firma Digital desde dispositivos Móviles

David E. Martínez

Page 2: Implementación de Algoritmos Criptográficos y de Digestión de Mensajes

V. CONCEPTOS

RSA

RSA es uno de los primeros criptosistemas de llave pública y es

ampliamente utilizado en la transmisión segura de datos. Este

sistema se basa en la dificultad práctica de descomponer en

factores el producto de dos números primos grandes. Trabajar

con RSA implica el manejo y operación de números enteros

arbitrariamente grandes, generación de números enteros primos

arbitrariamente grandes, operaciones matemáticas en aritmética

modular entre otros.

SHA256

Sha256 es un algoritmo de seguridad parte de una familia de

algoritmos de seguridad descritos en la especificación FIPS180-

2. SHA256 es un algoritmo iterativo, es una función picadillo

de solo ida capaz de procesar un mensaje para producir una

forma condensada llamada digesto. Los cuatro algoritmos SHA

difieren en los bits de seguridad, el tamaño de los bloques de

mensaje y las palabras de datos que utilizan durante la digestión

de los mensajes.

AES

Estándar de Cifrado Avanzado en español, es la especificación

para el cifrado de datos electrónicos establecido por el Instituto

Nacional de Estándares de los Estados Unidos. AES está basado

en el algoritmo de cifrado Rijndael y se encuentra especificado

en la publicación FIPS197. El algoritmo Rijndael fue

originalmente diseñado para trabajar con varias longitudes de

llaves de cifrado pero el estándar contempla 3, las cuales son

128, 192 y 256. AES (Rijndael) es un algoritmo de llave

simétrica. AES se basa en las propiedades matemáticas del

campo Galois 28.

Bits de seguridad:

Los bits de seguridad vienen dados por el espacio de llaves o la

dificultad de realizar determinadas operaciones matemáticas

como la descomposición en factores. La tabla 1 muestra una

comparación de algoritmos de llave simétrica, RSA de

diferentes longitudes y las funciones SHA.

Tabla 1. Comparación de algoritmos en términos de bits de

seguridad.

VI. IMPLEMENTACION DE LOS ALGORITMOS Y PRUEBAS

Considerando la tabla anterior de bits de seguridad decidí

implementar RSA-3072, para que los 3 algoritmos

implementados tuvieran 128 bits de seguridad. Es necesario

mencionar que este es un trabajo que requeriría revisión pues

algunos detalles de implementación podrían reducir la

seguridad del sistema en general, pero es parte del proceso de

aprendizaje.

Implementación del Algoritmo RSA

Para la implementación del algoritmo RSA se comenzó por la

implementación de las estructuras de almacenamiento de

números grandes y los algoritmos necesarios para proporcionar

la funcionalidad de operaciones matemáticas sobre dichas

estructuras, dicha implementación se basó en la publicación

“Large Integer Case Study in C++ for AP Computer Science”.

La librería generada no es precisamente una implementación

eficiente del almacenamiento de enteros grandes ni se han

incorporado los algoritmos más eficientes para algunas

operaciones, el propósito de esta librería es didáctico. En

algunos casos se tuvo dificultad en la implementación de las

operaciones o durante el proceso de pruebas se encontró

dificultad en la depuración de dichas operaciones por lo que se

implementó una conversión de tipo entre la librería creada y la

clase BigInteger de java.Math, este proceso de conversión le

resta eficiencia a la librería pero es funcional.

Los métodos implementados de forma nativa son: suma,

multiplicación, creación de enteros grandes (reserva de

almacenamiento, inverso multiplicativo modular (algoritmo

extendido de Euclides), prueba de primalidad (Miller-Rabin) y

a partir de esta prueba, generación de números primos.

Métodos implementados por medio de conversión de tipo:

división, substracción (implementación nativa no producía los

resultados correctos), exponenciación modular, máximo común

divisor, residuo.

Para la creación de números aleatorios se utilizó

Java.Security.SecureRandom, pero según la investigación

realizada, el generador de números aleatorios seguros es uno de

los pilares fundamentales de la seguridad del algoritmo por lo

que es un tema de investigación pendiente (profundizar e

implementar)

La ejecución de la generación de parámetros RSA toma

relativamente poco tiempo considerando la longitud de los

números y que la librería creada no posee optimizaciones.

SHA256

Para la implementación de SHA256 se siguió la especificación

FIPS180-2 y las pruebas se realizaron en base al hash de prueba

que aparece en dicho documento. No se tuvieron dificultades en

la implementación de este algoritmo hasta que se realizó la

integración al prototipo. Esto se describe en la sección

siguiente.

AES

La implementación del algoritmo Rijndael se hizo en base a la

especificación FIPS197, se implementó para funcionar con

llaves de 120 bits exclusivamente, es decir, no posee la

parametrización para funcionar con llaves de otras longitudes.

Para cifrar con AES se implementó el modo de operación ECB

por simplicidad. Durante las pruebas fue evidente la necesidad

de implementar otro modo de operación, pues en una prueba

cambiando un carácter se observó la independencia entre los

bloques cifrados. La figura 2 muestra una captura de pantalla

de las pruebas de cifrado y descifrado con AES.

Page 3: Implementación de Algoritmos Criptográficos y de Digestión de Mensajes

Figura 2. Cambio en un carácter solo se ve reflejado en el

bloque que lo contiene.

Pruebas en el dispositivo Android

Uno de mis mayores puntos de interés era probar el

funcionamiento y rendimiento de los 3 algoritmos

implementados en el dispositivo Android. Tanto SHA256 y

AES ejecutaron sin problemas en poco tiempo, la ejecución de

la generación de parámetros RSA-3072 tomó más tiempo pero

el programa ejecutó, generó los parámetros y realizó la

operación de cifrado y descifrado. Este resultado me pareció

interesante para mencionarlo en este reporte. La figura 3

muestra la captura de pantalla de dicha prueba.

Figura 3. Ejecución de los algoritmos en un celular Android.

Se observa el trabajo del Garbage Collector de Android y el

resultado de cifrar un número pequeño utilizando los

parámetros generados en ese momento.

VII. INTEGRACIÓN DE LOS ALGORITMOS AL PROTOTIPO 1

Para la integración al prototipo, se hicieron varios cambios que

pareciera le restaron funcionalidad con respecto al prototipo

original, sin embargo con trabajo adicional e investigación se

puede alcanzar y mejorar la funcionalidad original.

Se cambió el gestor de bases de datos de MySQL a PostgreSQL,

también las estructuras de las tablas cambiaron con respecto al

prototipo original y los tipos de datos.

La funcionalidad de login se suprimió y el programa ejecuta con

parámetros fijos para el docente y estudiante, pues el

mecanismo de login se espera rediseñar.

Igual que el prototipo 1, una aplicación swing permite la

generación de parámetros RSA y su almacenamiento. La llave

privada se almacena en el disco local y se cifra con AES y la

llave pública se almacena en la base de datos, en el registro del

docente. Para la generación de la llave AES se utilizó SHA256,

solicitando una contraseña al usuario, la cual se ingresa a

SHA256, el hash obtenido se ingresa nuevamente a SHA256 y

luego se hace un XOR entre el byte 1 y el 16 para obtener una

llave de 128 bits.

Durante la prueba de firma digital de calificaciones y

verificación de la firma en el dispositivo Android encontré un

problema en mi implementación de SHA256 en que luego de

una ejecución de SHA256 no se inicializaba nuevamente el

hash inicial (H0) para ejecuciones posteriores.

Las figuras 4 y 5 muestran la aplicación swing y la aplicación

Android en ejecución.

Figura 4. Aplicación Java Swing. Generación de llaves RSA y

Firma Digital de Calificaciones.

Figura 5. Verificación de Firma Digital en Android.

Page 4: Implementación de Algoritmos Criptográficos y de Digestión de Mensajes

La firma digital se almacena y se representa como una cadena

de texto de la representación hexadecimal. En el prototipo 1 se

utilizó la cadena en codificación base 64.

VIII. CONCLUSIONES

Conocer e implementar estos algoritmos fue sumamente

interesante. Luego de estudiar estos algoritmos puedo decir que

el esfuerzo valió la pena, uno queda invitado a estudiar más

sobre el tema.

El desarrollo actual permite pasar a otros puntos de interés, por

ejemplo implementar confidencialidad en la base de datos,

ahora que ya se encuentra en la nube.

IX. BIBLIOGRAFÍA

Large Integer Case Study in C++ for AP Computer Science

http://apcentral.collegeboard.com/apc/public/repository/ap01.p

df.lr_7928.pdf

RSA (cryptosystem)

http://en.wikipedia.org/wiki/RSA_%28cryptosystem%29

FIPS180-2 Secure Hash Algorithms

http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

FIPS197 Advanced Encription Standar

http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf