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

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.