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.
Introduction and Motivation
Classical Encryption Schemes
Principles of Modern Cryptography
Perfect Secrecy and Its Limitations
Pseudorandom Generators and Stream Ciphers
Pseudorandom Functions and Block Ciphers
Modes of Encryption
Security against Chosen-Ciphertext Attacks and Padding-Oracle Attacks
Secrecy vs. Integrity
Message Authentication Codes
Additional Applications of Hash Functions
Number Theory and Mathematical Background
The Public-Key Revolution
Key Distribution and Key Management
Diffie-Hellman Key Exchange
Definitions of Security
Hybrid Encryption and the KEM/DEM Paradigm
El Gamal Encryption and DHIES
RSA Encryption and the RSA PKCS #1 Standard
Signatures vs. MACs
RSA-Based Signatures and the RSA PKCS #1 Standard
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.
This course only offers a Verified Certificate. It will not offer the Statement of Accomplishment. You can start verifying your work for free and pay anytime before the final week of the course. Coursera Financial Aid is also available for learners with limited economic means.
If you complete the course without verifying your work, you will still earn a completion grade on your Course Records page.