**Why should I take this course?**

Cryptography has (in my biased opinion) the rare combination of being both a beautiful and intellectually enriching field with a large and growing impact on our society. This course will teach you some of the fundamental ideas and the exciting recent advances in this area.

**What background do I need to succeed in this course?**

This is an advanced proof-based course, and so you should have some experience with reading and writing mathematical definitions and proofs. Students who took (and did well in) any one of CS 121, CS 124, or Math 23/25/55 should have sufficient comfort in proofs for CS 127.

I will assume some comfort with **discrete mathematics and probability**, see my CS 121 lectures on mathematical background and probability.
At some points in the course we will also use some (relatively elementary) facts about concepts such as matrices, vectors, modular arithmetic and finite groups.

Also, some comfort with the general notion of algorithms and complexity (on the level covered in either CS 121 or CS 124) could be quite helpful.

I will publish a **homework zero** to help student self assess a week or so before the first lecture.

**Is this an undergraduate or a graduate course? What’s the difference between CS 127 and CS 227r?**

CS 127 can be thought of either an advanced undergraduate or beginning graduate course. We will assume no prior knowledge in cryptography and hence is accessible to undergraduates, but will proceed at a relatively fast pace so we can get to exciting advanced topics such as fully cryptocurrencies, multiparty secure computation, fully homomorphic encryption, software obfuscation, and more. It is offered in either an undergraduate (CS 127) or graduate (CS 227) version. Both will have identical lectures and problem sets, but the graduate version will have an extra final project the topic of which will be chosen by each student or team in consultation with the instructor.

**Is there programming involved?**

This is a theoretical course and it will involve no programming in its problem sets and final exam. That said, students are very welcome to do either a theoretical or programming-based final project.

**Is CS 127 an easier way to satisfy the theory requirement than CS 124?**

No. CS 127 is an advanced course that I would generally recommend CS concentrators take *after* (or in parallel to) CS 124. While it does satisfy the theory requirement, this will not be the “path of least resistance” for doing so.

**I took CS 121 with you. How will CS 127 differ?**

CS 121 is a required beginning course while CS 127 is an elective advanced course. As such CS 127 will be faster paced and have greated conceptual difficulty, though not necessarily higher workload. I will also be less “paternalistic” and treat students more like adults, both in the sense of looser policies as well as in the sense of expecting more from the students. In particular, we will not have mandatory lecture attendance and there will be a less strict collaboration policy. On the other hand, there will still be mandatory reading of lecture notes (which will be at a higher mathematical level than CS 121) with quizzes. Also, there will be no midterm and a higher fraction of the grade will be allocated to the final exam. The lectures will be mostly whiteboard based as opposed to slides, and as in CS 121 I will assume in lecture that you have read the notes beforehand.