[freebsd banner]

Cryptography

I have been interested in cryptography for a very long time, even before computer science. Back in 1980, I was offered a book called « La guerre des codes secrets », a French translation of David Kahn’s The Codebreakers and I just devoured it countless times (that was way before I discovered that it was really a butchered translation, missing more than 3/4 of the technical descriptions and schemas). Of course, when Kahn did a revised edition of his book in 1996, I bought it.

This book is really more about history through the cryptographic lens but also describe many of the old paper-and-pencil kind of system so it is a very useful reference with a lot of pictures and tables (and some pictures, also missing from the translated one).

One recent book I read is about Elizebeth Smith Friedman who was not only William F. Friedman’s wife but foremost a cryptanalyst of great skills, on par with her husband. Very interesting read.

Modern crypto

For modern cryptography (mostly based on maths), Bruce Schneier’s book Applied Cryptography is the best reference book available (although it is showing its age now, missing some of the recent ciphers). It does not cover all the new systems that have appeared since of course but most principles are described in the book. Some of them are old like the venerable DES or very recent like the new NIST standard, AES.

Hash functions are also an important part of modern crypto, used for authentication and signing along with Public Key systems like RSA and DSA.

Ancient crypto

I am mostly interest in oldish systems, generally “paper and pencil” ones such as ADFGVX, Vigenere and many others including some more recent systems like Chaocipher.

I’m not covering what used to be called “codes” before computer science as they are just a variation on monoalphabetic ciphers, just using phrases and sentences instead of individual letters (« nomenclateur » in French). Some of them can be more complicated (like using a two-part numbering scheme – think of the commercial code behind the Dreyfus case) but basically, there are less fun to implement :)

One interesting point though: I learned recently through an nice article from Steven Bellovin that the One-time pad was probably invented some years before previously thought as a superencipherment system to his code by Frank Miller.

old-crypto project

Most of these systems are implemented in my old-crypto project, implemented in Ruby as a library suited for a RubyGem.

Here is the list of ciphers implemented here:

I now have a Golang version of most of the code: It is available on Github and in addition to the various tests, it also features benchmarks for almost everything.