Timeshift Encryption Algorithm

Timeshift Logo

This is my flagship project. I suppose it's unfair to say "my" flagship project, I've been working on this project for a large chunk of my life with my dear friend Karl. Together, we have been writing Timeshift for over 6 years at the time of this posting. There's as interesting a back story to what brought us to write it, as is the story of how Timeshift works.

First to the backstory. Random fact of the day: Karl and I met online and worked together for 5 years before finally meeting in person. We met in a chatroom and started talking about programming. It wasn't long before we both talked about an interest in cryptography. I was drawn to the concept of destroying data beyond all recognition, within an inch of its life, and then decrypting it back to precisely 100% of what it was, not a bit out of place. Shortly there after, we began working individually on small little ciphers, nothing the crypto world would be proud of, but they were a start and were a lot of fun. He would write something and send it to me, and I'd bring up some way to improve it. I'd send him something and he'd find something wrong with it. We passed along constructive criticism and learned a lot from each other. It didn't take long before we decided to work together on a new encryption. The rest is history in the making.

Timeshift is a symmetrical-key stream cipher with key sizes from 512 to as large as 4096 bits. Inspired by the Enigma Machine of World War II, Timeshift could be described as a Linear Feedback Shift Register cipher, although fundamental changes have been made to the original design of an LFSR. Throughout the development cycles, aside from obviously focusing on security, we also focused on speed. We would periodically test with 100MB of data, enough to give us a good time but not so much that we were constantly sitting around waiting on the test. I remember our first speed test timing in around 1 minute 10 seconds. It was almost shameful by comparison to our goals, but it worked. At just over 1 MiB/s, we had a taste of success and worked to improve it. Little by little we chiseled away at the time and our most recent timed tests are coming in at an amazing .6 seconds. Just over half a second. That's ~170 MiB/s!

I don't want to post the source code yet for multiple reasons. One is that the code is still changing, sometimes even drastically changing. Another reason is that a few of the mathematical constructs we're using aren't completely explained yet, and we'd like to define these constructs in a paper before releasing the code that uses them. We've been working on those concepts for a year now and we've made a lot of progress, but there's still a lot to be made.

blog comments powered by Disqus