Topic Name Description
Course Introduction Course Syllabus
Unit 1: Introduction to Cryptography Unit 1 Learning Outcomes
1.1: Introduction Cryptography: "Introduction"

Read this general introduction to cryptography. Learn the terms in bold font and familiarize yourself with the common goals and forms of cryptography.

1.2: History of Cryptography Cryptography: "History"

1.3: Basics of Information Theory Carnegie Mellon University: David Touretzky's "Basics of Information Theory"

Read this page to learn about information theory and get a feel for how messages can be encoded. Make sure you do the exercise listed on the page under "Variable Length Codes" section.

1.4: Basic Cryptanalysis Practical Cryptography: "Cryptanalysis"

Practical Cryptography: "Monogram, Bigram, and Trigram Frequency Counts"

1.5: Cryptography, Politics, and Policy Princeton University: Edward Felten's "Alice and Bob Go to Washington: A Cryptographic Theory of Politics and Policy"

Watch this lecture about cryptography and politics. It discusses the choices national leaders are making about technology.

1.6: Stats in Code John Russell's "Frequency Counting"

If you do not have java compiler on your computer, install Java on your computer via www.java.com. Then, create a java language program that performs a frequency counting. You can see how to compile a java code via the java tutorials provided here. One possible solution can be found via the link above, under the Frequency Counting section. Study the solution code only after you have solved the problem or spent a substantial amount of time working on it.

Unit 2: Classical Cryptography Unit 2 Learning Outcomes
2.1: Classical Ciphers and Their Cryptanalysis Practical Cryptography: "ADFGVX Cipher"

Read this page, which discusses the ADFGVX Cipher. Learn the algorithm, go through the JavaScript example, and read through the cryptanalysis to learn how you would break this cipher.

Practical Cryptography: "Affine Cipher"

Practical Cryptography: "Beaufort Cipher"

Practical Cryptography: "Bifid Cipher"

Practical Cryptography: "Caesar Cipher"

Read this page, which discusses the Caesar Cipher. First, go through the mathematical description and JavaScript example. Then, read through the cryptanalysis to learn how to break the cipher.

Practical Cryptography: "Columnar Transposition Cipher"

Practical Cryptography: "Four-Square Cipher"

Learn the algorithm and cryptanalysis of Four-Square Cipher. Go through the Javascript example.

Practical Cryptography: "Hill Cipher"

Go through the written example and JavaScript example of Hill Cipher and then read about its cryptanalysis.

Practical Cryptography: "Playfair Cipher"

Read about Playfair's algorithm and cryptanalysis and then go through the JavaScript example.

Practical Cryptography: "Polybius Square Cipher"

Go through both examples (written and JavaScript) of the Polybius Square Cipher, and then read about its cryptanalysis.

Practical Cryptography: "Rail-fence Cipher"

Go through both examples (written and JavaScript) of the Rail-fence Cipher and then read about its cryptanalysis.

Practical Cryptography: "Simple Substitution Cipher"

Go through both examples (written and JavaScript) of the Simple Substitution Cipher and then read about its cryptanalysis.

Learn the algorithm and check out the JavaScript example.

Practical Cryptography: "Vigenere and Gronsfeld Cipher"

Read the page to learn the algorithm for the Vigenere, Gronsfeld and Autokey Cipher. Then go through the JavaScript example and read the cryptanalysis.

2.2: Mechanical Ciphers Practical Cryptography: "Enigma Cipher"

Practical Cryptography: "Lorenz Cipher"

2.3: Ciphers in Code John Russell's "Cryptology Programs"

If you do not have java compiler on your computer, install Java on your computer via www.java.com. Then, create Caesar cipher with java. You can see how to compile a java code via the java tutorials provided here. One possible solution can be found via the link above, under the Caesar section. Study the solution code only after you have solved the problem or spent a substantial amount of time working on it.

Unit 3: Block Ciphers Unit 3 Learning Outcomes
3.1: Substitution-Permutation Network Wikipedia: "Substitution-Permutation Network"

3.2: Data Encryption Standard National Institute of Standards and Technology: "Data Encryption Standard"

Read this article to learn about the encryption standards given by National Institute of Standards and Technology. Study the material under the "Data Encryption Algorithm" section in detail. Spend time on this to make sure you know how the encryption algorithm works.

3.4: Abstraction in Cryptography ETH Zurich: Ueli Maurer's "Abstraction in Cryptography"

Watch this lecture about layers of abstraction in cryptography.

Unit 4: Hash Functions Unit 4 Learning Outcomes
4.1: Cryptographic Hash Steve Friedl's "Illustrated Guide to Cryptographic Hashes"

Read this page about cryptographic hashes. Understand what hash is, how hash works, how to use it with UNIX, and issues related to collisions.

4.2.1: MD5 Wikipedia: "MD5"

Read about the MD5, which is a widely used cryptographic hash function. Make sure you understand the MD5 algorithm.

4.2.2: SHA-1 Wikipedia: "SHA-1"

Read about the cryptographic hash function designed by the National Security Agency. Make sure you understand SHA-1 pseudo code.

4.2.3: Message Authentication Code Wikipedia: "Message Authentication Code"

Read the linked article about message authentication code. Make sure you understand the examples in the article.

4.3: Cryptographic Hashing Function in Code Open Web Application Security Project: "Cryptographic Hashing Function"

Create a Java language program that runs cryptographic hashing function. One possible solution can be found in this article. Study the solution code only after you have solved the problem or spent a substantial amount of time working on it.

Unit 5: The RSA Cryptosystem and Factoring Integers Unit 5 Learning Outcomes
5.1: Introduction Andrew Ross' "Public Key Cryptography"

Read this introduction to public key cryptography.

5.1.1: Example of Public Key Cryptography Andrew Ross' "RSA"

Read the linked page above to learn about RSA. Take for granted the Chinese Remainder theorem, which is explained later.

5.1.2: Primality Testing Wikipedia: "Primality Test"

Read this article on primality testing, which is crucial to the security of public-key cryptography. Make sure you understand the naive tests, probabilistic tests, and fast deterministic tests.

5.2.1: Euclid's Algorithm Robert Milson's "Euclid's Algorithm"

5.2.2: Chinese Remainder Theorem Chi Woo's "Chinese Remainder Theorem"

5.2.3: Legendre Symbol Alvaro Lozano Robledo's "Legendre Symbol"

Read this definition of the Legendre symbol.

5.2.4: Calculating the Jacobi Symbol Christoph Bergemann's "Jacobi Symbol"

Christoph Bergemann's "Calculating the Jacobi Symbol"

5.2.5: Subgroup Yann Lamontagne's "Subgroup"

Read this definition of a subgroup.

5.3: Prime Factorization Algorithms (More Math) Eric Weisstein's "Prime Factorization Algorithms"

Read this introduction to prime factorization.

5.3.1: Integer Factorization John Smith's "Integer Factorization"

5.3.2: The Pollard p-1 Algorithm John Smith's "Pollard p-1 Algorithm"

Read this to learn how to factor an integer with Pollard's p-1 algorithm.

5.3.3: The Pollard Rho Algorithm John Smith's "Pollard Rho Algorithm"

Read this to learn how to factor an integer with Pollard's Rho algorithm.

5.3.4: Shanks' Square Forms Factorization Wikipedia: "Shanks' Square Forms Factorization"

5.3.5: The Solovay-Strassen Algorithm Christoph Bergemann's "Solovay-Strassen Test"

Read this to learn the how Solovay-Strassen test works.

5.3.6: Strong Pseudoprimes Wikipedia: "Strong Pseudoprime"

5.3.7: Miller-Rabin Prime Test Christoph Bergemann's "Miller-Rabin Prime Test"

Read this to learn the how Miller-Rabin prime test works.

5.4: Miller-Rabin Primality Test in Code LiteratePrograms: "Miller-Rabin Primality Test"

Create a java language program that performs Miller-Rabin primality test. One possible solution can be found via the link above. Study the solution code only after you have solved the problem or spent a substantial amount of time working on it.

Unit 6: Elliptic Curve Cryptography Unit 6 Learning Outcomes
6.1: Elliptic Curve Cryptography Wikipedia: "Elliptic Curve Cryptography"

6.2: Elliptic Curves David Jao's "Elliptic Curves"

6.2.1: Diffie-Hellman Key Exchange Cameron McLeman's "Diffie-Hellman Key Exchange"

6.2.2: Elliptic Curve Discrete Logarithm Problem Cameron McLeman's "Elliptic Curve Discrete Logarithm Problem"

Unit 7: Digital Signature and Entity Authentication Unit 7 Learning Outcomes
7.1: Key Exchange Wikipedia: "Key Exchange"

Read this article to learn how to exchange cryptographic keys between users so a cryptographic algorithm can be used.

7.2: Discrete Logarithm Christoph Bergemann's "Discrete Logarithm"

Read about the discrete logarithm problem, which is of great interest in the field of cryptography.

7.3: The ElGamal Signature Schemes Wikipedia: "ElGamal Signature Schemes"