You are on page 1of 12

KINGDOM OF SAUDI ARABIA MINISTRY ‫المملكة العربية السعودية‬

OF EDUCATION PRINCE SATTAM BIN ‫وزارة الﺘعلﻴﻢ‬


ABDULAZIZ UNIVERSITY COLLEGE OF ‫ﺟﺎمعة اﻻمﻴﺮ سﻄﺎم بﻦ ﻋﺒﺪ العﺰيﺰ‬
COMPUTER ENGINEERING AND ‫كلﻴة ﻫﻨﺪسة وﻋلﻮم الﺤﺎسﺐ‬
SCIENCES DEPARTMENT OF COMPUTER ‫ﻗﺴﻢ ﻫﻨﺪسة الﺤﺎسﺐ‬
ENGINEERING

WIRELESS & MOBILE SECURITY, CE602


HW2 Semester II 1440/1441

DR. ALI ABUAGOUB


STUDENT NAME : ABDULRAHMAN ALJOHANI
ID : 441540012
Implement the stream cipher RC4, but use
16x4-bits instead of the full 256 bytes. That is,
the state vector S is 16x4-bits. Assume that a 8
x 4-bits key of
K = [1 3 5 7 9 11 13 15], and a plaintext P = [1 2
4 6 8 10 12 14] are given.
Answer the following by demonstrating your work
step by step:
i. Initialize the state vector S and temporary vector T.
ii. Perform the initial permutation on S.
iii. Generate the key stream.
iv. Produce the ciphertext for the given plaintext P
Solution

S = [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

Now perform the initial permutation on S .

j = 0;

For i = 0 to 15

j = ( j + S[i] + T[i] ) mod 16

Swap ( S[i] , S[i] )

end

For i = 0:

j = ( 0 + 0 + 1 ) mod 16 = 1

Swap ( S[0] , S[1] );

S = [ 1 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ]

T = [1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 1:

j = ( 1 + 0 + 3 ) mod 16 = 4

Swap ( S[1] , S[4] );

S = [ 1 4 2 3 0 5 6 7 8 9 10 11 12 13 14 15 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]
For i = 2:

j = ( 4 + 2 + 5 ) mod 16 = 11

Swap ( S[2] , S[11] );

S = [ 1 4 11 3 0 5 6 7 8 9 10 2 12 13 14 15 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 3:

j = ( 11 + 3 + 7 ) mod 16 = 5

Swap ( S[3] , S[5] ) ;

S = [ 1 4 11 5 0 3 6 7 8 9 10 2 12 13 14 15 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 4:

j = ( 5 + 0 + 9 ) mod 16 = 14

Swap ( S[4] , S[14] );

S = [ 1 4 11 5 14 3 6 7 8 9 10 2 12 13 0 15 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 5:

j = ( 14 + 3 + 11 ) mod 16 = 12

Swap ( S[5] , S[12] );

S = [ 1 4 11 5 14 12 6 7 8 9 10 2 3 13 0 15 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]
For i = 6:

j = ( 12 + 6 + 13 ) mod 16 = 15

Swap ( S[6] , S[15] );

S = [ 1 4 11 5 14 12 15 7 8 9 10 2 3 13 0 6 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 7:

j = ( 15 + 7 + 15 ) mod 16 = 5

Swap ( S[7] , S[5] ) ;

S = [ 1 4 11 5 14 7 15 12 8 9 10 2 3 13 0 6 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 8:

j = ( 5 + 8 + 1 ) mod 16 = 14

Swap ( S[8] , S[14] );

S = [ 1 4 11 5 14 7 15 12 0 9 10 2 3 13 8 6 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 9:

j = ( 14 + 9 + 3 ) mod 16 = 10

Swap ( S[9] , S[10] ) ;

S = [ 1 4 11 5 14 7 15 12 0 10 9 2 3 13 8 6 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]
For i = 10:

j = ( 10 + 9 + 5 ) mod 16 = 8

Swap ( S[8] , S[10] ) ;

S = [ 1 4 11 5 14 7 15 12 9 10 0 2 3 13 8 6 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 11:

j = ( 8 + 2 + 7 ) mod 16 = 1

Swap ( S[11] , S[1] ) ;

S = [ 1 2 11 5 14 7 15 12 9 10 0 4 3 13 8 6 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 12:

j = ( 1 + 3 + 9 ) mod 16 = 13

Swap ( S[12] , S[13] );

S = [ 1 2 11 5 14 7 15 12 9 10 0 4 13 3 8 6 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 13:

j = ( 13 + 3 + 11 ) mod 16 = 11

Swap ( S[13] , S[11] );

S = [ 1 2 11 5 14 7 15 12 9 10 0 3 13 4 8 6 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]
For i = 14:

j = ( 11 + 8 +13 ) mod 16 = 0

Swap ( S[0] , S[14] );

S = [ 8 2 11 5 14 7 15 12 9 10 0 3 13 4 1 6 ]

T = [ 1 3 5 7 9 11 13 15 1 3 5 7 9 11 13 15 ]

For i = 15:

j = ( 0 + 6 + 15 ) mod 16 = 5

Swap ( S[5] , S[15] ) ;

S = [ 8 2 11 5 14 6 15 12 9 10 0 3 13 4 1 7 ]

Now I will generate 4-bits at a time , k, that we XOR with each 4-bits of
plaintext to produce the ciphertext. The 4-bits k is generated by:

i, j = 0;

while (true) {

i = ( i + 1 ) mod 16;

j = ( j + S[i] ) mod 16;

Swap ( S[i] , S[j] );

t = ( S[i] + S[j] ) mod 16;

k = S[t]; }
The first iteration :

S = [ 8 2 11 5 14 6 15 12 9 10 0 3 13 4 1 7 ]

i = ( 0 + 1 ) mod 16 = 1

j = ( 0 + S[1] ) mod 16 = 2

Swap ( S[1] , S[2] )

S = [ 8 11 2 5 14 6 15 12 9 10 0 3 13 4 1 7 ]

t = ( S[1] + S[2] ) mod 16 = 13

k = S[t] = S[13] = 4

Remember, P = [ 1 2 4 6 8 10 12 14 ]

So our first 4-bit of ciphertext is obtained by : k XOR P

4 XOR 1 = 0100 XOR 0001 = 0101 = 5

The second iteration :

S = [ 8 11 2 5 14 6 15 12 9 10 0 3 13 4 1 7 ]

i = ( 1 + 1 ) mod 16 = 2

j = ( 2 + S[2] ) mod 16 = 4

Swap ( S[2] , S[4] )

S = [ 8 11 14 5 2 6 15 12 9 10 0 3 13 4 1 7 ]

t = ( S[2]+S[4] ) mod 16 = 0

k = S[t] = S[0] = 8

The second 4-bit of ciphertext are :

8 XOR 2 = 1000 XOR 0010 = 1010 = 10


The third iteration :

S = [ 8 11 14 5 2 6 15 12 9 10 0 3 13 4 1 7 ]

i = ( 2 + 1 ) mod 16 = 3

j = ( 4 + S[3] ) mod 16 = 9

Swap ( S[3] , S[9] )

S = [ 8 11 14 10 2 6 15 12 9 5 0 3 13 4 1 7 ]

t = ( S[3] + S[9] ) mod 16 = 15

k = S[t] = S[15] = 7

The third 4-bit of ciphertext are :

7 XOR 4 = 0111 XOR 0100 = 0011 = 3

The furth iteration :

S = [ 8 11 14 10 2 6 15 12 9 5 0 3 13 4 1 7]

i = ( 3 + 1 ) mod 16 = 4

j = ( 9 + S[4] ) mod 16 = 11

Swap ( S[11] , S[4] )

S = [ 8 11 14 10 3 6 15 12 9 5 0 2 13 4 1 7 ]

t = ( S[11] + S[4] ) mod 16 = 5

k = S[t] = S[5] = 6

The furth 4-bit of ciphertext are :

6 XOR 6 = 0110 XOR 0110 = 0000 = 0


The fifth iteration :

S = [ 8 11 14 10 3 6 15 12 9 5 0 2 13 4 1 7 ]

i = ( 4 + 1 ) mod 16 = 5

j = ( 11 + S[5] ) mod 16 = 1

Swap ( S[5] , S[1] )

S = [ 8 6 14 10 3 11 15 12 9 5 0 2 13 4 1 7 ]

t = ( S[5] + S[1] ) mod 16 = 1

k = S[t] = S[1] = 6

The fifth 4-bit of ciphertext are :

6 XOR 8 = 0110 XOR 1000 = 1110 = 14

The sixth iteration :

i = ( 5 + 1 ) mod 16 = 6

j = ( 1 + S[6] ) mod 16 = 0

Swap ( S[6] , S[0] )

S = [ 15 6 14 10 3 11 8 12 9 5 0 2 13 4 1 7 ]

t = ( S[6] + S[14] ) mod 16 = 7

k = S[t] = S[7] = 12

The sixth 4-bit of ciphertext are :

12 XOR 10 = 1100 XOR 1010 = 0110 = 6


The seventh iteration :

S = [ 15 6 14 10 3 11 8 12 9 5 0 2 13 4 1 7 ]

i = ( 6 + 1 ) mod 16 = 7

j = ( 0 + S[7] ) mod 16 = 12

Swap ( S[7] , S[12] )

S = [ 15 6 14 10 3 11 8 13 9 5 0 2 12 4 1 7 ]

t = ( S[7] + S[10] ) mod 16 = 9

k = S[t] = S[9] = 5

Seventh 4-bit of ciphertext are :

5 XOR 12 = 0101 XOR 1100 = 1001 = 9

The eighth iteration :

S = [ 15 6 14 10 3 11 8 13 9 5 0 2 12 4 1 7 ]

i = ( 7 + 1 ) mod 16 = 8

j = ( 12 + S[8] ) mod 16 = 5

Swap ( S[8] , S[5] )

S = [ 15 6 14 10 3 9 8 13 11 5 0 2 12 4 1 7 ]

t = ( S[8] + S[5] ) mod 16 = 4

k = S[t] = S[4] = 3

The eighth 4-bit of ciphertext are :

3 XOR 14 = 0011 XOR 1110 = 1101 = 13


After the eighth iteration :

To encrypt the plaintext stream P = [ 1 2 4 6 8 10 12 14 ] with key


K = [1 3 5 7 9 11 13 15 ] using our simplified RC4 stream cipher we get
C = [5 10 3 0 14 6 9 13 ].

Or in binary :

P = 00010010010001101000101011001110

K = 00010011010101111001101111011111

C = 01011010001100001110011010011101

You might also like