miércoles, 26 de junio de 2013

Tarea 1 Libreta de un sólo uso

En ésta actividad, nos encontramos con una implementación de un tipo de algoritmo de cifrado, llamado "libreta de un sólo uso", conocido en inglés como "One-time pad", el cual consiste en la creación de varias claves generadas aleatoriamente que son utilizadas para modificar un mensaje antes de ser enviado, de manera que al momento de que otra persona reciba el mensaje, ésta tenga una copia de la "libreta" y para descifrarla, utilice la misma clave pera obtener el mensaje original.

La ventaja principal de utilizar éste algoritmo, es que hace que aunque nuestro mensaje cifrado sea visible para personas distintas del emisor y receptor, éstas no puedan realizar ataques estadísticos, ni algún tipo de intuición para acercarse al mensaje original.

Al final se elimina la clave o claves utilizadas, para darle aún más seguridad a nuestro envío y recepción de mensajes.

Existen tres programas con sus respectivas funciones dentro del algoritmo.
El primero, se encarga de crear las claves y almacenarlas en la libreta y su copia.

El segundo, es el que pide el mensaje, lo encripta y lo envía.

El tercero, es el que obtiene el mensaje original, nuestro programa desencriptador.

En la implementación de éste algoritmo no se logró:
El desecho de claves o keys ya utilizados debido a un error de identación el cual no encontré explicación alguna.

Aquí muestro la función que tenía dentro de mi programa para eliminar la clave ya utilizada.

Después de correr varias veces el programa me dí cuenta que no siempre la encriptación y desencriptación arroja perfectos resultados, por lo tanto una solución sería que en lugar de que la clave tuviera valores desde 0, fuera desde 1, para que sí afecte a la hora de sumar o restar posiciones en los métodos de encriptación o su inversa.

El programa no se encuentra completamente validado, cuando existe la entrada de un número y se pide una cadena, es necesario volverlo a correr y viceversa cuando existe la entrada de una cadena y se pide un número, ésto se soluciona volviendo a pedir una entrada del usuario y no dejar avanzar al programa hasta que no se ingrese el tipo de dato que se necesita.

Aquí se muestra cómo se almacenan las claves en el texto:

Y aquí se muestra en qué orden se corren los programas y los resultados que arrojan.

[ramsmunoz@RamsMunoz Escritorio]$ python libreta.py
Cantidad de hojas en libreta: 10
Tamano de las claves en cada hoja: 12
[ramsmunoz@RamsMunoz Escritorio]$ python enviar.py
Ingrese el mensaje: hernandez
ifrqbodkq
[ramsmunoz@RamsMunoz Escritorio]$ python recibido.py
hernandeh
[ramsmunoz@RamsMunoz Escritorio]$ python enviar.py
Ingrese el mensaje: benito
cfnlup
[ramsmunoz@RamsMunoz Escritorio]$ python recibido.py
benito


Referencias:
Raúl González Duque "Python para todos" Fecha: -- URL: https://launchpadlibrarian.net/18980633/Python%20para%20todos.pdf

Autor: Banyut Título: "Python: Las listas" Fecha: sábado, 02 de agosto del 2008 URL: http://banyut.obolog.com/python-listas-115312

Autor: Javier Montero Título: "Python: Aprendiendo a leer" Fecha: 15/10/2012 URL: http://elclubdelautodidacta.es/wp/2012/10/python-aprendiendo-a-leer/