Programming Projects - Spring 2000 1.(=24) Several students in the past have written applications which perform linear algebra in a mod system. However these efforts can definitely be improved on. Write a program which allows the user to read in a matrix, matrices, or linear system and specify a modulus. The user should be able to specify that he/she wants: matrix multiplication or solution of a linear system or or the inverse (if it exists) of a given matrix with respect to a mod system that is he/she specifies. If the matrix is singular an appropriate message should be given. Results should be able to be written out to a file. 50-65 points (due March 29) 2.(=25) For this project you may do any of a,b, or c independently. However if you are going to do b) you should probably do a) first. a) Write a program which implements the method of 'fractionated Morse code'. Use a 0 for . (dot), 1 for (dash), and 2 for | (separator). Your program should be able to encrypt and decrypt files or plaintext from the keyboard. 40 points. (due March 29) b) Write a program which attempts to break a cipher of the type in part a. See the handout for suggestions.(40-50 points) The number of points will depend in large part how successful your program is. Your program should expect input from a ascii or binary file. (due May 8) c) Morse code redivision- plaintext in morse code can be manipulated to possible yield latent messages. As an example....take the word THREE. In morse code this is 1 0000 010 0 0 which can be rewritten (redivisioned) 1000 001 000 which is the morse for BUS. Write a program which will convert a document to morse then look for 'meaningful' submessages. You might consider this project in conjunction with project 5.(You might want to see the book 'Times 17' by Gareth Penn, and his theories about the infamous Zodiac killer). points depend on how well your program works -- somewhere between 40 and 60. Extra points for Java applets. (due May 8) due March 29 3.(=15) Write a program which is a GF(q^n) calculator. This should be an interactive program which allows the user to perform basic calculations in the finite fields GF(q^n). For the purposes of this project n can be taken to be two. The project then reduces to a certain kind of arithmetic on bit strings. You should be able to do addition, subtraction, multiplication, exponentiation, and find multiplicative inverses. 40-55 points. due March 29 4.(=3) Write a program (possibly interactive) which attempts to automate the breaking of a simple substitution cipher. The user may have occasion to steer the decryption process but for the most part the program should make intelligent choices for a sequence of single or multiple character substitutions and in some manner measure its progress toward the final solution (possibly by looking for key words of plaintext or by statistical indicators). Human intervention is allowed but should be minimal. Your program should, for example, be able to solve shift substitutions. Can it solve cipher one? Your program will be tested on several simple substitution ciphers. This project is somewhat challenging and previous attempts by students have been disappointing with a couple of exceptions. Several years ago a student was able to write a program which worked quite well. The number of points possible for this project is in the range 75-100 depending on how well your program works. Warning: no points given for a program which simply acts like a tool for substitution ciphers similar to the one already given out. No student has completed this project as specified above. Some students have made partial progress. Warning- don't select this project lightly. This program (3) must be demoed. due May 8 5. Write a program which performs anagramming of a given phrase. That is, given a phrase it should construct all (most) meaningfull anagrams of that phrase. Some programs of this type can be found on the internet. In order to get a good idea of what is required for this project you should investigate some of these anagramming demonstations. The length of the phrase should be up to at least 20 characters. A successful program could be integrated with our columnar transposition tools. The number of points awarded will depend on how successful your program is. The number should vary between 40 and 80. Extra bonus points for Java applets. 6. Implement LFSR encryption and decryption at the bit level. Your implemention should closely follow the details of the method as it was discussed in class and is discussed in the text. Your program should read from a file and produce an encrypted binary file (not a text file of 0's and 1's - that's too inefficient with space.) 40 - 50 points 7.(=17) The purpose of this project is to compute the approximate density of primes. It is an attempt to answer the questions 'how many primes are there between 1 and n?' or 'asymptotically how many primes are there between m and n, where m and n are very large integers?' The project consists of two parts: a) write a probabilistic prime generator in C++ (using BIGNUM). Use the Miller-Rabin algorithm discussed in Stinson to determine probabilistic primes. b) and use the program of part a) to calculate the density of primes between 1 and 10e12 and test against the prediction of the famous prime number theorem. See links to the prime number theorem on this web site. 50-70 points due May 8 8. (=6) a) Design and write the code for a "mini" version of DES. The key length should be in the neighborhood of 32 bits. You will need to design : permutations, expansions , S boxes, construction of subkeys, etc. It will be a version of DES on a smaller scale. Remember that decryption should be essentially the same algorithm with the key schedule run backwards. You should work the design out carefully before you start any programming. Minimal points are given for a slight modification to DES or a program which is easily transformable to DES -for instance, starting with a 32 bit key, expanding it to 56 bits and then using DES. Points for this option are between 60-90. due May 8 9. Write a program using Bignum or LIP (or possibly Java) which implements the Knapsack Cipher (Merkle-Hellman). Your block size should be at least 64 bits. This program should both encrypt and decrypt files. In its best form the program should ask the user for the desired block size (in characters or bits). Also in its best form it should ask the user whether they want to enter the required data (superincreasing vector, modulus, multiplier or have it generated). To start this project now you will need to read ahead in Stinson. The appropriate material begins on page 191. 40-60 points. These are all the projects that will be assigned this semester.