Desde el Código Caesar a Enigma en Python [Criptografía]
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í.
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...
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
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