Data Security and Privacy

Privacy is an increasingly significant concern in our modern, connected society. We all share personal information on a daily basis with a wide range of organizations. Although at times such sharing can be intentional and beneficial for the user, other times information is shared against the user’s will, used for purposes that the user did not expect, revealed to entities other than those approved by the user, or used to infer additional information that the user did not intend to reveal.

In this course, students will learn to reason about what information is revealed through the use of computer systems. They will study several different scenarios in which information sharing is either unavoidable or (to some extent) desirable, and discuss the balance between the benefits and costs of sharing. Finally, students will learn about several privacy enhancing technologies (PETs), and how these can be put to use by software developers to defend the privacy of their users.

In this course, you will learn to:

  1. Apply a privacy-oriented mindset and thought process to modeling electronic systems, their interactions with the environments in which they are deployed, and the information they reveal to various entities.
  2. Recognize potential privacy issues and the threats they present, even in systems that employ cryptographic techniques.
  3. Understand a wide range of languages for representing access control policies and determine which should be used for a given system and deployment.
  4. Quantify the level of information revealed in a data release containing potentially identifying information, to avoid mistakes made by companies in the past.

 

Before taking this course, you should be able to:

  1. Explain the basic functions of a computer's hardware components (e.g., memory, storage, CPU, motherboard, I/O devices) and operating system / kernel (e.g., memory management, scheduling, providing an interface with storage and I/O devices).
  2. Read, understand, and analyze algorithms expressed in pseudocode and/or common programming languages. Languages that you may encounter include Python, Java, JavaScript, and C.
  3. Comfortably interact with a Unix command line interface (e.g., the terminal in Mac, Linux, or WSL: Windows Subsystem for Linux).
  4. Explain the high-level function of common network protocols and concepts. This should include DNS, TCP/IP, HTTP, routers and routing, Wi-Fi, and MAC and IP addresses.
  5. Understand mathematical concepts typically taught in Discrete Mathematics (e.g., first-order logic, modular arithmetic and congruencies, functions, summations, combinations and permutations, discrete probability).