After the rowwise permutation in the last step, in this step each column (bi,j), i = 0,..., 3, j = 0,..., Lb of a block is taken to be a polynomial over and multiplied by the constant polynomial a(x) := a3x3 + a2x2 + a1x + a0, with coefficients a0(x) = x, a1(x) = 1, a2(x) = 1, a3(x) = x + 1, and reduced modulo M(x) := x4 + 1. Each byte of a column thus interacts with every other byte of the column. The rowwise operating ShiftRow transformation has the effect that in each round, other bytes are mixed with one another, resulting in strong diffusion.
We have already seen (see page 363) how this step can be reduced to a matrix multiplication
Multiplication by '02' (respectively x) has already been reduced to the application of the function xtime; multiplication by '03' (respectively x + 1) was already handled similarly (cf. page 366).
For inverting the MixColumn transformation every column (bi,j) of a block is multiplied by the polynomial r(x) := r3x3 + r2x2 + r1x + r0 with coefficients r0(x) = x3 + x2 + x, r1(x) = x3 + 1, r2(x) = x3 + x2 + 1, and r3(x) = x3 + x + 1 and reduced modulo M(x) := x4 + 1. The corresponding matrix is
Team-Fly |