# How feasible is word-level frequency analysis over English (or any language)?

Say I have some black box which, given any English word, deterministically outputs a token for that word. Assume our black box is implemented using strong cryptography, i.e. the hardness of reversing a token to its word is reducible to some known assumption.

Now, assume I have a document corpus where a document is some list of English words. I run every word in every document through my black box and create a new document set of tokenized documents. I then give the documents to some attacker who then carries out a ciphertext-only attack to try to guess what the documents say.

I'm curious as to how successful this attacker will be in recovering partial information about the documents. He'll try to use statistical attacks to fit the frequency curve of the tokens to the frequency curve of English words. This will allow him to guess the preimages of more frequent words with high confidence, but will he be able to guess less frequently-used words? Are there more advanced attacks he could use?

-
Will the ciphertext reveal word lengths? Exact or approximate? –  otus Aug 6 '14 at 2:14
As you are encrypting words from documents, The probabilities of which words would appear together also could be leveraged in breaking this. Modern Language Translation techniques, Spam filter engines etc are based on finding the probabilities of next possible word in a sentence and things like that. So it should be possible to find out –  sashank Aug 6 '14 at 2:39
The ciphertexts reveal the number of AES blocks required but not exact word lengths. EDIT: Actually let's consider this case and also the case where no word length info is leaked. –  pg1989 Aug 6 '14 at 3:25
When you’re asking two very related questions that handle the same stuff, you might want to inter-link them: Straightforward method for hampering frequency analysis on deterministic encryption –  cHiMp Aug 6 '14 at 16:04
I looked at the other question, they are not even close to being duplicates. The other one is talking about a classical substitution cipher and is unrelated to modern cryptography. –  pg1989 Aug 6 '14 at 17:55

The feasibility depends a lot on the length of the corpus. The more statistics, the better guesses an attacker would be able to make.

He'll try to use statistical attacks to fit the frequency curve of the tokens to the frequency curve of English words. This will allow him to guess the preimages of more frequent words with high confidence, but will he be able to guess less frequently-used words? Are there more advanced attacks he could use?

Once you knew/guessed the most common words, like prepositions, you could try n-grams. For example, if a particular token frequently appeared immediately after those for "in the", you could make some reasonable guesses. Find other instances where that token appears and you may be able to cross reference.

In reality, you'd do it programmatically, optimizing a quality function where each word pair/triplet/etc. would add or subtract from the score depending on whether that is a common combination in English.

Knowing exact word lengths would reduce the search space significantly, but with AES block length you'd get almost no extra information, since very few words are longer than the 16 – or 15 with padding – bytes you'd fit in one block, and those will probably not appear often. At least if you use ASCII/UTF-8 for English. UTF-16 would help the attacker some, and e.g. UTF-8 German might (multi-byte characters and longer words).

Trying to apply grammar to the text would be the next step, but I'm not sure it would help. N-grams already tell you what kind of words can follow e.g. an adjective.

-
Interesting, thanks for your answer. What if after tokenizing each document, the words in the document were shuffled according to some pseudorandom permutation like the Knuth shuffle? Something that is reversible with a secondary secret key that the adversary doesn't know. –  pg1989 Aug 6 '14 at 17:58
@pg1989, if the shuffle was over the whole corpus, only frequency analysis on individual words would be possible (but then there would be little use of deterministic encryption). If it was over shorter blocks, n-grams or more general "close word" statistics could be applied – if you know the token for "hash" is in a given block, there's an above average chance "function" is as well. –  otus Aug 6 '14 at 18:10
Ahh I hadn't thought of using close-word statistics. Though doesn't that assume at least partially known plaintext? –  pg1989 Aug 6 '14 at 18:34
Another thing that's been bugging me: Don't all these methods only work for guessing fairly common words from the corpus? If the word distribution is like most languages, there is a small subset of very common words at the top of an inverse-power-law curve, then most words are nearer to the bottom. For example, statistical attacks can easily guess which token corresponds to 'the' but 'finance' or 'contract' would be much harder to guess. –  pg1989 Aug 6 '14 at 18:38
@pg1989, true. I would not expect these attacks to decrypt anywhere near the whole corpus. However, they will leak more information than simple frequency distribution and might produce readable parts. Add another attack, like a known or chosen plaintext attack on a part of the corpus and it would leak even more. For example, if one document was known to be the King James Bible... –  otus Aug 7 '14 at 9:17

This sounds like a classic codebook or nomenclator.

Even if we assume a perfect random oracle that generates a completely random codeword for each word of English text, I agree with otus that frequency attacks and N-grams would likely be able to decode the most-frequently-used words. Also, a known-plaintext attack (or worse, a chosen-plaintext attack) would leak the codeword for every word in the known plaintext.

However, I agree that hapax legomenon and other rare words may be practically impossible to decrypt using a ciphertext-only attack.

I occasionally hear someone mention that 16th century ciphertexts encrypted with a nomenclator have never been broken:

-

Provided the text was long enough and used an simple codebook substitution cipher, absolutely. English has common bigrams and trigrams as well as words that are typically positioned in certain places in sentences, like The.

Also, if punctuation was tokenized in the codebook, it would be incredibly easy to guess or identify . and ,, because those will be among the most common tokens and the last token is definitely ..

-
Don't assume anything about the black box. Also, what is an 'ECB substitution cipher'? –  pg1989 Aug 6 '14 at 17:56
"I have some black box which, given any English word, deterministically outputs a token for that word." That's ECB. You are taking one block and substituting another. These are some of the easiest ciphers to break because they are vulnerable to frequency analysis. –  Jeff-Inventor ChromeOS Aug 6 '14 at 18:02
No it isn't. ECB is a block cipher mode of operation. –  pg1989 Aug 6 '14 at 18:33
You can call it a codebook if you want, but it has nothing to do with ECB. –  pg1989 Aug 6 '14 at 18:41
I have to agree with @pg1989. ECB is a “block-cipher mode of operation” (aka cipher-mode), it’s not a “cryptographic algorithm” (aka cipher). Therefore, it doesn’t really make sense to talk about an an ECB substitution cipher, because something like that simply does not exist. To learn the difference, check my answer to the question What is the difference between a 'cipher' and a 'mode of operation'? –  e-sushi Aug 13 '14 at 13:58