Clarkson University
CS 456 / MA 456 / CS 656: Cryptography
Course Syllabus -- Spring 2004

Professor: William Hesse
Office: Science Center 383
Phone: 268-2387

Office hours:
Monday 2:00-4:00
Tuesday 9:00-12:00
Wednesday 1:00-3:00
Friday 1:00-2:00
Or by appointment

Course Objectives:

  1. Students should learn fundamental principles of modern mathematical cryptography. These include public-key and secret-key cryptography, and attacks on cryptographic systems. Students should learn applications of these principles to topics such as digital signatures, authentication, anonymity, and digital cash.

Textbook: "Applied Cryptography, 2nd Ed.", by Bruce Schneier. Published by Wiley.

1 Foundations
2 Cyptographic Protocols
3 Basic Protocols
4 Intermediate Protocols
11 Mathematical Background
19 Public-Key Algorithms
22 Key-Exchange Algorithms
18 One-Way Hash Functions
Parts of 13, 14, 15 Symmetric Cryptosystems
5 Zero-Knowledge Proofs & Protocols
16 Pseudo-Random Generators
8 Key Management


In addition, there is a minimum requirement on the final. Students must have a (curved) score of 45 or greater on the final to pass the course.

Exams: You are responsible for all material in the lecture, as well as any reading assignments where I specify you are responsible. Class participation is encouraged.

Assignments: Some of the assignments will be mathematical and cryptographic examples to work out, and some of them will be programming assignments.

Programs: Students' programs must compile, run, and produce the correct output to receive full credit. If they do not run and produce the correct output, they will receive a grade of at most 60%. Partial credit up to that limit will be given based on the correctness of the program.

Because half of the work of writing a program is debugging that program (finding and removing errors from it), make sure to start your programs early. You may also then send me your programs and ask questions about them, and receive answers in time to fix your programs.

Late Policy: With computers, everything that can go wrong will go wrong at the last minute. Therefore, it is absolutely necessary that you begin your assignments early. My suggestions are as follows: Start the assignment as soon as possible, so you will immediately realize if there is something you don't know. Then try to finish the assignments early, so you receive the bonus points. If you have problems finishing it on that day, you will have more time to fix any problems. Please follow my suggestions. If you don't, I can guarantee trouble. If you fall behind, it will be difficult to dig yourself out.

Academic integrity: Assignments may be discussed with other students. However, do not look at other students' solutions until you have solved the problem yourself. You can give help to other students, but you may not just tell them the answer. Feel free to discuss the assignments and strategies for solving them (algorithms), but write the code yourself. The exact rules for "doing it yourself" are:

There are many ways to write any program, and so two students submitting essentially identical code will be suspected of academic dishonesty. A good way to show that your program is your own work is to save intermediate versions of the program as you work, with file names like "program1version1.cpp", "program1version2.cpp", and so on.

Cheating on tests, labs, or assignments will result in a grade reduction or failing grade for the course, and notification of the academic integrity board.

If you find yourself getting behind, please see the course instructor. We can work together to get you back on schedule.

Author: William Hesse
Last Modified: Jan 7, 2004