Programming Projects - Spring 2003 instructions for submitting projects 1. a) There are several program tools on our web site which help break columnar transposition ciphers. However, none of these programs are as good as they could be. Some of them need definite improvements. In this project you are to strengthen one or more of these tools or to write your own which is superior to any of the existing tools. 30 - 60 points b) For additional points you need to augment a transposition solver by building in an anagramming ability. This option should allow the user to anagram rows or columns of the ciphertext which has been written into rectangular form. You may use anagram tools which have already been written but they must be integrated into one of the existing columnar transposition tools. The number of points awarded will depend on how successful your program is. The number of points most likely will vary between 30 and 70. due April 2 2. Implement a homophonic cipher system (encryption and decryption) using the method that was used to construct the Beale Ciphers. That is, the random number used to replace a character comes from some document of text (of at least medium size). Recall that the one of the Beale ciphers uses the Declaration of Independence. Points 40-70 due April 2 3. This third project is to implement a 'Kasiski type' approach to binary files that may be the result of large block key encryption. Your program should find repeated substrings (of ciphertext) of length at least 10 and the distances between them. You should then estimate possible key lengths from the information you gather. You might want to look up various substring matching algorithms and examples of dealing with binary files (see 'General tools' under 'Cipher breaking tools' on our website. You will probably want to write a program which will first encrypt files by exclusive 'oring' binary plaintext with a binary key block. points (50-80) due April 2. 4. On the class website under 'Historical ciphers' there is a description of Thomas Jefferson's cipher wheel. Implement a simulation of the cipher wheel so that you can perform encryption and decryption. Allow for a 'space' as one of the characters listed across each edge of a wheel (26 letters and a space permuted along the edge of each ring.) points (40-60) due April 2 5. Implement a cipher system which first does simple substitution and then follows the first round of encryption with columnar transposition. You may use parts of preexisting software on website. Your program should also be able to decrypt by first doing columnar transposition applying the proper column permutation writing out the text and then applying the reverse substitution. (60-80). due April 30.(date revised from April 2) This program should be demoed. 6. Write programs which do three dimensional transposition. A block (54 characters)of text is written to the faces of a three by three Rubik's (nine positions to a face) cube. Some Rubik twists are applied (their type and order is the key). The data is written out is some order. Next block is read in, etc. Your program should be able to encrypt and decrypt. (80-100). due April 30. (second date May 5) This program should be demoed. A set of notes on the mathematics of Rubik's cube can be found at : http://web.usna.navy.mil/~wdj/rubik_nts.htm thanks to Jeff Walton for this link. Thanks to Justin Reilly for suggesting these last two projects. 7. Write your own version of a Lucifer-like cipher system. The key length (it should be at least 16 bits) and other specifications are up to you. There should be a write-up included with your code which describes the details of your function. You might want to talk to me for some advice and suggestions before you start this designing and coding this system. The points for this project are in the range 40-70. three or four students have successfully completed this cipher. due April 30 (second date May 5) 8. There are several block encryption methods (at the bit level) available on our web site (e.g. Jim Irwin's MiniDES, Peggy Dagley's Lucifer like method). You are to embed one of these methods (or possibly your own) in a driver which allows the user to choose the different modes of encryption: ECB, CBC, CFB that he wants. You will need to modify the code accordingly for the different modes. You could dovetail project 7 into this project. due April 30 (second date May 5) 60-80 points BONUS Points For 2003 students who have already completed the equivalent of 150 or more points worth of projects. Below are some 'smaller' type projects for fewer points. 1. Implement the Diffie-Hellman key exchange protocol using a language with a large integer package. 30 points 2. Implement the threshold method discussed in class (using LaGrange interpolating functions) using a language with a large integer package. 35 points