Catalog description: Theory and practice of cryptography, emphasizing formal models and security reasoning. Primitives covered include private and public-key encryption, message authentication codes, hash functions, digital signatures, secret sharing, and zero-knowledge proofs.
Prerequisites: The catalog lists prerequisites for undergraduates as "a grade of C or better in CSC 481, or permission of instructor" (for graduate students, replace 481 with 681). However, while familiarity with security concepts and real-world scenarios from CSC 481 (Principles of Computer Security) helps a great deal in giving context for the use and practical applications of cryptography, it is not strictly necessary for understanding the material in this class. If you have successfully completed a number of college-level math classes (at least CSC 250 and CSC 350 and some calculus) and have experience with analyzing algorithms (and in particular, time complexity) at the level of CSC 330, then you probably have the background you need. Students in this situation will be granted "permission of instructor" to enroll in the class and should contact Dr. Tate.
Textbook: The Joy of Cryptography by Mike Rosulek
Longer Description: This course covers the basics of the theory and practice of cryptography, which provides some of the most powerful tools available for building secure computing and communication systems. This course emphasizes formal models, rigorous thinking, and reasoning about security. As the textbook states, the focus is in "the logic of composing different building blocks together in provably secure ways." Composing building blocks is exactly what a system designer or developer does when they incorporate cryptographic capabilities into a system, and being able to reason about the security of this use is vital to developing secure systems. Note that this course is heavy on reasoning about, and writing formal proofs about, properties that are necessarily very abstract. To prove security, you are writing formal proofs about the non-existence of attacks -- it's not just matter of saying "I can't think of an attack on this system" -- you must prove that such an attack doesn't exist. Most undergraduates (and many graduate students!) are not very comfortable with writing formal proofs. This is understood, and we will take things slow with lots of explanation and in-class practice. However, you must be able to write basic proofs to master this material and pass the class!