Crypto Project 1
CS 463, 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).
-
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
Friday, February 15, in class: initial project topic discussion. Be prepared to talk about your project for about two minutes.
Friday, March 1: Turn in rough draft code & brief writeup.
Monday, March 4: Present initial results in class (about 5 minutes each).
Wednesday, March 6: Midterm exam
Spring break is March 9-17
Wednesday, March 20: Present final results in class (about 5 minutes each).
Friday, March 22: 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 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. For example, it's likely that the highest performance GPU implementations of Finite Field operations will not use tables, but independently manipulate bits.