Understanding AES Encryption: A Deep Dive

Introduction to AES

The Advanced Encryption Standard (AES) is a symmetric block cipher used worldwide to secure data. Initially introduced as a replacement for the now-vulnerable DES (Data Encryption Standard), AES is a widely adopted encryption standard that emerged from a competition organized by NIST (National Institute of Standards and Technology) in 1997. It was designed by Joan Daemen and Vincent Rijmen.

Unlike Feistel ciphers, AES follows a different approach, making it both efficient and secure. It is designed to be fast, requiring minimal memory for both encryption and decryption, making it particularly suitable for modern hardware.

AES Key Sizes

AES supports three different key sizes:

  • AES-128 (16 bytes, 128 bits)

  • AES-192 (24 bytes, 192 bits)

  • AES-256 (32 bytes, 256 bits)

The number of rounds varies based on the key size:

Key Size Number of Rounds Expanded Key Size

AES-128

10

176 bytes

AES-192

12

208 bytes

AES-256

14

240 bytes

AES Encryption Process

AES operates on 128-bit blocks of data, processing each block through multiple rounds. A round consists of four operations:

  1. SubBytes: Byte substitution using a fixed substitution table (S-box).

  2. ShiftRows: A rotation of the rows of the matrix to obscure the relationship between plaintext and ciphertext.

  3. MixColumns: Mixing of the columns to spread out the influence of each byte.

  4. AddRoundKey: XOR the data with a round key derived from the secret key.

The decryption process is the reverse of encryption, with the inverse operations performed in the opposite order.

AES Operations in Detail

SubBytes

The SubBytes step involves substituting each byte in the state with a corresponding byte from a substitution box (S-box). This substitution is critical to ensuring the non-linearity of AES and preventing attacks based on simple byte manipulations.

const uint8_t SBOX[256] = { ... }; // Complete S-Box values

The inverse of SubBytes is also implemented using an S-box, where each byte in the state is replaced by its inverse.

ShiftRows

The ShiftRows operation rotates the rows of the state matrix to enhance diffusion. For encryption, the rows are rotated to the left; for decryption, they are rotated to the right.

  • Encryption: \(S'_{i,j} = S_{i, |j + i|_4}\)

  • Decryption: \(S'_{i,j} = S_{i, |j - i|_4}\)

This simple operation helps to scatter the influence of each byte across the block.

MixColumns

MixColumns is a linear transformation that mixes the data within each column of the state matrix. It is represented by matrix multiplication, where each byte of a column is transformed through a specific set of polynomial multiplications in GF(2^8).

unit_8 xtimes(uint_8 s){
  if (s & 0x80)
    return s << 1;  // shift by 1 (multiply by {02})
  else
    return (s << 1) ^ 0x1B;  // apply modulo polynomial
}

The inverse of MixColumns can also be performed using matrix multiplication and applying the inverse polynomial transformations.

AddRoundKey

In the AddRoundKey step, a round key is XORed with the state to provide additional security. This round key is derived from the original key, and during each round, it helps obscure the relationship between the plaintext and the ciphertext.


Optimizations in AES

AES is highly optimized for performance on various architectures, particularly for modern processors that support dedicated AES instructions. These optimizations can speed up the encryption process and reduce the time complexity for larger data sets.

T-box Optimization

For processors that do not have AES instructions, the algorithm can be further optimized using T-boxes. These are precomputed tables that allow for faster transformations of state values.

The T-boxes are calculated as follows:

T_0[a] = [02*SBox(a), 01*SBox(a), 01*SBox(a), 03*SBox(a)]
T_1[a] = [03*SBox(a), 02*SBox(a), 01*SBox(a), 01*SBox(a)]
T_2[a] = [01*SBox(a), 03*SBox(a), 02*SBox(a), 01*SBox(a)]
T_3[a] = [01*SBox(a), 01*SBox(a), 03*SBox(a), 02*SBox(a)]

These T-boxes allow for the encryption to be performed with simple XOR operations, which reduces the number of memory accesses and speeds up the process.


Conclusion

AES is a powerful and efficient encryption algorithm used for securing sensitive data. Its structure of rounds and operations such as SubBytes, ShiftRows, MixColumns, and AddRoundKey makes it robust against various types of cryptographic attacks. By leveraging optimizations like T-boxes and hardware acceleration, AES remains one of the fastest and most secure encryption algorithms in use today.

This blog post incorporates detailed explanations of AES’s operations, optimizations, and the core principles behind its design. It is aimed at those who wish to understand the inner workings of AES and how it can be optimized for use in different environments.