Syllabus
Meeting Times and Staff
Instructor
- Instructor: Dr. Doug Szajda
- Email: dszajda@richmond.edu
- Office Hours: (Jepson 219)
- TBD – I will discuss this in lecture so we can agree on times that work for you.
- Non-scheduled times by appointment (email me or catch me before or after class to schedule)
- You should also feel free to drop by my office.
- Prerequisites: CMSC 301 with a minimum grade of C- (See computer science curriculum)
Meeting Times
Class/Lab Info
- Lecture (Jepson 103a)
- Tue 12:00PM - 1:15PM
- Thr 12:00PM - 1:15PM
- Lab (Jespson 103a)
- Fri 12:00PM - 12:50PM
Course Staff
- Dr. Doug Szajda - Instructor
Course Details
Welcome to Computer Security!
Your dedication and hard work have led you to this moment; you belong here. Congratulations on your achievements, and welcome to the course. I am thrilled to have you here and am looking forward to a semester filled with growth, learning, and success. Together, we will explore, create, and innovate. Let’s make this an outstanding semester for everyone!
Course Description
This is a one unit course on computer security. We will focus on the principles of security, covering the basics of cryptography, program security, operating system security, and network security. We will be reading and discussing some current research in the field well as some “classic” primary sources. The course has a programming component, though it is somewhat different than most UR courses in that you are often asked to modify existing code, or “hack” existing code.
Course Topics
We will focus on the principles of security, covering the basics of cryptography, program security, operating system security, and network security. We will be reading and discussing some current research in the field well as some “classic” primary sources. The course has a programming component, though it is somewhat different than most UR courses in that you are often asked to modify existing code, or “hack” existing code.
Prerequisite
The pre-requisite for this course is CMSC 301, completed with a grade of C- or better, or permission of the instructor. Though a knowledge of computer networks is helpful, it is
not required. Students are expected to be able to implement
significant projects in C++ and Java. Readings and lectures may refer
to C, C++, Java, and at times, assembly, so you need to be able to
understand these. Regarding assembly code, I want to be clear:
As you know from CS 301, writing assembly code can be tricky. Understanding
it is usually less difficult. We will likely run across examples of assembly
code written for architectures and platforms with which you are not familiar.
You need to gain some comfort with being able to understand this code, given
explanations of the assembly syntax being used. I expect that I
will need to clarify some aspects of the assembly code we encounter. This
does not mean you need to become expert in these assembly dialects.
Textbook
There is no textbook for this course. There is,
however, a good bit of reading of primary sources (security papers).
Coursework and Grading
Traditional grading schemes have been shown to be counterproductive for
a number of reasons. One of these is that such systems often incentivize the
wrong thing – getting the highest grade – as opposed to incentivizing
learning the material. While I will not be using a specifications-based grading
system (I’m still working out what that should look like), I want to make
learning goals clear, and provide students with an opportunity to
earn back some of the points that are missed on midterm exams.
Course Work
-
There will be two midterm exams, and one final. With the exception of the
final, you will have the opportunity to earn back a portion of the points you
lose on an exam. The midterm exams will be primarily take home exams. They will
be open-book, open note. They will definitely not be open Internet. In addition
the take-home portion of the exam, there will be a 30 minute in-person oral portion of the exam. During this latter portion of the exam, I will be asking you to explain some of the answers you have submitted in the take-home portion of the exam. -
There will be two midterm projects, and one final project. Note that I don’t call
these “programming” projects. The first project will require that you modify code in order to implement two fundamental types of attacks on vulnerable code. The second project will likely be a traditional programming project (though I am currently considering exactly what I want this to be). -
The final project will be conducted in groups of two students. You will be presenting a recent security paper, as if you were presenting at a conference. I will provide more details in lecture. For all of the non-exam assignments, there will not be any opportunity to earn back points, because unlike an exam, you can ask me questions before your submit.
Grade Determination
| Grade Component | Proportion |
|---|---|
| Participation (paper discussions) | 10 % |
| First midterm | 15 % |
| Second midterm | 15 % |
| Programming Assignment 1 | 10 % |
| Programming Assignment 2 | 10 % |
| Final Project | 10 % |
| Final Exam | 20 % |
One note on the grade distribution mentioned above. Failure to turn in any of the assignments will result in a failing grade for the course. Moreover, any assignment or
exam submitted that indicates that a lack of a sincere effort will be treated as if it was not submitted.
As mentioned in the first lecture, the exams will be take-home. They will be open note, but Internet will be restricted. In particular, you will be allowed to use the Internet to obtain course slides and material, but not to perform searches or use any generative AI. After each midterm, and the final, there will be a 30 minute individual oral exam. There will also be, for each of you, opportunities to regain some of the points lost on the midterm (but not the final).
There will also be two programming related assignments, along with a final assignment that will involve you delving deeply into a recent security research paper. Details on these assigments will be provided when they are assigned.
Regarding the final course grade, my goal is that your final course grade reflects the following ideal as much as possible. (Note that this means that curving grades is not necessary, nor are you competing against your classmates.)
- An ``A’’ means that your knowledge of this material is exceptional. When you have to build on the material that you learned in this class in your future classes, then you will be able to do so easily.
- A ``B’’ means that you have a good understanding of most of the material, but may have some gaps in your understanding, or are not as comfortable with some aspects of it as you might be. As such you may want to review this material before taking more advanced classes. You will be able to apply the material in this class, but you may have difficulty doing so with some of it.
- A ``C’’ means that your knowledge of this material is average/mediocre. You will likely struggle to apply this material in your future classes, as you have struggled learning the material in this class.
- A ``D’’ means that you are not ready for future classes that builds on material from this class.
- An
F'' means that in addition to the conditions for aD’’ grade, you also didn’t try and/or failed to hand in work. - A ``V’’ means that you missed too many classes to pass the class, regardless of your performance on the work.
On Coding Help and Debugging
Programming Help: The programming requirements for this course, as mentioned earlier, are primarily modifying existing code. Still, you may have questions on the code, or on modifications you have made. I am happy to discuss programming and debugging techniques, as well as the semantics of particular functions calls. I am also happy to direct you to appropriate packages. And I will at times provide you with “shell code”. With regards to programming, I am in general happy to help you in whatever way is necessary. I will not, however, debug your code for you! If you describe your programming issue with me, I will be happy to suggest potentially useful debugging strategies. But debugging is an important part (and in fact the majority part) of many programming-related projects. As such, you need to be comfortable with doing it on your own! That does not mean I intend for you to be stuck on a particular error for hours.
You may discuss projects with your classmates, faculty, other students, etc, subject to the
empty hands policy presented below.
When you receive coding help, you should mention that help (and who helped) in your project submission. Regardless of how much help you received and from who, once you submit a project, it is expected that you will be able to provide me with answers to any questions I may have about what you have submitted. d
Finally, any help you receive from someone other than me is subject to the
``Empty Hands’’ policy — you may freely discuss ideas and approaches with your anyone
subject to the restriction that you must leave the discussion without any written or otherwise recorded material. Failure to comply with this policy or the guideline discussed here will be treated as an Honor Code violation. Note that this policy does not apply to assignment/project group members (if any), with which you are free to share materials.
Late Work Policy
Non-exam assignments may be submitted late with a 10% deduction per day late, up to a maximum of four days late.
In cases of personal illnesses, emergencies, or documented accommodations, assignments may be submitted late for full credit if you notify me of your situation prior to the time
the project is due!
Attendance Policy
Regular attendance for the entire class time is expected. You should not miss more than 4 total sessions (including lecture and lab). If you miss enough classes that I notice, then you are missing too much (I do record attendance).
Class Communication
I will use two primary forms of communication in this class: email announcements and Slack. You are responsible for remaining up to date on any information sent by email or posted to Slack. This may include clarifications to assignments, updates on grading rubrics, and changes in office hours.
For all general course information, questions, and clarifications, please use Slack. I hope that the Slack workspace can be an extension of our classroom community where we can share questions and answers for the entire class to view and learn from.
If you have personal, individual issues you’d like addressed, you should send those by email to me. However, all course related topics should be directed to Slack.
Course Policies
Illness policy
If you are ill and it will cause you to miss class, lab, or an assignment, you should let me know in advance, if possible. It is your responsibility to catch up with any missed material if you are able to do so. If not, then immediately on return, work out a time-frame with me on when work will be submitted.
Generative AI
You will almost certainly be using generative AI in some way for the rest of your career. You may use generative AI tools for the projects in the following manner.
You must:
- Understand any code that you use. I reserve the right to review your submitted code with you, and ask you to explain how it works.
You may:
- Ask a GenAI tool a generic question for informational purposes. For example, “Please explain the C++ syntax for reading input from a file, and give an example.” If you use this code, please cite the source in a comment.
You may not:
- Ask a GenAI tool to solve any part of the assignment. For example, you should not paste the entire problem description and ask the GenAI to solve it for you.
- No GenAI tools can be used for the exams.
This policy is subject to change as we all learn more about how GenAI works and doesn’t work as part of learning college level course content.
Disability Services
Any student who may need an accommodation based on the potential impact of a disability should contact Disability Services (or call 804-662-5001) to establish eligibility and to coordinate reasonable accommodations.
If you are approved for classroom and/or testing accommodation(s) please make sure to submit a Disability Accommodation Notice to me at this link.
Wellness
If any issue arises that may limit your ability to participate in class, for example, personal illness, family emergency, etc., please be sure to discuss these matters with me as soon as possible and accommodations will be made available to you as appropriate.
Feelings of being overwhelmed are unfortunately quite common in the university environment. You are not alone, and there are a number of resources available to provide support in those moments. Learning to ask for help is an important part of the university experience, and if you or anyone you know experiences any academic stress, difficult life events, or feelings of anxiety or depression, we strongly encourage you to seek support. UR offers counseling services, and also consider reaching out to a friend, family or faculty member you trust for help.
If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night:
- UR Counseling and Psychological Services: 804-289-8119
- University of Richmond Police: 804-289-8911
- National Suicide Prevention Lifeline: 1-800-273-8255
Weinstein Learning Center
Academic Skills Center: Academic coaches assist students in assessing and developing their academic and life-skills (e.g., critical reading and thinking, information conceptualization, concentration, test preparation, time management, stress management, etc.). Peer tutors offer assistance in specific subject areas (e.g., calculus, chemistry, accounting, etc.) and will be available for appointments in-person and virtually. Peer tutors are listed on the ASC website. Email Roger Mancastroppa (rmancast@richmond.edu) and Hope Walton (hwalton@richmond.edu) for coaching appointments in academic and life skills.
English Language Learning: assists multi-lingual and international students in honing their language, academic, and/or intercultural skills. Among other available services for students are one-on-one tutoring, group workshops, and semester-long classes on writing and U.S. culture. Please contact Dr. Bohon, Director of English Language Learning, at Leslie.Bohon@Richmond.edu for more information and appointments.
Quantitative Resource Center: Provides services related to quantitative and computational learning across the curriculum through tutoring, consultation and training.
Speech Center: Assists with preparation and practice in the pursuit of excellence in public expression. Recording, playback, coaching and critique sessions are offered by teams of trained student consultants. During scheduled appointments, consultants assist in developing ideas, arranging key points for more effective organization, improving style and delivery, and handling multimedia aids for individual and group presentations. We look forward to meeting your public speaking needs.
Technology Learning Center The TLC is a staffed public lab dedicated to supporting digital media projects. Services include camera checkout, video/audio recording assistance, virtual reality, poster printing, 3D printing and modeling. The TLC is located on the second floor of Boatwright Library.
Writing Center: Assists writers at all levels of experience, across all majors. Students can attend walk-in hours at Boatwright Library (room 171A) with trained writing consultants who offer friendly critiques of written work.
Other Campus Services
Boatwright Library Research Librarians (289-8876): Research librarians help students with all steps of their research, from identifying or narrowing a topic, to locating, accessing, evaluating, and citing information resources. Librarians support students in their classes across the curriculum and provide individual appointments, class library instruction, tutorials, and research guides (libguides.richmond.edu). Students can contact an individual librarian or ASK a librarian for help via email, text (804-277-9ASK), or chat.
Career Services (289-8547): Can assist you in exploring your interests and abilities, choosing a major or course of study, connecting with internships and jobs, and investigating graduate and professional school options. We encourage you to update your profile in Handshake and schedule an appointment with a career advisor early in your time at UR.
Counseling and Psychological Services (289-8119): Assists currently enrolled, full-time, degree-seeking students in improving their mental health and well-being, and in handling challenges that may impede their growth and development. Services include brief consultations, short-term counseling, skills-building classes, therapy groups, crisis intervention, psychiatric consultation, and related services.
Acknowledgments
Some of the material for this course (especially the homework assignments) comes from previous iterations taught by Prof. Prateek Bhakta.