Home
Practical Cryptographic Systems
601.445 (undergraduate) / 601.645 (graduate) — Fall 2026 Johns Hopkins University, Department of Computer Science
| Instructor | Matthew Green (mgreen@cs.jhu.edu) |
| Lectures | Mondays & Wednesdays, 3:00–4:15 pm |
| Location | Shaffer 307 |
| First class | Monday, August 31, 2026 |
| Office hours | TBA |
| Teaching assistants | TBA |
| Discussion | Piazza — sign up (all course communications) |
Cryptography is deployed everywhere: in TLS connections, messaging apps, disk encryption, cryptocurrencies, and the authentication systems that hold the modern Internet together. It also fails constantly — almost never because the mathematics breaks, but because real systems misuse good primitives. This course is about cryptography as it is actually deployed: how practical systems are designed, how they fail, and how to attack and fix them.
This course has been redesigned for the AI era
You may use AI coding assistants and agents on programming assignments — in fact, we encourage it, because this is how professional cryptographic engineering increasingly works. But this course grades understanding, not code artifacts. The majority of your grade comes from in-person written exams and interactive code-review sessions in which you will walk through, defend, and modify your own submissions — including the security-critical regions of your code — live, with a member of the course staff. Students who delegate their assignments to an agent without deeply understanding the result have historically found this format unpleasant. See the Syllabus for details.