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.

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.