**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 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**.

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.

See **homework zero** (on the home page ) to help you self assess your background for this course.

**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. In addition I may ask students taking the graduate version to update the lecture notes for one of the lectures.

**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 recommend CS concentrators take either after or in parallel to CS 124. The material in CS 127 is conceptually more advanced than CS 124, but CS 124 is not a prerequisite, and so it is OK to take both courses in parallel.

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

CS 121 is a required introductory course while CS 127 is an elective advanced course. As such CS 127 will be faster paced and have greater 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, I will expect and assume students read the lecture notes (which are at a higher mathematical level and less polish than CS 121) *before* every lecture, 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.

**What other crypto/security courses are offered at Harvard or MIT?**

The course most similar to CS 127/227 is MIT 6.875: Cryptography. The two courses cover fairly similar material, and it would not make sense to take both. A more applied security/crypto course is 6.857: Computer and Network Security. An even more applied security course is the (highly recommended) CS 263: Systems security.