This course will introduce students to the fundamentals of computer security. We will focus on software security, applied cryptography, systems security, privacy, and usable security. A recurring theme will be security definitions, what kinds of security vulnerabilities may arise, and how to identify, fix, and prevent vulnerabilities. The course will be structured into four broad sections: Software Security, Cryptography, and System/Network Security, and Human Factors.
Students will master the distinguishing feature of the security field, which is the ubiquitous need to consider an adversary, and the resulting interplay between attack and defense that routinely advances both theory and practice. After completing this course, students will be able to understand and reason about widely-deployed defensive techniques and secure-by-design approaches; as part of this process, students will learn about the the attacks that motivate the defenses and acquire the "adversarial mindset" that leads to new forms of attack. Ultimately, students will learn fundamental principles for designing, analyzing, and reasoning about security critical systems.