Programming Projects - Fall 2006
                                     last modified   08/30/06
      project rules and guidelines 

 Fips guidelines for cryptographic programming 

  Unit 1 projects  received
  Unit 2 projects  received

-------------------------------------------------------------------
    Guidelines for grading cryptography projects...



    Documentation  (10 percent)
         proper indentation, easy to read  style
         ample use of comments

    program run (20 percent)
         no errors at compile time
         no warnings at compile time
         no runtime errors, no logic errors

    program style (12 percent)
         easy to understand, good variable names
         supporting README document, clear and precise
                 directions
         program organization, file organization, no mystery code

   program validity (58 percent)
        produces correct results
        produces ALL results it should
        doesn't produce any spurious results
        program meets project specifications
        program appears distinct from others
        program not found "as by web search"
        elegant or clever solution

------------------------------------------------------------------------




  
  ------------------------------------------------------------------
  Unit 1**********'on time' due date Oct. 19....second date Oct. 26
  ------------------------------------------------------------------  

       1. The goal of this project is to enhance the automatic simple
          substitution solver on our web site. You need to do this
          in several steps:

           a) Write a program which measures to what degree a file
              contains meaningful English text. Perfect text would
              correspond to the highest possible measure. Other text
              near to English but not perfect might occur due to
              noise of some type, of an incomplete break of ciphertext
              or other possibilities. How you choose to create this
              measure and implement it is up to you but you should
              give the matter some thought to make sure the measure
              captures what you are trying to capture.
 
           c) You are to integrate your program described above with
              the automatated substitution solver on the class web
              site (written by Borodkin) so that it returns a proposed
              solution with fewer errors than that which a single run
              of the program would yield. There are different ways that
              you could do this. Here are some ideas you might use:

                 i) you can run the program several times with the
                    same sampling text (e.g. moby.txt) and  choose
                    the candidate that yields the highest measure of
                    English

                 ii) you can run the program several times with
                     different sampling text and choose the candidate
                     that yields the highest measure of English.

                iii) you can take two programs which yield the highest
                     measures and try to use them to yield an improvement.

              Whichever path you want to take the result should definitely
              yield an improvement to that generated by a single run.

              estimated difficulty  medium to difficult  points 50-85
              (team of two is allowed)

     2 .Write a program which attacks and attempts to solve ciphertext
          producted by the 2 by 2
          Rubik's cube cipher described  below assuming the existence
          of known plaintext 
        . You may use an anagramming approach if you wish or if you need 
          some guidance in formulating an alternative method of attack talk 
          to me and I will give you a direction to take,
               50-70 points   (team of two allowed)   
          estimated difficulty -- unknown

          encryption method --
          A block (24 characters)of text is written to the faces of a two by 
          two Rubik's (four positions to a face) cube (assume the cube is 
          colorless). 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. 
          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.
          Also...http://home.everestkc.net/ehess/cube2.html   thanks to Aaron
          Conran for this link


  
   3,   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. (This project relates
      to project 2 but you do not need to also work on 2)

        points  40-70


   4. Our text discusses the 'Autokey cipher' (see p.46-50). In this project
      you are to write a program which attacks and solves an autokey cipher. 
      One of the factors taken into consideration in evaluating your program
      will be how well it performs on a particular autokey cipher. 

        points  50-70



  5.  This project is in two parts. You can do 'a' without going on to 'b'.
      a) The purpose of this project is to map put 'chains' for a two rotor simplified version 
      of the Enigma rotor machine. (I will give you the code for this machine). Knowledge 
      of these chains will help us break the two rotor machine in a manner similar to the 
      breaking of the Enigma during World War II.
      (Since there are only two rotors it is also possible to break this system by
       brute force).
       You should write the chains that you compute to an output file.

       points   40-80
       links  first  version of 2 rotor machine
              second  version of 2 rotor machine

       b) The second part of this project is to use your work in part a to
       attack the two rotor machine. I will give you some ciphertext to try
       and break.
 
                 points  40-60


     6. Implement the method of Vigenere at either a) character format or 
        b) binary format. NOTE -- this project does not deal with the
        breaking of the Vigenere cipher.

          If you do a) you only need encrypt alphabetic characters...
          punctuation spaces, and numeric values need not be encrypted

          If you do b) you should use exclusive or instead of character shift

                     part a --   40-55 points

                     part b --   50-65 points
       --------------------------------------------------------------------
       --------------------------------------------------------------------

       Unit 2********'on time' due date  Dec. 5  'late' due date Dec. 12

        This unit has five projecs and is now complete    11/7/06


       1. In a previous semester students  wrote a 'mini' version of the Tiger
          hash (see   Wikipedia for a description http://en.wikipedia.org/wiki/Tiger_(hash)  )   
          It produces 80 bit hashes. In this project you are to try and find
          collisions in the mini Tiger hash. You may use any techniques that
          you can think of and you might want to do a little research to see
          how collisions have been produced with respect to other hashes.. 
     
                          50-75 points


       2. For those students who finished project 6 above, here is an
          opportunity to earn 30 additional points by modifying their
          programs. The idea is to modify their Vigenere ciphering systems
          by putting them in a CBC mode. For those doing character encryption
          you will need to figure out how you want to do this and will
          need to figure out how to do decryption and make sure that
          decryption works.
               If you choose this option I will give you a key and
          a file to encrypt as a baseline.
           file  and the key Vigenere key is 
          XYTBMUYT If you use IV then set it to AAAAAAAA.

                     30 points 


      3.  construct a textual hash method which maps a file of 
          text to a hash string of 8 hash characters. A text file 
          here will be considered a file of upper/lower alphabetic 
          characters, digits, and the characters + and / ( a base 
          64 format)
             You should try to make your hash as secure as possible.
             It shouldn't be immediately obvious how to create collisions,
             etc.
               points 50-70
               estimated difficulty: easy to medium

     4. Implement the ADFGVX cipher (see page 374 of Singh's text
        for a description). Your program should be able to encrypt
        and decrypt. If you are interested in this project I will give
        a file for encryption and decryption (you should include a 
        script. You can neglect any conversion to Morse code and just
        produce plaintext output.

               points 50-70
               estimated difficulty : easy to medium

         check here  for key and file details 
        

     5.  Implement ONE of the following three ciphers -----
         You can only get credit for one of the options below.

         You may find these methods defined and discussed at

             www.quadibloc.com/crypto/pp1322.htm

         Of course, you are also encouraged to read about at other
         sites also --

          a) The 'Bifid' cipher of Delastelle
             (somewhat related to the Playfair cipher)

                   50 points

          b) The Trifid Cipher
               (enhanced version of the above)

                   50 points 


          c) The Straddling Checkerboard
                another variation

                   50 points

        
          d) The 'Vic' cipher.
             more complicated and probably the most secure of the
             class of hand ciphers

                   80 points



  ----------------------------------------------------------------------