Cryptography

This course will introduce you to the foundations of modern cryptography, with an eye toward practical applications.

About The Course

Historically, cryptography was used to ensure private communication between two people with some prior relationship. More recently, its scope has expanded to include things as diverse as data integrity, secure internet-wide communication, electronic cash, secure distributed computation, and more.

Cryptography has also become ubiquitous. Perhaps unknowingly, we have all encountered applications of cryptography in our daily lives---whether by logging in using a password, making a web purchase over a secure connection, or applying a software update that is digitally signed.

This course will introduce you to the foundations of modern cryptography, with an eye toward practical applications. We will learn the importance of carefully defining security; of relying on a set of well-studied “hardness assumptions” (e.g., the hardness of factoring large numbers); and of the possibility of proving security of complicated constructions based on low-level primitives. We will not only cover these ideas in theory, but will also explore their real-world impact. You will learn about cryptographic primitives in wide use today, and see how these can be combined to develop modern protocols for secure communication.

Recommended Background

  • Intended for students majoring in either computer science or mathematics.

  • A prior course covering discrete mathematics and basic probability.

  • Prior exposure to algorithms will be helpful, but the necessary background can be picked up quickly.

  • Some of the examples and optional exercises will assume familiarity with programming in a C-like language, and some advanced topics will require mathematical maturity.