Krypton - [OverTheWire]
Table of Contents
Introdución
Krypton es una serie de retos relacionados con la criptografía, empezando con retos clásicos, que se remontan a la antigua roma, hasta
acabar con temas más actuales, que se utilizan diariamente. Para poder acceder a los retos se tiene que realziar mediante SSH y se encuentran en el directorio /krypton/
.
ssh -p 2231 krypton1@krypton.labs.overthewire.org
Level 0
Solución:
Level 1
Solución:
Este reto se podría resolver desde la terminal como se hizo en el “Level 11” de bandit.
cat krypton2 | tr 'A-Za-z' 'N-ZA-Mn-za-m'
También, hay páginas webs como rot13.com, que descifran cualquier texto cifrado en rot13 fácilmente.
Level 2
Solución:
Para pode empezar con este reto necesitamos crear una carpeta donde pueda guardar el archivo con el texto plano que después sea cifrado por el programa “encrypt”. Para ello ejecuto los siguientes comandos, creando una carpeta para que desde posteriores niveles pueda acceder y creo un link simbólico con la intención de ejecutar el programa desde la carpeta temporal.
Creo un fichero lleno de As para averiguar el desplazamiento del encriptador.
El cifrado es un desplazamiento de 14 posiciones a la izquierda o 12 posiciones a la derecha.
Aparentemente, parece ser que son 12 desplazamientos hacia la derecha. Sin embargo, el resultado es algo rocambolesco, así que pruebo con ROT14 y obtengo la clave para el siguiente nivel.
Level 3
Solución:
La principal debilidad de todos los cifradores de sustitución simple es el análisis de frecuencia. El análisis de frecuencia consiste en ver las letras que más se repiten en el texto y asociarlas a las letras que más se repiten en un idioma, en este caso ingles. A partir del siguiente texto, puedo ir a webs como guballa.de y obtener el todas las sustituciones que se han hecho.
Finalmente, usando la famosa web de decode.fr e introduciendo el alfabeto obtenido en guballa.de es posible descifrar el criptograma donde se encuentra la contraseña para el siguiente nivel.
Level 4
Solución:
A través de guballa.de se puede la clave de un criptograma, cifrado con Vigenère, sabiendo la longitud de la clave. Para ello solo hace falta introducir unos de los textos que ponen de ejemplo, se selecciona ingles de idioma y se escribe 6 como la longitud de la clave.
Una vez, obtenida la clave “frekey” para descifrar el texto, se puede descifrar el criptograma usando decode.fr, como se puede ver en la siguiente imagen.
Level 5
Solución:
Este reto se puede resolver de la misma forma que el anterior. Esto es debido, a que la página web guballa.de es capaz de obtener la clave del cifrado Vigenère a partir de un rango de longitudes de clave. En este caso con poner el rango por defecto es suficiente.
Introducimos un texto de ejemplo para sacar la clave y listo.
En este caso la clave es “keylength”. Ahora solo falta pasarla por decode.fr y obtener la contraseña para el siguiente nivel.
Level 6
Solución:
Este reto es parecido al nivel 2, básicamente consiste en realizar un ataque por texto escogido. Cifrando el texto que se quiera, analizando el resultado con la finalidad de obtener la clave o el criptograma en claro. Para empezar, hay que situarse en la carpeta temporal que se creo en el nivel 2, creando el link simbólico necesario para ejecutar el programa y fichero con un montón As.
Es necesario usar muchas As o cualquier letra del alfabeto, porque al ser un LSFR de 8 bits, es muy probable que el generador después de cifrar una cadena de caracteres con una longitud bastante grande el patrón de cifrado se vuelva a repetir.
Como se puede apreciar en la anterior imagen el patrón se repite cada 30 caracteres. Por lo que podemos sacar el criptograma sin necesidad de obtener la clave, si resolvemos este problema como un cifrado por desplazamiento.
Sabiendo que el valor del carácter del criptograma(C) es la suma del valor del carácter en texto plano(T) más un desplazamiento(D): C = T+D y podemos obtener un criptograma a partir de un texto dado, este problema puede resolverse como un sistema resuelto mediante reducción.
C1i=T1i +Di C2i=T2i+Di C1-C2 = T1-T2
Siendo T1 texto en claro de la clave para el siguiente nivel , C1 el criptograma de la clave y T2 el valor número de ‘A’ y C1 el valor número ‘E’. Solamente tenemos que resta cada carácter de ambos criptogramas para obtener el desplazamiento que hay entre los caracteres criptogramas o el entre los propios caracteres en texto plano. Entonces, el texto plano de la contraseña del nivel 7 será el resultado de sumar el valor numérico de ‘A’ más la diferencia entre los criptogramas.
El siguiente código ilustra como se resuelve el criptograma.
Finalmente, ejecutamos el programa, obteniendo la clave para el último nivel habiendo acabado los restos de Krypton.
Contraseñas
**1) **KRYPTONISGREAT
2) ROTTEN
3) CAESARISEASY
4) BRUTE
5) CLEARTEXT
6) RANDOM
7) LFSRISNOTRANDOM