Programming Projects - Spring 2005
      instructions for submitting projects    
      project rules and guidelines 

 Fips guidelines for cryptographic programming 


          **note added**  It should be assumed that input and output
          for the projects below are files and not standard input and
          standard output.-- or at least the user should have that 
          choice.

       1. To get an advance start on this project you will need to do
          some advance reading on DES (the Data Encryption Standard).
          We already have a mini DES program that has been written in
          the past. For reference to past projects see projects 6a, 16
          and 37 in the 'Big List'. These references and programs posted
          on our site may give you some implementational ideas.
          This new project is to write an
          even 'smaller' version of the DES. Something we might call
          Mini DES. If you are interested in this project you will need
          to obtain some xerox material from me.
          points 60-80
          **NOTE** added later. This program should be able to encrypt and
          decipher files.

       2. A previous project dealt with constructing a permutation cipher
          based on the 3 by 3 Rubik's cube. See project 33 in the 'Big List'.
          This project is simpler; it is to construct a cipher on the 2 by
          2 Rubik's cube. You system should encipher and decipher.
          You will want to see some references on the
          Internet concerning Rubik's cube. 
          points 60-80    see note at top

       3.  Recently secure hash methods have drawn attention because, 
           under computational pressure, they have yielded collisions 
           which is considered a weakness. The feeling is if collisions
           can be discovered then collisions can be engineered. This project 
           requires you to read ahead and study hash methods.  The project 
           here is to construct a hash methods. You can either:
 
              a) 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).  points 50-70
 
              b) a binary hash function which a hash function maps maps a 
                 file to a binary string of 32 bits. points 60-80
 
          see note at top

         You will need to design your own hash function or I can furnish some
         possibilities for you to implement. You should pay some regard to
         a 'secure hash' (see Stinson p. 118)

   First three projects refer to first due date
   all the following projects refer to the second due date

-----------------------------------------------------------------------------
    *************************************************************************
        For projects turned in for 'phase 2' we will be much more 
        critical with out grading. A program which does not meet
        the stated requirements will immediately be judged as starting
        from the minimum number of points and working down from there.
        For programs which perform encryption and decryption a decryption
        of an encrypted file should produce the original plaintext 
        exactly (unless otherwise noted). Punctuation, spacing and textural
        format should be identical. See these links for guidance with
        program structure--

           C Coding Standards -- adopt these styles
            C++ Coding Standards --
           java coding conventions 

         Each program header should contain - in addition - the segments

          program description --
               description goes here
               what does your code do?

          program compilation --------------

               description goes here
               how do you complile your package?
          
          additional notes

               what platform(s) was this package developed and tested on?                      what platforms does this package run on?
               what additional assumptions are required of user input?
               What additional information is needed to run your package?

 ******************************************************************************

      4- Project 1 in the 'Big List'. If you are interested in this
         project I will give you a handout that describes the method.
         (team of 2 allowed)
         **note** file input expected here. This program can be written
         as interactive helper. If so, user can guide progress by  
         interactive input. 


      5.  Implement the version of the homophonic cipher as it was implemented
          in creating the second Beale cipher and as it was described in class.
          Recall that integers are determined by the position of words in a
          chosen document. If you need some additional details see me; but 
          you can also 
          refer to our text on the history of the Beale Ciphers. Your program 
          should be able to encrypt and decrypt.  40-70 points. 
          *see note at top*
     
      6.  Write a program which attacks and attempts to solve ciphertext
          producted by the 2 by 2
          Rubik's cube cipher described in project 2 assuming the existence
          of known plaintext (without having to anagram.)
        . If you need some guidance in formulating the
          method of attack talk to me and I will give you a direction to
          take.     50-70 points   (team of two allowed)   
          *see note at top*

      7.  Can we associate 'signatures' with types of ciphers? Often the
          difficulty in solving a cipher results from our not knowing
          the encryption technique used. This makes it difficult to mount
          an effective attack. The purpose of this project is to do a
          thorough statistical study of different types of ciphers - both
          at the character and at the bit level - to attempt to develop
          signatures for different categories of ciphers e.g. Vigenere,
          Hills Cipher, Playfair, columnar transposition, mini DES, DES,
          etc. Such a signature would entail possibly: IC, entropy, and
          other statistical parameters. Even just a partial success would
          prove to be a useful tool. This project could well prove to be
          more time consuming that some of the others. Statistics will 
          needed to be gathered from different types of ciphertext.

                    50-110   (teams of two allowed) 

      8.  GSM phone systems (Global Systems for Mobile communications)
          use the stream cipher A5 for the generation of keys. A GSM 
          message is based on 228 bit frames each frame gets encrypted
          with a 228 bit key generated by stream. A5 is based on
          an irregularly clocked trio of three register LFSR systems where
          the registers are pairwise relatively prime (19,22 and 23
          respectively). See handout. This project is to create a system
          which generates keys in this manner. You are helped out by the
          fact that I have LFSR code for registers of user supplied length.
          I will supply you with the source of the LFSR code.
          So all that needs to be done is modify this code properly and
          set up the clocking and resulting key stream.
            after you have set up the key stream you need to then check
            it using the tests that will be discussed soon in class.

                    50 - 90 points    posted March 9

   
      9.  If you've made a nice improvement to any of the class tools
          you've used this semester or believe that you can make an
          interesting improvement --then that will be worth some points.

                    30-60 points   posted  March 11


     10.  This project is to convert a text string to a decimal integer
          in preparation for the RSA crypto scheme. In the past students
          have used an easy but not so efficient method. For example

                 for the   string   'cab' the ASCII translation would be

                 999798   which was treated as the integer to be processed.

          However, the conventional treatment is to convert 99, 97, 98 to
          their hex values - then cab becomes a hex string of 6 hex digits-
          this is then converted to a decimal integer

                 so cat becomes   636162  a hex string which becomes the
          integer    6*(16)^5 + 2*(16)^4 + 6*(16)^3 + 1*(16)^2 +6*(16)+ 2

          this integer would then be encrypted.
          Write a function which given a file of text and a user input
          block size converts it to a series of decimal integers as 
          described above.

                            50-70 points
---------------------------------this is all of the projects---------------
-----------------------although there may be some small 'bonus' projects---