Welcome to an Adventure in Computer Security!

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, JavaScript, C, Go, and Rust. Along with leveraging research papers and popular-press articles, this course references two open-access books: Computer Systems Security: Planning for Success and Cracking Codes with Python. 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 Fernet
import json

def encrypt_file(file_path: str, key: str):
    """Encrypt a file using a symmetric key."""
    # load the file
    with open(file_path, 'r') as file:
        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 key
key = Fernet.generate_key()
# encrypt the file and display it
encrypted_data = encrypt_file('slides/weektwo/security.json', key)
print(encrypted_data)
b'gAAAAABm_pIvKpmch6YCvoF38m3AciKChkzW9q9Jr-CB5EjshQ04hXG4a1G-MB7l3w22k04eyvHUSEogAVGzN2anFaJPqCfLLk0HDLNARBVFaIg2EevuAryKYy07gGrNso7s9Z-Gtfk9w3cSOBkSOgG3FeqhdTzugRJ3nP8wp3RelYCys8UvRH7C5yqf1iZ8DQ3un5HhMqSPPRW1M-QtXx7zIF-nTvMLF2Rj4NBkk0MTG0NaMKiVeXLRBD3pAFWevoG7XbtVKECHIVn0gKVSpf53xnCCKDnCv1OU77fAcGVONfeSIcRAAIiNJWIQrL9oX5I-quwzWoBBSBL28qSuADO8mnwoGbkmetIctgN8P0IY2HXBTn5pNKh_nSdOt-w3u6SXDfILxXXrqRqjmNN6jcRyEmlH_M9WrnypQ-D8Z5Kr-ycGKKb6YXI5pF9hHiHQZVPKUsoTpy2uMSEDPEBbjWNBO4rF3JZztrrYOtVDY6SJ8kGMYcJjAmu14pyav08TvsS5kVuyXMcLbc9CnD_cqxUuAt3MjkT1Y2rElkrnTG6c4-CMA-W6n_KNvLk9aX76rUBwmfnHeYnR5HBz3gp59WbwqEjJPFEUaQ=='

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:

Security Synapse Community Resources

Interested in connecting with other like-minded algorithm engineers? Please join the Security Synapse Discord Server and join the conversation! If you are an on-campus learning at Allegheny College, you may also join the Allegheny College Computer Science Discord Server. Finally, if you are an on-campus learner, then you may schedule a meeting with the course instructor during office hours by visiting the Course Instructor’s Appointment Scheduler.

Back to top