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

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.