ISSN: 2229-371X
Saptarshi Chatterjee*1, Debdeep Basu 1, Ankita Bose1, Surajit Bhowmik 1 and Asoke Nath1 Department of Computer Science, St. Xavier?s College(Autonomous), Kolkata, West Bengal, India |
Corresponding Author: Saptarshi Chatterjee, E-mail: sapishere.chatterjee@gmail.com |
Related article at Pubmed, Scholar Google |
Visit for more related articles at Journal of Global Research in Computer Sciences
Nath et al developed a method Multi Way Feedback Encryption Standard Version-I [18] recently, where the authors used both forward and backward feedback from left to right and from right to left on the plain text along with the key. In MWFES-I, the ASCII value of plain text is added with key and forward feedback (FF) and backward feedback (BF) to obtain intermediate cipher text. The initial FF and BF are taken to be 0. The intermediate cipher text is taken modulo operation with 256 to get cipher text. This cipher text is taken as feedback for the next column. In the second round we calculate the cipher text from the RHS. In the MWFES-II, the authors have used a much more general approach. The FF and BF have been applied using skip by n-columns; where „n‟ can be 0 to any number less than the length of the plain text. In the present method (Modified Multiway Feedback Encryption Standard, Version -2), the authors have introduced two different skips „n1‟ and „n2‟. We perform „n1‟ skips for forward feedback (that is, from the left), and „n2‟ skip for backward feedback (that is, from the right). „n1‟ and „n2‟ may or may not be equal and is taken as a function of the generated keypad. The authors applied the present method on some standard plain texts such as 1024 ASCII „0‟, 1024 ASCII „1‟, 1024 ASCII „2‟ and 1024 ASCII „3‟ and the frequency analysis shows the encrypted texts are totally random. Initially, the user has to enter a secret key (seed). The key-expansion algorithm generates an enlarged keypad of the size of the plain-text from the seed. This keypad is used for further encryption and decryption. The present method is very effective as the encrypted text changes drastically on varying the skip „n1‟ and „n2‟. Modified MWFES-2 can be applied to encrypt any short message, password, confidential message or any other important document. The results show that the present method is free from standard attacks such as differential attack, known plain text attack etc.
Keywords |
MWFES, ASCII, Confidential Message, Encryption |
INTRODUCTION |
Data encryption is a very important research area now-a-days. Plain text or clear text should not be used for sending confidential messages because the security might get compromised. In the last two decades, quite a number of encryption algorithms have been developed. Some of the methods are almost unbreakable and are used widely in different sectors like business, academic etc. There is also a parallel process going on, that is, to break the encryption algorithm using some common attacks such as middle-man attack, differential attack, known plain text attack, brute force attack etc. Nath et al developed various cryptographic algorithms such as MSA, DJSA, DJMNA, TTJSA, MES-I,II,III, UES-I,II,III,IV, BLES-I,II,III,IV [1-15]. Nath et al for the first time introduce feedback in Vernam cipher method to develop generalized Vernam Cipher Method. Nath et al developed Multi Way Feedback Encryption Standard Ver-I(MWFES-I)[18] where the authors used plain texts, randomized key, forward feedback(FF) and backward feedback(BF) simultaneously to encrypt any plain text. The authors used FF from LHS and BF from RHS and in this way the entire file was encrypted. In the present method, Modified MWFES-II [19] e authors have made the system even more general. Depending on the key entered by the user, one can skip „n1âÃâ¬ÃŸ number of characters while performing forward feedback and „n2âÃâ¬ÃŸ number of characters while performing backward feedback. „n1âÃâ¬ÃŸ and „n2âÃâ¬ÃŸ varies from 0 to any number less than the length of the file. The results show that the encryption process depends a lot on theses skip factors. This method is a novel method because the skip characters can be different in different blocks of characters. The present encryption method can be applied multiple times to make the system fully secured. Thorough tests were conducted on some standard plain text files and it was found that it is absolutely impossible for any intruder to extract any plain text from encrypted text using any brute force method. The results show that the present method is also free from any kind of known plain text or differential attack. |
ALGORITHMS FOR MODIFIED MWFES-2 |
In the present section we will be discussing the encryption algorithm, key generation algorithm as well as decryption algorithm. |
Algorithm for Function Encryption() |
Step 1: Input „ptâÃâ¬ÃŸ(Plain Text),âÃâ¬ÃŸseedâÃâ¬ÃŸ(secret key) |
Step 2: Calculate integral part of square root of Plain Text length |
Step 3: Call KeyGeneration function to get complete key in „keyâÃâ¬ÃŸ |
Step 4: Get forward_skip, backward _skip from the key. |
Step 5: Call encryption_method(pt,key,forward_skip, backward_skip) to get Cipher Text „ctâÃâ¬ÃŸ Step 6: End |
Algorithm For Function Encryption_Method (pt,key,forward_skip, backward_skip) |
Step 1: i=1 to length(pt) do |
Step 2: sum[i]=sum of ASCII codes of pt, key, ff, bf |
Step 3: modulo of (sum[i] ,256) added to ct |
Step 4: If forward skip exceeds length(pt) bring it back to the front |
Step 5: Initialize „indâÃâ¬ÃŸ to keep tab of backward feedback |
Step 6: sum[ind]=sum of ASCII codes of pt, key, ff, bf |
Step 7: modulo of (sum[ind],256) added to ct |
Step 8: If backward skip exceeds length(pt) bring it back to the front |
Step 9: If i<length(pt) then i=i+1 and go to Step 2 else return ct array to calling function |
Algorithm for Function Key_Generation(seed[],n) |
From the secret_key (seed), the program will generate an enlarged keypad. We keep this keypad in a square matrix having dimensions equal to the nearest greater perfect square of the Plain Text length. The first element of this keypad is taken to be the sum of the ASCII codes of the characters in the seed. Now the next elements are simply values that are linearly multiplied with the sum, i.e k*sum for k=1, 2, 3 etc. If there is any repetition of the original sum, then the program will modify the initial sum to be sum=sum+1 and k=1 and the process will continue. The value of sum and its subsequent multiplications are kept within the boundaries of 0-255 by applying the modulo operations on the numbers at every iteration and only after that, the numbers are added to the keypad matrix. The elements of the matrix were reshuffled using some simple operations such as upshift(), leftshift(), diagonal1_shift(), downshift(), rightshift(), diagonal2_shift() etc. These functions were at first called seed length number of times. The order of calling these functions should follow the constraint that leftshift() shouldnâÃâ¬ÃŸt be preceded or succeeded by rightshift(). Similarly upshift() shouldnâÃâ¬ÃŸt precede or succeed downshift(). Now, another variable called Randomization Number was calculated from the generated matrix by adding the diagonal values and then bringing it down to 0-255 by modular operation. The generated matrix was permuted again by calling the various functions Randomization Number of times. Security can be further enhanced by permuting the order in which the functions are called, but maintaining the basic calling constraints. The final key was thus developed using various properties of the seed as well as intrinsic properties of the keypad which is then used by the encryption and decryption methods to find out the different required parameters at each stage of the individual processes. |
Key generation method: |
Step 1: Initialise seed_len with value of the length of seed |
Step 2: Add ASCII codes of the seed characters and store it in sum |
Step 3: Initialise a 2 dimensional „keyâÃâ¬ÃŸ array with nxn elements and initialize „sum1âÃâ¬ÃŸ with the value of sum |
Step 4: for i=1 to n do |
Step 5: for j=1 to n do |
Step 6: key[i,j]= modulo of(sum1,256) |
Step 7: If modulo of(sum1,256)==modulo of(sum,256),then go to Step 8 else j=j+1 and go to Step 6 |
Step 8: sum =modulo of(sum+1,256) |
Step 9: sum1=mod(sum,256); |
Step 10: If j<n then j=j+1 and go to Step 6 else go to Step 11 |
Step 11: If i<n then i=i+1 and go to Step 5 else go to Step 12 |
Step 12: for i=1 to seed_len do |
Step 13: Call all Shifting and shuffling operations one by one. |
Step 14: If i<seed_len then i=i+1 and go to Step 13 else go to |
Step 15:Add all the diagonal terms and store the sum in „randomization_numberâÃâ¬ÃŸ |
Step 16: Call all Shifting and shuffling operations one by one „randomization_numberâÃâ¬ÃŸ number of times |
Step 17: Return „keyâÃâ¬ÃŸ array to calling function |
Algorithm for Function Clockwise(a[],n,i) |
Step 1: Start from the top left corner of „iâÃâ¬ÃŸth row of matrix a[][] |
Step 2: Keeping that row and column as the circular boundary of the matrix and neglecting all elements that do not fall in this circle,we shift each element to the right |
Step 3: Return array a[][] to the calling function |
Algorithm for Function Anti_Clockwise (a[],n,i) |
Step 1: Start from the top left corner of „iâÃâ¬ÃŸth row of matrix a[][] |
Step 2: Keeping that row and column as the circular boundary of the matrix and neglecting all elements that do not fall in this circle,we shift each element to the left |
Step 3: Return array a[][] to the calling function |
Algorithm for Function Left_Shift(a[],n) |
Step 1: for row =1 to n do |
Step 2: Copy all elements of the row to the right of this row to this row of array a[][] |
Step 3: If row<=n then row =row-1 and go to Step 2 else go to |
Step 4 |
Step 5: Return array a[][] to the calling function |
Algorithm for Function Right_Shift(a[],n) |
Step 1: for row =1 to n do |
Step 2: Copy all elements of the row to the left of this row to this row of array a[][] |
Step 3: If row<=n then row =row-1 and go to Step 2 else go to Step 4 |
Step 5: Return array a[][] to the calling function |
Algorithm for Function Up_Shift(a[],n) |
Step 1: for column =1 to n do |
Step 2: Copy all elements of the column below this column to this column of array a[][] |
Step 3: If column<=n then column =column-1 and go to Step 2 else go to Step 4 |
Step 5: Return array a[][] to the calling function |
Algorithm for Function Down_Shift(a[],n) |
Step 1: for column =1 to n do |
Step 2: Copy all elements of the column above this column to this column of array a[][] |
Step 3: If column<=n then column =column-1 and go to Step 2 else go to Step 4 |
Step 4: Return array a[][] to the calling function |
Algorithm for Function Diagonal1_Shift(a[],n) |
Step 1: Beginning from top left corner of array a[][] copy all diagonal elements onto their adjacent elements |
Step 2: Return array a[][] to Calling function |
Algorithm for Function Diagonal2_Shift(a[],n) |
Step 1: Beginning from top left corner of array a[][] copy all diagonal elements onto their adjacent elements |
Step 2: Return array a[][] to Calling function |
Algorithm For Function Decryption() |
Step 1: Input encrypted „ctâÃâ¬ÃŸ(Cipher Text) and „seedâÃâ¬ÃŸ(secret key). |
Step 2: Calculate integral part of square root of Cipher Text length |
Step 3: Call Key Generation function to get complete key in „keyâÃâ¬ÃŸ that was obtained during encryption process |
Step 4: Get forward_skip and backward_skip from the generated key. |
Step 5: Call decryption_method |
(ct,key,forward_skip,backward_skip) to get retrieved plaintext. Step 6: End |
Algorithm for Function Decryption_Method (ct[],key[], forward_skip,backward_skip) |
Step 1: We generate the list of feedback transfers for the block using function Generate List. |
Step 2: for k=2*length(ct):-1:length(ct)+1 do |
Step 3: We call the various functions like whatIsIn and whatIsInBetween in order to figure out the contents of each elements and what they may contain. |
Step 4: Since each element can have at most 2 contents at the time we store the final contents of each in sub1 and sub2 |
Step 5: The final subtracted value is stored in check. |
Step 6: If k>=length(ct)+1then k=k-1 and go to Step 3 else go to step 7 |
Step 7: Return decrypted PlainText to calling function |
Algorithm for Function ConditionCheck (number,i,j,size,v[]) |
Step 1: if i*j!=0, go to step 2,else go to step 3 |
Step 2: flag=0 |
Step 3: if i!=0 go to Step 4,else go to step 8 |
Step 4: if v[Call oldPosition(i,size)]==number, go to step 5, else go to step 6 |
Step 5: pos=Call oldPosition(i,size) |
Step 6: pos=Call lastPosition(i,size) |
Step 8: if v[Call oldPosition(j,size)]==number, go to step 9,else go to step 10 |
Step 9: pos=Call oldPosition(j,size) |
Step 10: pos=Call lastPosition(j,length) |
Step 11: flag1=mod(pos,2) |
Step 12: if flag1=0, go to step 13,else go to step 14 |
Step 13: flag=2 |
Step 14: flag=flag1 |
Step 15: Return flag to the calling function |
Algorithm for Function Is_Changed (number,position,forward_skip,backward_skip,size,u[],v[], ct[],ff[],bf[]) |
Step 1: Now we begin by identifying the last change that has occurred in number. |
Step 2: We store the actual value to be subtracted in „subâÃâ¬ÃŸ |
Step 3: [i,j]=Call function whatIsInBetween to determine the intermediate values |
Step 4: We also determine the immediate values by calling the function whatIsIn |
Step 5: Depending on the value of the immediate values we either add the initial forward or backward feedback or we proceed to add all the previously added values into sub. |
Step 6: After all the values that have been added in the encryption process are determined and their values added to sub we return sub to the Calling function. |
Algorithm for Function What_Is_In (number,size,forward_skip,backward_skip,v[]) |
Step 1: Call function last position of in order to determine the start from the last occurrence of the character „number „destination array list v[]. |
Step 2: From that point we try to work out whether that is the changed value of that element or not out the beginning of the tree of values that have been inserted into |
Step 3: If it is a changed occurrence we try to figure this element thus resulting in the final value of the element |
Step 4: Return the values in the element to the calling function |
Algorithm for Function What_Is_In_Between (number,size,forward_skip,backward_skip,v[]) |
Step 1: Begin by calling the function whatIsIn and figuring out what the immediate content of „numberâÃâ¬ÃŸ is |
Step 2: Next we try to determine what are intermediate values that have crept into this „numberâÃâ¬ÃŸ during the encryption process |
Step 3: We need these intermediate contents in order to subtract these contents and decrypt the result |
Step 4: Return the intermediate values to the calling function. |
Algorithm for Function GenerateList (size,forward_skip,backward_skip) |
Step 1: Initialise source with 1 |
SteP 2: Input source serially into the u[] array |
Step 3: Calculate destination for particular source depending on forward_skip and store destination in v[] array |
Step 4: Now initialize source to size |
Step 5: Repeat Steps 2,3,4 for backward_skip |
Step 6: Return u[] and v[] to the calling function |
Algorithm For Function OldPosition (number,size) |
Step 1:currrent_pos = Call function last_Position_of (number, size) |
Step 2: first_pos = 2*size - current_pos+1 |
Step 3:-Return first_pos to the calling function. |
Algorithm for Function LastPosition (number,size) |
Step 1: if number <= ceiling of (size/2); go to Step 3 |
Step 2: if number >ceiling (size/2); go to Step 4 |
Step 3: last_ pos = 2*size - 2*(number-1);âÃâ¬ÃŸ |
Step 4: last_pos = 2*(number-1); |
Step 5: Return last_pos to the calling function. |
RESULTS AND DISCUSSIONS |
The following list contains the result of some test cases using our encryption method. For each case, we have the plain text, the key, the number of shifts and their corresponding cipher text. The test cases we have shown here are mostly assorted and random phrases or texts. The spectral analysis of standard ASCII „0âÃâ¬ÃŸ, ASCII „1âÃâ¬ÃŸ, ASCII „2âÃâ¬ÃŸ , ASCII „3âÃâ¬ÃŸ are also given. |
Inference |
From the observations made in the table above we see that even for two similar Plain Texts (as shown in SL. NO. 1. And 2.), the Cipher Texts are drastically different owing to the fact that there is just a slight change in the backward skip making the result completely haphazard. We repeat the experiment for different Plain Texts keeping a few constraints in mind, such as the skip and key and even then we do not see any seemingly visible pattern for deciphering the Plain Text. Even if one character does turn out to be similar in a rare case that would be due to the key being same for both the test cases. |
Table 2. Encryption of a Small Paragraph |
Inference |
Comparing the result of this paragraph with the table that we had obtained before we see that there is no way of linking the Plain Text with the Cipher Text. If we scrutinize the result in the table above for similar Plain Text characters too we find that in no two places are the Cipher Text characters same. Using a randomized key generated by the key generation algorithm we have managed to remove any discrepancies that may have occurred while using the same key for two Plain Texts. |
CONCLUSION AND FUTURE SCOPE |
The present method is tested on various types of files such as .doc, .jpg, .bmp, .exe, .com, .dbf, .xls, .wav, .avi and the results were quite satisfactory. The encryption and decryption methods work smoothly. In the present method the encrypted text cannot be decrypted without knowing the exact initial random matrix. The size of random matrix taken is at least 16x16. The numbers in 16x16 may be arranged in 256! Ways. The present method is free from any kind of brute force attack or known plain text attack. The present Modified MWFES Ver-2 method may be applied to encrypt any short message, password, confidential key. One can also apply this method to encrypt data in sensor networks. |
ACKNOWLEDGMENT |
The authors are very much grateful to the Department of Computer Science for giving the opportunity to work on symmetric key Cryptography. A.N sincerely expresses his gratitude to Fr. Dr. Felix Raj, Principal of St. XavierâÃâ¬ÃŸs College (Autonomous) for giving constant encouragement in doing research in the field of cryptography. |
References |
|