Cryptography is where security engineering meets mathematics. It provides us with the
tools that underlie most modern security protocols. It is probably the key enabling
technology for protecting distributed systems, yet it is surprisingly hard to do right. As
we’ve already seen in Chapter 2, “Protocols,” cryptography has often been used to
protect the wrong things, or used to protect them in the wrong way. We’ll see plenty
more examples when we start looking in detail at real applications.