{{Short description|Concept in cryptography}} In cryptography, a '''keystream''' is a stream of random or pseudorandom characters that are combined with a plaintext message to produce an encrypted message (the ciphertext).

The "characters" in the keystream can be bits, bytes, numbers or actual characters like A-Z depending on the usage case.

Usually each character in the keystream is either added, subtracted or XORed with a character in the plaintext to produce the ciphertext, using modular arithmetic.

Keystreams are used in the one-time pad cipher and in most stream ciphers. Block ciphers can also be used to produce keystreams. For instance, CTR mode is a block mode that makes a block cipher produce a keystream and thus turns the block cipher into a stream cipher.

== Example ==

In this simple example we use the English alphabet of 26 characters from a-z. Thus we can not encrypt numbers, commas, spaces and other symbols. The random numbers in the keystream then have to be at least between 0 and 25.

To encrypt we add the keystream numbers to the plaintext. And to decrypt we subtract the same keystream numbers from the ciphertext to get the plaintext.

If a ciphertext number becomes larger than 25 we wrap it to a value between 0-25. Thus 26 becomes 0 and 27 becomes 1 and so on. (Such wrapping is called modular arithmetic.)

Here the plaintext message "attack at dawn" is combined by addition with the keystream "kjcngmlhylyu" and produces the ciphertext "kcvniwlabluh".

{| class="wikitable" |- align=center ! Plaintext | a || t || t || a || c || k || a || t || d || a || w || n |- align=right ! Plaintext as numbers | 0 || 19 || 19 || 0 || 2 || 10 || 0 || 19 || 3 || 0 || 22 || 13 |- align=center ! Keystream | k || j || c || n || g || m || l || h || y || l || y || u |- align=right ! Keystream as numbers | 10 || 9 || 2 || 13 || 6 || 12 || 11 || 7 || 24 || 11 || 24 || 20 |- align=right ! Ciphertext as numbers | 10 || 28 || 21 || 13 || 8 || 22 || 11 || 26 || 27 || 11 || 46 || 33 |- align=right ! Ciphertext as numbers <br> wrapped to 0-25 | 10 || 2 || 21 || 13 || 8 || 22 || 11 || 0 || 1 || 11 || 20 || 7 |- align=center ! Ciphertext as text | k || c || v || n || i || w || l || a || b || l || u || h |}

== References ==

* ''[http://www.cacr.math.uwaterloo.ca/hac/ Handbook of Applied Cryptography]'' by Menezes, van Oorschot and Vanstone (2001), chapter 1, 6 and 7. <references/>

{{cryptography navbox|stream}}

Category:Stream ciphers