With the goal of enabling the growth of computer security engineers, this web site features a sixteen-week schedule filled with activities that support the development of your professional and technical capacities in the field of computer security. One of the primary goals of this course is to create a security synapse by connecting high-level concepts in the field of computer security with their implementation in programming languages such as Python, Java, C, Go, and Rust. Along with leveraging research papers and popular-press articles, this course references three open-access books: Computer Systems Security: Planning for Success, Cracking Codes with Python, and Operating Systems: Three Easy Pieces. You can access all of the source code and technical content for this course by checking out its GitHub organization, schedule, and slides.
Resources for Making a Security Synapse
Interested in getting started on a computer security adventure? Begin here:
The course syllabus introduces the course and its learning objectives, overviews the security survey and security summit projects, and explains how on-campus learners will be assessed by the instructor through examinations and in-person evaluations.
The sixteen-week course schedule offers detailed insights into each step that learners should take to help them to effectively make security synapses, including a list of reading assignments and descriptions of the class activities and projects.
The course slides are a valuable resource for learners who want to make a security synapse. These slides present an overview of high-level concepts and provide both more detailed explanations and implementations in various programming languages.
The course projects page furnishes descriptions of each two-week project that learners complete to ensure that they have suitable hands-on practice to make a security synapse and achieve the learning objectives for the course.
Connecting Concepts to Code
Do you wonder how to practically apply the concepts you are learning about, say, cryptography? As you browse the technical resources on this site you will notice that they often contain both Python source code and the output from running code.
from cryptography.fernet import Fernetimport jsondef encrypt_file(file_path: str, key: str):"""Encrypt a file using a symmetric key."""# load the filewithopen(file_path, 'r') asfile: data = json.load(file)# convert the dictionary into a string data_string = json.dumps(data, sort_keys=True)# create a Fernet object fernet = Fernet(key)# encrypt and return the data encrypted_data = fernet.encrypt(data_string.encode())return encrypted_data# generate a symmetric keykey = Fernet.generate_key()# encrypt the file and display itencrypted_data = encrypt_file('slides/weektwo/security.json', key)print(encrypted_data)
The prior source code segment demonstrates how to use the Fernet symmetric key encryption algorithm to encrypt a JSON file. The output of this code is the encrypted file that can only be decrypted using the same symmetric key. Notably, this output was produced by automatically running the encrypt_file function when this site was deployed! If you check the course slides you can see many other Python source code segments — including some that you can edit and run yourself through an IDE embedded in the slide!
Recent Slide Decks
Focused on presenting an overview of high-level technical concepts and a thorough investigation of their low-level technical implementation, the course slides are a valuable resource for learners who want to make a security synapse. The slides are designed to be interactive, allowing learners to see the output of code segments and, for many algorithms, modify their inputs and/or experiment with their implementation. Want to learn more? Here are quick references to some recently presented slide decks: