
This project is a carry-over from my freshman HNRS-110 class. At the start of the class, I wanted to do a project related to cryptography and artificial intelligence. I already had some experience with hash functions, and after reading the prior research, this project seemed to fit well with my desires. Over the course of this project, I’ve learned a lot about the sponge construction, genetic algorithms, and hash functions in general. I currently plan to go into cryptography research, so this project also aligns well with my long-term goals.
It’s difficult to describe what I do week-to-week because, until recently, each week has been something different. The first few weeks were devoted to creating a pure-Java implementation of the sponge construction, the next few to the creation of the genetic framework, and more recently work has been devoted to tuning and running the algorithms. On average, the algorithm took around 4 hours to produce a good candidate for a weakened form of a round function (word size, which is typically 8-64 bits, was reduced to 1 bit). My current weekly work concerns attacking the full problem, with word sizes of 64 bits. This will necessitate some overhauling of the genetic framework, as well as the pure-Java sponge implementation.
Over the course of the semester, I have produced several candidate functions that satisfy properties of typically secure cryptographic hash functions. 12 candidates with word size 1 bit have been created, and work is currently underway to expand the word size to 64 bits. Of these 12 candidates, several can be shown to trivially have good randomness of output, with more rigorous testing of randomness still underway.