Desde el Código Caesar a Enigma en Python [Criptografía]

Words
1010
Reading
5 min
Listen
Play
8y

Hace mucho tiempo cuando daba mis primeros pasos en la Programación existían 2 grandes Picos del Conocimiento que siempre he querido escalar, el primero es el de la Inteligencia Artificial, es algo que siempre he soñado trabajar en una empresa programando con otras personas que me ayuden a entender mas a fondo la IA, esto esta un poco lejos aun, pero es mi meta.

Ojo no es necesario tener Python instalado puede usar Python en Jupiter online siguiendo las recomendaciones de mi post anterior aquí.

Fuente de la imagen Principal

El segundo Pico que he querido escalar es el Pico de la Seguridad informática, específicamente en la Rama de la Criptografía, siempre he soñado con crear un código indescifrable por lo menos para la época o que tenga una manera que haga que el hombre deba intervenir para descifrarlo, es decir que la maquina aun con Inteligencia Artificial  no pueda Descifrar con la tecnología de la época.

Y bueno como saben soy un apasionado de las matemáticas y me apasionan los trucos matemáticos y las Progresiones Aritméticas, es por ello que he comenzado a ver la Aritmética convencional como una Piedra para el progreso de la Criptográfica, es decir si no pensamos de una manera diferente las maquinas en cálculos siempre nos llevaran ventaja en el campo de la Criptografía es por ello que en el código que he  creado como Enigma Moderno he trabajado con Rotores pero también he hecho que esto rotores no se basen en rotores estáticos si no mas bien en esta Progresión Aritmética en ella existen algunos secretos que no podemos descifrar a simple vista. 

¿¿Pero en que consiste Enigma??

¿En qué consistía la máquina Enigma? La máquina Enigma  era un dispositivo electromecánico, es decir, tenía una parte eléctrica y  otra mecánica.  El mecanismo consistía en una serie de teclas, con las  letras del  alfabeto, al igual que una máquina de escribir, que en  realidad eran  interruptores que accionaban los dispositivos eléctricos y  hacían mover  unos cilindros rotatorios. 

El funcionamiento, cara al  usuario, era bastante sencillo. El  operador tenía que teclear las letras  de su mensaje y anotar las letras  que devolvía la máquina (a través de  un alfabeto que se iba  iluminando). El código a usar se fijaba con las  posiciones de los  cilindros que constaban, cada uno, de 26 cables que se  conectaban al  teclado pero, con la particularidad, que el primer  cilindro giraba un  veintiseisavo de vuelta después de cada pulsación, de  tal manera que la  posición de las conexiones iba cambiando con cada  entrada del teclado,  obteniendo un cifrado polialfabético. Además, para   dar mayor robustez, el segundo cilindro solo daba un giro cuando el   primero había completado 26 giros y el tercero cuando el segundo había   dado sus correspondientes 26 y añadió la posibilidad de que los  rodillos  pudiesen ser intercambiados de posición, de manera que el  número de  posibilidades aumentase hasta tener 105.456 alfabetos.

Hasta Aquí la historia... Ahora algunas conjeturas interesantes:

Según la Historia de la Novela Criptonomicom que según es basada en muchos hechos reales, Enigma si existió y fue usado durante la segunda guerra mundial, recordemos que este libro ha sido prohibido en Estados Unidos, y bueno el código enigma fue un poco modificado luego y era indescifrable, según los aliados dicen que Enigma la pudieron descifrar gracias a que los Alemanes dejaban por ejemplo en todas sus cartas el nombre de Hitler en todos sus códigos y haciendo ingeniería inversa pudieron Descifrar los códigos con la tecnología de la época esto para mi es virtualmente imposible, pero en el Libro hablan de una Reunión de varias de las mentes mas Brillantes de las matemáticas y de la Criptografía en una de las islas cerca de Filipinas, donde decidieron unirse para acabar con la Guerra y decidieron juntar sus conocimientos para descifrar los Mensajes del EJE y así comenzó la destrucción del EJE. Te invito a leer el libro...

Bueno hoy quiero unir estos 2 mundos el de las progresiones aritméticas y el de la Criptografía con un código llamado Enigma Moderno, lo siento no soy muy bueno para los nombres :(

El Código puede ser mejorado, pero cuando lo estudiemos a profundidad le daremos algunos retoques, aquí el código:

#!/usr/bin/env python
# -*- coding: utf-8 -*
abc = 'abcdefghijklmnopqrstuvwxyz_'
def cifrar(cadena):
    text_cifrado = ''
    n = int(input( "Introduce el valor de n: "))
    rotor_dinamico = []
    while n != 1: # Aqui se revisa si n es diferente de 1
       if n%2 == 0: # Aqui se revisa si n sea par
            n = n/2 # Aqui se ejecuta la ecuacion en caso de que n sea par
            rotor_dinamico.append(n)
       else: # Aqui se revisa si n sea impar implicitamente es par o no lo es
            n = n*3+1 # Aqui se ejecuta la ecuacion en caso de que n sea impar
            rotor_dinamico.append(n)
    rotor_dinamico = rotor_dinamico*1000
    #print rotor_dinamico
    rotacion = 0 ### Esto es para llevar la secuencia de la lista del rotor
    for letra in cadena:
        clave = rotor_dinamico[rotacion]
        print(clave, type(clave), "CADENA",letra, "LETRA")
        suma = abc.find(letra) + clave
        rotacion += 1
        print(suma, "SUMA", rotacion, "rotacion")
        modulo = int(suma) % len(abc)
        print(modulo, "modulo")
        text_cifrado = text_cifrado + str(abc[modulo])
        print( text_cifrado, "text_cifrado")
        print(''*3)
    return text_cifrado
def main():
    c = str(input('cadena a cifrar: ')).lower()
    print(cifrar(c))
if __name__ == '__main__':
    main()

Podemos ver en la siguiente imagen la salida del Código con una linea para Cifrar y Descifrar:

La cadena a cifrar es "Entonces quien nos miente", el rotor usado es la progresión aritmética que vimos anteriormente, puede ser Pi o alguna otra progresión como el numero áureo o los números primos, en este caso solo debemos meter el numero que queremos usar, pero podríamos colocar el Rotor que el usuario quiera seleccionar.

Parte de la salida es esta:

La cadena Cifrada es esta:

ldozfzu_ypshrgjsd_dojldop

Para mi es interesante, ademas podemos agregar cuantos rotores queramos modificando un poco el código pueden también meter un texto completo para ser Encriptado, esto es todo por ahora espero lo disfruten.

Dios Bendiga a Venezuela

Espero sus impresiones del Código y su funcionamiento, Saludos...

Desde el Código Caesar a Enigma en Python [Criptografía] | Ecency