DES algorithm How to implement the Data Encryption Standard (DES) A step by step tutorial Version 1.2 The Data Encryption Standard (DES) algorithm, adopted by the US government in 1977, is a block cipher that transforms 64-bit data blocks under a 56 -bit secret key, by means of permutation and substitution. It is officially described in FIPS PUB 46. The DES algorithm is used for many applications within the government and in the private sector. This is a tutorial designed to be clear and compact, and to provide a newcomer to the DES with all the necessary information to implement it himself, without having to track down printed works or wade through C source code. I welcome any comments. Matthew Fischer
1. 1.2.3.1 Perform One or Two Circular Left Shifts on Both C [i-1] and D [i-1] to Get C [i] and d [i], respectiveness. The number of shifts per iph t in The Table Below. Iteration # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Left Shifts 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 1.2.3.2 Permute The ConcateNation C [i] D [I] as indeedice, this will yield K [i], Which IS 48 BITS long. Permutech 2 (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 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32 1.2.3.3 Loop Back to 1.2.3.1 Until K [16] HAS BEEN CALCULATED. 2 Process A 64 -bit data block. 2.1 Get a 64-bit data block. If the block is shorter than 64 bits, it should be padded as appropriate for the application. 2.2 Perform the following permutation on the data block. Initial Permutation (IP) 58 50 42 34 26 18 10 2 60 52 44 36 28 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 2.3 Split The Block Into Two Halves. The First 32 Bits Are Called L [0], And The Last 32 Bits Are Called R [0]. 2.4 Apply The 16 Subkeys to The Data Block. Start With i = 1. 2.4.1 Expand the 32-bit r [i-1] INTO 48 BITS According to the bit-selection function below. Expansion (e) 32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 20 21 20 21 22 23 24 25 25 25 25 26 27 28 29 28 29 30 31 32 1 2.4.2 Exclusive-OR E (R [I-1]) with K [i]. 2.4.3 Break e (r [i-1]) XOR K [I] INTO Eight 6-bit blocks. Bits 1-6 Are B [1], BITS 7-12 Are B [2], And So ON with bits 43-48 being b [8]. 2.4.4 Substitution The VALUES FOUND in The S-Boxes for All B [J]. Start with J =
1. All values in the s-boxes wide. 2.4.4.1 Take The 1st and 6th Bits of B [J] TOGETHER AS 2-BIT VALUE (CALL IT M) INDICATINGTING THE ROW IN S [J] To Look in for the bits 2.4.4.3 Replace B [J] With S [J] [M] [N]. Substitution Box 1 (S [1]) 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 S [2] 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 S [3] 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 S [4] 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 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 S [5] 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 S [6] 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 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 S [ 7] 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 S [8] 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 2.4.4.4 Loop Back to 2.4.4.1 Until All 8 Blocks Have Been Replaced .
2.4.5 Permute The Concatenation of B [1] Through B [8] As Indicated Below. Permutation 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 2.4.6 Exclusive-or the resulting value with l [i-1]. Thus, all together, your r [i] = l [i-1] xor P (s [1] (b [1] ) ... s [8])), WHERE B [J] IS A 6-bit block of e (r [i-1]) XOR K [i]. (The Function for R [i ] IS Written AS, R [I] = L [I-1] xor f (r [i-1], k [i]).) 2.4.7 L [I] = R [I-1]. 2.4. 8 Loop Back to 2.4.1 Until K [16] HAS BEEN Applied. 2.5 Perform The Following Permutation on The Block R [16] L [16]. Final Permutation (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 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 THIS HAS BEEN A DESCRIPTION OF HOW To Usept ONE 64-Bit Block. To Decrypt, Use The The Same Process, But Just Use The Keys K [I] in Reverse Order. That IS, INSTEAD OF Applying K [1] for the first ity, ap Ply k [16], and then k [15] for the second, on down to k [1]. Summaries: key schedule: c [0] d [0] = PC1 (key) for 1 <= i <= 16 C [i] = ls [i] (C [i-1]) D [i] = ls [i] (d [i-1]) k [i] = pc2 (C [i] d [i]) ENCIPHERMENT: L [0] R [0] = IP (plain block) for 1 <= i <= 16 L [i] = R [i-1] R [i] = L [i-1] xor f (r [I-1], K [I]) Cipher Block = FP (R [16] L [16]) Decipherment: R [16] L [16] = IP (Cipher Block) for 1 <= i <= 16 r [i-1] = L [i] L [i-1] = r [i] xor f (l [i], k [i]) plain block = fp (L [0] R [0]) TO ENCRYPT Or Decrypt More Than 64 Bits There Are Four Official Modial Modial Modial Modes (Defined In FIPS Pub 81). One is to go through the Above-described process for each block in succession.