Final Design
The final design of this project features an end to end encryption and decryption plan using a One Time Hardware Pad. Throughout the project there were several problems the team had to overcome detailed in the issues section. The final product gives CipherLoc a stepping stone towards creating a standalone hardware one time pad using a Xilinx FPGA.
Encryption
The encryption method for this project implemented a series of arrays that were generated prior to accessing the document using a user input password. The password given determines the data that is generated for the "Look up Tables" (LUTs). The LUTs store the ascii alphabet encrypted against a single seed value via XOR encryption. Each table gets a new seed so that when the Time of Life (TOL) expires there is an entirely new set of encrypted characters to replace the old text.
To turn the plaintext into ciphertext the code reads the input character by character and in turn replaces it with the value found at the index represented by the integer representation of that character.
Decryption
The decryption process is very similar to the encryption process. The LUTs are generated using the same password and therefore the encrypted values are stored in the arrays. To access the decrypted value you can loop through the array to find the index that the encrypted value is stored in and return that index. By converting that index to a character you get the original plaintext.
Demonstrating the encryption and decryption methods showed that we had a basic method of encrypting and decrypting. We chose to use a simple shift cipher as it is very easy to understand and verify. Verifying our cipher showed that the code we had uploaded to the board worked properly and was doing exactly as we desired.
To implement our hardware a bit we used LEDs to show how many characters were in the message we were encrypting or decrypting. In the teams final product we plan on using LEDs to show the progress of our encryption. We can demonstrate the progress of the program by using the LEDs as a progress bar to show how much more of the program we need to encrypt or decrypt.