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