Assignment 3, Fa17-Bse-073-B
Assignment 3, Fa17-Bse-073-B
Assignment 3, Fa17-Bse-073-B
Submitted To:
Khalid Mahmoud
Submitted By:
Faisal Qayyum
Reg#
Fa17-bse-073-b9-b
Date:
1/5/2020
………………………………………………………………………………………………………
DES working
M be the plain text message M = 0987654321FECDEF, where M is in hexadecimal (base 16)
format. Rewriting M in binary format, we get the 64-bit block of text:
M = 0000 1001 1000 0111 0110 0101 0100 0011 0010 0001 1111 1110 1100 1101 1110 1111
L = 0000 1001 1000 0111 0110 0101 0100 0011
R = 0010 0001 1111 1110 1100 1101 1110 1111
The first bit of M is "0". The last bit is "1". We read from left to right.
The keys are actually stored as being 64 bits long, but every 8th bit in the key is not used (i.e.
bits numbered 8, 16, 24, 32, 40, 48, 56, and 64). But, as you will see, the eight bits just
mentioned get eliminated when we create sub keys.
Let K be the hexadecimal key K = 133457799BBCDFF1. This gives us as the binary key
(setting 1 = 0001, 3 = 0011, etc., and grouping together every eight bits, of which the last one in
each group will be unused):
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
PC-1
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
C3 and D3 are obtained from C2 and D2, respectively, by two left shifts, and C16 and D16 are
obtained from C15 and D15, respectively, by one left shift. In all cases, by a single left shift is
meant a rotation of the bits one place to the left, so that after one left shift the bits in the 28
positions are the bits that were previously in positions 2, 3,..., 28, 1.
C0 = 1111000011001100101010101111
D0 = 0101010101100110011110001111
C1 = 1110000110011001010101011111
D1 = 1010101011001100111100011110
C2 = 1100001100110010101010111111
D2 = 0101010110011001111000111101
C3 = 0000110011001010101011111111
D3 = 0101011001100111100011110101
C4 = 0011001100101010101111111100
D4 = 0101100110011110001111010101
C5 = 1100110010101010111111110000
D5 = 0110011001111000111101010101
C6 = 0011001010101011111111000011
D6 = 1001100111100011110101010101
C7 = 1100101010101111111100001100
D7 = 0110011110001111010101010110
C8 = 0010101010111111110000110011
D8 = 1001111000111101010101011001
C9 = 0101010101111111100001100110
D9 = 0011110001111010101010110011
C10 = 0101010111111110000110011001
D10 = 1111000111101010101011001100
C11 = 0101011111111000011001100101
D11 = 1100011110101010101100110011
C12 = 0101111111100001100110010101
D12 = 0001111010101010110011001111
C13 = 0111111110000110011001010101
D13 = 0111101010101011001100111100
C14 = 1111111000011001100101010101
D14 = 1110101010101100110011110001
C15 = 1111100001100110010101010111
D15 = 1010101010110011001111000111
C16 = 1111000011001100101010101111
D16 = 0101010101100110011110001111
Iteration Number of
Number Left Shifts
1 1
2 1 3
2
4 2
5 2
6 2
7 2 8 2
9 1
10 2
11 2 12 2
13 2
14 2
15 2
16 1
Therefore, the first bit of Kn is the 14th bit of CnDn, the second bit the 17th, and so on, ending
with the 48th bit of Kn being the 32th bit of CnDn.
For the first key we have C1D1 = 1110000 1100110 0101010 1011111 1010101 0110011
0011110 0011110
PC-2
14 17 11 24 1 5
3 28 15 6 21 10 23 19
12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
IP
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
Applying the initial permutation to the block of text M, given previously, we get
M = 0000 1001 1000 0111 0110 0101 0100 0011 0010 0001 1111 1110 1100 1101 1110 1111
IP = 1110 1100 0010 0000 1110 0110 1101 1111 1110 0010 1011 0100 1110 0001 1010 1010
Here the 58th bit of M is "1", which becomes the first bit of IP. The 50th bit of M is "1", which
becomes the second bit of IP. The 7th bit of M is "0", which becomes the last bit of IP.
Divide the permuted block IP into a left half L0 of 32 bits, and a right half R0 of 32 bits. From
Let E be such that the 48 bits of its output, written as 8 blocks of 6 bits each, are obtained by
selecting the bits in its inputs in order according to the following table:
E BIT-SELECTION TABLE
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1 We
S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)
To repeat, each of the functions S1, S2,..., S8, takes a 6-bit block as input and yields a 4-bit block
as output. The table to determine S1 is shown and explained below:
S1
Column Number
Row
No. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
2 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 2 4
1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
The first and last bits of B represent in base 2 a number in the decimal range 0 to 3 (or binary 00
to 11). Let that number be i. The middle 4 bits of B represent in base 2 a number in the decimal
range 0 to 15 (binary 0000 to 1111). Let that number be j. Look up in the table the number in the
i-th row and j-th column. It is a number in the range 0 to 15 and is uniquely represented by a 4
bit block. That block is the output S1(B) of S1 for the input B.
For the first round, we obtain as the output of the eight S boxes:
S1
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S5
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S7
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S8
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
The final stage in the calculation of f is to do a permutation P of the S-box output to obtain the
final value of f:
f = P(S1(B1)S2(B2)...S8(B8))
IP yields a 32-bit output from a 32-bit input by permuting the bits of the input block.
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25
R1:
K1 = 000110 110000 001011 101111 111111 000111 000001 110010
R1 = L0 ⊕ f(R0 , K1 )
E(R2) = 110000 001110 100110 101011 110010 110010 101100 000100 000111
R3= L2⊕ f(R2 , K3 ) = 1010 1011 0000 1000 1010 0010 0101 0001
L3 = 1000 0111 0011 0101 1001 0110 0010 0011
R4:
K4 = 011100 101010 110111 010110 110110 110011 010100 011101
the permutation
R4= L3⊕ f(R3 , K4 ) = 0100 1001 0001 0100 0010 0110 1010 1111
R5:
E(R4) = 101101 010010 100010 101000 000100 001101 010101 011110
the permutation
f = 0000 0111 0001 0111 1111 1101 0011
R5= L4⊕ f(R4 , K5 ) = 1010 1100 0001 1111 0100 1101 1000 0010
R6:
K6 = 011000 111010 010100 111110 010100 000111 101100 101111
the permutation
R6= L5⊕ f(R5 , K6 ) = 1010 0001 1100 1001 0011 1001 0001
R7:
K7 = 111011 001000 010010 110111 111101 100001 100010 111100
the permutation
R7= L6⊕ f(R6 , K7 ) = 0101 1110 0011 0010 0100 0100 1110
R8:
K8 = 111101 111000 101000 111010 110000 010011 101111 111011
the permutation
R9:
K9 = 111000 001101 101111 101011 111011 011110 011110 000001
R9= L8⊕ f(R8 , K9 ) = 0111 0100 1010 1111 0110 0000 0000 0011
K10 E(R9)= 000010 110110 011000 011001 000010 100100 011001 001001
the permutation
f = 1101 1101 0010 0110 1010 0101 0001 1100
R10= L9⊕ f(R9 , K10 ) = 1100 1011 1111 0010 1010 1000 1100 0011
R11:
K11 = 001000 010101 111111 010011 110111 101101 001110 000110
K11 E(R10)= 110001 000010 000001 110110 100010 111100 010110 000001
R11= L10⊕ f(R10 , K11 ) = 0110 0010 1101 1110 1001 1101 1100 0001
R12:
K12 = 011101 010111 000111 110101 100101 000110 011111 101001
E(R11) = 101100 000101 011011 111101 010011 111011 111000 000010
K12 E(R11)= 110001 010010 011100 001000 110110 111101 100111 101011
the permutation
R12= L11⊕ f(R11 , K12 ) = 1011 0011 1111 0100 0110 1000 1101 0100
R13:
K13 = 100101 111100 010111 010001 111110 101011 101001 000001
K13 E(R12)= 110011 011011 101001 110011 111010 111010 110011 101000
= 1011 1001 0110 0100 0011 1101 0101 1001 After
the permutation
R13= L12⊕ f(R12 , K13 ) = 0101 1000 0100 0111 1110 0111 0100 1111
L13 = 1011 0011 1111 0100 0110 1000 1101 0100
R14:
K14 = 010111 110100 001110 110111 111100 101110 011100 111010
K14 E(R13)= 111100 000100 000110 111000 000000 100000 110101 100100
the permutation
R14= L13⊕ f(R13 , K14 ) = 0010 0011 1111 1101 1101 1001 0111 0010
L14 = 0101 1000 0100 0111 1110 0111 0100 1111 R15:
K15 E(R14)= 101011 111110 111001 110110 110100 100001 010010 101110
= 1001 1111 1100 1110 1100 0100 1100 0010 After
the permutation
R15= L14⊕ f(R14 , K15 ) = 0001 1001 1001 1000 1011 0110 0001 01001
R16:
K16 = 110010 110011 110110 001011 000011 100001 011111 110101
K16 E(R15)= 110001 000000 000001 111010 010101 001101 011101 011101
the permutation
R16= L15⊕ f(R15 , K16 ) = 0101 1110 1011 0000 0011 0000 1110 0001
Now reverse the order of the both blocks and after that we apply the final permutation.
That is, the output of the algorithm has bit 40 of the pre-output block as its first bit, bit 8 as its
second bit, and so on, until bit 25 of the pre-output block is the last bit of the output.
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
81484AE0FE1D4139.
Decryption is inverse of encryption, follow same steps as we done above, but in the reversing
order as the sub keys are applied.