Cryptography is an indispensable tool for protecting information in computer systems. This course is a continuation of Crypto I and explains the inner workings of public-key systems and cryptographic protocols. Students will learn how to reason about the security of cryptographic constructions and how to apply this knowledge to real-world applications. The course begins with constructions for digital signatures and their applications. We will then discuss protocols for user authentication and zero-knowledge protocols. Next we will turn to privacy applications of cryptography supporting anonymous credentials and private database lookup. We will conclude with more advanced topics including multi-party computation and elliptic curve cryptography. Throughout the course students will be exposed to many exciting open problems in the field. The course will include written homeworks and optional programming labs. The material is self-contained, but the course assumes knowledge of the topics covered in Crypto I as well as a basic understanding of discrete probability theory.
The course includes optional programming assignments and some programming background will be helpful. We will also point to online resources that can help students find the necessary background.
The course is mostly self contained, however some knowledge of discrete probability will be helpful. The wikibooks article on discrete probability should give sufficient background.