Crypto Project 2
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 measure *something* quantifiable and numeric.
Deadlines
Friday, April 19, in class: be prepared to talk about your
project topic for about two minutes, and try to contribute
something useful for each other student's project topic (maybe
just "That's a neat topic!"). I'll be in Texas (for the National
Collegiate Cyber-Defense Contest, along with half the class!), but
I'll try to connect into BlackBoard during this class.
Monday, April 22: no class, instead go and work on your projects!
Wednesday, May 1: Rough draft due.
Friday, May 3 and Monday, May 6: Present project results in class
(6-8 minutes each).
Wednesday, May 8: Final exam, and final draft code by midnight.
Suggested Topics
Feel free to pick one of these, combine two or more, or pick some
unlisted topic!
- Do something interesting with Elliptic Curves, because in
crypto work they are The New Hotnesstm.
- 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).
- Implement any decent existing digital signature algorithm
(RSA, DSA, ECDSA 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.