Watertower Office: 512B Lewis Towers (312-915-7982)
Lakeshore Office : 205 Loyola Hall (773-508-3782)
aharrin AT luc DOT edu
For office hours see
http://anh.cs.luc.edu/officehrs.html. Do not be shy about coming to office hours or making an appointment for another time!
Ability to comfortably manipulate symbolic expressions, follow purely symbolic arguments, derive variations on arguments in the course. Computer science students should have done well in a course like Comp 163, Discrete Structures. Math students should have done well in Math 201. Students who have taken Math 313 will likely have seen much of the mathematical foundations in the course. This is an elective course. Students who are uncomfortable with serious mathematical arguments should cosider taking another course instead.
Ability to write solid object-oriented programs. Fancy data
structures and software engineering level courses are not
required. Willingness to learn Python. Students with only
Comp 125 may be weak on the object-oriented programmng. Students
who did well with Comp 170 or Math/Comp 215 should be OK. Higher
level experience with Comp 271 or beyond is not necessary, though
it certainly can speed things up.
If you've ever made a secure purchase with your credit card
online, you have seen modern cryptography in action. This course
covers the mathematical theory of cryptography, as well as the main
algorithms used and various related implementation issues. The task
is to understand certain pieces of pure mathematics, various parts
of computer science, and the mutual blending of the two subjects
that is modern cryptography.
If you just want to use
standard cryptographic packages, you do not need this course. A basic
security course would make more sense. Ths course is for those who
want to understand and extend the theory and have a detailed knowledge
of the implementation issues.
Students come from both the computer science and mathematics departments. Most students will start with more expertise
in one area than the other: with
more programming experience or more experience with more proof and
symbolic arguments. I hope students with different strengths
will study together and help each other with concepts.
For computer science
students this is definitely an elective, so I expect everyone
at start off comfortable with algebraic arguments and proofs, even those who do not
start off with a lot of specific facts and theory. The specific knowledge developed will mostly be
number theory built on ideas of prime numbers, and also some finite
groups and fields. All the theory will be developed starting from nothing,
but it will be developed assuming comfort with following and extending
algebraic arguments. Knowledge of induction, formal logic, and a
bit of probability are all assumed. We will be writing concise, simple code in
Python, which is also very time efficient, thanks to Python's simple
syntax and efficient implementation of large integer
primitives. I assume a ability to organize modest sized coding problems using
functions, loops, decisions, classes and methods. These ideas are
much more general than any one language, and will be important starting
point as we go through the Python syntax for them.
As we go through topics, a mathematical treatment will come first,
and as soon as it is feasible we will consider what this involves in
Python. I hope that we will be looking from both the point of
view of mathematical theory and of implementation in most every
class. The code reinforces the theory and makes it
concrete. Also I want to play to everyone's strengths part of the
time, to keep too much challenging material from piling up before you
have a chance to process it.
Not everyone has the same strengths. I want everyone to
succeed. Please ask questions, get help, and make sure you keep
The text covers the math slowly and steadily and gives a general idea of some central algorithms
in Buchmann's own pseudocode. We will change the order
somewhat to facilitate a growing body of concrete code implementing the
ideas. I am likely to often follow excellent notes from Dr. Doty
Prime numbers, greatest common divisor, the extended Euclidean algorithm, and an introduction to Python.
Modular arithmetic, modular groups, classes and operator overloading in Python.
Time and space complexity of algorithms, analysing code so far
Euler's phi function, Fermat's little and big theorems
Chinese Remainder Theorem
Commutative rings, fields, fields for modular arithmentic, Python implementation.
Cryptography with simple cyphers, Python implementation
Matrices, use in cryptosystems,
Public key systems
RSA, Python implementation, implementation issues
Polynomials over modular fields, general finite fields
Discrete logarithms, Diffe-Hellman and ElGamal cyphers
Digital signature, hashing
?? Other systems using elliptic curves
Blackboard sends email to your university email address. If
you do not want to look there, be sure to have your mail forwarded
somewhere that you check regularly. In past semesters, I have used class email
a number of times noting errors, elaborations, or other changes.
Please let me know when you need something from the course that I
have not thought to include, or not included in sufficient detail for
you, or not presented from a point of view that you can follow. We
are in this together. For me to succeed, I need you to
You are NOT graded on help you ask for or comments you make about what you need from the class. Lots of people have lots of questions about this course. It is my job to help guide your work. Please let me know when you do not understand something, particularly after you have gone home and worked on it. Please ask questions in class and see me in office hours and send me e-mail.
Midterm exam 30%
Final exam 40%
Class participation (answering and asking questions): up to 5% bonus
I will enter your raw (not scaled) scores into the Blackboard gradebook for you to confirm. I base your final grade on separate (possibly scaled in the case of exams) percentages.
I convert to course letter grades with the following minimum
A 93 A- 90 B+ 87 B 83 B- 80 C+ 77 C 73 C- 70 D+ 67 D 60.
Actively following and extending the theory and making the ideas
concerete in code are essential to understanding this course. I
hope you will participate strongly in classroom discussion and get a
start on this. The homework
is the main place to do it.
Keeping up with the homework is important. There will be a new
assignment roughly every week or two. I am not sure how to deal
most effectively with the different backgrounds people have. I
will at least experiment with some group work, hopefully grouping
people with different expertise. Exams will be individual!
Details about homework expectations are at the top of the homework page.
Use my office hours! Please come if you need help. When you come it not only helps you, I also get a better idea of the diverse needs of the class to inform my later plans. Do not be shy! Also understand that when I am interacting with 30 students in class, my focus is somewhat different than with an individual or small group. In office hours we can go into whatever detail you need, and stick with a particular point as long as you need, or look for earlier points that you missed that will inform the current discussion, or....
Tentative In-class Exam Schedule (updated in the course schedule): Midterm Oct 21, Final Exam Dec 16.
You may prepare notes to use with exams. I will allow at
least the following number of sides of 8.5 x 11" paper: midterm: 3, and final: 4. Exams are
cumulative. Exams will not include material from
the class immediately before the test.
Exam Grading: Do not write down things on exams that you can see are incomplete or incorrect without making some comment acknowledging this -- it is better to know you are wrong or incomplete than to be wrong and think you are right.
Missed Exams : If you must miss an exam, let me know well in advance. Then if you have a good reason we can possibly make other arrangements. I have little sympathy for people who inform me after the fact for no good reason. I may completely excuse you from an exam if you were sick or unable to attend for long enough. Most often if you cannot take an exam at the usual time, I will want you to take it a little later, BUT I WILL NOT LET ANYONE TAKE A LATE EXAM AFTER THE NEXT CLASS PERIOD. If you somehow fail to let me know in a timely fashion that you have an excuse and want to take the exam late, appear at my office hours before the NEXT class after the exam, and I may be able to give you the exam.
IMPORTANT POLICY: If you have an excuse for not being prepared to take an exam, but decide to take it anyway, you don't get to change your mind after you see a poor grade. In certain circumstances I may allow you to delay an exam due to illness, but I will not let you be reexamined due to a poor grade.
The penalty for cheating may be anywhere from a 0 on an assignment to a grade of "F" in this course. The appropriate dean will be informed in writing of any cheating incidents.
Cheating consists of, but is not limited to the following for all graded work:
Using or copying another person's work in any fashion.
Work includes outlines, algorithms, pseudocode, code, and analyses.
Allowing your own work to be copied or used by another student.
Submitting as your own work something that has been written by another person.
Using any unauthorized reference on an exam or assignment.
In an official group project, other group members do not count as "another person".
Help from any source is fine concerning
The meaning of a problem (not the plan for the solution or the actual solution).
The restrictions of programming language syntax.
I have needed to give out 0's on exams and quizzes in past semesters, with accompanying referrals to the students' deans.
As a user of the campus network, you should be aware of your
rights and responsibilities in
Private information between professor/TA and individual students will be handled through the University Blackboard system. It will mostly be used for grades and possibly some homework submissions. The public course materials will all be posted directly on the web under http://anh.cs.luc.edu/331.
Please give me feedback on what constitutes the best use of your time for the limited class hours we have. (The Introductory Questionnaire is a first step.) The more you can read the text to get basic facts before class, the more time we can spend in class on things you cannot get easily from a book: asking and answering questions you raise in reading and homework, the analysis of problems, and creatively applying basic ideas you are learning to somewhat novel situations. I am not trying to produce lecture notes in class that are a substitute for your reading. I will try to produce notes from class. I will try to have notes available before class to follow in class, and when class takes a different turn than I predicted, I will try to make updates to the notes after class.
Only you know the relative importance of any particular cell phone call, and whether it is important for you to answer a call immediately rather than later. I do want you to be respectful of my class and disrupt it as little as is practical. If you get cell phone calls with fair frequency, be sure to have the ring muted before coming to class. If you rarely get calls, you might not mute it ahead, and your cell phone may happen to ring. Get rid of the noise as soon as possible, and do not get flustered. (I'll probably do that at least once.) I assume you will move outside the classroom for a conversation. If you get fairly frequent calls that you are likely to consider important answering, sit in a place where your exit and re-entrance are as unobtrusive as possible.