DATA ENCRYPTION
STANDARD ALGORITHM
DES works by using the same key to
scramble and unscramble a message, so both the sender and the collector must
know and utilize the same private key. Once the go-to, symmetric-key
calculation for the encryption of electronic information, DES has been
superseded by the more secure Advanced Encryption Standard (AES) calculation.
Initially planned by researchers at
IBM in the mid 1970s, DES was approved by the U.S. government as an official
Federal Information Processing Standard (FIPS) in 1977 for the encryption of
business and touchy yet unclassified government PC information. It was the
principal encryption calculation affirmed by the U.S. government for open
exposure.
In this project our main focus is on
DES algorithm, for this project DES algorithm is used.
DES (Data Encryption
Standard) algorithm is a 16-round Feistel cipher with block size of 64 bits.
The figure below
sumarises this algorithm to its best. Plain text goes through initial
permutation process and round functions and at last final permutation is
carried on which results in giving cipher text as the desired output.
DES is
a block cipher--meaning it
operates on plaintext blocks of a given size (64-bits) and returns cipher text
. Thus DES results in a permutation among
"2 to the 64th power”. Each block of 64 bits is divided into two blocks of
32 bits each, a left half block L and a right half R.
DES
works on the 64-bit blocks using key sizes of 56- bits. The keys are
actually stored as being 64 bits long, but every 8th bit in the key is ignored.
Let M
be the plain text entered by the user. Then following step will be executed to
get desired output:
![]() |
| fig : DES ALGORITHM |
Step 1: Create 16 subkeys, 48-bits long.
The 64-bit key is permuted using PC-1. As the first in
the table is "57", this means that the 57th bit of the initial key K becomes
the 1st bit of the permuted key K1. The 49th bit of the
K becomes the 2nd bit of the K1. The 4th bit of the original key is the
last bit of the K1.
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
Next, key is devided into left and
right halves, C0 and D0,
where each half has 28 bits.
Once C0 and D0 defined, now we make sixteen blocks Cn
and Dn, 1<=n<=16. Every pair of pieces Cn and Dn is framed from the past
pair Cn-1 and Dn-1, separately, for n = 1, 2, ..., 16, utilizing the table of
"left moves" of the past square. To do a left move, move every piece
one place to left.
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
In all cases, by one left move is
implied a turn of the bits one spot to left, so that after one left shift the
bits in the 28 positions are the bits that were already in positions 2, 3,...,
28, 1.
We now shape the keys
Kn, for 1<=n<=16, by applying the permutation table to each of the
connected sets Cn Dn. Every pair has 56 bits, however PC-2 just uses 48 of
these.
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
Hence,1st of Kn is the
14th of CnDn, the 2nd be the 17th, finishing with the 48th of Kn being the 32th
of CnDn.
Step 2: Encode each 64-bit piece of information.
There is an initial
permutation IP of the 64 bits of the message information M. This rearrange the
bits as per the table, where the passages in the table demonstrate the new game
plan of the bits from their previous order. The 58th piece of M turns into the
primary piece of IP. The 50th piece of M turns into the second piece of IP. The
seventh piece of M is the last piece of IP.
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
Next partition the
permuted block IP into a left half L0 of 32 bits, and a right half R0 of 32
bits.
We now continue through
16 cycles, for 1<=n<=16, utilizing a function f which works on two blocks
- an information block of 32 bits and a key Kn of 48 bits- - to create a block
of 32 bits. Let + indicate XOR expansion.
Ln = Rn-1
Rn = Ln-1 + f(Rn-1,Kn)
This results in a last
block, for n = 16, of L16 R16. That is, in every cycle, we take the right 32
bits of the past result and make them the left 32 bits of the present step. For
the right 32 bits in the present step, we XOR the left 32 bits of the past step
with the calculation f .
Here ‘f’ is known as
round function.
To calculate f, we first
extend every block Rn-1 from 32 bits to 48 bits. This is done by utilizing a
choice table that repeats a portion of the bits in Rn-1 . We'll call the
utilization of this determination table the function E. In this manner E(Rn-1)
has a 32 bit input, and a 48 bit output.
let E be such that the
48 bits of its output, composed as 8 pieces of 6 bits each, are acquired by
selecting the bits in its inputs all together as indicated by the accompanying
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
Therefore the initial
three bits of E(Rn-1) are the bits in positions 32, 1 and 2 of Rn-1 while the
last 2 bits of E(Rn-1) are the bits in positions 32 and 1.
Next in the f calculation, XOR the output E(Rn-1)
with the key Kn:
Kn + E(Rn-1).
as far now we have
extended Rn-1 from 32 bits to 48 bits, utilizing the choice table, and XORed
the outcome with the key Kn . We now have 48 bits, or 8 gatherings of 6 bits.
We utilize these groups as locations in tables called "S
boxes"(substitution boxes). Every gathering of six bits will give us a
location in an alternate S box. Situated at that location will be a 4 bit
number. This 4 bit number will supplant the first 6 bits. The net result is
that the eight gatherings of 6 bits are changed into eight gatherings of 4 bits
(the 4-bit yields from the S boxes) for 32 bits absolute.
Compose the past result,
which is 48 bits, in the structure:
Kn + E(Rn-1)
=B1B2B3B4B5B6B7B8,
where every Bi is a
gathering of six bits. We now calculate
S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)
where Si(Bi) refers to
the output of the i-th S box.
To repeat, each of the
functions S1, S2,..., S8, takes a 6-bit obstruct as input and give a 4-bit
block as output. The table to decide S1 is appeared and clarified beneath:
S1
Column Number
Row
No. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
1 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
Here s1 is the function
and B is the block of 6 bits. then S1(B) is:
The
first and last bits of B show in base 2 a number in the decimal
range 0 to 3 (or binary 00 to 11). Let that number be a. 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 c. Look up in the table
the number in the a-th
row and c-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 example, for
input block B = 011011 the first bit is
"0" and the last bit "1" giving 01 as the row. This is row
1. The middle four bits are "1101". This is the binary equivalent of
decimal 13, so the column is column number 13. In row 1, column 13 appears 5.
This determines the output; 5 is binary 0101, so that the output is 0101. Hence S1(011011) =
0101.
The tables defining the functions S1,...,S8 are the following:
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 last stage in the
computation of f is to do a change P of the S-box O/P to get the last
estimation of f:
f =
P(S1(B1)S2(B2)...S8(B8))
The permutation P is
characterized in the accompanying table. P yields a 32-bit O/P from a 32-bit
I/P by permuting the bits of the I/P block.
P
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
In the following round,
we will have L2 = R1, which is the square we simply figured, and after that we
should compute R2 =L1 + f(R1, K2), thus on for 16 rounds. Toward the end of the
sixteenth round we have the pieces L16 and R16. We then invert the order of the
two blocks into the 64-bit block.
R16L16
what's more, apply a
last stage IP-1 as characterized by the accompanying table:
IP-1
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
That is, the yield of
the calculation has bit 40 of the preoutput block as its first piece, bit 8 as
its second piece, and so on, until bit 25 of the preoutput square is the last
piece of the O/P.

