Solution to Le Chiffre Indéchiffrable
Back to Puzzle
by Evan Chen
The title of the puzzle, Le chiffre indéchiffrable, is a French name for the Vigenère cipher. However, the ciphertexts here are in scripts which are clearly not English. But looking at the Unicode code points of the first ciphertext, one finds that there are dips corresponding to spaces in the given key, which suggests that Unicode numbers are being used to implement the cipher. For example, if the first letter of the plaintext was "A" (unicode code 65) and the first letter of the key was "$" (unicode code 36), then the encrypted character is "e" (unicode code 101).
This is indeed the case, and implementing a subtraction-by-code points yields the first plaintext, in French. At this point we may already try to translate the text back into English, which we find are formatted as song lyrics. Searching these lyrics then rick-rolls us and reveals the underlying theme of the puzzle --- the plaintexts are from Google Translate Sings.
So, the first step is to break the remaining ciphers. This turns out to be not as scary as it seems, and many approaches to the cryptanalysis are possible. Determining the key length can be done using the Friedman test; the correct key length causes a spike in the index of coincidence. Once the key length is guessed and one is looking at a particular point, one approach would be to simply look at the lowest Unicode point m, which is invariably either NEWLINE (10) or SPACE (32), leaving just two realistic options. And to check whether m is indeed NEWLINE, one can check whether m+22 is present. A Python script that works in all cases is linked here.
Once the cryptanalysis is complete, we now have a lot of data to work with! The completed table of initial data is shown below.
|#||Plaintext||GTS Song||Key language||Key||Key (translated)|
|#1||French||Never Gonna Give You Up||Nepali||ताराको चिन्ह||Asterisk|
|#2||Albanian||Into the Unknown||Urdu||آلہ کنٹرول تین||Device control three|
|#3||Norwegian||God Help the Outcasts||Malayalam||ശൂന്യം||Null|
|#4||Dutch||One Day I'll Fly Away||Bengali||আউট নামান||Shift out|
|#5||Odia||Hey There Delilah||English||unit separator||Unit separator|
|#6||Maori||Twenty One Pilots||Russian||подставлять||Substitute|
Both the plaintext and keys have a language and content.
- The languages for the plaintexts spell FANDOM by first letter.
- The languages for the keys spell NUMBER by first letter.
- The content of the plaintexts are the lyrics of a song from the Google Translate Sings series (translated yet again).
As clued by the phrase
FANDOM NUMBER, we should look up the episode number corresponding to each song, as given by the Malinda Fandom page. (At the time of writing, there was also a Genius listing with gaps and different numbers, and care was taken to choose songs for this puzzle which were not listed on Genius.)
- The content of the key is a translation of the name of a Unicode/ASCII character, which has a code point.
Thus there are two numbers associated to every file. Upon noticing that the episode numbers are actually quite large, we should do it again and subtract the ASCII character from the Fandom number (i.e. doing one last Vigenere cipher, using the number from the key as the new key, and the number from the texts as the new ciphertext).
|#||Plaintext song||Ep. no.||Key (translated)||Unicode||Difference|
|#1||Never Gonna Give You Up||108||Asterisk||42||66 → B|
|#2||Into the Unknown||104||Device control three||19||85 → U|
|#3||God Help the Outcasts||77||Null||0||77 → M|
|#4||One Day I'll Fly Away||80||Shift out||14||66 → B|
|#5||Hey There Delilah||107||Unit separator||31||76 → L|
|#6||Twenty One Pilots||95||Substitute||26||69 → E|
Reading the letters now gives the answer BUMBLE.