Rating:

**Author's Solve**

After connecting to the server, people are given morse code. Decoding it leads them to numbers which are the decimal ASCII representation of letters and numbers.

Converting the decimal numbers to ASCII, they see that there are capital letters, lowercase letters, numbers and the equal to sign. This is base64 and they need to decode it.

After decoding the Base64 text, they will get text that is in the format of "N = some number, e = 3, c = some number". This is RSA encryption and the flaw that they had to realize was that the public exponent was super small and the ciphertext was short. This implies that the ciphertext can be recoved by just taking the cube root of the ciphertext.

After taking the cube root and converting the number to bytes to ASCII, they are greeted some random text. As a hint, the theme was Pokemon and the first ciphertext was a fixed string "Pokemon Names". Becasue of that, people can recognize that the last stage of decryption needs them to apply a Caeser shift of 13.

This needs to be done for 6 different ciphertexts and after decrypting them and sending it to the server, people would get the flag from the server.

For the script implementation, please check out solver.sage. The reason that SageMath was used is because standard Python was having precision issues for taking the cube root.

Original writeup (https://github.com/victini-lover/CSAW-Quals-2021-Writeups/tree/main/Gotta-Decrypt-Them-All).