I have a question about the first programming assignment in Dan Boneh's cryptography course on Coursera. You're given 10 ciphertexts that were encrypted with the same key and you can presumably assume that the plaintext consists of letters and whitespace only.
The hint gives that you should consider what happens when a whitespace is xor-ed with a letter. The idea is to check whether the xor-ed subparts of the ciphertext combinations correspond to a letter, which should allow us to figure out the key.
If we do find a letter, I think we should be able to recover that part of the key, that corresponds to the letter we're currently processing, by doing the following:
c_sub2 be the sub-parts of the ciphertexts
c2 that we currently check and let
m_sub2 be the corresponding sub-parts of the plaintexts. One of
m_sub2 must be a whitespace. To figure out which one, we try the following:
m_sub1 is a whitespace, get the corresponding sub-part of the key (
k_sub) by xor-ing
00100000 (the binary representation of a whitespace char),
k_sub = xor(c_sub1,00100000), and check if encrypting the case-flipped letter (since xor-ing with a white space flips the case of a letter) with
c_sub2, if it does we should know that
k_sub is the correct sub-part of the key. If not, try the same with assuming that m_sub2 is a whitespace.
I can't find any logical mistake in that reasoning, but my implementation yields an incorrect solution and I'm fairly sure I've eliminated all other bug possibilities. Can anybody tell me whether this approach is wrong, please?