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

in #stem-espanol7 years ago

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...

Sort:  

Coincidimos en el amor por las matemáticas. No he leído el libro que mencionas, pero tuve la oportunidad de ver la película.Interesante el trabajo que haces, te felicito.

Película :O.... Ni sabia que existía, pero como siempre el libro puede ser mejor, Realmente fue uno de los primeros libros que leí fuera de la universidad y me emocionaba cada aventura de los protagonistas, por que es muy variado desde Randalf el matemático Criptografo, pasando por Shaftoe en la milicia, Tocando levemente vidas de Alan Turing y Enoch Root, hasta llegar a Randy años despues un Genio de la Programación, realmente este es uno de los libros que si eres Matemático o Informático debes leer mi pana...
Y pensar que lo compre por que estaba en Oferta jejeje
Saludos Amigo un placer verte por aquí

Wow tenia tiempo que no entraba a tu blog @sethroot pero como siempre excelente informacion bro. Saludos

Gracias mi hermano para mi un placer que te guste y verte de vuelta :D
Saludos @senteno77

Te doy la bienvenida a Steemit, @sethroot

Para ayudarte en la plataforma, he votado en este post y te estoy siguiendo 🙂.

En esta red existen varias iniciativas que te ayudarán a crecer. Puedes verlas presionando aquí

¡Te deseamos mucho éxito y que disfrutes estar por aquí!


Este bot fue creado por @moisesmcardona. Si este comentario te ha parecido útil, vótalo como Witness presionando aquí

vaya que raro que este Bot me ha votado :O

Muchas Gracias amigo...

@carloserp-2000

  • Si deseas obtener más información visita @steemstem

Ese más lleva tilde.
MÁS según la RAE: http://dle.rae.es/?id=OWErHxJ
MAS según la RAE: http://dle.rae.es/?id=OWE2P4C

Coin Marketplace

STEEM 0.16
TRX 0.17
JST 0.028
BTC 69086.63
ETH 2471.20
USDT 1.00
SBD 2.39