The prerequisites for CS 161 are:

We assume basic knowledge of C and Python. Some basic familiarity with Unix systems is helpful for Project 1. Project 2 is done in Go and we won’t have any lectures on Go syntax, so we expect you to be able to learn the basics of the language on your own.


Lectures and corresponding slides will be posted on the course website. Each lecture will be a series of pre-recorded videos with short questions to check your understanding (these questions are not graded). You can watch lectures at your own pace, but note that assignment content will follow the lecture schedule.

We will offer live versions of some lectures to encourage more interactivity. These lectures will be recorded and posted on the website afterward.

Discussion Sections

Discussion sections will be held at scheduled times in Zoom meetings, and recordings will be posted after each week. The discussion schedule will be posted on the course calendar. You can attend any discussion section you want.

There will be one two-hour LOST section. This section will be more question-oriented and is recommended for students who want to spend more time reviewing the week’s material.

Office Hours

Office hours will be held at scheduled times in Zoom meetings. We will manage office hours by using an online queue. When it is your turn, the queue system will notify you and you will be able to join the meeting with the TA.


The required readings are all linked on the course website and freely available.

The class does not have a required textbook. We have listed readings for Introduction to Computer Security by Goodrich & Tamassia and The Craft of System Security by Smith & Marchesini, but these are entirely optional. If you have trouble obtaining either textbook, feel free to contact the instructors.


There will be one midterm exam and a final exam. Exams are mandatory and synchronous (everyone takes them at the same time).

If you absolutely cannot take the exam at the scheduled times, we have one alternate time:

If you absolutely cannot take the exam at either time, please contact us on Piazza to discuss alternate exam times. You may be asked to take a short verbal exam if you choose an alternate exam time.

Both exams will be video proctored. If you don’t feel comfortable with video proctoring or are unable to set up video proctoring, please reach out to us and we will discuss alternatives (most likely an additional verbal exam).

Collaboration is not allowed on exams.

Please see the midterm logistics page for more details about the midterm.


There will be 7 weekly homeworks, usually due on Sunday night (11:59pm PT). Homeworks will be submitted electronically via Gradescope.

No late homeworks will be accepted, but we will drop your lowest homework score.

If you encounter extenuating circumstances, please let us know by filling out this form.


There will be three course projects.

You have 3 slip days to use on projects. Slip days are rounded up to the nearest day (i.e. if you submit one minute past the deadline, it counts as using one slip day). We will automatically apply slip days at the end of the semester to maximize your total project score.

We will penalize late project submissions with no remaining slip days as follows:

If you encounter extenuating circumstances, please let us know by filling out this form.


We will compute grades from a weighted average, as follows:

The class as a whole is typically curved to the department guidelines for upper-division CS classes. Previous grade distributions on Berkeleytime are also good indicators of the curve.


If you have a question, the best way to contact us is via the class Piazza site. The staff (instructors and TAs) will check the site regularly.

If your question is personal or not of interest to other students, please mark the question as private: select “Post to: Individual Student(s)/Instructor(s)” at the top and then type “Instructors” in the field underneath it.

Collaboration Policy

We believe that most students can distinguish between helping other students understand course material and cheating. Explaining a subtle point from lecture or discussing course topics is an interaction that we encourage, but you must write your homework solution strictly by yourself. You must not ask for homework/project solutions on Stack Overflow or other online sites; although you may ask for help with conceptual questions. You must not receive help on assignments from students who have taken the course in previous years, and you must not review homework or project solutions from previous years.

You must ensure that your solutions will not be visible to other students. If you use Github or another source control system to store your solutions electronically, you must ensure your account is configured so your solutions are not publicly visible. If you use Github, it offers free private repositories that allow you to keep your solutions private; please use one.

Warning: Your attention is drawn to the Department’s Policy on Academic Dishonesty. In particular, you should be aware that copying or sharing solutions, in whole or in part, from other students in the class or any other source without acknowledgment constitutes cheating. Any student found to be cheating will (1) be referred to the Office of Student Conduct, (2) receive negative points on the assignment (i.e., worse than not doing it at all), and, depending on severity, (3) fail the course.


We will be discussing attacks in this class, some of them quite nasty. None of this is in any way an invitation to undertake these attacks in any fashion other than with informed consent of all involved and affected parties. The existence of a security hole is no excuse. These issues concern not only professional ethics, but also UCB policy and state and federal law. If there is any question in your mind about what conduct is allowable, contact the instructors first.