This course provides a mathematics-based introduction to cryptography. We will discuss the algorithms, implementations, and applications of various symmetric-key and public-key cryptosystems.
Instructor:
Prerequisites: Math 250 Discrete Mathematics or MATH 330 Abstract Algebra, and CS 150 Object-Oriented Programming, or other programming experience.
- Christof Paar, Jan Pelzel, Understanding Cryptography: A Textbook for Students and Practitioners, Springer, 2010.
- Seth James Nielson, Christopher K. Monson, Practical Cryptography in Python: Learning Correct Cryptography by Example, Apress, 2019. (Available online through O'Reilly)
- Jason Fagone, The Woman Who Smashed Codes: A True Story of Love, Spies, and thr Unlikely Heroine Who Outwitted America's Enemies, Dey St., 2017.
- Steven Levy, Crypto: How the code rebels beat the government - saving privacy in the digital age, Steven Levy/Penguin Books, 2002.
- Al Sweigart, Hacking Secret Ciphers with Python, Al Sweigart, 2013, online: http://inventwithpython.com/hackingciphers.pdf.
Computing Resources:
- Language: Python
- Development Environment: You may use whatever environment you choose for developing programs in Python. Some options include downloading and installing Anaconda, using VSCode, or using Google Colab.
You can find other references in the class bibliography.
Goals: At the conclusion of this course, students should have a basic understanding of cryptography, particularly why and how various cryptosystems work, as well as what makes them secure/not secure. This includes understanding the mathematics behind the cryptosystems. Students should also have some awareness of the social, ethical, and political issues related to cryptography. Finally, students should be able to write programs to implement some of the common algorithms used in cryptography.
Topics to be covered :
(for a detailed course schedule, see the Reading and Homework Assignments page)
- History, computer arithmetic, complexity
- Symmetric-Key Cryptosystems: congruences, block ciphers, DES & AES, stream ciphers
- Public-Key Cryptosystems: Exponentiation, discrete logs, public-key cryptography, RSA, authentication, knapsacks
- Primality Proving and Factoring Algorithms (as time permits)
- Advanced topics (possibly including): elliptic curve cryptography, zero knowledge proofs, quantum cryptography
Attendance and Participation:
Regular attendance and participation is expected of all students and will affect your grade. Active participation in this class means coming to class on time, completing assigned reading and exercises, presenting exercises, listening to others, contributing ideas of your own, and asking questions as they come up. It also includes submitting reflections on guest lectures and reflections on personal progress in the course.
Assignments, Collaboration, and the Honor System:
This course operates in accordance with the principles of the Kalamazoo College Honor System: responsibility for personal behavior, independent thought, respect for others, and environmental responsibility. In particular, academic integrity is a fundamental principle of scholarship. Representing someone else's work as your own, in any form, constitutes academic dishonesty. Unauthorized collaboration and receiving help from others outside the bounds permitted by the instructor are also violations of the College honor code. You are responsible for working within the permitted bounds, and acknowledging any help from others or contributions from other sources.
Reading assignments, homework assignments, class notes, and other material will be made available on the CS 483/MATH 450 homepage:
http://www.cs.kzoo.edu/cs483, or http://www.cs.kzoo.edu/math450 Students are responsible for checking this resource frequently.
Reading assignments and related exercises will be assigned for each class. You are expected to come to class having completed the assignment and being prepared to discuss and present ideas from the reading and solutions to the exercises. You are encouraged to work on these exercises in groups; just be sure that each group member understands each answer well enough to present it to the class. When presenting an answer, you should acknowledge any help that you received.
Homework assignments will be assigned throughout the quarter. Homework assignments are due by the end of the day on the designated due date. If there are extenuating circumstances and you cannot complete an assignment on time, you MUST COMMUNICATE with me.
If you get stuck on a homework problem or just want to see if you are heading in the right direction, I am quite willing to help you. You may also discuss the requirements, concepts, and overall strategies related to homework assignments with your classmates, as long as you walk away from the discussion without notes. It is important that you write up your homework solutions individually, acknowledging any ideas from others that you have used. Organizing and writing up the solutions on your own ensures that you really understand the material. Copying someone else's solution does not help you learn the material. Submitting a copied solution as your own work is plagiarism. On specified occasions, homework assignments may be completed in groups, with each group submitting one solution.
Several projects will be assigned throughout the quarter. These will frequently involve some programming, writing, and collaborating with others in small groups. I will try to make clear my expectations about whether a given project is meant to be the result of collaborative or individual work, as well as the size limit of the group, but you are responsible for consulting with me if you are in any doubt. Program documentation should indicate all author(s) of the program. It is only necessary to submit one copy for the entire group. In general, I am more interested in seeing a program run and looking at its documentation than trying to figure out if it works by reading the code. (Unless specified, you may choose your favorite language in which to write your programs.) Therefore, you may be asked to show me a demonstration of your program.
As with homework, you may discuss the requirements and strategies of a project with others in the class, but you should not look at code belonging to anyone outside your group or make your code available to anyone else. If you have code-specific questions, you should address them to a CS faculty member. You should acknowledge any help you receive in your program documentation.
Reflective Responses should be your own work. These are opportunities for you to think about topics covered in class and to reflect on them in your own voice. You should not ask an AI tool to write these for you. No AI tool can read your mind or know your thoughts!
Penalties for violating the Honor Code in this course may include receiving no credit for an assignment, a lowered course grade, or failure of the course. Depending on the severity of the incident, a report may be sent to the Dean's Office, which may result in additional consequences, including suspension from the College. Any subsequent violation will result in the immediate failure of this course.
Grades will be based on:
Attendance, Preparedness, Participation 5% Homework Assignments 35% Programming Projects 30% Individual Growth Reflections 30%