Math 4161: Mathematics of Cryptography - Winter 2017

Contact information:

Mike Zabrocki (
Course will take place in LSB 101, MWF 11:30am-12:30pm
Office: N518
office hours: W 1pm-3pm (I'm often in my office, but please email to make an appointment if you come other times)

Course description:

Cryptography deals with the study of making and breaking secret codes.

In this course we will be studying situations that are often framed as a game between three parties: a sender (e.g., an embassy), a receiver (the government office) and an opponent (a spy). We assume that the sender needs to get an urgent message to the receiver through communication channels which are vulnerable to the opponent. To do this communication, the sender and receiver agree in advance to use some sort of code which is unlocked by a keyword or phrase. The opponent will be able to intercept the message. Is he/she able to unlock the message without knowing the key?

In this course we will learn some probability theory, information theory and number theory to answer questions about how vulnerable the methods of sending secrets are. This has a great number of applications to internet credit card transactions, wireless communication and electronic voting. We will start by learning some classical codes (used up through WWI) and analyzing those. The last third of the course we will start to learn the methods that are used in modern cryptography.

Course references:

The main reference for this course is notes that will be made available as the course proceeds. The notes and the slides will be posted on the course moodle. I recommend that you print out only the part of the notes which you use (rather than printing out every scratch sheet that I post) because by the end of the course you will have close to a full book.

For those that prefer a published book, there is one by Nigel Small that has most of topics that we will cover in this course and that I think is well written and appropriate. However, I don't feel that it tracks the course closely enough to use it as a required textbook.

Cryptography: An Introduction (3rd Edition) by Nigel Smart

Course components:

The grades are based on the following components:

Quizzes (drop lowest 2 of 6)
Computer assignment
Final exam

Please note that the grades will be based on a curve and will not use the absolute grading scale.
The quizzes are all open book, open notes. You should make hard copies of whatever you think you need for the quizzes. You may use a simple calculator, but not a smart phone. The final exam will be 3 hours and will not be comprehensive, instead it will be similar to an extra long quiz.
I will give you lots of practice questions to prepare for the upcoming quiz an the questions on the quizzes will be similar, but I try to make them novel. Your best way to prepare for this course is to do the practice. I will not post solutions to the practice (perhaps you will understand why once you see the nature of the questions). I can provide you with a hint or suggestion of how to solve a question if you ask by email, but you must tell me what you tried first.


(Jan 1, 2017) There is a moodle for this course and I will post documents there. If you are enrolled in the course you will be able to log in.

(Jan 13, 2017) I have a meeting at 2:30pm on Wednesday Jan 18 and so will be holding office hours from 1-2:30 that day. I also have a meeting scheduled February 15 and so office hours are cancelled Feb 15. If you are planning on coming to office hours or need to come some other time, it is best to send an email in advance.

(Jan 25, 2017) I've posted the scores for the quizzes in the 'text' section.

(Jan 30, 2017) I've written a sage program as a demo. Rather than post it on the moodle I want it to be accessible publicly. To use the programs that I demonstrate in class on Vigenere, paste the command:
into your worksheet. If you want to see the code itself (and I recommend that you look at what the functions do) follow this link.

(Feb 6, 2017) I'll update the list of programs that I have available, and give examples about how they are used but they are well documented and you should try looking at the code and see that you understand the connection between the math and the programs. You will have to use these at some point.


For links to the source code itself: Vigenere, Index of Coincidence, Rectangular Transposition, Monoalphabetic Subtitution, ADFGVX.

(Feb 10, 2017) I worked out the bug with break mono (I had copied the updated file to the wrong directory) and all the commands above should now work. If you want to play with these programs, either download Sage to your computer OR go online and open an account on Sage Math Cloud OR run these commands from Sage Cell Server (no account required). I have taken screen shots of what it looks like to run the programs in the various setups downloaded on a computer in command line mode, downloaded on a computer in notebook mode, on Sage Math Cloud, and in the Sage Cell Server. My plan is to send the computer assignment sometime in the next week so watch for strange encrypted messages in your email.

(Feb 10, 2017) There was nothing wrong with my Vigenere code, I just didn't read the instructions. The command I should have used was
This displays 4 graphs, one for each position of the key.

(Feb 11, 2017) I've added ADFGVX encryption/decryption functions to the list of programs above. I've mentioned many times in class that I would like to see people do a project, but I haven't given any parameters about how that would work if anyone decided they wanted to do a project instead of the quizzes or final. See me if you are thinking of taking this up. I would need
1. that the final result meets certain criteria for 'working' (e.g. if the cyphertext has at least 5000 characters, this program will return English)
2. that it is written in a language that I can demonstrate in class
3. Code would need to be well documented, readable and meets standards of academic integrity
4. That I know in advance that you are planning on doing a project and that I have the chance to review and approve it.

(Feb 13, 2017) Please note that there was a grading error on question 1d of those quizzes that were labeled "Feb 3, 2017" (not those that were labeled "February 3, 2017"). This was my fault because I had a mistake on my key. If you have this quiz and would like that problem re-graded, please bring it to me next class.

(Feb 15, 2017) My meeting that was scheduled for Feb 15 was cancelled so I have un-cancelled office hours today. I'll try to remember to announce it in class today.

(Feb 27, 2017) To use the function decrypt_rt, you need to give a permutation and it should be expressed as a list of numbers (e.g. decrypt_rt(ct2, [4,1,3,2])).

(Mar 4, 2017) The assignment is due March 8. If you have not received it please let me know asap by email.

(Mar 14, 2017) I won't be able to hold office hours 1-3pm on Wednesday, March 15. I will be available after 3pm that day.

(Mar 14, 2017) You can try out my code to test if a number is prime and generate your own large primes by pasting the function that I wrote into the Sage Cell Server.

(Mar 29, 2017) The final exam for this course is Friday April 21, 2017 in ACW 005.

(Apr 13, 2017) I will have office hours 11am-12:30pm on Tuesday, April 18 and 12:30pm-2pm on Thursday, April 20.

(Apr 18, 2017) I added some more practice questions for the final since several people requested. Some of those are probably repeated, but it would take time to cut and rearrange the questions that appear elsewhere. I'm sorry, but I won't be able to post answers for these. That will take extra time that I don't have this week.

(Apr 18, 2017) I keep getting questions about what is on the exam. Almost anything having to do with number theory is relevant. You will need to be able to solve equations in to answer questions on El Gamal, DES, Knapsack and Feistel.

(May 2, 2017) I submitted grades late yesterday. I have posted on the moodle the data which I used to generate the grades (but not the actual totals themselves). I calculated them as I said that I would: 65% best 4 quizzes, 10% computer assignment, 25% final exam. I also scaled up some of the quizzes a bit to reduce the high standard deviations in the grades.


Early Ciphers
• Caesar
• Vigenere
• Rectangular Transposition
• Monoalphabetic Substitution
• Playfair
• Vernam’s Two Tape System
• Hill Encipherment

Probability Theory
• Basics
• Statistical Models of English Text
• Random Number Generators

• Breaking Vigenere
• Breaking Rectangular Transposition
• Breaking Monoalphabetic Substitution

Information Theory
• Basics on the concept of Information
• Entropy and Information
• Fundamental Identities
• Redundancy and Compression of Text
• Redundancy of English Text
• File and Text Compression
• The Huffman Code
• Perfect Secrecy Systems

Number Theory
• Euclidean Algorithm
• Chinese Remainder Theorem
• Residue Systems
• The Euler Phi Function
• Primitive Roots
• Quadratic Residues
• Quadratic Reciprocity Law
• The Jacobi Symbol
• Primality Testing
• The RSA Encipherment Scheme
• Knapsack
• Factoring Large Integers
• Public Key Systems


Below is a rough schedule of how I expect this class to proceed and important dates.  You can expect to see this schedule revised as the course develops. You are expected to show up for lectures and be aware of any changes to the tentative schedule that I am providing for you here. I realize that the correction on the dates in class put quiz #2 on Jan 27, but in looking at the schedule it worked out better to keep it on Jan 20.

Lecture Schedule
Friday, January 6

Monday, January 9
classical ciphers- Caesar, Vigenere

Wednesday, January 11
Rectangular transposition, homophonic, Playfair

Friday, January 13

Quiz 1
Monday, January 16
ADFGVX, snail, Vernam

Wednesday, January 18
Hill, probability theory

Friday, January 20

Quiz 2
Monday, January 23
vocab, conditional probability, dependence/independence

Wednesday, January 25
craps, probability

Friday, January 27
probability and English

Monday, January 30
probability theory

Wednesday, February 1
breaking Vigenere

Friday, February 3

Quiz 3
Monday, February 6
breaking rectangular transposition, monoalphabetic

Wednesday, February 8
breaking ADFGVX, information theory

Friday, February 10
information theory

Monday, February 13
information theory, unicity distance

Wednesday, February 15
unicity distance, entropy of English

Friday, February 17

Quiz 4
Feb 20-Feb 24
reading week

Monday, February 27
codes and trees

Wednesday, March 1
perfect secrecy

Friday, March 3
intro to number theory

Monday, March 6
Euclidean algorithm, Euler-Fermat

Wednesday, March 8
RSA, Jacobi and Legendre symbols

Friday, March 10

Quiz 5
Monday, March 13
Jacobi symbol, primality testing

Wednesday, March 15
office hours after 3pm
Friday, March 17
baby step/giant step, El Gamal

Monday, March 20
primitive roots, solving equations

Wednesday, March 22

Friday, March 24

Quiz 6
Monday, March 27
Moebius inversion

Wednesday, March 29
cyclotomic polynomials, Knapsack

Friday, March 31
Fiestel and DES

Monday, April 3
number theory

Wednesday, April 5
number theory