Solution to Le Chiffre Indéchiffrable

Back to Puzzle

Answer: BUMBLE

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.

Author’s Notes

The author would like to give a special shout-out to Brian Chen who suggested Google Translate Sings as possible source material after the Vigenere step. (Earlier versions of the puzzle had significantly more boring extractions after the ciphertexts were broken, and did not feel anywhere as thematic or cohesive.)