Programming Projects - Spring 2001
      
   

  1.   a) Write a program which attempts to break a fractionated Morse
          code type of cipher. A handout will be given out with
          suggestions.At least one program exists on our web site which
          encrypts and decrypts in this manner. (60-70) 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 March 28)

       b) 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 March 28)

            

  2. 
      a) 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 q 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,                   10 pts
          subtraction,                10 pts
          multiplication,             20 pts
          exponentiation,             20 pts              
          multiplicative inverses.    20 pts 
          (due March 28)

      b) Use the results of a) to implement one of the methods of encryption
         that we have studied this semester (or will study).Use GF(2^n) instead
         of the integers mod n.  See me for a discussion of points.
         (due March 28)

  3.  a)Several programs exist on our website which are tools for helping solve
       simple substitution ciphers. In this project you are to either alter
       one of these programs (recommended) or start fresh and augment the
       output. Presently these programs list the frequency (count and %) of
       the ciphertext. You are make changes so that it also prints out the
       'social index' of each cipher text character. To see what I mean by
       this term it's best to refer to Singh's book page 22. For a given
       character Ch a table should be given (as on page 22) which lists 
       the number of times Ch is adjacent to the other alphabetic characters. 
       Such an index might be useful for the breaking of these ciphers and
       might be of use, for instance, in project 4. (50 points).
       (due March 28)

      b)The same modification and improvement needs to be made to the
        homophonic cipher tool. The following modifications need to be
        made. 
              i) revise program so that single digit numbers can be counted
             ii) print out social index for each number, or at least those
                 with highest index
             iii) highest freq. trigrams should be indexed.
                 (due March 28)    (50 points)
  4.  
      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 7

  5.  There are several program tools on our web site which help break
      columnar transposition ciphers. In this project you are too
      strengthen this tool 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 should vary between 50 and 100. 
      (due May 7)

  6.  In the past students have simulated the workings of a simplified
      Enigma rotor machine.(See project 2 on the big list of programming
      projects). This simplified machine only had two rotors and didn't
      have a plugboard or reflector. Consequently it was easy to break
      the ciphers from this machine. This project is more ambitious.
      Here you are to simulate the full working enigma as described in
      Singh's book (see pages 127-165). If you need to you may make some
      simplifying assumptions ---1. There are only three rotors to
      choose from - not five. 2. These three rotors are fixed in position
      (as opposed to the actual situtation). If you intend to choose this
      project then you should read the material mentioned above very
      carefully.  70-100 points (due March 28)

  7.  This project is a chance to implement your own cipher system --that
      is, some system of your own design. You will need to carefully design
      your own original method that is capable of encrypting and decrypting
      files. If you choose this option you should submit some plans to me
      concerning your design. The number of points here is negotiable, 
      depending on how ambitious you are. Some possibilities for you to
      think about are: nonlinear feedback shift cipher, columnar 
      transposition of bit blocks, some Java encryption, decryption system
      with nice GUI(due May 7)
  

  8.  Implement the attack on running key ciphers as discussed in the recent
      class handout. This project is more fully described as #1 in the
      list of all projects ("the complete list").


  9.  Implement the Rabin cryptosystem that was discussed in class. Use a
      a language that permits the use of large integers (Big Integer, LIP,
      bignum, etc.)  due May 7    60-80


          this is all the projects that will be assigned this semester
          more bonus projects may be assigned

      bonus projects 

  1.  In our text there is described a method for solving the 'Discrete
      Log Problem' in the case of a prime p for which the prime divisors of
      p - 1 are small. Write a program using some form of 'big integer'
      class or library which implements this method and give some examples.
      20 points

  2.  Implement, using large integers, the Las Vegas algorithm for finding
      the square root of quadratic residues (the case p =1 mod 4) in Z/p.
      include the easy case (p = 3 mod 4).
      20 points

  3.  Kennedy's (with Hannebahn's improvement) RSA tools program could use
      some improvements. The separate program which does fast encryption
      and decryption could be integrated as an option. The whole tool could
      be rewritten in Java.
         30-50 points