Cryptography refers to algorithmic techniques for protecting information from adversaries. While traditional goals of cryptography include preventing unintended disclosure of that information or detecting its unauthorized alteration, the field has grown in the last 40 years to include much richer primitives and protocols. Cryptographic techniques are already the basis for many security mechanisms in common use today, including secure communication protocols (e.g., TLS, IPSec), disk encryption facilities (e.g., Microsoft’s BitLocker), and signed code updates. The use of cryptography will undoubtedly grow in the future, and so an understanding of modern cryptography is warranted for anyone developing technologies for use in environments where adversaries might be present. This class will focus on cryptographic primitives that are in common use today, with an emphasis on understanding why they are secure and for what purposes they should be used. Topics that will be covered include:
- Basics of abstract algebra;
- Pseudorandom functions and permutations;
- Symmetric encryption algorithms;
- Cryptographic hash functions;
- Message authentication codes;
- Information-theoretic security;
- Number theory and number-theoretic primitives;
- Asymmetric encryption;
- Digital signature schemes;
- Elliptic curve algorithms; and
- Side-channel attacks.
Time permitting, the class will also cover more advanced topics, such as interactive proofs and zero-knowledge proofs, and post-quantum cryptography.