Most cryptographic algorithms are implemented to encipher
fixed sized blocks of data, often a power of 2 such as 64 or 512 bits.
This means each block will stand on its own and not be related to
any other. Thus it might be possible to break the protection on a
single block and replace it without being detected. It also means
that the individual blocks could be re-arranged, thus breaking the
integrity of the data, without being detected. This independence also
gives more information to someone using crpto-analysis to break the
algorithm and find the key. To make crypto-analysis of the cipher
text more difficult, and to ensure that data which is enciphered together
can not be rearranged a method known as cipher block chaining is used
on larger pieces of data. This method requires the cryptographic algorithm
to produce some remainder value from its calculation of the cipher
text. This remainder is then used, with the key, as input to the encipherment
of the next block, and the remainder from the second block is used
to encipher the third block, and so on. Thus the order of the data
in the plaintext is used in the encipherment process, and any re-ordering
will detected as the result from the decipherment would be gibberish.
A seed value has to be used in place of a remainder for the first
block; this is known as an initialization vector. The initialization
vector can be as secret as the key, or it could be made known, depending
on the application.