Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Docente:
Garro Morey, Arturo Eduardo
Alumnos:
Taza Rodriguez Jose Armando 20194138H
Melo Bueno Alvaro Martin 20180369B
Tica Mendoza Luis Ruben
2023
Universidad Nacional de Ingeniería
Facultad de Ingeniería Eléctrica y Electrónica
“CRIPTOGRAFÍA CLÁSICA”
CRIPTOANALISIS
(Ciclo académico 2023-2)
1. Inicios del criptoanálisis
El criptoanálisis, o el estudio de técnicas para romper códigos y sistemas de cifrado, tiene sus
orígenes en la antigüedad, pero ha evolucionado significativamente a lo largo de la historia en función
de las tecnologías y métodos disponibles. Aquí te proporciono una breve visión general de los inicios
del criptoanálisis:
Antigüedad:
- Desde tiempos antiguos, las civilizaciones han utilizado métodos de cifrado para
proteger la confidencialidad de la información. Algunos de los primeros métodos de
cifrado incluyeron la sustitución de letras o símbolos por otros, como el cifrado César
utilizado por Julio César.
A. EL ATBASH
El cifrado Atbash es un tipo de cifrado simple y antiguo que se basa en una sustitución alfabética.
Es uno de los cifrados más básicos y se atribuye a la antigua civilización hebrea. Este cifrado se
utiliza para reemplazar cada letra del alfabeto por su correspondiente simétrica en el otro extremo del
alfabeto. Es decir, la primera letra se reemplaza por la última, la segunda por la penúltima, y así
sucesivamente.
Por ejemplo:
El nombre "Atbash" proviene de las primeras y últimas letras del alfabeto hebreo, que son "Aleph"
y "Tav" respectivamente. Este cifrado era comúnmente utilizado en textos hebreos antiguos. Sin
embargo, hoy en día, debido a su simplicidad, el cifrado Atbash no se considera seguro y no se utiliza
para aplicaciones modernas de cifrado.
CODIGO EN PYHTON:
def atbash_cifrado(texto):
alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
cifrado = ""
return cifrado
# Ejemplo de uso
texto_original = "HOLA MUNDO"
texto_cifrado = atbash_cifrado(texto_original)
print("Texto original:", texto_original)
print("Texto cifrado:", texto_cifrado)
B. LA ESCÍTALA
La Escítala (del griego antiguo: σκυτάλη, skytálē) era un dispositivo de cifrado utilizado en la antigua
Grecia por los espartanos para garantizar la seguridad de sus comunicaciones. Este sistema de cifrado
se basaba en la transposición, reorganizando las letras de un mensaje de manera específica para que
solo aquellos que conocieran el método pudieran descifrarlo.
El procedimiento implicaba el uso de dos varas de igual grosor que se proporcionaban a los
participantes en la comunicación. Para enviar un mensaje, se enrollaba una cinta de cuero en espiral
alrededor de una de las varas y se escribía el mensaje en sentido longitudinal. Una vez escrito, se
desenrollaba la cinta y se enviaba al destinatario. Este último solo tenía que enrollarla en la vara
gemela para poder leer el mensaje original.
Este método de cifrado resultaba efectivo porque, sin el conocimiento del diámetro correcto del
cilindro, el mensaje cifrado parecía un conjunto de letras sin sentido. Los espartanos confiaban en la
Escítala para mantener la confidencialidad de sus comunicaciones militares y estratégicas.
Es relevante destacar que la Escítala era uno de varios métodos de cifrado utilizados en la antigüedad
y, aunque no era particularmente sofisticada en comparación con sistemas modernos de cifrado,
desempeñó un papel importante en la seguridad de la comunicación en su época.
Antecedente histórico:
El disco de Alberti, también conocido como "cifrario", fue un invento revolucionario en el campo de
la criptografía. Aquí te proporciono más detalles sobre su funcionamiento y su relevancia histórica:
Cómo Funciona:
- El disco de Alberti consta de dos discos, cada uno con una serie de letras del alfabeto en su
circunferencia. Los discos se pueden girar independientemente, permitiendo alinear diferentes
letras en la parte superior de los discos. Para codificar un mensaje, el emisor selecciona una letra
en el disco exterior y la letra correspondiente en el disco interior. Esto crea un par de letras que
representan la sustitución de una letra por otra en el mensaje original. El receptor del mensaje
necesita conocer la posición inicial de los discos y las letras seleccionadas para descifrar el
mensaje.
Relevancia Histórica:
- El disco de Alberti fue uno de los primeros ejemplos de cifrado polialfabético, que utiliza
múltiples alfabetos para codificar un mensaje. Esta técnica complicaba enormemente el trabajo
de los criptoanalistas que intentaban descifrar los mensajes. La idea de usar discos giratorios y
cambiar las sustituciones de letras fue fundamental para el desarrollo de métodos de cifrado más
avanzados en siglos posteriores.
Aunque el disco de Alberti no fue ampliamente utilizado en su época, sentó las bases para el
desarrollo posterior de máquinas más complejas de cifrado rotatorio, como la famosa máquina
Enigma utilizada durante la Segunda Guerra Mundial. La Enigma y otros dispositivos criptográficos
avanzados se inspiraron en gran medida en el concepto de rotación y sustitución de letras introducido
por Alberti.
- León Battista Alberti fue un humanista renombrado y un verdadero genio de su época. Además de
su trabajo en criptografía, también se destacó en campos como la arquitectura, las matemáticas y
la filosofía. Su interés por la codificación y el ocultamiento de información refleja su profundo
conocimiento y curiosidad por diversos campos del conocimiento. En resumen, el disco de Alberti
fue un dispositivo criptográfico pionero que dejó una huella indeleble en la historia de la
criptografía. Su diseño ingenioso y su enfoque en la seguridad de los mensajes secretos allanaron
el camino para futuras innovaciones en el campo de la criptografía.
D. El disco de Wheatstone
El disco de Wheatstone es un dispositivo de cifrado histórico que utiliza el alfabeto inglés junto con
un espacio en blanco para cifrar mensajes. Su enfoque es similar al del disco de Alberti, pero con la
particularidad de que las letras en el disco interior están dispuestas de manera aleatoria, lo que
aumenta la complejidad del cifrado.
Historia y Contexto:
- El disco de Wheatstone fue inventado por Sir Charles Wheatstone, un destacado científico
británico del siglo XIX, conocido por sus contribuciones en áreas como la electricidad y la
óptica.
Este dispositivo de cifrado fue creado en la primera mitad del siglo XIX, en una época en la
que la criptografía estaba cobrando relevancia debido a la necesidad de comunicaciones
seguras, especialmente en el contexto militar y diplomático.
Funcionamiento:
- El disco de Wheatstone consta de dos discos, uno interior y otro exterior, similares a los del
disco de Alberti.
En el disco exterior, se encuentran las letras del alfabeto inglés, mientras que, en el disco
interior, las letras están dispuestas de manera aleatoria y fijas en su posición.
Las agujas de los discos están engranadas de forma que cuando la externa gira 27 posiciones
en sentido del reloj, la interna lo hace 26.
Para cifrar un mensaje, el usuario selecciona una letra en el disco exterior y una letra
correspondiente en el disco interior, alineando así las dos letras.
El espacio en blanco entre las letras en el disco exterior se utiliza para separar palabras en el
mensaje cifrado y se busca al finalizar una palabra en el texto en claro. Esto requiere dar un
giro completo de la aguja mayor al encontrar el espacio en blanco.
Además, si aparecen letras repetidas en el mensaje, se debe dar una vuelta completa al
buscar la segunda letra repetida, lo que añade un nivel adicional de complejidad al cifrado.
Estas condiciones específicas agregan una capa adicional de seguridad al sistema de cifrado,
lo que lo hace más resistente a los ataques criptoanalíticos.
Relevancia Histórica:
E. El cifrado de Cesar
En criptografía, el cifrado César, también conocido como cifrado por desplazamiento, código de
César o desplazamiento de César, es una de las técnicas de cifrado más simples y más usadas. Es un
tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra
que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un
desplazamiento de 3, la A sería sustituida por la D (situada 3 lugares a la derecha de la A), la B sería
reemplazada por la E, etc. Este método debe su nombre a Julio César, que lo usaba para comunicarse
con sus generales.
El cifrado César muchas veces puede formar parte de sistemas más complejos de codificación,
como el cifrado Vigenère, e incluso tiene aplicación en el sistema ROT13. Como todos los cifrados
de sustitución alfabética simple, el cifrado César se descifra con facilidad y en la práctica no ofrece
mucha seguridad en la comunicación.
CODIGO EN PYTHON
def main():
# Texto cifrado y número de posiciones a retroceder (clave)
ciphertext = "FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA"
shift = 3
if __name__ == "__main__":
main()
F. El cifrado de Vigenère
El cifrado de Vigenère es un cifrado basado en diferentes series de caracteres o letras del cifrado
César formando estos caracteres una tabla, llamada tabla de Vigenère, que se usa como clave. El
cifrado de Vigenère es un cifrado por sustitución simple polialfabético.
El cifrado de Vigenère se ha reinventado muchas veces. El método original fue descrito por Giovan
Battista Belasso en su libro de 1553 La cifra del Sig. Giovan Battista Belasso. Sin embargo, fue
incorrectamente atribuido más tarde a Blaise de Vigenère, concretamente en el siglo XIX, y por ello
aún se le conoce como el "cifrado de Vigenère".
Este cifrado es conocido porque es fácil de entender e implementar, además parece irresoluble; esto
le hizo valedor del apodo el código indescifrable (le chiffre indéchiffrable, en francés).
G. El cifrado de Hill
En criptografía clásica, el Cifrado Hill es un cifrado de sustitución poligráfica basado en el álgebra
lineal. Inventado por Lester S. Hill en 1929, fue el primer cifrado poligráfico que era práctico para
operar sobre más de tres símbolos inmediatamente
Siendo la fórmula matemática:
C=( K ⋅ M ) Mod | A|
H. Cifrado de Playfair
El cifrado de Playfair es un método manual de criptografía simétrica por medio de sustitución. El sistema de
cifrado toma pares de letras, o digramas, y las cambia mediante una tabla generada por una clave.
El cifrado de Playfair fue el primer sistema de cifrado en encriptar pares de letras. Wheatstone inventó el
cifrado para encriptar mensajes enviados por telegrama, pero lleva el nombre de su amigo lord Playfair,
quien lo promovió para uso militar.
En esta sustitución digrámica, la clave viene dada por una tabla de 5x5 caracteres (sin las letras J ni Ñ). Para
empezar, colocamos en la primera fila de la matriz la palabra clave sin letras repetidas.
Ejemplo:
Clave: NORIA
Matriz de cifrado resultante:
Código en Python:
def posicion(a,b):
pos="00";
for i in range(5):
for j in range(5):
if ord(a[i][j])==ord(b):
pos=str(i)+""+str(j);
return pos;
def construir_matriz(charar,Clave):
Abecedario = "ABCDEFGHIKLMNOPQRSTUVWXYZ";
# Generar Matriz
cont = 0
cont2 = 0
print("La clave es: ", Clave)
for i in range(5):
for j in range(5):
while True:
if cont < len(Clave):
if not verifica(charar, Clave[cont]):
charar[i][j] = Clave[cont];
cont = cont + 1;
break
else:
cont = cont + 1;
else:
while True:
if cont2 < len(Abecedario):
if not verifica(charar, Abecedario[cont2]):
charar[i][j] = Abecedario[cont2];
cont2 = cont2 + 1;
break
else:
cont2 = cont2 + 1;
break;
print("Resultado de Matriz");
for i in range(5):
for j in range(5):
if charar[i][j] == b'I':
print('I/J', " ", end='')
else:
print(charar[i][j].decode(), "\t", end='')
print("");
print("\n")
return charar
pares=np.chararray(((math.ceil(len(Texto)/2))+1,2));
pares[:]='X';
cont=0;
for i in range (math.ceil(len(Texto)/2)+1):
for j in range(2):
if cont<len(Texto):
pares[i][j] = Texto[cont]
cont+=1;
if (j==1 and pares[i][0] != b'X' and pares[i][0]==pares[i][1]):
pares[i][1]=b'X'
cont-=1
print("\n")
#Posiciones primera letra
X1=0;
X2=0
#Posiciones segunda letra
Y1=0
Y2=0
#Caso 1
W1=X1;
W2=Y2;
Z1=Y1;
Z2=X2;
#Caso 2
if X2 == Y2:
W2=X2
Z2=Y2
W1=X1+1
Z1=Y1+1
if W1==5:
W1=0
if Z1==5:
Z1=0
# Caso 3
if X1 == Y1:
W1 = X1
Z1 = Y1
W2 = X2 + 1
Z2 = Y2 + 1
if W2 == 5:
W2 = 0
if Z2 == 5:
Z2 = 0
cifrado[i][0] = charar[W1][W2]
cifrado[i][1] = charar[Z1][Z2]
print("\n")
else:
#Descifrar
# Solicitar Datos
Texto = input("Por favor introduzca el texto a descifrar: ");
Clave = input("Por favor introduzca la clave: ");
#Texto = "WE DL LK HW LY LF XP QP HF DL HY HW OY YL KP";
Texto = Texto.upper().strip().replace(" ", "");
print(Texto)
#Texto = Texto.replace("J", "I");
#Clave = "Yoan Pinzon";
Clave = Clave.upper().strip().replace(" ", "");
Clave = Clave.replace("J", "I");
pares=np.chararray(((math.ceil(len(Texto)/2))+1,2));
pares[:]='X';
print("\n")
Y1=Z1;
Y2=W2;
#Caso 2
if W2 == Z2:
X2=W2
Y2=Z2
X1=W1-1
Y1=Z1-1
if X1==5:
X1=0
if Y1==5:
Y1=0
if X1 == -1:
X1 = 4
if Y1 == -1:
Y1 = 4
# Caso 3
if W1 == Z1:
X1 = W1
Y1 = Z1
X2 = W2 - 1
Y2 = Z2 - 1
if X2 == 5:
X2 = 0
if Y2 == 5:
Y2 = 0
if X2 == -1:
X2 = 4
if Y2 == -1:
Y2 = 4
descifrado[i][0] = charar[X1][X2]
descifrado[i][1] = charar[Y1][Y2]
for i in range (math.ceil(len(Texto)/2)):
for j in range(2):
print(descifrado[i][j].decode(), "", end='')
print("\t", end='');
print("\n")
#ZO MH LC HY ZK MN SO NQ DL KT OQ CY KI EC LK SO YI EQ PQ RX EY KR WM NS DL GY LD GF AB YA
QN YE AP GN IX PG HY YS NB HT EC TL KF VN RP YT PU PF CY EB YA WM KI MP LF UZ LH TC YH NP
CK KL LY YT KI GB DH CY EC RD GN CL GO IH YE TY KI XO UY VN SC LX KF MX PW
#WE DL LK HW LY LF XP QP HF DL HY HW OY YL KP
H. CILINDRO DE BAZERIE
Los "Discos de Jefferson" o "Cilindro de Bazeries" son dispositivos históricos de cifrado que representan una
etapa temprana en la evolución de la criptografía. Estos dispositivos consisten en una serie de discos con las
26 letras del alfabeto dispuestas en sus bordes en un orden aparentemente aleatorio, y cada disco está
marcado con un número de identificación. Los discos son apilables en un eje único, lo que permite alterar el
orden de los mismos. La clave de cifrado se basa en el orden en que se apilan los discos, y tanto el emisor
como el receptor deben utilizar el mismo orden de discos para cifrar y descifrar los mensajes.
El proceso de cifrado implica que el emisor rote cada disco hasta que se alinee con la letra deseada para
formar el mensaje en una fila. Luego, se elige otra fila aleatoria como mensaje cifrado. Para descifrar el
mensaje, el receptor debe colocar los discos en el mismo orden que el emisor y rotarlos hasta formar el
mensaje cifrado en una fila. La fila en la que se encuentra el mensaje descifrado es aquella que no parece un
galimatías.
Es importante señalar que, si se cifra más de una fila de texto con el mismo orden de discos (la misma clave),
la seguridad del sistema se ve comprometida, como lo demostró el marqués Gaétan Henri Léon de Viaris.
El dispositivo de Jefferson fue inventado por Thomas Jefferson en el siglo XVIII, mientras que el
comandante Étienne Bazeries reinventó un sistema similar en el siglo XIX. Este sistema de cifrado fue
utilizado por el ejército de los Estados Unidos bajo el nombre M-94 desde 1923 hasta 1942. A pesar de sus
limitaciones, este método sentó las bases para sistemas de cifrado más avanzados y desempeñó un papel
importante en la historia temprana de la criptografía.
I. Cifrador de Vernam
En terminología moderna, un cifrado de Vernam es un cifrado de flujo en el que el texto en claro se
combina, mediante la operación XOR, con un flujo de datos aleatorio o pseudoaleatorio del mismo
tamaño, para generar un texto cifrado. El uso de datos pseudoaleatorios generados por un generador
de números pseudoaleatorios criptográficamente seguro es una manera común y efectiva de construir
un cifrado en flujo. El RC4 es un ejemplo de cifrado de Vernam que se utiliza con frecuencia en
Internet.
Posteriormente a la invención del cifrado de Vernam, Joseph Mauborgne propuso que la cinta de
papel contuviera información completamente aleatoria. Las dos ideas, combinadas con el uso único
de las claves, implementan la libreta de un solo uso, aunque ninguno de los dos inventores utilizó ese
nombre.
Claude Shannon, también de Bell Labs, demostró que la libreta de un solo uso es irrompible
(trabajo realizado entre 1940 y 1945; publicado por primera vez en la Bell Labs Technical Journal,
1948/49). Es el primer y único método de cifrado para el que existe tal demostración.
El método Vernam fue utilizado durante la segunda guerra mundial por espías de diversas
nacionalidades, a los que se les daba una secuencia binaria aleatoria con la recomendación de
utilizarla con un único proceso de cifrado.
CRIPTOGRAFÍA MODERNA
Introducción:
Las máquinas de rotores, dispositivos históricos utilizados en criptografía, desempeñaron un papel esencial
en la seguridad de las comunicaciones. Este papel se destacó especialmente durante la Segunda Guerra
Mundial, cuando estas máquinas se convirtieron en piezas clave para la seguridad de los mensajes militares.
B. Maquina enigma
La máquina Enigma fue un dispositivo de cifrado mecánico utilizado por Alemania durante la Segunda
Guerra Mundial para proteger la comunicación de sus fuerzas armadas. Fue inventada por Arthur Scherbius a
principios del siglo XX y se convirtió en una herramienta crucial en el esfuerzo de cifrado de los nazis.
La Enigma constaba de un teclado, una serie de rotores que intercambiaban letras, y una lámpara que
iluminaba la letra cifrada correspondiente. El operador ingresaba un mensaje en el teclado, y la máquina
cifraba la letra original en una letra diferente cada vez que se presionaba una tecla. La configuración de los
rotores determinaba la clave de cifrado y, para descifrar un mensaje, el destinatario debía conocer la
configuración exacta de los rotores.
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 poli alfabético. Además, para dar mayor robustez, el segundo cilindro sólo
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.
Los Aliados, en particular los británicos, trabajaron arduamente para romper el código Enigma. Alan Turing
y otros criptoanalistas británicos desarrollaron la máquina "Bombe" para descifrar los mensajes cifrados de
Enigma. Su éxito en la descodificación de estos mensajes fue un logro crucial que ayudó a ganar la guerra, ya
que permitió a los Aliados anticipar los movimientos y estrategias de las fuerzas alemanas.
La máquina Enigma es un ejemplo histórico de la importancia de la criptografía en la guerra y cómo la
inteligencia y el esfuerzo de descifrado pueden tener un impacto significativo en los eventos militares. Su
historia es un testimonio de la lucha entre la seguridad de la información y la necesidad de obtener acceso a
datos enemigos durante conflictos importantes.
Codigo en Python:
import random
class EnigmaRotor:
def __init__(self, wiring, notch):
self.wiring = wiring
self.notch = notch
class EnigmaMachine:
def __init__(self, rotors, reflector):
self.rotors = rotors
self.reflector = reflector
self.rotor_positions = [0, 0, 0]
def rotate_rotors(self):
self.rotor_positions[2] = (self.rotor_positions[2] + 1) % 26
if self.rotor_positions[2] == self.rotors[2].notch:
self.rotor_positions[1] = (self.rotor_positions[1] + 1) % 26
if self.rotor_positions[1] == self.rotors[1].notch:
self.rotor_positions[0] = (self.rotor_positions[0] + 1) % 26
# Reflector
letter = self.reflector[ord(letter) - ord('A')]
self.rotate_rotors()
return letter
else:
return letter
def main():
# Configuración de los rotores y reflector (configuración real de la máquina Enigma)
rotorI = EnigmaRotor("EKMFLGDQVZNTOWYHXUSPAIBRCJ", 16)
rotorII = EnigmaRotor("AJDKSIRUXBLHWTMCQGZNPYFVOE", 4)
rotorIII = EnigmaRotor("BDFHJLCPRTXVZNYEIWGAKMUSQO", 21)
reflectorB = "YRUHQSLDPXNGOKMIEBFZCWVJAT"
message = "ENIGMA"
encrypted_message = ""
for letter in message:
if letter.isalpha():
encrypted_letter = enigma.encode_letter(letter)
encrypted_message += encrypted_letter
else:
encrypted_message += letter
print("Mensaje original: ", message)
print("Mensaje cifrado: ", encrypted_message)
if __name__ == "__main__":
main()
Resultados:
REFERENCIAS
[1]Algoritmos de criptografía clásica – Class4crypt: Class4crypt c4c6.1a Cifrado por permutación o transposición parte 1