Trabajo de Fin de Grado. Doble Grado en Ingeniería Informática y Matemáticas. Universidad de Granada
Realizado por Paula Villanueva Núñez y tutorizado por Gabriel Navarro Garulo.
El objetivo principal de este trabajo se basa en emplear algoritmos genéticos para realizar un análisis del criptosistema de McEliece clásico. En consecuencia, haremos uso de las técnicas y áreas de las matemáticas, tales como los cuerpos finitos, los anillos de polinomios sobre cuerpos finitos y la complejidad de los problemas y de los algoritmos. En cuanto a las herramientas informáticas, hablaremos de las metaheurísticas basadas en poblaciones, en concreto los algoritmos genéticos. A lo largo del desarrollo de este trabajo, ilustraremos en los ejemplos las implementaciones realizadas en el sistema algebraico computacional SageMath.
El contenido de este trabajo comienza con un capítulo dedicado a describir y desarrollar las herramientas matemáticas e informáticas que necesitaremos para facilitar el seguimiento del posterior desarrollo. Estudiaremos los conceptos básicos relacionados con la teoría de códigos lineales, que nos permitirá introducir las bases para que en el siguiente capítulo podamos desarrollar los códigos de Goppa. A partir de estos códigos, podremos construir el criptosistema de McEliece clásico y emplear los algoritmos genéticos para concluir con su respectivo análisis.
- Estudiar la teoría básica de códigos lineales.
- Estudiar los códigos de Goppa y su decodificación.
- Estudiar la criptografía basada en códigos como modelo de criptografía post-cuántica.
- Estudiar e implementar el criptosistema de McEliece.
- Estudiar e implementar algoritmos evolutivos para el cálculo de la distancia de un código lineal.
- Estudiar el criptoanálisis del criptosistema de McEliece mediante algoritmos evolutivos.
Para generar la memoria se debe descargar el repositorio y usar la herramienta make
dentro de la carpeta documentation
. También se puede descargar directamente desde aquí.
El código implementado se encuentra en la carpeta src
. Para usar el código desarrollado primero se debe cargar cada fichero .sage
con la función load()
de SageMath.