Review:
Applied Cryptography, by Bruce Schneier
| Publisher: |
John Wiley & Sons |
| Copyright: |
1996 |
| ISBN: |
0-471-11709-9 |
| Format: |
Trade paperback |
| Pages: |
621 |
This is the next entry in the series of Russ reading books that he bought
years ago and never got around to reading. Thankfully, this time, the
book has aged somewhat better.
This review is for the second edition of
Applied Cryptography,
published in 1996. Given how important computer security has become, and
how central cryptography is to computer security, one might think that the
passage of 17 years would make a book effectively obsolete. This turns
out not to be the case. Yes, Rijndael (the current AES standard and the
most widely-used block cipher), Camellia (the up-and-comer in the block
cipher world), and the SHA-2 hash postdate this book and aren't discussed.
Yes, there have been some further developments in elliptic-curve
public-key cryptography. And yes, much of the political information in
this book, as well as the patent situation for public-key cryptosystems,
is now mostly of historical interest. But a surprising amount of this
book still applies directly.
Partly that's because much of
Applied Cryptography is focused on
general principles, classes of algorithms, and cryptographic protocols,
and those do not change quickly. A rather amazing number of techniques
and protocols still in widespread use today originated in the 1970s.
Block ciphers, stream ciphers, cipher modes, public-key systems, signature
systems, hash functions, key exchange, secret splitting, key management,
and other, similar topics have not changed substantially. And even in the
area of specific algorithms, DES is still in use (unfortunately) and its
analysis is valuable for understanding any block cipher. RC4, Triple DES,
CAST, RSA, MD4, MD5, and SHA-1 are still part of the cryptography
landscape, and Schneier was already warning against using MD5 in 1996.
The source code included in this book has, thankfully, been made obsolete
by widely-available, high-quality free implementations of all common
ciphers, available for any modern operating system. But the math, the
explanations, and much of the cryptanalysis is still quite relevant.
While it contains a comprehensive introduction to cryptographic concepts,
Applied Cryptography is structured more like a reference manual
than a tutorial. The first two chapters provide some foundations. Then,
a wide variety of protocols, from the common to the completely esoteric,
are discussed across the subsequent four chapters. There are four
chapters on the basics of ciphers, another chapter on the mathematics, and
then the longest part of the book: twelve chapters that provide a tour of
all major and several interesting minor protocols that existed in 1996.
These are organized into block ciphers, stream ciphers (and pseudo-random
number generators), hash functions, and public-key systems. An entire
chapter is devoted to the history and analysis of DES, and I think that
was my favorite chapter of the book. Not only is it worth understanding
how DES works, but it also provides a comprehensive introduction to the
complexities of block cipher design, the politics of interactions with the
NSA, and a fascinating history of early computer cryptosystems.
Finally,
Applied Cryptography closes with chapters on real-world
systems and on politics. The politics section is mostly a historical
curiosity, as is much of the chapter on real-world systems. Schneier
discusses some of the PKCS and X.509 protocols here but doesn't use SSL as
one of his examples despite its specification predating this book (perhaps
the most glaring omission of the book). But he does discuss Kerberos
(which is of personal interest to me), and it was useful to see it
analyzed in the broader context of this sort of book.
Those who read Schneier's blog regularly, or who have read any of his
other books, will know that he's concise,
incisive, and very readable, even with difficult material. I think he
does err on the side of compactness this is not a book that handholds
the reader or explains something more than once but there's a lot of
ground to cover, so I can't really blame him. Expect to have to read the
more difficult parts several times, and (at least on a first read) expect
to just skip past some of the most complex sections as probably not worth
the effort. But I think Schneier does a great job structuring the book so
that one comes away with a high-level impression and overview sufficient
to make informed guesses about capabilities and relative difficulty even
if one doesn't have the patience to work through the details.
I suspect most readers will want to skim at least part of this book.
Unless you're willing to do a lot of background reading to understand the
math, or a lot of careful study to follow the detailed descriptions and
flaws in often-obscure algorithms, the algorithm discussions start to
blend together. I found myself skipping a lot of the math and focusing on
the basic descriptions and the cryptanalysis, particularly for the obscure
ciphers. Many of the algorithms are also highly opaque and of obscure
benefit; I doubt I will ever care about blind signatures or oblivious
transfer, and I struggled to wrap my mind around the details of bit
commitment (although it's apparently important in zero knowledge proofs,
which in turn are relevant to authentication). But this is not the sort
of book where you have to read every word. It's very well-structured,
provides clear resynchronization points for readers who have had enough of
a particular topic, and marks the topics that are more obscure or of
dubious general usefulness.
The most useful parts of this book, in my opinion, are the basic
conceptual introductions to each class of cryptographic algorithm or
protocol, and those chapters are excellent. I've been working in applied
computer security, at the application and deployment level, for years, and
this is the first time that I've felt like I really understood the
difference between a block cipher and a stream cipher, or the implications
of block cipher mode selection.
Applied Cryptography is also a
fascinating exercise in adjusting one's intuition for where the complexity
lies. It's a memorable experience to move from the chapters on block
ciphers, full of S-boxes and complex mixing and magic numbers, into the
far more straightforward mathematical analysis of stream ciphers. Or the
mathematical simplicity of RSA (although quite a bit of complexity is
lurking on the cryptanalysis side, much of which is only touched on here).
Of more historical interest, but still quite impressive, is that
Applied Cryptography doubles as a comprehensive literature review.
Not only does it cover nearly every algorithm in use at the time, it
discusses the cryptography literature on nearly every topic with brief
summaries of results and lines of investigation. The references section
is a stunning 66 pages of small print featuring 1,653 references, and
those are mentioned and put in context throughout the book. I'm not
personally interested in chasing those lines of research further, and of
course 17 years means there are many new papers that are as important to
read today, but it's obvious that this book would have been an amazing and
invaluable map to the research territory when it was first published.
There are now newer books on this topic that you should consider if you're
purchasing a book today.
Cryptography Engineering in particular is
in my to-read pile, and I'm interested to see how much of this book it
could replace, although I believe it's lighter on the mathematical
analysis and details. But I think
Applied Cryptography still has a
place on the bookshelf of any computer security professional. Schneier is
succinct, detailed, straightforward, and comprehensive, at least for 1996,
and I know I'll be reaching for this book the next time I forget the
details of CFB mode and then get hopelessly confused by the Wikipedia
article on the topic.
Rating: 8 out of 10