I have a ciphertext encoded with One Time Pad. I do not know the key. How can I find the possible keys which when decoded, will result in a meaningful plain text?
- Anybody can ask a question
- Anybody can answer
- The best answers are voted up and rise to the top
To remain immunized from cryptanalysis One-Time-Pad must be encoded with a perfectly random key, which is not easy to do. Any pattern in the key will make its corresponding plausible plaintext into unlikely to be a randomized result. For example, if you encrypt your message P with a key K=0101010101010..., to get a ciphertext C, then, a cryptanalyst will conclude that P is your plaintext because the key K' that would encrypt P to an arbitrary C is likely to be highly randomized. This is a subtle point that undermines many users.
The interesting property for the one time pad is that every plausible plaintext (given the length constraint, i.e. of same length as the ciphertext, maybe including some padding) has a corresponding key which produces a certain ciphertext.
As mentioned in the comment by CodesInChaos, this key can be retrieved by simply XORing both plaintext and ciphertext (if you are using the XOR variant of the one time pad ... for the addition variant you'll have to subtract).
Also, assuming a random key, every plaintext has the same probability, given the ciphertext, as it has without knowing the ciphertext (apart from the length).
This is known as perfect secrecy – you can get no information from the ciphertext about the plaintext which you didn't know before (apart from the length, but this can be hidden to a certain degree by padding, too).
Every cryptosystem with the perfect secrecy property must have a key as least as long as the messages, and each key must be used only once. This is why a one-time pad or other perfect encryption systems are not used often in practice.
You will need more than one ciphertext encrypted with the same key to do that. The one time pad is perfectly secret if the key is used only once (Which is why its called the one time pad).
The only way for you to find the actual key without more ciphertexts is to try all possible key combinations (i.e. brute force it), but this could take a long long time if your ciphertext is also long.
If you manage to get more than one ciphertext, you could XOR the two ciphertexts together and use crib dragging techniques to determine the contents of the plaintext. This is possible because the xor of two ciphertexts is the same as xoring the two plaintexts together:
See the link i posted to see how this relationship can be used to uncover the plaintext.
Also, notice that the above property would not hold if i had two keys k1, k2 instead of just k.