keystream

{{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

ttackatdawn
align=right

! Plaintext as numbers

| 0

19190210019302213
align=center

! Keystream

| k

jcngmlhylyu
align=right

! Keystream as numbers

| 10

921361211724112420
align=right

! Ciphertext as numbers

| 10

282113822112627114633
align=right

! Ciphertext as numbers
wrapped to 0-25

| 10

22113822110111207
align=center

! Ciphertext as text

| k

cvniwlabluh

References

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

{{cryptography navbox|stream}}

Category:Stream ciphers