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