Preface to Cryptography Engineering
Most books cover what cryptography is—what current cryptographic designs are and how existing cryptographic protocols, like SSL/TLS, work. Bruce Schneier's earlier book, Applied Cryptography, is like this. Such books serve as invaluable references for anyone working with cryptography. But such books are also one step removed from the needs of cryptography and security engineers in practice. 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. This book is designed to help you achieve that goal. We do this through immersion. Rather than broadly discuss all the protocols one might encounter in cryptography, we dive deeply into the design and analysis of specific, concrete protocols. We walk you—hand-in-hand—through how we go about designing cryptographic protocols. We share with you the reasons we make certain design decisions over others, and point out potential pitfalls along the way.
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.
This book also serves as a gateway to learning about computer security. Computer security is, in many ways, a superset of cryptography. Both computer security and cryptography are about designing and evaluating objects (systems or algorithms) intended to behave in certain ways even in the presence of an adversary. In this book, you will learn how to think about the adversary in the context of cryptography. Once you know how to think like adversaries, you can apply that mindset to the security of computer systems in general.
This book began with Practical Cryptography by Niels Ferguson and Bruce Schneier, and evolved with the addition of Tadayoshi Kohno—Yoshi—as an author. Yoshi is a professor of computer science and engineering at the University of Washington, and also a past colleague of Niels and Bruce. Yoshi took Practical Cryptography and revised it to be suitable for classroom use and self-study, while staying true to the goals and themes of Niels's and Bruce's original book.
There are numerous ways to read this book. You can use it as a self-study guide for applied cryptographic engineering, or you can use it in a course. A quarter- or semester-long course on computer security might use this book as the foundation for a 6-week intensive unit on cryptography. This book could also serve as the foundation for a full quarter- or semester-long course on cryptography, augmented with additional advanced material if time allows. To facilitate classroom use, we present several possible syllabi below.
The following syllabus is appropriate for a 6-week intensive unit on cryptography. For this 6-week unit, we assume that the contents of Chapter 1 are discussed separately, in the broader context of computer security in general.
- Week 1: Chapters 2, 3, and 4;
- Week 2: Chapters 5, 6, and 7;
- Week 3: Chapters 8, 9, and 10;
- Week 4: Chapters 11, 12, and 13;
- Week 5: Chapters 14, 15, 16, and 17;
- Week 6: Chapters 18, 19, 20, and 21.
The following syllabus is for a 10-week quarter on cryptography engineering.
- Week 1: Chapters 1 and 2;
- Week 2: Chapters 3 and 4;
- Week 3: Chapters 5 and 6;
- Week 4: Chapters 7 and 8;
- Week 5: Chapters 9 and 10;
- Week 6: Chapters 11 and 12;
- Week 7: Chapters 13 and 14;
- Week 8: Chapters 15, 16, and 17;
- Week 9: Chapters 18, 19, 20;
- Week 10: Chapter 21.
The following syllabus is appropriate for schools with 12-week semesters. It can also be augmented with advanced materials in cryptography or computer security for longer semesters.
- Week 1: Chapters 1 and 2;
- Week 2: Chapters 3 and 4;
- Week 3: Chapters 5 and 6;
- Week 4: Chapter 7;
- Week 5: Chapters 8 and 9;
- Week 6: Chapters 9 (continued) and 10;
- Week 7: Chapters 11 and 12;
- Week 8: Chapters 13 and 14;
- Week 9: Chapters 15 and 16;
- Week 10: Chapters 17 and 18;
- Week 11: Chapters 19 and 20;
- Week 12: Chapter 21.
This book has several types of exercises, and we encourage readers to complete as many of these exercises as possible. There are traditional exercises designed to test your understanding of the technical properties of cryptography. However, since our goal is to help you learn how to think about cryptography in real systems, we have also introduced a set of non-traditional exercises (see Section 1.12). Cryptography doesn't exist in isolation; rather, cryptography is only part of a larger ecosystem consisting of other hardware and software systems, people, economics, ethics, cultural differences, politics, law, and so on. Our non-traditional exercises are explicitly designed to force you to think about cryptography in the context of real systems and the surrounding ecosystem. These exercises will provide you with an opportunity to directly apply the contents of this book as thought exercises to real systems. Moreover, by weaving these exercises together throughout this book, you will be able to see your knowledge grow as you progress from chapter to chapter.
While we strove to make this book as error-free as possible, errors have undoubtedly crept in. We maintain an online errata list for this book. The procedure for using this errata list is below.
- Before reading this book, go to http://www.schneier.com/ce.html and download the current list of corrections.
- If you find an error in the book, please check to see if it is already on the list.
- If it is not on the list, please alert us at cryptographyengineering@schneier.com. We will add the error to the list.
We wish you a wonderful journey through cryptography engineering. Cryptography is a wonderful and fascinating topic. We hope you learn a great deal from this book, and come to enjoy cryptography engineering as much as we do.
| October 2009 | Niels Ferguson
Redmond, Washington USA niels@ferguson.net |
Bruce Schneier
Minneapolis, Minnesota USA schneier@schneier.com |
| Tadayoshi Kohno
Seattle, Washington USA yoshi@cs.washington.edu |