the following information is tentative and will be updated closer
to the exam date.
midterm exam (fri mar 13, in class)
this exam will roughly cover the topics in chapters 1-8 of the text,
supplemented by additional material lecture and my number theory notes
(mainly sec 1.2, 1.3, 3.3 and 3.4 from my number theory notes),
as well as simple python questions related to the labs.
in particular, you should be able to do the following:
midterm review problems from wed's class
- explain and carry out encryption/decryption for the basic
classical ciphers covered in class
(shift, affine, substitution, vigenere, permutation, hill, running
key and one-time pad ciphers)
- explain and perform basic cryptanalysis on the classical ciphers
we've discussed (brute force, frequency analysis, kasiski test, ...)
- understand binary, modular arithmetic, and how to go back and
forth from text data to numerical data
- answer basic questions and prove simple facts about algebraic structures
discussed in class (binary operations, rings, fields, groups, Z/nZ)
- answer simple questions about lfsrs and know how to use them
to encrypt and decrypt data (xor with keystream generated from lfsr)
- state and apply lagrange's, euler's and fermat's little theorems
final exam (th may 7, 2 hours, start between 8am and 2pm)
this exam will be cumulative and cover all topics in the course.
this roughly corresponds to everything in the course text, the mathematics
of encryption, excluding chapters 3, 9, 10, together with sections
1.2, 1.3, 3.3, 3.4 of my number theory notes, the computer labs,
and a small amount of
supplementary material from the canvas discussions (e.g., asymptotic analysis
and pollard rho).
specifically, in addition to the bullet points listed under the midterm,
you should be familiar with:
what you are allowed to use on the online final:
- the basic setup and protocols for public-key
(channel) cryptography, and the relation to symmetric-key cryptography
(e.g., diffie-hellman key exchange and digital signatures)
- the discrete log problem
- basic primality tests and factorization algorithms
what to expect for the online final:
- you may use the course text and my number theory notes, but no other external references (texts, online sources, robot/human assistance, ...).
in particular, you are not allowed to use the canvas discussions
or other external readings you may have done. (on the other hand,
i won't ask technical questions about things like pollard rho that are
not describe in the text or my notes, but you should know what it is and
understand the ideas for how it works and how efficient it is.)
- you may use a standard python 3 distribution (no extra modules like math), but you may not use or look at any of the your code from
the computer labs. that say, you are allowed to read the information
on the computer lab pages to help you remember how to do something in python,
as well as refer to any of the guides/tutorials i link to at the bottom of
- the final will be administered online as a canvas quiz. you may take
it in a 2-hour window between 8am and 4pm on our scheduled final exam day,
meaning you should start by 2pm at the latest. that said, i will build in a
15-minute buffer in case you have technical issues with canvas during the
exam period. (so you will have 135 minutes from the time you start, but
not later than 4:15pm on may 7, to complete the exam).
- the exam will not be proctored, but will rely on an honor code
that you agree to when you start the exam.
- plan to type in your answers for each problem in text boxes, similar to how most people have been writing up their answers for discussions.
- expect a mix of technical and conceptual questions. this is also similar
to some of the discussion questions and the homeworks.
for the technical questions, you do not need to write all of your
calculations in the text box, but you should clearly explain what you did
and give relevant details at key steps.
- in terms of python, this is what you may be asked to do: i may ask you
to write a python function to perform a simple task. you can either just
type your code in the box, or if you want you can actually test it out in
python first, but you don't have to. the other thing that you should expect
to use python for is to carry out some calculations. possibly you will be
able to do all necessary calculations by hand, and possibly there will be
1 or 2 calculations where you need a computer, but in any case you
may freely use python (modulo the restrictions above) to do any calculation you
want unless i explicitly specify that the calculation should be done by hand.
- you should study as if this were an in-class, closed-book, closed-notes
exam, so that you should not need to use the book, notes
or python documentation while you are taking the exam. however
the point of allowing the above
resources on the exam is just so you can quickly look up some fact/detail
in case you forgot it. (and that the university tells me i should allow this,
because i guess it is supposed to make you less likely to cheat?)
if you need to look up things for every problem,
you probably will not have time to finish the exam.