Cryptography Reference
In-Depth Information
as a priming key with which to encipher the plaintext. Formally, this is given
as follows.
Vigenere Ciphers
Fix r,n
) s , the elements of which are ordered s -
N
, and let
M
=
C
=(
Z
/n
Z
) r where s
tuples from
Z
/n
Z
, and
K
=(
Z
/n
Z
r .For e =( e 1 ,e 2 ,...,e r )
K
,
and m =( m 1 ,m 2 ,...,m s )
M
, let
E e j ( m j )= m j + e j (mod r ) (mod n ) for all j =1 , 2 ,...,s,
and for c =( c 1 ,c 2 ,...,c s )
C
, let
D d j ( c j )= c j
e j (mod r ) (mod n ) for all j =1 , 2 ,...,s.
This cryptosystem is called the Vigen`ere cipher with period r , which is why
the subscript on the key is taken modulo r (where we choose r rather than 0 in
order to keep all subscripts positive). If r = s , then this cipher is an example
of a running-key cipher .
Thus, the one-time-pad is an simple example of a running-key cipher. (Note
that this also says that the Vignere cipher becomes a Vernam cipher if we
assume that the keystream is truly randomly generated and never repeated.)
The Vigenere cipher is an example of a stream cipher with period length r ,
where the key e =( e 1 ,e 2 ,...,e r ) provides the first r elements of the keystream
k j = e j for 1
r , after which the keystream repeats itself, until the
plaintext is exhausted. Now, we turn to a general discussion of stream ciphers,
but will revisit our two examples later. Typically, stream ciphers are classified
as follows.
j
Synchronous and Asynchronous Ciphers
A stream cipher is said to be synchronous if the keystream is generated
without use of the plaintext or of the ciphertext. This is called keystream
generation independent of the plaintext and ciphertext. A stream cipher is
called self-synchronizing (or asynchronous ) if the keystream is generated as a
function of the key and a fixed number of previous ciphertext units. If the
stream cipher utilizes plaintext in the keystream generation, then it is called
nonsynchronous .
The distinctions between block and stream ciphers are more readily seen in
practice than in theory. Stream ciphers encrypting one bit at a time are not
suitable for software implementation since bit manipulation is time-consuming.
Where stream ciphers win out is in the arena of error propagation. Obviously,
with a block cipher, a single error will corrupt at least a block's worth of data,
whereas implementation of a synchronous stream cipher can guarantee that a
single bit error will result in only a single bit of corrupted plaintext. Thus,
synchronous stream ciphers would be useful where lack of error propagation is
critical. However, use of self-synchronizing stream ciphers can result in error
propagation. If the keystream is acting on the n th ciphertext digit and an error
Search WWH ::




Custom Search