Cryptography

I created this page so that I can share what I'm learning in my latest pursuit: cryptography. I am particularly interested in the cryptanalysis end of it. I am slowly expanding my understanding of this artform, but it does have a pretty steep learning curve. I think that my background in both programming and security will greatly help. I will attempt to use as standard as notation as possible, but I am self-taught so I'm sure that the language will not be perfect. I plan to start the entries here (from the bottom) at a basic level and then work up to more advanced stuff. In this way, newcomers will hopefully be able to follow along as I progress (and hopefully they do as well). I am still a beginner at this and would appreciate any corrections or advice.


Crypto Basics

Learn about the very basics of cryptography. What does encryption mean? How are ciphers categorized? What uses does crypto have other than scrambling messages? How can you sign a letter without a pen? I attempt to answer these sorts of questions on this page. It is really for the beginners but it'd be cool if the experienced folks checked out gave me tips on how to improve it.



Block Ciphers

Discussed on this page are some of the elements used in the design of block ciphers. Also we examine two structures to combine these elements into a full algorithm. Much of the vocabulary that will be used in later pages is explained here. Learn about s-boxes, key schedules, linear mixing, and feistel ciphers and let me know what you think.



Cryptanalysis 101

Here we have a relatively non-technical overview of what cryptanalysis is. Known-plaintext attacks, frequency analysis, linear and differential attacks, and more is discussed.





A Linear Attack on Reduced-round RC5

This one is quite a bit more advanced than the other pages listed here. I wanted to explain an attack I discovered for RC5. It is still very young and I would appreciate any help or criticism you all have.






Linear Cryptanalysis Tutorial

After banging my head on the desk for 2 weeks, I finally found the bug in my LC code. On this page, I've explained as simply as I can how a barebones linear attack would work on a 2-round 4-bit block cipher. We'll explore finding linear approximations, what the hell a linear approximation is, and how to leverage them to break the cipher with less computational work than brute force. I haven't seen another page on the net that walks the reader through the process and provides source code to play with. If you know of a page/paper about linear cryptanalysis that doesn't require a math degree to understand, please let me know. In the meantime, enjoy this tutorial and, as always, let me know what you think.



Differential Cryptanalysis Tutorial

Here's another modern statistical attack applied to block ciphers. We'll use the classic differential attack to break a simple toy cipher and recover the key in less than brute force time. We'll also explore how to find good differentials and use them to reduce the keyspace to be searched. Enjoy and tell me your thoughts.






Multi-Round Differential Cryptanalysis

I had so much fun learning about DC while writing the last tutorial, I went a bit further with it here. The cipher attacked on this page is quite a bit beefier. With a block size of 8 bits, 4 rounds, a P-Box, and a 32 bit key; its a hefty target. We'll chain several differential characteristics together and find a chosen plaintext/ciphertext pair that satisfies this path. Next, we'll use the good pair and our path to make assumptions about the hidden intermediate values in the cipher. These assumptions allow us to recover the key in far less time than exhaustive search.