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 class will consist of lecture videos, which are between 8 and 20 minutes in length. These contain 1-2 integrated quiz questions per video. There will also be standalone homeworks that are not part of video lectures, optional programming assignments, and a (not optional) final exam.
Statement of accomplishment will be given to students who obtain more than 70% of the maximum score on the problem sets and final exam. Students who also complete the programming assignments will receive a statement of accomplishment saying that they also completed the programming part of the course.
The class will consist of lecture videos, which are broken into small chunks, usually between eight and twelve minutes each. Some of these may contain integrated quiz questions. There will also be standalone quizzes that are not part of video lectures, and programming assignments. There will be approximately two hours worth of video content per week.
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.