Rating:
# Greek Cipher
## Description
```
crypto/greek cipher
burturt
323 solves / 254 points
You think you've seen all of the "classic" ciphers? Instead of your standard cipher, I've created my own cipher: the monoalphagreek cipher!
Answer with just the flag in lowercase with symbols left in.
```
With this challenge we get a text file, which contains greek symbols.
```
κςκ ωπν αζπλ ιησι χνοςνθ μσγθσρ λσθ ζπι ιηγ δςρθι ψγρθπζ ςζ ηςθιπρω θνθψγμιγκ πδ νθςζε γζμρωψιςπζ? τγ ζγςιηγρ. κςκ
ωπν αζπλ ιησι χνοςνθ μσγθσρ λσθ ψρπξσξοω δονγζι ςζ εργγα? τγ ζγςιηγρ. ς οςαγ ηπλ εργγα μησρσμιγρ οππα ιηπνεη, γυγζ
ςδ ς μσζ'ι ργσκ ιηγτ. οσμιδ{ς_ενγθθ_νθςζε_τσζω_εργγα_μησρσμιγρθ_κςκζ'ι_θιπψ_ωπν._λγοο_ψοσωγκ_ς_τνθι_θσω.μπζερσιθ!}
```
## Solution
Looking at the file we can say that this is most likely a substitution cipher. So every letter of the cleartext alphabet always gets translated to a greek letter it is paired with. At the end of the file we can recognise the structure of the flag with the five letters in front and the curly braces and underscores. Also, because of the leading text, we probably have enough letters to crack this with a frequency analysis. This wouldn't be much of a problem, there is websites which can even automatically do this for you, but the greek letters break a lot of these sites, so I had to find a way to convert the greek letters into ascii. For that purpose I wrote a little python script, which looks at the ascii values of every letter and when they are higher than 900 - greek letters range somewhere between 900 and 1000 - then they are shifted down so that the lowest greek letter used becomes an uppercase `A`.
```python
LOWEST_GREEK_LETTER_VALUE = 945
ASCII_A = ord("A")
with open("greek.txt") as f:
text = [chr(ord(letter) - LOWEST_GREEK_LETTER_VALUE + ASCII_A) if (ord(letter) > 900) else letter for letter in f.readline().strip('\n')]
print("".join(text))
```
This converts the greek letters to ascii:
```
JRJ YPM AFPK IGSI WMORMH LSCHSQ KSH FPI IGC DRQHI XCQHPF RF GRHIPQY HMHXCLICJ PD MHRFE CFLQYXIRPF? TC FCRIGCQ. JRJ
YPM AFPK IGSI WMORMH LSCHSQ KSH XQPNSNOY DOMCFI RF EQCCA? TC FCRIGCQ. R ORAC GPK EQCCA LGSQSLICQ OPPA IGPMEG, CUCF
RD R LSF'I QCSJ IGCT. OSLID{R_EMCHH_MHRFE_TSFY_EQCCA_LGSQSLICQH_JRJF'I_HIPX_YPM._KCOO_XOSYCJ_R_TMHI_HSY.LPFEQSIH!}
```
Of course this can be solved by hand and I wouldn't even have had to write this converter, but I am lazy and don't want to do this by hand so I found [a website](https://www.boxentriq.com/code-breaking/cryptogram) that can solve this for me. There is a button on the website that lets us autosolve the cipher, I tried it out afterwards and it worked, but I like reversing so I solved it semi-automatic. The way this works is: You start off translaiting known characters - in this case we know, that the five letters in the last line in front of the opening curly bracket are `lactf`. Now these letters also exist in other parts of the text and sometimes make up such a big portion of the word, that you can guess that word, too. This becomes more and more easy the more characters you have guessed and before you know it you have the plaintext in front of you.
![the cipher being solved](https://gitlab.com/importantigravity/2023-ctf-writeups/-/raw/main/lactf/resources/greek_cipher-breaking_the_cipher.png)
So we already have the text and after putting it into the correct format we get:
lactf{i_guess_using_many_greek_characters_didn't_stop_you._well_played_i_must_say.congrats!}