Section 1.1 The course
These notes will cover the content of a first course in mathematical cryptography. I want to emphasize that the approach taken in these notes will be mathematical; that is, our attention will be primarily on the way that mathematical ideas underlie some of the most powerful methods used to encrypt messages and data.
This course is being offered at the University of New Haven, which prides itself on a commitment to experiential education. Thus, the course will require students to implement versions of the core mathematical ideas in code. The language of choice for the course is python, though of course the content itself is language independent. I had to choose a language, and the relative ease with which students can begin implementing mathematics in python makes it an obvious choice.
Students taking this course will be well served by at least a passing familiarity with topics including
- Number theory
- Modular arithmetic
- Linear algebra
- Probability
- Structured programming (loops, control structures, functions)
However, the text does not assume any prior knowledge.
The goal of the course is somewhat larger than explicating the central mathematical ideas of cryptosystems like RSA and ECC. Mathematical students typically see little more than the required introduction to programming courses, which are aimed at computer science students. Computer science students often see no more math than appears in their discrete mathematics course at the beginning of their courses of study. My goal is to show students something of the power that the two subjects have in combination: that mathematical concepts are extremely powerful when implemented in computer programs. The first version of this course was an independent study with a computer science student, and I was regularly surprised with the elegance of his implementations.