T55 AESEncryptionSecurity
T55 AESEncryptionSecurity
Group No : T55
Abstract
This report is about the AES Encryption which we mainly use password to encrypt
texts, images, or other types of data which can be decrypted back by using the original
encryption key.
In this report, there will be a brief definition about what is an AES Encryption and
the process of making it, they are all summarized in the ‘Literature Review’ section.
In addition, on the ‘Result and Discussion’ section, we will thoroughly explain about
the AES encryption process step by step through a demo program to encrypt data using C++
language. We will provide printed screens of the process and explanations of each step.
1. Introduction
the encrypted message can only be understood by those with the encryption key.
Advanced Encryption Standard (AES) is 128-bit block size encryption standard with 128,
192 and 256 bits key sizes respectively. These large key lengths make forced attempts to
2. Literature Review
is mainly used for encrypting texts which can be decrypted with the original encryption key.
Advanced Encryption Standard (AES) was invented and declared for the first time by
This invention was based on the Rijndael algorithm and was evaluated and selected after a 5
year standardization process from a design competition. The Rijndael cipher which is the
process of making the encrypted text, was first developed by the Belgians cryptographer.
The algorithm specified in this topic which follows the standard will be pointed as “AES
algorithm”. There are three different key lengths of cipher algorithm that can be used, they
lengths/sequences (128,192,256 bits). These bits of data refer to the length of the output after
the encryption process. Output other than those three values are not permitted as they do not
Starting at 0, the bits of the sequences will be attached and it is going to end one step before
the sequence length. Based on the block length and key length, number i will be marked to a
bit which is known as its index, it ranges from 0 ≤ i < 128, 0 ≤ i < 192 or 0 ≤ i < 256.
1.2. Bytes
There is also a term called Bytes which is an order of eight bits medicated as a single entity.
AES algorithm uses bytes as its basic processing unit. By dividing the input, output, and key
sequences into group of eight bits, they can be processed as array of bytes.
At the input and output or cipher key marked by a, the bytes in the array resulted will be
2. Cipher process
There are several steps used in the encryption algorithm. It is divided into four main steps
which are: key expansion, initial round, rounds, and final round.
AES implements on a 4x4 array of bytes which is known as the state. The overall process of
expanding the key or password using a series of word substitution with a constant
Substitution Box (SBOX), rotation of cells, and xor-ing. The example is as following
Step 2: Rotation
Step 3: Substitution
Step 3: xor-ing
*The grey box is from Rijndael’s constant field RCON
Step 4: For any part which is not multiple of four, just xor it
2.2. Chipering
as following:
Definition of each part and functions:
Initial
AddRoundKey: Using bitwise xor to integrate every byte of the state with the round key.
The state will be integrated with the sub key in this step. In every round, Rijndael’s key
schedule is used to show a sub key from the main key, with every sub key within the same
size acting as the state. By integrating every byte of the state with the corresponding byte of
the sub key by applying bitwise XOR, the sub key is added.
Rounds
SubBytes:
Every byte in the state will be substituted with its entry in a fixed 8-bit lookup table in this
step. By applying an 8-bit substitution box, the Rijndael S-box, every byte in the array will be
ShiftRows:
Each byte in every row of the state will be shifted to the left in different offsets for every row
in this step. In AES, the first row will be left unchanged while every byte in the second row
will be shifted one to the left.Then, the third and fourth rows will be shifted by offsets of two
MixColumns:
In this step, invertible linear transformation will be used to integrate each of the four bytes in
every column of the state. The function will input and output in four bytes where every input
byte will affect all for output bytes. Every column will also be multiplied by a known matrix
multiplication by 2 means shifting byte to the left and multiplication by 3 means shifting to
the left and then performing xor with the initial unshifted value.
Final Round
In this round, the SubBytes, ShiftRows, and AddRoundKey process is repeated without
There are actually couples of methods that can be used to code the encryption program, they
are :
Electronic Code Book (ECB)
In this method, the original message (the plaintext) is divided into several blocks. The blocks
are then encrypted separately. Each identical plaintext block will be encrypted into an
identical cipher block which makes this method is not secure enough to be used.
In this method, every plaintext block will be XOR-ed with an initialization vector for the first
step which then in the next step will be XOR-ed with the previous cipher text block before
being encrypted. This method is secure enough because each cipher text block depends on all
This method is created to cause minor changes in the cipher text to spread indefinitely when
decrypting or encrypting. In this method, every plaintext block will be XOR-ed with its
cipher text after encryption. The resultant is then used to XOR the next plaintext block before
being encrypted.
Cipher Feedback
The first step of this method is an initialization vector will be encrypted which then will be
XOR-ed by the first plaintext block to result to a cipher text block. Each of the cipher text
Output Feedback
From this method, a synchronous stream cipher will be created from a block cipher. This
method produces key stream blocks, which will then be XOR-ed by the plaintext blocks to
result to the cipher text. If a bit is flipped in the cipher text, it will lead to a flipped bit in the
plaintext at the same place. Thus, a lot of error correcting codes will function normally even
Counter
This method will create a stream cipher from a block cipher. This method will encrypt
successive values of a “counter” to produce the next key stream block. “Counter” means any
function which generates a sequence which will not repeat for a long time, although the
*The ‘Counter’ method is the method implemented in the making of the encryption program
in this report.
3. Result and Discussion Demo
For demo on the topic: “Advanced Encryption Standard”, we create a program that operates
AES. This program is “text-file AES encrypter/decrypter”. Actually this program also works
- 321 lines (including last blank line, some comments, and blank lines between
The compiler:
2. Readme
4. Back to the terminal, type the name of the file, and then press enter
5. Input the password you want to use to encrypt this file (the password will be
necessary to decrypt the file), and then press enter. For example, the password is:
a_BIG_53cr37
6. The program will write the encrypted text in binary mode into a new text file with
the same name but with additional prefix: enc_. So in this example, the file is
example, it is the enc_file.txt. Type the name of the file and press enter
9. Input the password that has been used to encrypt this file. In this example, it is:
a_BIG_53cr37
10. The program will write the encrypted text in binary mode into a new text file with
the same name but with additional prefix: dec_. So in this example the file is
The methodology of this software is procedural / modular programming. This program has
functions, each of which is responsible for a specific job. The design of functions are as
follow:
1. First group of functions is responsible for creating a key schedule. There are
3. Third group of functions is the main program, which interacts with user’s input.
4. Algorithm
We will divide the explanation on algorithm in pseudocode into three important parts,
A. KeyExpansion()
---PSEUDOCODE---
Let SBOX[] be (5)
{0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,
0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,
0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,
0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,
0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,
0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,
0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,
0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,
0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,
0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16};
Let RCON[][] be (6)
{{0x00, 0x00, 0x00, 0x00},
{0x01, 0x00, 0x00, 0x00},
{0x02, 0x00, 0x00, 0x00},
{0x04, 0x00, 0x00, 0x00},
{0x08, 0x00, 0x00, 0x00},
{0x10, 0x00, 0x00, 0x00},
{0x20, 0x00, 0x00, 0x00},
{0x40, 0x00, 0x00, 0x00},
{0x80, 0x00, 0x00, 0x00},
{0x1b, 0x00, 0x00, 0x00},
{0x36, 0x00, 0x00, 0x00} };
function KeyExpansion(KEY) {
Let W be an array with size [60][4]
Fill the first 32 bit (8 rows, 0~7) of W with KEY (1)
To fill the other rows, iterate FOR 8<=I<60 (2)
Let TEMP = w[i-1]
IF I is multiple of 8
do SubWord after RotWord to TEMP
TEMP = TEMP xor W[i/8]
END IF
ELSE IF I is multiple of 4 but not multiple of 8
do SubWord to TEMP
END IF
W[i]=w[i-8] xor TEMP
END FOR
return W
}
function SubWord(W) {
Substitute every element of W with value in corresponding index of SBOX (3)
return W
}
function RotWord(W) {
Circular-shift W to the left once (4)
return W
}
B. Cipher()
---PSEUDOCODE---
function Cipher(INPUT, W) {
Let STATE be an array with size [4][4]
FOR 0<ROUND<14 because it is 256-bit cipher (1)
do SubBytes to STATE
do ShiftRows to STATE
do MixColumns to STATE
STATE=AddRoundKey(STATE,W,ROUND,4)
END FOR
do SubBytes to state
do ShiftRows to state
STATE=AddRoundKey(STATE,W,14,4)
return STATE in form of one dimensional array (2)
}
---PSEUDOCODE---
function encrypt(PLAINTEXT, PASSWORD, NBITS) {
Let BLOCKSIZE be 16
Let NBYTES be 32
Let KEY be password
Let COUNTERBLOCK be an array with size [16]
Set the first 8 bytes of COUNTERBLOCK with random number (1)
Set the last 8 bytes of COUNTERBLOCK with 0, as a counter
Let CTRTXT be the first 8 bytes of COUNTERBLOCK
Create KEYSCHEDULE with KeyExpansion(KEY) (2)
Divide PLAINTEXT into BLOCKCOUNT parts of size BLOCKSIZE
Concatenate the random number CTRTXT to the front of CIPHERTEXT (3)
Process all parts B, FOR 0<=B<BLOCKCOUNT (4)
Increase the last 8 bit of COUNTERBLOCK. Starting is 00000000
Create CIPHERCNTR=Cipher(COUNTERBLOCK,KEYSCHEDULE)
CIPHERTEXT += CIPHERCNTR xor PLAINTEXT[B*BLOCKSIZE]
END FOR
return CIPHERTEXT in form of one dimensional array (5)
}
- The time complexity of this program is linear to the number of characters in the
input file
- This program includes error handling in bad input file, and bad user’s input
4. CONCLUSIONS AND RECOMMENDATIONS
Advanced Encryption Standard is widely used as a encryption standard in ciphering. The
ciphering is useful to modify information into a form that can only be understood using a key
to decipher it.
The Advanced Encryption Standard is the most recent standard of encryption to date. It is
being used in a large variety of sectors including national security, education, and banking. In
the future, it may be used in a broader area, such as encrypting personal information or
confidential information exchange such as emails, bank account information, and passwords.
This demo has succesfully shown the process of encypting and decrypting using the
Advanced Encryption Standard. It has shown how an information is transformed into
encrypted data and how to decrypt it back to a coherent information.
Reference
F.S. Tsai and C.K. Chan (Eds), Cyber Security, Pearson Education, 2006
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf