跳转至

COMPSCI 161 Computer Security

This course is taught in UC Berkeley, Fall 24 :)

This is the textbook for CS 161: Computer Security at UC Berkeley. It provides a brief survey over common topics in computer security including memory safety, cryptography, web security, and network security.

Course Description

Instructors

TAs

Prerequisites

The prerequisites for CS161 are CS61B, CS70, and CS61C.

We don’t formally enforce any prerequisites, and the enrollment system should not block you from enrolling or waitlisting if you haven’t taken the prerequisites. We will not drop you if you haven’t taken the prerequisites.

In addition to the prerequisite classes, we assume basic knowledge of C, Python, and Git. 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 a new language on your own.

CS61C Prerequisite

We do not recommend taking CS161 without having taken CS61C (Computer Architecture), or equivalent, first. The content of CS61C is used in the first unit of the class (memory safety). You should not take this class unless you:

Understand the C and assembly sections of CS61C (Lectures 1-13 from Fall 2020 CS61C)

  • Can convert between decimal, binary, and hexadecimal
  • Can write a complex C program (100-200 lines)
  • Can use GDB to debug a C program
  • Can read and understand assembly code (e.g. x86 or RISC-V)
  • Can explain how a function is called in assembly (e.g. x86 or RISC-V) Here are some diagnostics you can use to test your CS61C preparedness:

Read Chapter 2 of our textbook, and make sure that you can follow along.

Make sure you can solve Q1 of this discussion worksheet (solutions).

CS61B Prerequisite

CS61B (Data Structures) is a prerequisite for understanding of basic data structures, familiarity with testing your own code, and familiarity with working on large codebases. This prerequisite is relevant for Project 2.

We try our best to re-introduce any specific CS61B topics as they appear in class, so the actual content of CS61B is not a hard prerequisite.

If you can implement a linked list from scratch, and you’re comfortable testing your own code, and you’re comfortable working in a codebase with 500-1000 lines of code, then you’ve fulfilled the CS61B prerequisite.

CS70 Prerequisite

CS70 (Discrete Math and Probability Theory) is a prerequisite for basic understanding of modular arithmetic/set notation, and the ability to follow mathematical proofs and explanations. This prerequisite is relevant in the cryptography unit.

We try our best to re-introduce any specific CS70 topics as they appear in class, so the actual content of CS70 is not a hard prerequisite.

If you can follow the explanations in this CS70 note on RSA encryption, then you’ve fulfilled the CS70 prerequisite.