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
----------------------------------------------------------------------