# Does knowing encrypted information make it easier to find an unknown key?

I'm curious if knowing the exact content of an encrypted message or several messages makes it theoretically any easier to discover the encryption key. Does this speed up a brute force attack in any way? Or provide some other means of discovering the key?

How would this concept apply to both symmetric encryption and asymmetric encryption?

As always, it depends on the algorithm. The attack technique you are asking about is called a "known plaintext attack", but it only works for certain types of encryption. Modern cryptanalysis is all about pattern detection. A brute force attack is the last thing done because it means that all other avenues of attacking the cipher have failed.

Imagine a simple shift cipher such as rot-13 (a weak form of encryption no better than obfuscation). You and I know that the shift factor is 13, but our fictitious cryptanalysis does not. However, because they have various samples of both the plaintext and the cipher text available to them, they can sit down and determine quite quickly that each 'a' has consistently shifted to 'n'. Noticing this, they will quickly detect that the shift key is 13 and "break" this rudimentary encryption scheme. If they did not have this ability to easily check their work, the act of breaking the code would take much longer and possibly require them to start "brute-forcing" their way to solving it by trying each shift factor.

It is my understanding that although encryption algorithms are usually susceptible to known-plaintext attacks, modern algorithms are usually constructed such that they cannot be attacked in any meaningful way. That is, you might have a symmetric 256 bit key, and after much analysis, shave off 10 bits from a pure brute-force attack. The algorithm now has 246 bits of complexity. It will still take a while to brute-force that key. AES is not supposed to have any meaningful attacks on it.

Asymmetric encryption is an interesting case in that you can produce as many cipher texts as you want to compare to your plaintext (you have free access to public keys after all). You can use this time to find and exploit weaknesses in the algorithm or specific implementation.