Está en la página 1de 24

Universidad Nacional de Ingeniería

Facultad de Ingeniería Eléctrica y Electrónica


CRIPTOANALISIS

EXAMEN FINAL-CRIPTOGRAFÍA CLÁSICA

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

 Durante la Edad Media:


- Durante la Edad Media, los criptógrafos y criptoanalistas desarrollaron y rompieron
diversos sistemas de cifrado, incluidos métodos de sustitución y transposición.

 Renacimiento y cifrados polialfabéticos:


- En el Renacimiento, se produjeron avances significativos en la criptografía y el
criptoanálisis. La polímata italiana Leon Battista Alberti diseñó un cifrado
polialfabético, un paso adelante en la seguridad de la cifra, que fue más difícil de
romper.

 Siglo XIX y Enigma de Alberti:


- Durante el siglo XIX, Auguste Kerckhoffs, un criptólogo y criptoanalista, formuló
principios fundamentales de la criptografía moderna, como la necesidad de que un
sistema criptográfico sea seguro incluso si el algoritmo es conocido. El ingeniero
alemán Arthur Scherbius desarrolló la máquina de cifrado Enigma, que se hizo famosa
durante la Segunda Guerra Mundial.

 Siglo XX y guerras mundiales:


- Durante las guerras mundiales, el criptoanálisis desempeñó un papel crucial. Durante la
Primera Guerra Mundial, la habitación 40 en el Almirantazgo británico rompió los
códigos alemanes, lo que tuvo un impacto significativo en el conflicto. Durante la
Segunda Guerra Mundial, Alan Turing y su equipo en Bletchley Park lograron descifrar
los códigos de la máquina Enigma utilizada por los nazis.

 Desarrollo de la computación y era moderna:


- Con el advenimiento de la computación y la cibernética en el siglo XX, el criptoanálisis
se ha vuelto más sofisticado. Los avances en matemáticas y computación han llevado al
desarrollo de algoritmos más fuertes y técnicas de criptoanálisis más avanzadas.
Hoy en día, el criptoanálisis es una disciplina compleja que involucra matemáticas, estadísticas,
computación y teoría de la información para analizar y romper sistemas criptográficos con el fin de
mejorar la seguridad y proteger la información.

2. Metodos de Critoanalisis Clasicos.

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.

Aquí tienes la correspondencia de letras en el cifrado Atbash:

Por ejemplo:

La letra A se cifra como Z.


La letra B se cifra como Y.
La letra C se cifra como X.
Y así sucesivamente.
Es importante destacar que este cifrado es muy fácil de descifrar, ya que simplemente implica
aplicar la misma sustitución de simetría en el alfabeto.

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 = ""

for letra in texto:


if letra.upper() in alfabeto:
indice = alfabeto.index(letra.upper())
letra_cifrada = alfabeto[-(indice + 1)]
# Mantener mayúsculas o minúsculas según el texto original
if letra.islower():
letra_cifrada = letra_cifrada.lower()
cifrado += letra_cifrada
else:
cifrado += letra

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:

La Escítala se desarrolló en la antigua Grecia, específicamente en Esparta, y se empleó para el envío


de mensajes secretos, principalmente en contextos militares. En el contexto más amplio de la historia
de la escritura, la Escítala representa un temprano y único método de cifrado de mensajes.
C. El Disco de Alberti

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.

Contribución de León Battista 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.

Complejidad del Cifrado:


- La disposición aleatoria de las letras en el disco interior y el movimiento sincronizado de las
agujas, junto con la necesidad de girar completamente las agujas al buscar espacios en blanco
o letras repetidas, hacen que los intentos de descifrar los mensajes sean aún más desafiantes
bajo estas condiciones.

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:

- El disco de Wheatstone fue un precursor importante en el desarrollo de dispositivos de cifrado


más avanzados y contribuyó a la evolución de la criptografía.
Su diseño ingenioso y las condiciones específicas bajo las cuales operaba lo convierten en
un ejemplo valioso de la criptografía histórica y su búsqueda constante de mejorar la
seguridad de las comunicaciones.

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 decrypt_cesar(ciphertext, shift):


plaintext = ''
for char in ciphertext:
if char.isalpha():
ascii_offset = ord('A') if char.isupper() else ord('a')
decrypted_char = chr((ord(char) -
ascii_offset - shift) % 26 + ascii_offset)
plaintext += decrypted_char
else:
plaintext += char
return plaintext

def main():
# Texto cifrado y número de posiciones a retroceder (clave)
ciphertext = "FACULTAD DE INGENIERIA ELECTRICA Y ELECTRONICA"
shift = 3

# Descifrar el texto cifrado usando el cifrado César


decrypted_text = decrypt_cesar(ciphertext, shift)
print("Texto descifrado:", decrypted_text)

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:

Reglas para cifrar dos caracteres m1 y m2:


2. Si m1 y m2 se encuentran en la misma fila, escoger c1 y c2 situados a su derecha
(circularmente).
3. Si m1 y m2 se encuentran en la misma columna, escoger c1 y c2 situados debajo (circularmente).
4. Si m1 y m2 se encuentran en distintas filas y columnas, escoger c1 y c2 situados en la diagonal
opuesta (siempre de derecha a izquierda).
5. Si m1 = m2, insertar carácter sin significado entre m1 y m2 para evitar su repetición, y después
aplicar las reglas 1-3.
6. Si el número de letras es impar, añadir una sin significado al final del texto.
Por ejemplo, en este texto en claro: AT AQ UE CE RO HO RA SX pondremos X al final, porque al tener el
texto un número de letras impar, se requiere una letra sin significado, de relleno, para volver a la paridad.
También podrían ponerse letras sin significado al final de cada palabra para evitar confusiones o hacer más
claro el texto resultante.
Criptograma resultante: IU OU TF DF IR QC IN XR

Los puntos débiles de Playfair, a la hora de analizarlo eran los siguientes:


 Imposibilidad de que una letra sea codificada como ella misma.
 Se trata de una sustitución simple aplicada a los pares de letras en la que existe una
correspondencia unívoca entre cada par de letras y su cifra.
 Cada letra puede sustituirse, exclusivamente, por las que comparten con ella línea o
columna en el cuadro, lo que no hace más que ocho en total y puede revelar la estructura
del cuadro.
 Dos pares de letras que sean invertidos darán lugar a dos nuevos pares de letras también
invertidos. Con el ejemplo anterior, la sílaba LE se convertiría en TL mientras que la sílaba
EL se convertiría en LT.

Código en Python:

import numpy as np;


import math;
def verifica(a,b):
c=False;
for k in range(5):
for l in range(5):
if ord(a[k][l]) == ord(b):
c = True;
#else:
#print(a[k][l], " != ", b)
return c;

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

Rta=int(input("Bienvenido\n\n1. Cifrar\n2. Descifrar\n\nRta: "))


if Rta==1:
#Solicitar Datos
Texto = input("Por favor introduzca el texto a cifrar: ");
Clave = input("Por favor introduzca la clave: ");
#Texto = "THIS SECRET MESSAGE IS ENCRYPTED";
Texto = Texto.upper().strip().replace(" ", "");
Texto = Texto.replace("J", "I");
#Clave = "Yoan Pinzon";
Clave = Clave.upper().strip().replace(" ", "");
Clave = Clave.replace("J", "I");

charar = np.chararray((5, 5));


charar[:] = '*';
charar=construir_matriz(charar,Clave)

pares=np.chararray(((math.ceil(len(Texto)/2))+1,2));
pares[:]='X';

cifrado = np.chararray(((math.ceil(len(Texto) / 2)) + 1, 2));


cifrado[:] = '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

for i in range (math.ceil(len(Texto)/2)+1):


for j in range(2):
print(pares[i][j].decode(), "", end='')
print("\t", end='');

print("\n")
#Posiciones primera letra
X1=0;
X2=0
#Posiciones segunda letra
Y1=0
Y2=0

for i in range(math.ceil(len(Texto) / 2) + 1):


for j in range(2):
if (j == 0):
X1 = posicion(charar,pares[i][j])[0]
X2 = posicion(charar,pares[i][j])[1]
else:
Y1 = posicion(charar,pares[i][j])[0]
Y2 = posicion(charar,pares[i][j])[1]
#Caso 1
X1 = int(X1)
Y1 = int(Y1)
X2 = int(X2)
Y2 = int(Y2)

#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]

for i in range (math.ceil(len(Texto)/2)+1):


for j in range(2):
print(cifrado[i][j].decode(), "", end='')
print("\t", end='');

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");

charar = np.chararray((5, 5));


charar[:] = '*';
charar = construir_matriz(charar, Clave)

pares=np.chararray(((math.ceil(len(Texto)/2))+1,2));
pares[:]='X';

descifrado = np.chararray(((math.ceil(len(Texto) / 2)) + 1, 2));


descifrado[:] = 'X';
cont=0;
for i in range (math.ceil(len(Texto)/2)):
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"""

for i in range (math.ceil(len(Texto)/2)):


for j in range(2):
print(pares[i][j].decode(), "", end='')
print("\t", end='');

print("\n")

#Posiciones primera letra


W1=0;
W2=0
#Posiciones segunda letra
Z1=0
Z2=0

for i in range(math.ceil(len(Texto) / 2)):


for j in range(2):
if (j == 0):
W1 = posicion(charar,pares[i][j])[0]
W2 = posicion(charar,pares[i][j])[1]
else:
Z1 = posicion(charar,pares[i][j])[0]
Z2 = posicion(charar,pares[i][j])[1]
#Caso 1
W1 = int(W1)
Z1 = int(Z1)
W2 = int(W2)
Z2 = int(Z2)
#Caso 1
X1=W1;
X2=Z2;

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

Salida del programa:

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

A. Las maquinas de rotores

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.

Funcionamiento de las Máquinas de Rotores:


Las máquinas de rotores son dispositivos electromecánicos diseñados para cifrar y descifrar mensajes. Su
funcionamiento se basa en el uso de rotores giratorios. Estos rotores son discos que llevan grabadas letras del
alfabeto y giran con cada pulsación de tecla. Cuando se presiona una tecla, los rotores se mueven, lo que
cambia la sustitución de letras en el cifrado. Este proceso proporciona un alto nivel de seguridad a los
mensajes cifrados, ya que la configuración de los rotores podía ser ajustada de manera compleja y variada.
Historia y Legado de las Máquinas de Rotores

Historia de las Máquinas de Rotores:


Las máquinas de rotores se utilizaron ampliamente durante la Segunda Guerra Mundial, con la máquina
Enigma alemana como un ejemplo icónico. Sin embargo, estas máquinas también tuvieron aplicaciones en
otros momentos históricos. Por ejemplo, durante la Guerra del Pacífico, el criptoanálisis de máquinas de
rotores japonesas fue un elemento crucial en la obtención de información valiosa.

Legado y Aplicaciones Posteriores de las Máquinas de Rotores:


Aunque el uso de las máquinas de rotores disminuyó con el avance de la tecnología, su legado persiste en el
desarrollo de la criptografía moderna. Muchos de los principios de seguridad desarrollados a partir de las
máquinas de rotores continúan siendo relevantes en la seguridad de la información y las comunicaciones
actuales. Esto subraya la importancia y el impacto duradero que estas máquinas tuvieron en el campo de la
criptografía y la seguridad de la información.

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 set_rotor_positions(self, positions):


if len(positions) == 3:
self.rotor_positions = positions
else:
raise ValueError("Se necesitan 3 posiciones para los rotores.")

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

def encode_letter(self, letter):


letter = letter.upper()
if letter.isalpha() and len(letter) == 1:
# Paso a través de los rotores de derecha a izquierda
for i in range(3):
rotor = self.rotors[i]
position = (ord(letter) - ord('A') + self.rotor_positions[i]) % 26
letter = rotor.wiring[position]
letter = chr((ord(letter) - ord('A') - self.rotor_positions[i]) % 26 +
ord('A'))

# Reflector
letter = self.reflector[ord(letter) - ord('A')]

# Paso a través de los rotores de izquierda a derecha


for i in range(2, -1, -1):
rotor = self.rotors[i]
position = (ord(letter) - ord('A') + self.rotor_positions[i]) % 26
letter = chr((position - ord('A') + self.rotor_positions[i]) % 26 +
ord('A'))
letter = rotor.wiring.index(letter)
letter = chr((letter - self.rotor_positions[i]) % 26 + 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"

rotors = [rotorI, rotorII, rotorIII]


reflector = reflectorB

enigma = EnigmaMachine(rotors, reflector)

# Establecer la posición inicial de los rotores (por ejemplo, AAA)


enigma.set_rotor_positions([0, 0, 0])

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:

Mensaje original: ENIGMA


Mensaje cifrado: VCZYEQ

Mensaje original: TELECOMUNICACIONES


Mensaje cifrado: PBGBVLLCGYVLYAIQHF

REFERENCIAS
[1]Algoritmos de criptografía clásica – Class4crypt: Class4crypt c4c6.1a Cifrado por permutación o transposición parte 1

[2] La criptografía clásica – Santiago Fernández: https://jefepipiolo.files.wordpress.com/2016/09/9_criptografia_clasica.pdf

[3] Introducción a la criptografía: historia y actualidad – Jesús Javier Ortega Triguero

[4] El arte de encriptar: https://www.muyinteresante.es/historia/35819.html

[5] Cifradores del siglo XIX: http://seguridadinformaticaits.blogspot.com/p/blog-page_11.html

También podría gustarte