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