Parallel-brute-forcer
A parallel and distributed algorithm to brute force the standard symmetric-key block cipher DES by using the Remote Method Invocation (RMI) which is an API that provides a mechanism to create distributed application in java. This is for a project in Parallel and Distributed Computing(CSE4001) under the guidance of Prof. Manoov R of SCOPE School, VIT, Vellore.
A video demonstration of the application is available here.
Read the full project wiki
Made By,
- Vishwajeetsinh Jadeja (15BIT0136)
- Jigyasa Srivastava (15BCE2080)
DES
The Data Encryption Standard (DES) is a symmetric-key block cipher published by the National Institute of Standards and Technology (NIST). DES is an implementation of a Feistel Cipher. It uses 16 round Feistel structure. The block size is 64-bit. Though, key length is 64-bit, DES has an effective key length of 56 bits, since 8 of the 64 bits of the key are not used by the encryption algorithm (function as check bits only).
RMI
RMI stands for Remote Method Invocation. It is a mechanism that allows an object residing in one system (JVM) to access/invoke an object running on another JVM. RMI is used to build distributed applications; it provides remote communication between Java programs. It is provided in the package java.rmi.
How To Run
- Compile All Files
javac *.java - Create stub and skeleton using the rmic tool
rmic DecryptorRemote - Start RMI in one terminal
rmiregistry 5000 - Start server in Server Node
java RMIServer - Start RMI Client in Client Node
java RMIClient
Classes Used
| Class | Usage | Accessed From |
|---|---|---|
| DES | For the core DES Cipher Functionality | Client and server nodes |
| Decryptor | Abstract class illustrating functionalities of the application | Client and Server |
| DecryptorRemote | Implementation of Decryptor interface | Client and Server |
| RMIServer | Server instance providing the marshaled DecryptorRemote objects to clients | Server |
| RMIClient | Client accessing the application | Client |
Results and conclusion
The average time taken for the algorithm to run in Serial execution on a single node (Microsoft Windows 10, 16GB RAM) is: 10.779 seconds where as the time taken for the same code to run on two devices both the the similar configuration as above is 439 milliseconds. This huge speedup is a result that the keyspace of the Cipher (10000 integer values), was divided amongst the two nodes and they processed the data until a satisfactory response was generated. Thus, distributed computing can provide better performance.
Future Enhancements
- Add a graphical display of metrics
- Better distribution of keyspace based on the capacity of the nodes
- Better analysis of the terminating condition
- Multiple servers for distribution of marshalling load.
Log in or sign up for Devpost to join the conversation.