1. CS 455 (Intro to Distributed Systems) or equivalent or permission of instructor (strictly enforced)
  2. Knowledge of a programming language such as Python, Java or C/C++ (expected)
  3. Students are expected to have broad understanding of different aspects of how computer systems work.
  4. It is strongly recommended that the student have a working knowledge of computer networks.
  5. The students should also feel comfortable with algorithmic concepts and modular arithmetic.


There is no required text for this course as the materials covered are too broad to be covered by a single  text book. Lecture notes will be made available at this site. Two recommended references are:

  • Charles P. Pfleeger, "Security in Computing", Prentice Hall.
  • William Stallings, "Cryptography and Network Security: Principles and Practice.", Prentice-Hall.
Charlie Pfleeger's book contains sections for a major portion of the topics that we will cover. William Stallings book does a good job for cryptography.

Other reference books that you may want to have a look at, are:

  • William R. Cheswick and Steven M. Bellovin, "Firewalls and Internet Security: Repelling the Wily Hacker", Addison-Wesley.
  • Charlie Kaufman, Radia Perlman and Mike Spencer, "Network Security: Private Communication in a Public World", Prentice Hall.
  • Marshall D. Adams, Sushil Jajodia and Harold J. Podell, eds., "Information Security: An Integrated Collection of Essays". IEEE Computer Society Press.
  • Edward Amoroso, "Fundamentals of Computer Security Technology", Prentice-Hall.
  • Dorothy E. Denning, "Cryptography and Data Security", Addison-Wesley.
  • Peter J. Denning, "Computers under Attack", Addison-Wesley.
  • Douglas R. Stinson, "Cryptography: Theory and Practice", CRC Press.
  • Morrie Gasser, "Building a Secure Computer System", Van Nostrand Reinhold
  • D. Brent Chapman and Elizabeth D. Zwicky, "Building Internet Firewalls", O'Reilly and Associates



Computer and system security, authentication, access control, privacy.


CS 556 introduces the principles of computer security. Information is an important strategic and operational corporate asset. These days computers and computer networks, are increasingly being used for storing and retrieving information. Some of these information may be of a sensitive nature. Consequently they need to have adequate security measures that can safeguard sensitive information.  In this course, we will begin by investigating some of the security measures that can be employed to safeguard information. For the most part we will look into the theory that goes into designing these measures rather than studying security tools and techniques. This is because there are too many of those tools out there and they are changing frequently. The course examines how system designs, network protocols, and software engineering practices can result in vulnerabilities. The course explores how to better design and implement future systems in order to mitigate vulnerabilities. In addition, the course explores how to detect and mitigate vulnerabilities in existing systems.

Understanding security requires understanding system concepts such as memory and network access models, stacks, and buffers. Although the official pre-requisite for this course is CS 455 or an equivalent undergraduate course, this being an graduate level computer science course, students are expected to have broad understanding of different aspects of how computer systems work. It is strongly recommended that the student have a working knowledge in computer networks. The student should also feel comfortable with algorithmic concepts and modular arithmetic. If they do not, they are strongly encouraged to refresh their skills in these areas. Experimentation involving programming exercises in C/C++/Python and scripting languages is one of the activities of the course. Students should be ready with these skills.

Course Objectives

By the end of the course, students should be able to:


The course is geared toward graduate students and seniors in computer science, math, and information technology students who already have exposure to system design principles.


Following is tentative schedule for this class. Note that as the term progresses we are most likely to digress from this schedule quite a bit. However, dates for term paper/project and exams are fixed and will not change.

Week 1 - Introduction, security concepts, threats, risk modeling and security services
Week 2 - Access control models: Discretionary and mandatory access control
Week 3 - Access control models: Covert channels and Chinese Wall
Week 4 - Access control models: Clark-Wilson, RBAC, ABAC
Week 5 - Introduction to cryptography Week 6 - Secret key cryptosystems
Week 7 - Key escrow
Week 8 - Modular Arithmetic and Public key cryptosystems
Week 8 - Public key cryptosystems
Week 9 - Diffie-Hellman, RSA, El-Gammal
Week 10 - Pairing based cryptosystems, IBE and attribute-based encryption
Week 10 - Message digests, Merkle hashes, digital signatures
Week 11 - Identification and authentication, Passwords, Biometrics
Week 11 - One-time passwords and challenge response schemes, Kerberos
Week 12 - Kerberos, SSL, SSH
Week 13 - Wireless Security
Week 14- Privacy

Important Deadlines

Please familiarize yourself with the following deadlines related to exams and term paper/project submission. These are firm deadlines. Due dates for project submissions will be announced as and when the projects will be assigned.

January 22, Tuesday
First day of class
February 7, Friday
Term paper / project topic identification
March 7, Thursday
Term paper / project abstract due
March 15, Friday
Takehome Midterm Examination distributed
March 16, Saturday
Spring Break Begins
March 20, Wednesday
Midterm Exam Due
March 24, Sunday
Spring Break Ends
March 25, Monday
Last day for drop with "W"
April 9, Tuesday
Term paper / project update due
April 30, Tuesday
Term papers / project due
May 4, Friday
Takehome Final Examination Distributed
May 9, Wednesday
Final Examination Due