Wednesday, April 20, 2011

Cryptography Engineering perfectly achieves its goal

Cryptography Engineering, by Ferguson, Schneier, and Kohno, is a revision and update of an earlier book, Practical Cryptography, by Ferguson and Schneier. (Interestingly, the older book is still in print and still being sold as new, even though Cryptography Engineering completely replaces it and I can see no reason why anyone would wish to buy or read Practical Cryptography at this point.)

Most computer science books are, at their core, books designed to teach you how to write a certain type of software. Jim Gray's book is intended to teach you how to write a database system; Richard Stevens's book is intended to teach you how to write a TCP/IP stack; the "dragon" book is intended to teach you how to write a compiler; and so forth.

The authors of Cryptography Engineering are all seasoned cryptographers, and have written books and papers on cryptography, and in addition they actively write cryptography software (e.g., the Skein hash function, one of the candidates for NIST's revised secure hash algorithm standard). So they clearly could have written such a book (and, in fact, Schneier's earlier Applied Cryptography was such a book). But this is not such a book.

The authors tell us why in their preface:

Cryptography and security engineers need to know more than how current cryptographic protocols work; they need to know how to use cryptography.

To know how to use cryptography, one must learn to think like a cryptographer.

By learning how to think like a cryptographer, you will also learn how to be a more intelligent user of cryptography. You will be able to look at existing cryptography toolkits, understand their core functionality, and know how to use them. You will also better understand the challenges involved with cryptography, and how to think about and overcome those challenges.

In my opinion, the authors succeed with this book; it does exactly what they intend it to.

If you are trying to understand the different types of block ciphers, and how to perform the cipher mode and key selection tasks that are associated with them, this is the book for you.

If you are confused about the difference between a seed, a salt, and a nonce (or even about what those terms mean), this is the book for you.

If you can't tell a message digest from a message authentication code from a secure hash from a digital signature, this is the book for you.

If you'd like to understand why key management is the hardest part of the public key cryptography infrastructure, and why certificate revocation is not the simple solution you thought it might be, this is the book for you.

Perhaps the best thing about this book is that it leaves you wanting more, yet at the same time feeling confident about your ability to learn more. That's what a computer science textbook should strive to do, and so I can recommend this book with no reservations whatsoever.