100 likes | 223 Views
Frank Rowe John Gaetano Chuck Figiel. CryptoViz. CryptoViz – The Basics. CryptoViz implements and visualizes the Data Encryption Standard (DES) algorithm. DES was used by the government and industry from 1976-1999, but is now considered insecure.
E N D
Frank Rowe John GaetanoChuck Figiel CryptoViz
CryptoViz – The Basics • CryptoViz implements and visualizes the Data Encryption Standard (DES) algorithm. • DES was used by the government and industry from 1976-1999, but is now considered insecure. • Client: Dr. Don Spickler from the Math & Computer Science Department at Salisbury University.
CryptoViz – Features • Fully implements the DES algorithm in Java. • User interface for quickly encrypting and decrypting data. • Visualizes the DES key generation algorithm using Java Swing and 2DGraphics. • Detailed interactive diagram of the DES encryption algorithm. • Built-in help system
SVN/Google Code • Subversion, a version control system. • Allows developers to maintain current and past versions of code across multiple environments. • No need to email files or swap around USB sticks. • All code changes (diffs) along with comments are saved. • Server: Google Code • Free repository for open source applications • No need to setup and configure a svn server manually • Includes a wiki , additional file hosting, and project management tools. • http://code.google.com/p/cryptoviz/ • Source code: http://code.google.com/p/cryptoviz/source/browse/#svn/trunk • Program download: http://code.google.com/p/cryptoviz/downloads/list • Changelog: http://code.google.com/p/cryptoviz/source/list • Clients: • Many available ( http://en.wikipedia.org/wiki/Comparison_of_Subversion_clients ) • For Microsoft Windows we used TortoiseSVN (gui) • Under linux we used the command line client “svn”
Development Tools • We primarily used simple text editors in Linux and Windows environments (gedit, notepad++). • Began to use Netbeans IDE about halfway through the project. • GUI creation is much easier/better. • Speeds up development through code completion and automation of other repetitive tasks.
The DES algorithm • Block cipher; uses a 64-bit block size. • Base key is 56 bits • Used to generate 16 subkeys, each of 48 bits • Done with a series of shifts and permutations • Initial permutation • 16 rounds of processing • This is the core of the algorithm, called the “Feistel Structure” • Each round uses one of the subkeys and the previous round’s output. • Each round consists of a left-right swap, an expansion function, an XOR, de-expansion function (the “S-boxes”), a permutation, and another XOR. • Final permutation
Implementing DES • BitList • Essentially a fancy array of booleans • Extends built-in BitSet class • Bit Set sometimes creates more bits than requested, doesn’t report size “properly”, and doesn’t have useful constructors. BitList fixes those issues. • BitList also attaches a “color” to each bit that sticks to it with it when the BitList is permuted or copied. • DES.permute() • Copies bits of an input BitList to an output BitList • Uses the mapping provided by an input array of integers • Bit-shifts, left-right swaps, expansion function are all implemented as permutations .
Implementing DES • S-Boxes • Reduces 6 bits down to 4 bits. • This is not a permutation. • There are 8 S-boxes, all similar. • We implemented them as a lookup table. Input is an integer (1-8) and a 6-bit BitList; output is a 4-bit Bitlist. • DES.generateKeys() • 64 bit-input, but 8 bits are unused • Returns an array of 16 BitLists, each of length 48. • DES.round() • DES.encrypt() • DES.decrypt()
Visualization • Java Graphics2D • Animates a binary string based off permutation map. • Individual bits are created as Node objects • Animation is contained within separate thread. • Overrides paintComponent method for JPanel. • Update position of nodes, repaint.
CryptoViz – The Classes • AboutFrame.java HelpAbout • BitList.java Core data type, extends BitSet • ConvertString.java Additional functions for manipulating BitLists • CryptMain.java Main class • DES.java DES implementation • EncryptPanel.java Fiestel Structure, encryption and decryption • KeyFrame.java Key Generation • MyHelpSystem.java Displays help file (credit: Dr.Spickler) • Node.java For visualization • QuickDES.java Encryption & decryption of text files • RoundPanel.java Visualize an individual round • VisualizationPanel.java Core visualization code