Incryptography, akeystream is astream ofrandom orpseudorandom characters that are combined with aplaintext message to produce an encrypted message (the ciphertext).
The "characters" in the keystream can bebits,bytes, numbers or actual characters like A-Z depending on the usage case.
Usually each character in the keystream is either added, subtracted orXORed with a character in the plaintext to produce the ciphertext, usingmodular arithmetic.
Keystreams are used in theone-time pad cipher and in moststream ciphers.Block ciphers can also be used to produce keystreams. For instance, CTR mode is ablock mode that makes a block cipher produce a keystream and thus turns the block cipher into a stream cipher.
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 calledmodular arithmetic.)
Here the plaintext message "attack at dawn" is combined by addition with the keystream "kjcngmlhylyu" and produces the ciphertext "kcvniwlabluh".
Plaintext | a | t | t | a | c | k | a | t | d | a | w | n |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Plaintext as numbers | 0 | 19 | 19 | 0 | 2 | 10 | 0 | 19 | 3 | 0 | 22 | 13 |
Keystream | k | j | c | n | g | m | l | h | y | l | y | u |
Keystream as numbers | 10 | 9 | 2 | 13 | 6 | 12 | 11 | 7 | 24 | 11 | 24 | 20 |
Ciphertext as numbers | 10 | 28 | 21 | 13 | 8 | 22 | 11 | 26 | 27 | 11 | 46 | 33 |
Ciphertext as numbers wrapped to 0-25 | 10 | 2 | 21 | 13 | 8 | 22 | 11 | 0 | 1 | 11 | 20 | 7 |
Ciphertext as text | k | c | v | n | i | w | l | a | b | l | u | h |