sábado, 24 de agosto de 2019

Criptografía (CLXVII): Solución Reto backdoor "easy-flipp"

En este post la solución a otro de los retos de criptografía de la plataforma backdoor.

Este reto tiene el título "easy-flipp" y mi valoración sobre su dificultad es: .

Su enunciado dice lo siguiente:


dr3dd is n00b in crypto stuff, but he tried to encrypt some data using AES-CBC mode can you change encrypted data and get his private message..!!

nc hack.bckdr.in 10006

Y como pista se da la siguiente (Hint): CBC Bit-Flipping Attack.

Solución: ya he escrito en este blog algunos post sobre el 'bit-flipping attack', por lo que resolver este reto no tiene que ser difícil y, en consecuencia, rebajo su nivel de dificultad a bajo.

Me conecto:
En el enunciado se dice que el método de cifrado utilizado es AES en modo de operación CBC, y aquí veo el mensaje de autenticación cifrado (en hexadecimal) y que el texto en claro correspondiente al mismo es "admin=0".

Pues bien, entiendo que lo único que hay que hacer es cambiar "admin=0" por "admin=1" mediante la modificación del Byte séptimo del vector de inicialización (IV) para que se produzca la modificación deseada en el Byte séptimo del primer bloque de texto plano (pase de 0 a 1).

Es decir, la modificación que tengo que realizar es la siguiente:

C'0[7] = C0[7] XOR P1[7] XOR P'1[7] = C0[7] XOR 0 XOR 1 = C0[7] XOR 1

Donde: C'0[7] = Valor al que hay que modificar el Byte 7 de C0 (IV); 
C0[7] = Byte 7 del bloque 0 del criptograma original (Byte 7 del IV original);
 P1[7] = Byte 7 del bloque 1 del texto plano original;
 P'1[7] = Valor deseado para el Byte 7 del bloque 1 del texto plano.

Por consiguiente, basta con modificar el Byte 7 del vector de inicialización
 (resaltado en color rojo a continuación) con el resultado de la operación XOR de ese mismo Byte con 1.

C0 (IV original) = 0cc1484ddd73a77fd14dc38062560cf0
C'0[7] = C0[7] XOR 1 = a7 XOR 1 = a6
C'0 (IV modificado) = 0cc1484ddd73a67fd14dc38062560cf0

Por lo que, si no estoy equivocado, cuando nos piden 'Give me Encrypted msg in hex' basta con incluir:

0cc1484ddd73a67fd14dc38062560cf034b8bae89f1b9fb5ef1ee676572899dd

para que se nos muestre la flag:
No hay que olvidar que en esta plataforma para superar el reto hay que enviar el hash sha256 de la flag:
Por lo que el valor a enviar es:

dcde1eaf7b732a6b014d47e2cc6eb31946efd1da78494eae4c9e20d52cc2efbe

viernes, 23 de agosto de 2019

Criptografía (CLXVI): Solución Reto id0-rsa "Easy Passwords"

En este post la solución de otro de los retos de la plataforma id0-rsa, dedicada exclusivamente a desafíos de criptografía, y que figura en ella bajo el 'Tag' 'Hashing'.

En este caso lo voy a resolver sólo mediante una herramienta.

El reto en cuestión tiene por título "Easy Passwords" y, en mi opinión, presenta un nivel de dificultad medio (☆☆).

Su enunciado dice lo siguiente: 'Warm up with some easy password cracking', y se proporciona lo siguiente:

$1$abadsalt$0abdVS0D4YnJJ4b7l0RRr1
$1$abadsalt$p394aiqZnKUyrO5Rg9Tf01
$1$abadsalt$cJYsdaTkB9F9L9yH2Qjtd.
$1$abadsalt$lFZDGpRdmOwRbu6HWuqjv0
$1$abadsalt$1AI/LbmumKa5e6dOxiVe11
$1$abadsalt$e2hAp/NXE.Uezx3ZOwA5L0
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.
$1$abadsalt$7XBxlsUB3yXcL62wQpgjK/
$1$abadsalt$DnSSAXOSmaoAAhN4WKaU90
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.
$1$abadsalt$7wLTt8frOzyxahbB9Lzdi.

Solución:

JohnTheRipper:

Lo que se proporciona en este reto son valores de hash generados utilizando el algoritmo crypt(3)-MD5, y para intentar "revertirlos" utilizo 'John the Ripper'el popular software de 'crackeo' de contraseñas, 'Rockyou' como diccionario para implementar un ataque de fuerza bruta.

Creo un fichero de texto (Easy_Passwords.txt) con los valores de hash proporcionados, ejecuto el siguiente comando: john --wordlist=rockyou.txt Easy_Passwords.txt, y el resultado es:
Es decir, veo que se han conseguido 'crackear' algunos de los valores de hash contenidos en el archivo Easy_Passwords.txt.

Ejecuto el siguiente comando: john --show Easy_Passwords.txt, y obtengo lo siguiente:
Es decir, en concreto ya tengo 10 de las cadenas que se corresponden a 11 de los valores hash

Abro el archivo (john.pot) que se ha generado tras el primer paso realizado, y veo lo siguiente:

$1$abadsalt$cJYsdaTkB9F9L9yH2Qjtd.:letter
$1$abadsalt$p394aiqZnKUyrO5Rg9Tf01:second
$1$abadsalt$e2hAp/NXE.Uezx3ZOwA5L0:word
$1$abadsalt$0abdVS0D4YnJJ4b7l0RRr1:the
$1$abadsalt$7XBxlsUB3yXcL62wQpgjK/:this
$1$abadsalt$7wLTt8frOzyxahbB9Lzdi.:order
$1$abadsalt$1AI/LbmumKa5e6dOxiVe11:each
$1$abadsalt$DnSSAXOSmaoAAhN4WKaU90:list
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.:in

Comparando lo valores de hash proporcionados en el reto e incluidos en el archivo de texto que he creado (Easy_Passwords.txt) con el contenido del fichero anterior, veo que hay dos valores de hash repetidos (los resaltados a continuación en color azul), que se corresponden con 'in', y que el valor de hash que falta es el resaltado a continuación en color rojo.

$1$abadsalt$p394aiqZnKUyrO5Rg9Tf01
$1$abadsalt$cJYsdaTkB9F9L9yH2Qjtd.
$1$abadsalt$lFZDGpRdmOwRbu6HWuqjv0
$1$abadsalt$1AI/LbmumKa5e6dOxiVe11
$1$abadsalt$e2hAp/NXE.Uezx3ZOwA5L0
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.
$1$abadsalt$7XBxlsUB3yXcL62wQpgjK/
$1$abadsalt$DnSSAXOSmaoAAhN4WKaU90
$1$abadsalt$Cua6x6Rgd8UUHn7Mnzibj.
$1$abadsalt$7wLTt8frOzyxahbB9Lzdi.

Para intentar 'crackear' el valor de hash que falta, a la vista de que todos los demás se corresponden con palabras comunes en inglés, vuelvo a repetir los 2 pasos anteriores, pero esta vez utilizo un diccionario de dicho idioma (john --wordlist=english.txt Easy_Passwords.txt):
Y veo que la palabra que faltaba era 'of'.

Ejecuto: john --show Easy_Passwords.txt, y obtengo lo siguiente:
Por tanto, la solución a este reto es: "heefaonhinr".

Criptografía (CLXV): Solución Reto id0-rsa "Fast Hashing Passwords"

En este post la solución de otro de los retos de la plataforma id0-rsa, dedicada exclusivamente a desafíos de criptografía, y que figura en ella bajo el 'Tag' 'Hashing'.

En este caso lo voy a resolver sólo mediante un script de python.

El reto en cuestión tiene por título "Fast Hashing Passwords" y, en mi opinión, presenta un nivel de dificultad bajo (☆☆☆).

Su enunciado dice lo siguiente: 'Cryptographic hash functions shouldn't be used to hash passwords directly. It's important to hash passwords before storing them, but using a cryptographic hash function directly isn't sufficient even if salt is included. Salt is intended to make it so that an attacker can't use a table of precomputed hashes of common passwords, but if your hash scheme itself is very fast to compute (as raw cryptographic hash functions are), an attacker won't need a precomputed table, as doing the computation live will be reasonable', se pide lo siguiente'To demonstrate how fast cryptographic hash functions are on passwords, hash every password in the rockyou list of common passwords (14,344,391 passwords total), with sha256. Submit the password with the lowest hash value concatenated to the end of the password with the highest hash value'.

Solución:

Script de python:

from hashlib import sha256
from tqdm import tqdm

f = open('rockyou.txt', 'rb')

rockyou = f.read().split(b"\n")

sha256_menor = ('',115792089237316195423570985008687907853269984665640564039457584007913129639935,'')
sha256_mayor = ('',0,'')

for password in tqdm(rockyou):
    sha256_password = int(sha256(password).hexdigest(), 16)
    if sha256_password < sha256_menor[1]:
        sha256_menor = (sha256(password).hexdigest(),sha256_password,password)
    if sha256_password > sha256_mayor[1]:
        sha256_mayor = (sha256(password).hexdigest(),sha256_password,password)

print'[+] Hash sha256 menor ...',sha256_menor
print'[+] Hash sha256 mayor ...',sha256_mayor
solution = sha256_mayor[2] + sha256_menor[2]
print'[+] Solution ............',solution

f.close()

Ejecuto este script:
Por tanto, la solución a este reto es: bert7quinn,3yame1bore.

Criptografía (CLXIV): Solución Reto id0-rsa "Intro to Hashing"

Empiezo con éste una serie de posts en los que pondré las soluciones de algunos de los retos de la plataforma id0-rsa, dedicada exclusivamente a desafíos de criptografía, y que figuran en ella bajo el 'Tag' 'Hashing'.

Estos retos los resolveré mediante scripts de python y/o la utilización de alguna herramienta.

El primero de estos retos tiene por título "Intro to Hashing" y, en mi opinión, presenta un nivel de dificultad muy bajo (☆☆☆☆).

Su enunciado dice lo siguiente: 'Hashing is a vital concept in cryptography', tras lo cual se incluye un pequeño tutorial sobre los 'Hashes' y se pide lo siguiente: 'To prove you understood this tutorial, show that you can use these hash functions. Hash the string id0-rsa.pub with sha256, then hash the hex string output with md5, and submit the lowercase hex result'.

Solución:

a) Script de python:

import hashlib

sha256 = hashlib.sha256('id0-rsa.pub').hexdigest()
md5 = hashlib.md5(sha256).hexdigest()

print'[+] Solution ...', md5

Ejecuto este script:
Por tanto, la solución al reto es: b25d449d86aa07981d358d3b71b891de.

a) Herramienta:

En este caso utilizo un software de escritorio.

Como primer paso calculo el hash sha256 de "id0-rsa.pub":
Y como segundo paso calculo el hash md5 de la cadena obtenida en el paso anterior:
Con lo que la solución la reto es: b25d449d86aa07981d358d3b71b891de.

jueves, 22 de agosto de 2019

Criptografía (CLXIII): Solución Reto id0-rsa "Vigenère + Rail Fence"

Solución de otro de los retos de la plataforma id0-rsa, la cual está dedicada exclusivamente a desafíos de criptografía.

Se trata de otro de los retos de criptografía clásica que en ella aparecen y, en este caso y como en alguno anterior, sólo lo voy a resolver utilizando herramientas, ya que se combinan dos métodos de cifrado diferentes, Vigenère y Rail Fence, y ésto unido al gran tamaño del criptograma hace que su resolución de forma manual ("lápiz y papel") sea muy laboriosa.

El reto en cuestión lleva por título "Vigenère + Rail Fence" y, en mi opinión, presenta un nivel de dificultad bajo (☆☆☆).

Su enunciado dice lo siguiente: 'Good luck', y como pista se indica: 'Hint: encrypted with Vigenère then Rail Fence. First word of the plaintext is THIS'.

El criptograma a descifrar es el siguiente (lo primero que hago es quitarle los espacios para que las herramientas a utilizar no entiendan que éstos forman parte del criptograma):
Solución:

Entiendo que para resolver este reto, como primer paso, hay que utilizar la fuerza bruta para el cifrado Rail Fence y, posteriormente, probar el descifrado de cada una de las posibles soluciones obtenidas (resultado para cada número de raíles) mediante el método de Vigenère para ver si se obtiene un texto inteligible.

Una vez aplicada la fuerza bruta en el cifrado Rail Fence utilizo una de las muchas herramientas 'online' existentes sobre el cifrado de Vigenère, y con 21 raíles obtengo:
Por lo que ya tengo el texto en claro:
Con lo que la solución a este reto es: "TENTACLE".

martes, 20 de agosto de 2019

Criptografía (CLXII): Solución Reto id0-rsa "Affine Cipher"

Solución de otro de los retos de la plataforma id0-rsa, la cual está dedicada exclusivamente a desafíos de criptografía.

Se trata de otro de los retos de criptografía clásica que en ella aparecen y, como en posts anteriores, lo voy a resolver tanto de forma manual ("lápiz y papel") como de forma automatizada mediante la utilización de una herramienta.

El reto en cuestión lleva por título "Affine Cipher" y, en mi opinión, presenta un nivel de dificultad bajo (☆☆☆).

Su enunciado dice lo siguiente: 'Can you brute force this classical cipher?'.

El criptograma a descifrar es el siguiente:
Solución:

a) De forma manual:

Parece que el enunciado nos sugiere utilizar la fuerza bruta para resolver este reto y efectivamente es posible solucionarlo utilizando ese método, pero yo lo voy a hacer de otra manera. No hay que olvidar que el cifrado afín es un un cifrado simple por sustitución monoalfabética y, como tal, vulnerable a un ataque mediante el análisis de frecuencias, pero ni siquiera necesito realizar un análisis completo de este tipo, sino que me basta con conocer la correspondencia de dos caracteres del criptograma con sus respectivos caracteres del texto en claro, cosa que es muy fácil de conseguir.

Si hago un análisis de frecuencias de un criptograma correspondiente a un texto escrito en inglés será muy fácil identificar los caracteres del criptograma que se corresponden en el texto en claro con las dos letras más frecuentes en dicho idioma, ya que las frecuencias de aparición de los 2 caracteres del criptograma que se correspondan con la 'E' y la 'T', respectivamente, serán significativamente superiores a las del resto. Así, en el criptograma del reto obtengo lo siguiente (hay que considerar que en él también figuran espacios, además de la ',' y el  '.', por lo que el carácter que aparece con más frecuencia en el criptograma se corresponderá muy probablemente con el espacio, siendo los dos siguientes caracteres más frecuentes los que probablemente se correspondan con la 'E' y 'T', respectivamente):
Así que establezco como hipótesis inicial que el carácter  'I' en el criptograma se corresponde con la letra 'E' en el texto en claro y que el carácter 'R' en el criptograma se corresponde con la letra 'T' en el texto en claro. Pruebo a descifrar el criptograma con esta hipótesis de partida y si no obtengo un texto inteligible probaré con otra hipótesis.

El alfabeto empleado en el reto tiene 28 caracteres (letras mayúsculas A-Z, más el espacio, la coma y el punto), así que asocio a cada uno de ellos un número de orden:

'A' = 0; 'B' = 1; 'C'= 2; ...; '.' = 28

Por tanto, la función de cifrado (E) es la siguiente:

E(mi) = ci = (a x mi + b) mod 29

Donde:
a: constante de multiplicación o constante de decimación.
b: constante de adición o constante de desplazamiento.

la función de descifrado (D) es la siguiente:

D(ci) = mi = ((ci - b) x a-1) mod 29

Donde:
a: constante de multiplicación o constante de decimación.
a-1: inverso multiplicativo modular de a.
b: constante de adición o constante de desplazamiento.

Entonces, conforme a la hipótesis inicial que he establecido: 'I' (8) se corresponde con E (4) y 'R' (17) con 'T' (19), tengo que:

(a x 4 + b) mod 29 = 8
(a x 19 + b) mod 29 = 17

Por tanto:

a = (27 x (8 - 17)) mod 29 = -243 mod 29 = 18
b = (27 x ((4 x 17) - (19 x 8))) mod 29 = -2.268 mod 29 = 23

Y procedo al descifrado del criptograma con a = 18, a-1 = 21 y b =23:

- Primer carácter del criptograma ('B'):

m1 = ((c1 - b) x a-1) mod 29 = ((1 - 23) * 21) mod 29 = -462 mod 29 = 2 = ‘C’

- Segundo carácter del criptograma ('O'):

m2 = ((c2 - b) x a-1) mod 29 = ((14 - 23) * 21) mod 29 = -189 mod 29 = 14 = ‘O’

- Tercer carácter del criptograma ('H'):

m3 = ((c3 - b) x a-1) mod 29 = ((7 - 23) * 21) mod 29 = -336 mod 29 = 12 = ‘M’

- Cuarto carácter del criptograma ('H'), igual que el anterior:

m4 = ((c4 - b) x a-1) mod 29 = ((7 - 23) * 21) mod 29 = -336 mod 29 = 12 = ‘M’

- Quinto carácter del criptograma ('I'):

m5 = ((c5 - b) x a-1) mod 29 = ((8 - 23) * 21) mod 29 = -315 mod 29 = 4 = ‘E’

- Sexto carácter del criptograma ('K'):

m6 = ((c6 - b) x a-1) mod 29 = ((10 - 23) * 21) mod 29 = -273 mod 29 = 17 = ‘R’

- Séptimo carácter del criptograma ('B'), igual que el primer carácter:

m7 = ((c1 - b) x a-1) mod 29 = ((1 - 23) * 21) mod 29 = -462 mod 29 = 2 = ‘C’

- Octavo carácter del criptograma ('I'), igual que el quinto carácter:

m8 = ((c8 - b) x a-1) mod 29 = ((8 - 23) * 21) mod 29 = -315 mod 29 = 4 = ‘E’

...

Por lo que parece que voy bien, ya que se puede leer la palabra 'COMMERCE', y sigo hasta obtener el texto en claro:
Ya tengo el texto en claro, pero piden introducir como solución el 'hash' md5 de éste, por lo que utilizo un software para el cálculo de 'hashes':
Con lo que la solución a este resto es: 880cabd53df2f03050a7214d3ae30a07.

b) De forma automatizada:

Utilizo una de las muchas herramientas 'online' existentes sobre el cifrado simple por sustitución monoalfabética, no olvidar lo que he dicho anteriormente sobre que el cifrado afín no deja de ser un cifrado de ese tipo:
Como se ve en la figura anterior la herramienta sólo ha considerado los caracteres alfabéticos, dejando como están en el criptograma los espacios, las comas y los puntos, pero es muy fácil darse cuenta de que la coma se corresponde con el espacio en el texto en claro, el punto con la letra 'S' y el espacio con la 'F'.


Y obtengo el mismo texto en claro que en el descifrado manual.

domingo, 18 de agosto de 2019

Criptografía (CLXI): Solución Reto id0-rsa "Vigenère"

Solución de otro de los retos de la plataforma id0-rsa, la cual está dedicada exclusivamente a desafíos de criptografía.

Se trata de otro de los retos de criptografía clásica que en ella aparecen. En este ocasión, al contrario que en los posts anteriores, lo voy a resolver sólo utilizando herramientas, una aplicación de escritorio y otra 'online', ya que su resolución de forma manual ("lápiz y papel") sería laboriosa por el gran tamaño del texto cifrado.

No obstante lo anterior, utilizo la aplicación de escritorio porque en ella se puede ver de forma muy didáctica la manera en la que se resolvería de forma manual. Además, aquellos lectores que estén interesados en saber cómo se resolvería manualmente pueden empezar por leer este post.

El reto en cuestión lleva por título "Vigenère" y, en mi opinión, presenta un nivel de dificultad bajo (☆☆☆).

Su enunciado dice lo siguiente: 'One of the most difficult problems to pronounce'.

El criptograma a descifrar es el siguiente:

UHVGMEFNVCIAJPYPVGTKZYHYMIBPXFFCRPWYSCZALCSOEWCRIEELQCJSYLVBFRKZWNFLCTQCBNTLIQBRZDEIJNULXPJCBJAMSDKZSZFCRFWCJACHEWTFFCKCUTYPEZFFFCIRIEVMYJMSYTXZVTMTKCOEIPMKFAETHMOTVGILSERWPWLNFHLMXTFAVMOOLYGCUHRESLFTYPWMMUKTSLUHZDXGNEZDXFFKVJELENFHLCSEZDWMNEKPBRGRFXQMCYUTGINERYXGNERSEZPUKZJFFAITREPFYTWMGFZNIPTHRGMLHSZOIBUHVQYPUHVDXRPWZYHUBRUHEQTTZWPPBNXTREBHVLHMGTYPSRIEIMSYUSRNMPDUDDXYOCVMIQQERVMLHHFHTMUEEEEASENHEQQUCWMLHHZXXFPSVEMEFRPPPJPWTCIYUUIPWMGHZDWCFMVOEJMSKPIJBNUHLYMESZRCMIBPJGWEKCMNIADXIPTTYPCPPSVLRBGECWAGUHIPKSMAIDXPPKVDSDTTIPREUHNSMAIPVCMMEITLPJZSKLVRFDKSIZPAKLPMOGKSIUBTVCPGLERSSPJZFYXYMBLCWRCOZWIPPUKZJYNIJDMQTIGAMQUERXIPBSWZVDFDRWPYIWYZAYTSVPRNVLCTREUHVSEPQOFYICSORCLCIAUELPPWELWGEEYTWZMATVNYDKVEELEDZDTJBYVOLGTNRVIBDHVDXUJTYELCXHFWINBRKZJFJSSZHWBBFGIRIEXFRUBLVNPCBRCJGSUAXLMLTTKSIYMTVCRYUIERHCQRVDWGPNJZJRIENLXCSYYZVGAOEHLGMEREXFFOKSIPFNUZJRIESZERBHRMAGUHFYIYSMCTOCBFVYGCSSKSVMXNYLPDCATVAYSDZYXMUHVLMPBSZQXMDOLYXCSBRWELDERYCRFNUPRAZTFEVGQAYLFUBSJPILTTVLHGMYDLRYHIERLGTSKPIPJNXZEPBSZYERIOLDELEBFLXJPWVCMLHSVCIRIENSMRFWYLPCIAUESPOHZXEJMAKZRAFTYPSSUSKCIRDHVOEPNGRGIYQETFPGBRDZXGPNRYHRIEECIKBIEPHDJXVOAFJLVELCCOREWDJVVZEPTWVCIQFEEDMKVLKLRCPUJWCNFABPHZPAKLRBDRVHWYUMFEMMOLVDWMOTYPWCBIEDXYOTCJXFFTYCICTPIPEBCOREWGOTYPVCBRGLYQFDFYXFFIIHEWUHVHLYMEJSEBJRIPKSMAIWCQFTKWIBCOUTPWEONYMLUOKSIZMUVELSTGZGMLHNFOMQUAEEPWEIJNIPOISWIRPKVYSDUHVXSTFMVYXRIOLRLDSODSMQDLFDIPWITTRGUYRSEZIAUZFQFRMPHGUEMPVWNAEWSMLOLEEJPNXSMQPAIDGPJEUDXYSBLNORIOLBYCFQLPKQUAEOYNOIDMPWTPITREJNXFTMOTYPXPJAERYJBRILMQFDSZBGOTYPFMXTYPWYWAXPWRPOUPVCDTKSIPFAEOAGUHZYXCOSVWCCBGVCIWFSXLDCEOWQXMXAIOWRIEJASRXHVCIRIETSEQFHROPYTTSPILEEJNVGFDCTOCXIJPYNPNKSICYTIPQCTTVCRMGTYPFMBTNSIPFIKHEQBLJZXPJAERYJBRCJTJBTWZVKFDCPZCMWZELRIEXFRUBLVDXYSBLNOFJMJPPDXAJDICOCFZPJZAEOEBSOZEPWCACLRAJNXSMKTECQXMUHVUIPLIERXMTSZYKQPFYTWAIIGZJYDRRQXYODJTPCOTCJIWFIERXFFVRDXZMUVPCCPFKSIQFAEZXTFRPQEPEIJEELUFCLWITBFLXUBSRWWMMYZYKZSERELJFSJWCQUICWMRTCFXQYODVCVCDKCPWQMYJEELEIERYNPNKSIRPPFQXFFLFRKCSHVLHYTTFFXQPRKZJNPSKCSMUEUTRRIEBPIJBNUCMQJNXDSKFTNZJCFTRMSTFTYPPCWECZJRIEJEIPOPCLXDPRDTXGTUJPHDPRTLXAIIERXSSNJHMRITYPAFBLVWMLFIKDXMQIJYSRNOIPWNBCZZYQUHRYXFFPRWQMGADLRQIAEOELESKLRBJNXFTMOSLNLYCAJPEQUHREJJBSBDICNEUAIPDHVOERUHVXEQUHVLHMGSFXIQIIGHLGDHYLHQVNBESYMLSFXFFRKCYALSSFXJJTKWIIJNXASQUWRDWKBLCLRBTHFCXYODREXFFSRXIRJMVWMRULVVMLHPFDXUBSWFPJPFRWEPHERYHRBLCLQZJTZZRQPTYLXRIIJWSEHEISIYESKLRBQOZYXMGHZDHGEBPYSKFAEDWYUIJQCIJNXASQUITLRRTEVELPFEJPEQPFWEMNVSLAELPAIELCSERYHJFTDPSLUOKSERVPFYXFJSULKEPONTXFFIKSIPIAEOYNPNKSIEVNNLPCUOJEIYEYYTWUBYJHMDULPDPGEAWEELETYPRCSETEMLHHZXWCMFMZPSOTVPVCEHZDPMGTPDLMVLUPVQGOILTCEEJEEJ

Solución:

a) Aplicación de escritorio:

La aplicación que voy a utilizar es Criptoclásicos v2.1, una herramienta muy didáctica y que como su nombre indica tiene diversas funcionalidades con respecto a ciertos criptosistemas clásicos.

Lo primero que hago en la aplicación es seleccionar el alfabeto utilizado (el texto en claro está escrito en inglés y en el criptograma sólo se observan caracteres alfabéticos, es decir, no se ven dígitos ni otro tipo de caracteres):
Después selecciono el criptosistema:
Y, finalmente, para iniciar el ataque, copio y pego en "Entrada" el criptograma del reto y pulso sobre el botón "Criptoanalizar":
Una vez hecho lo anterior se me muestra la siguiente ventana:
Tal y como decía en el post al que he hecho referencia, lo primero que deberíamos hacer para intentar descifrar el criptograma de forma manual sin conocer la clave es averiguar la longitud de esta última, y eso es precisamente lo que hace este software.

Para ello utilizaríamos el método Kasiski, que se basa en la búsqueda de secuencias de caracteres repetidos en el texto cifrado, lo cual significa, casi con toda probabilidad, que dichas secuencias no sólo eran también iguales antes del cifrado sino que además la clave ha debido coincidir en la misma posición; y lo que se puede observar en la parte superior izquierda de la figura anterior es precisamente eso: las cadenas repetidas en el criptograma, el número de veces que se repite cada una de ellas y el número de posiciones que las separan.

Después, probando con un "tamaño de la repetición" (longitud de las cadenas de caracteres que se repiten) igual o mayor de 5 caracteres (parte superior central de la ventana que se muestra a continuación) vemos que la longitud más probable de la clave es 6 (parte superior derecha de la ventana), ya que ése es el máximo común divisor (mcd) o mayor número entero que divide sin dejar resto a todas las posiciones que separan las cadenas de longitud igual a 5 o superior que se repiten en el texto cifrado:
Tal y como se observa en la figura anterior, una vez conocida la probable longitud de la clave (L), en este caso 6, se divide el criptograma en L subcriptogramas (en nuestro caso: C1, C2, C3, C4, C5 y C6), ya que éstos habrían sido cifrados por una misma letra de la clave, a partir de lo que se puede realizar un ataque simple de tipo estadístico monoalfabético en cada uno de ellos.

Aunque no se ve en la ventana anterior:

- El
primer subcriptograma (C1) contiene los siguientes caracteres del criptograma: 1º, 7º, 13º, etc.
- El segundo subcriptograma (C2) contiene los siguientes caracteres del criptograma: 2º, 8º, 14º, etc.
- El tercer subcriptograma (C3) contiene los siguientes caracteres del criptograma: 3º, 9º, 15º, etc.
- El cuarto subcriptograma (C4) contiene los siguientes caracteres del criptograma: 4º, 10º, 16º, etc.
- El quinto subcriptograma (C5) contiene los siguientes caracteres del criptograma: 5º, 11º, 17º, etc.
- El sexto subcriptograma (C6) contiene los siguientes caracteres del criptograma: 6º, 12º, 18º, etc.

A partir de aquí, considerando el alfabeto inglés con 26 caracteres y que en él: la posición relativa de la letra "A" es el valor 0, la letra "E" está 4 espacios a la derecha de la "A", la letra "O" está 10 espacios a la derecha de la letra "E" y la letra "T" está a 5 espacios de la letra "O", es decir, teniendo en cuenta los cuatro caracteres más frecuentes en inglés, buscamos en cada subcriptograma (Ci) los caracteres más frecuentes que cumplan con esa distribución: 0, +4, +10, +5 mod 26, y esto es precisamente lo que se ve en la parte central de la figura anterior en el "Diagrama de frecuencias de los subcriptogramas"; según el cuál, por ejemplo, C1 contiene 38 caracteres "B", 52 caracteres "F", 34 caracteres "P" y 42 caracteres "U", y la suma de estos números de caracteres es la mayor de todas las sumas de los números de los caracteres que cumplen con la distribución indica (si la posición relativa de la letra "B" es el valor 0, la letra F" está 4 espacios a la derecha de la "B", la letra "P" está 10 espacios a la derecha de la letra "F" y la letra "U" está a 5 espacios de la letra "P") y por esa razón la primera letra de la clave de cifrado sería la "B", y así sucesivamente. El software nos dice que la posible clave es: "BARLEY" (parte inferior de la figura anterior).

Y, finalmente, ya sólo queda descifrar el criptograma utilizando la tabla del cifrado de Vigenère con la clave hallada (ver este post). El software lo hace automáticamente pulsando sobre el botón "Descifrar":
ya tengo el texto en claro:

THEVIGENERECIPHERISKINDALIKETHECAESARCIPHERONLYTHENAMEISHARDERTOSPELLIMEANCAESARISAKINDATRICKYWORDTOOBECAUSEIALWAYSFORGETTHEABEFORETHEEBULLSHITBUTVIGENEREIMEANIDONTEVENREALLYKNOWHOWTOPRONOUNCETHATONETHESOLUTIONTHISTIMEISTHEKEYANDNOWHEREISSOMETEXTFROMMOBYDICKMEANTIMEAHABOUTOFHEARINGOFHISOFFICERSHAVINGSIDEDTHEFURTHESTTOWINDWARDWASSTILLRANGINGAHEADOFTHEOTHERBOATSACIRCUMSTANCEBESPEAKINGHOWPOTENTACREWWASPULLINGHIMTHOSETIGERYELLOWCREATURESOFHISSEEMEDALLSTEELANDWHALEBONELIKEFIVETRIPHAMMERSTHEYROSEANDFELLWITHREGULARSTROKESOFSTRENGTHWHICHPERIODICALLYSTARTEDTHEBOATALONGTHEWATERLIKEAHORIZONTALBURSTBOILEROUTOFAMISSISSIPPISTEAMERASFORFEDALLAHWHOWASSEENPULLINGTHEHARPOONEEROARHEHADTHROWNASIDEHISBLACKJACKETANDDISPLAYEDHISNAKEDCHESTWITHTHEWHOLEPARTOFHISBODYABOVETHEGUNWALECLEARLYCUTAGAINSTTHEALTERNATINGDEPRESSIONSOFTHEWATERYHORIZONWHILEATTHEOTHERENDOFTHEBOATAHABWITHONEARMLIKEAFENCERSTHROWNHALFBACKWARDINTOTHEAIRASIFTOCOUNTERBALANCEANYTENDENCYTOTRIPAHABWASSEENSTEADILYMANAGINGHISSTEERINGOARASINATHOUSANDBOATLOWERINGSERETHEWHITEWHALEHADTORNHIMALLATONCETHEOUTSTRETCHEDARMGAVEAPECULIARMOTIONANDTHENREMAINEDFIXEDWHILETHEBOATSFIVEOARSWERESEENSIMULTANEOUSLYPEAKEDBOATANDCREWSATMOTIONLESSONTHESEAINSTANTLYTHETHREESPREADBOATSINTHEREARPAUSEDONTHEIRWAYTHEWHALESHADIRREGULARLYSETTLEDBODILYDOWNINTOTHEBLUETHUSGIVINGNODISTANTLYDISCERNIBLETOKENOFTHEMOVEMENTTHOUGHFROMHISCLOSERVICINITYAHABHADOBSERVEDITEVERYMANLOOKOUTALONGHISOARSCRIEDSTARBUCKTHOUQUEEQUEGSTANDUPNIMBLYSPRINGINGUPONTHETRIANGULARRAISEDBOXINTHEBOWTHESAVAGESTOODERECTTHEREANDWITHINTENSELYEAGEREYESGAZEDOFFTOWARDSTHESPOTWHERETHECHASEHADLASTBEENDESCRIEDLIKEWISEUPONTHEEXTREMESTERNOFTHEBOATWHEREITWASALSOTRIANGULARLYPLATFORMEDLEVELWITHTHEGUNWALESTARBUCKHIMSELFWASSEENCOOLLYANDADROITLYBALANCINGHIMSELFTOTHEJERKINGTOSSINGSOFHISCHIPOFACRAFTANDSILENTLYEYEINGTHEVASTBLUEEYEOFTHESEANOTVERYFARDISTANTFLASKSBOATWASALSOLYINGBREATHLESSLYSTILLITSCOMMANDERRECKLESSLYSTANDINGUPONTHETOPOFTHELOGGERHEADASTOUTSORTOFPOSTROOTEDINTHEKEELANDRISINGSOMETWOFEETABOVETHELEVELOFTHESTERNPLATFORMITISUSEDFORCATCHINGTURNSWITHTHEWHALELINEITSTOPISNOTMORESPACIOUSTHANTHEPALMOFAMANSHANDANDSTANDINGUPONSUCHABASEASTHATFLASKSEEMEDPERCHEDATTHEMASTHEADOFSOMESHIPWHICHHADSUNKTOALLBUTHERTRUCKSBUTLITTLEKINGPOSTWASSMALLANDSHORTANDATTHESAMETIMELITTLEKINGPOSTWASFULLOFALARGEANDTALLAMBITIONSOTHATTHISLOGGERHEADSTANDPOINTOFHISDIDBYNOMEANSSATISFYKINGPOSTICANTSEETHREESEASOFFTIPUSUPANOARTHEREANDLETMEONTOTHATUPONTHISDAGGOOWITHEITHERHANDUPONTHEGUNWALETOSTEADYHISWAYSWIFTLYSLIDAFTANDTHENERECTINGHIMSELFVOLUNTEEREDHISLOFTYSHOULDERSFORAPEDESTAL

Como se dice en el texto en claro la solución es la clave empleada en el cifrado, por lo que la solución a este resto es: "BARLEY".

b) Herramienta 'online':

Utilizo una de las muchas herramientas 'online' existentes sobre el cifrado de Vigenère:
obtengo el mismo texto en claro que con la aplicación de escritorio y, por tanto, la solución a este reto es la clave empleada en el cifrado.