SlideShare una empresa de Scribd logo
1 de 4
Descargar para leer sin conexión

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
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.
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.
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

Más contenido relacionado

Similar a Implementación de Algoritmos Criptográficos y de Digestión de Mensajes

Osi manjarres larry 661399
Osi manjarres larry  661399Osi manjarres larry  661399
Osi manjarres larry 661399
Larry-97
 
5_unidad_v_ip_sec
  5_unidad_v_ip_sec  5_unidad_v_ip_sec
5_unidad_v_ip_sec
rakmak
 
Ipsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 ServerIpsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 Server
yecy cuno
 
Ipsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 ServerIpsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 Server
yecy cuno
 
Ipsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 ServerIpsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 Server
yecy cuno
 
Tema 2 - Introducción a la Criptografía
Tema 2 - Introducción a la CriptografíaTema 2 - Introducción a la Criptografía
Tema 2 - Introducción a la Criptografía
Daniel Pecos Martínez
 
Arquitectura multicapa
Arquitectura multicapaArquitectura multicapa
Arquitectura multicapa
Hugo Herrera
 
Interconexion de redes
Interconexion de redesInterconexion de redes
Interconexion de redes
Kary Gomez
 
Implicaciones de seguridad en la implantación de i pv6
Implicaciones de seguridad en la implantación de i pv6 Implicaciones de seguridad en la implantación de i pv6
Implicaciones de seguridad en la implantación de i pv6
Rommel Macas
 
Guia laboratorios no2-programacion_avanzada
Guia laboratorios no2-programacion_avanzadaGuia laboratorios no2-programacion_avanzada
Guia laboratorios no2-programacion_avanzada
haroldhicc
 

Similar a Implementación de Algoritmos Criptográficos y de Digestión de Mensajes (20)

Ipsec
IpsecIpsec
Ipsec
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring Insight
 
Osi manjarres larry 661399
Osi manjarres larry  661399Osi manjarres larry  661399
Osi manjarres larry 661399
 
Monografía IPSec, IPv6
Monografía IPSec, IPv6Monografía IPSec, IPv6
Monografía IPSec, IPv6
 
5_unidad_v_ip_sec
  5_unidad_v_ip_sec  5_unidad_v_ip_sec
5_unidad_v_ip_sec
 
Seguridad criptografia
Seguridad criptografiaSeguridad criptografia
Seguridad criptografia
 
Ipsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 ServerIpsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 Server
 
Ipsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 ServerIpsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 Server
 
Ipsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 ServerIpsec Y Certificados Digitales En Windows 2003 Server
Ipsec Y Certificados Digitales En Windows 2003 Server
 
Métodos de encriptación en las redes privadas virtuales
Métodos de encriptación en las redes privadas virtualesMétodos de encriptación en las redes privadas virtuales
Métodos de encriptación en las redes privadas virtuales
 
Métodos de encriptación en las redes privadas virtuales
Métodos de encriptación en las redes privadas virtualesMétodos de encriptación en las redes privadas virtuales
Métodos de encriptación en las redes privadas virtuales
 
Métodos de encriptación en las redes privadas virtuales
Métodos de encriptación en las redes privadas virtualesMétodos de encriptación en las redes privadas virtuales
Métodos de encriptación en las redes privadas virtuales
 
Tema 2 - Introducción a la Criptografía
Tema 2 - Introducción a la CriptografíaTema 2 - Introducción a la Criptografía
Tema 2 - Introducción a la Criptografía
 
Arquitectura multicapa
Arquitectura multicapaArquitectura multicapa
Arquitectura multicapa
 
Guia clases de_direcciones_ip
Guia clases de_direcciones_ipGuia clases de_direcciones_ip
Guia clases de_direcciones_ip
 
Encriptacion simetrica.pptx
Encriptacion simetrica.pptxEncriptacion simetrica.pptx
Encriptacion simetrica.pptx
 
Interconexion de redes
Interconexion de redesInterconexion de redes
Interconexion de redes
 
Creando un SCADA con Python y HTML5
Creando un SCADA con Python y HTML5Creando un SCADA con Python y HTML5
Creando un SCADA con Python y HTML5
 
Implicaciones de seguridad en la implantación de i pv6
Implicaciones de seguridad en la implantación de i pv6 Implicaciones de seguridad en la implantación de i pv6
Implicaciones de seguridad en la implantación de i pv6
 
Guia laboratorios no2-programacion_avanzada
Guia laboratorios no2-programacion_avanzadaGuia laboratorios no2-programacion_avanzada
Guia laboratorios no2-programacion_avanzada
 

Más de David Eliseo Martinez Castellanos

Más de David Eliseo Martinez Castellanos (16)

2015 en Desarrollo de Aplicaciones Móviles haciendo uso de Criptografía
2015 en Desarrollo de Aplicaciones Móviles haciendo uso de Criptografía2015 en Desarrollo de Aplicaciones Móviles haciendo uso de Criptografía
2015 en Desarrollo de Aplicaciones Móviles haciendo uso de Criptografía
 
2015 on Spatial Development (Personal Projects)
2015 on Spatial Development (Personal Projects)2015 on Spatial Development (Personal Projects)
2015 on Spatial Development (Personal Projects)
 
Taller Comparativo y Diseño de una Política de Seguridad de la Información
Taller Comparativo y Diseño de una Política de Seguridad de la InformaciónTaller Comparativo y Diseño de una Política de Seguridad de la Información
Taller Comparativo y Diseño de una Política de Seguridad de la Información
 
GIS Services development using CloudEO platform data and Tools
GIS Services development using CloudEO platform data and ToolsGIS Services development using CloudEO platform data and Tools
GIS Services development using CloudEO platform data and Tools
 
Air Quality Map
Air Quality MapAir Quality Map
Air Quality Map
 
Sistema de Control Escolar con Firma Digital de Calificaciones y Verificación...
Sistema de Control Escolar con Firma Digital de Calificaciones y Verificación...Sistema de Control Escolar con Firma Digital de Calificaciones y Verificación...
Sistema de Control Escolar con Firma Digital de Calificaciones y Verificación...
 
Diseño de herramienta de evaluación de la seguridad de la información y mapa ...
Diseño de herramienta de evaluación de la seguridad de la información y mapa ...Diseño de herramienta de evaluación de la seguridad de la información y mapa ...
Diseño de herramienta de evaluación de la seguridad de la información y mapa ...
 
My Showcase
My ShowcaseMy Showcase
My Showcase
 
CRITERIOS DE SEGURIDAD EN UNA EMPRESA DE SERVICIOS DE VENTAS REGIONALES DE ED...
CRITERIOS DE SEGURIDAD EN UNA EMPRESA DE SERVICIOS DE VENTAS REGIONALES DE ED...CRITERIOS DE SEGURIDAD EN UNA EMPRESA DE SERVICIOS DE VENTAS REGIONALES DE ED...
CRITERIOS DE SEGURIDAD EN UNA EMPRESA DE SERVICIOS DE VENTAS REGIONALES DE ED...
 
Monitoreo VSM - Apache Cordova Development
Monitoreo VSM - Apache Cordova DevelopmentMonitoreo VSM - Apache Cordova Development
Monitoreo VSM - Apache Cordova Development
 
Alertas @MARN.SV V2.0 Android App
Alertas @MARN.SV V2.0 Android AppAlertas @MARN.SV V2.0 Android App
Alertas @MARN.SV V2.0 Android App
 
ArcGIS Add-in Development In Python and C# for LIDAR Product Quality Control
ArcGIS Add-in Development In Python and C# for LIDAR Product Quality ControlArcGIS Add-in Development In Python and C# for LIDAR Product Quality Control
ArcGIS Add-in Development In Python and C# for LIDAR Product Quality Control
 
Desarrollo de la Estación de Trabajo para el Monitoreo Ambiental y Monitoreo ...
Desarrollo de la Estación de Trabajo para el Monitoreo Ambiental y Monitoreo ...Desarrollo de la Estación de Trabajo para el Monitoreo Ambiental y Monitoreo ...
Desarrollo de la Estación de Trabajo para el Monitoreo Ambiental y Monitoreo ...
 
Towards A Drought Monitoring System for El Salvador
Towards A Drought Monitoring System for El SalvadorTowards A Drought Monitoring System for El Salvador
Towards A Drought Monitoring System for El Salvador
 
Weather Hazard Mobile Application
Weather Hazard Mobile ApplicationWeather Hazard Mobile Application
Weather Hazard Mobile Application
 
MARN Experience on the Development of Notification & Alert Systems
MARN Experience on the Development of Notification & Alert SystemsMARN Experience on the Development of Notification & Alert Systems
MARN Experience on the Development of Notification & Alert Systems
 

Implementación de Algoritmos Criptográficos y de Digestión de Mensajes

  • 1.  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
  • 2. 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.
  • 3. 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.
  • 4. 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