A multiple-round algorithm such as Rijndael is somewhat like stirring paint in a bucket. With each round, the space of possible blocks is stirred more and more, so that it becomes impossible to follow any individual particle (the input block). Every bit of the output (the ciphertext) depends in an extremely complicated way on every bit of the input (the plaintext).
Of course, such an encryption algorithm is unlike a paint bucket in that it is possible to un-stir the output to decrypt the ciphertext. The un-stirring depends on the fact that each component of each round is one-to-one and so can be reversed.
If you look in detail at a round of Rijndael, you will notice that first the individual bytes are stirred, then the bytes are put in a grid, each row is rotated by a different amount, the columns are transformed linearly. It's sort of like dicing cheese and mooshing the pieces around. Finally, the round key is added in as a kind of control to make the final result depend crucially on the key.
The first piece of the process, 1(a), is the most important:
Each byte is replaced by its inverse in a field. This is to
introduce some nonlinearity. Otherwise, if you were to compose
steps that are all linear transformations (plus constants)
with scalars in
, the end result would be trivial
to decrypt.