# Project 1

CS
463/680, Dr. Lawlor

The project is designed as a way for you
to do hands-on work with cryptographic systems in a field of your
choice. Each project should contain at least some of each of these
three things:
- Research: look up the prior work, to see what other people
have done. Prioritize books or PDF academic papers over HTML
(blog posts, comments, Wikipedia). Students taking the
graduate section will be expected to present the prior academic
work using actual citations, and format
their writeup like a scientific paper.

- Code: write some actual hands-on crypto code. Any language is
fine, although what you turn in should be structured nicely and
well commented.
- Analysis: check the statistics, histograms, or correlations of
your output. Or measure the runtime performance, in nanoseconds
per byte or round. Or *something* quantifiable and numeric.

## Deadlines

Wednesday,
February 11, in class: initial project topic discussion. Be
prepared to talk about your project for about five minutes.

Wednesday,
February 25: Turn in rough draft code & brief writeup.

Mon-Fri, March
9-13: Present results in class (about 15 minutes each).

*Spring
break is March 16-20*

Wednesday,
March 25: Turn in final draft code & brief writeup.

## Suggested
Topics

Feel free to pick one of these, combine
two or more, or pick some unlisted topic!
- Implement a cryptanalytic attack, like brute force key
enumeration (pick a managable keyspace), meet-in-the-middle
hashtable attack for split keys, or any of the many flavors of
statistical analysis.
- Implement your own Feistel-type symmetric cipher, or a
Feisteloid round-style cipher. Be sure to analyze the runtime
performance, differential behavior, and statistical output of
your cipher for varying keys and number of rounds.
- Implement your own round-based cryptographic hash function,
using a non-invertible round function. Again, analyze the
statistics and differential output of your hash for varying
number of rounds.
- Implement any decent existing cipher or hash (AES, DES, RC5,
SHA-1, SHA-256 are all reasonable choices).
- Do something interesting in a Galois Finite Field, either a
prime field or a binary field. For example, it's likely that the
highest performance GPU implementations of binary field
operations will not use tables, but independently manipulate
bits.