Topic  Name  Description 

Course Introduction  Course Syllabus  
Course Terms of Use  
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"  Read this article to familiarize yourself with cryptography's 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"  Read this page to learn about the basic cryptanalysis techniques. 
Practical Cryptography: "Monogram, Bigram, and Trigram Frequency Counts"  Read this page to learn about various cryptanalysis techniques. 

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"  Read this page, which discusses the Affine Cipher. Learn the algorithm, go through the JavaScript example, and read through the cryptanalysis. 

Practical Cryptography: "Beaufort Cipher"  Read this page, which discusses the Beaufort Cipher. Go through the algorithm and JavaScript example. 

Practical Cryptography: "Bifid Cipher"  Read this page, which discusses the Bifid Cipher. Learn the algorithm, go through the JavaScript example, and read through the cryptanalysis. 

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"  Read this page, which discusses the Columnar Transposition Cipher. Go through the written example as well as the JavaScript example, and then read about the cryptanalysis. 

Practical Cryptography: "FourSquare Cipher"  Learn the algorithm and cryptanalysis of FourSquare 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: "Railfence Cipher"  Go through both examples (written and JavaScript) of the Railfence 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. 

Practical Cryptography: "Straddle Checkerboard Cipher"  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"  Read this page, which discusses the Enigma Cipher. Go through the JavaScript example and read about mathematical description. 
Practical Cryptography: "Lorenz Cipher"  Read this page, which discusses the Lorenz Cipher and go through the Javascript example. 

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: SubstitutionPermutation Network  Wikipedia: "SubstitutionPermutation Network"  Read this article to learn about substitutionpermutation networks. 
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.3: Advanced Encryption Standard  Wikipedia: "Advanced Encryption Standard"  Read this article about the advanced encryption standard. 
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: SHA1  Wikipedia: "SHA1"  Read about the cryptographic hash function designed by the National Security Agency. Make sure you understand SHA1 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 publickey 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"  Read this page about Euclid's algorithm. Work through the given example. 
5.2.2: Chinese Remainder Theorem  Chi Woo's "Chinese Remainder Theorem"  Read this page to learn how the Chinese Remainder theorem works. 
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"  Read this page. 
Christoph Bergemann's "Calculating the Jacobi Symbol"  Read this page. 

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"  Read this to learn about integer factorization. 
5.3.2: The Pollard p1 Algorithm  John Smith's "Pollard p1 Algorithm"  Read this to learn how to factor an integer with Pollard's p1 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"  Read this article to learn about Shanks' square forms factorization. Make sure you understand the algorithm and the examples given. 
5.3.5: The SolovayStrassen Algorithm  Christoph Bergemann's "SolovayStrassen Test"  Read this to learn the how SolovayStrassen test works. 
5.3.6: Strong Pseudoprimes  Wikipedia: "Strong Pseudoprime"  Read this article to learn the definitions and properties of pseudoprime numbers. Go through the examples. 
5.3.7: MillerRabin Prime Test  Christoph Bergemann's "MillerRabin Prime Test"  Read this to learn the how MillerRabin prime test works. 
5.4: MillerRabin Primality Test in Code  LiteratePrograms: "MillerRabin Primality Test"  Create a java language program that performs MillerRabin 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"  Read this article. 
6.2: Elliptic Curves  David Jao's "Elliptic Curves"  Read this article to learn about elliptic curves. Make sure you understand the examples given. Depending on your mathematics background, you may need to click on the additional links explaining the terminology used. 
6.2.1: DiffieHellman Key Exchange  Cameron McLeman's "DiffieHellman Key Exchange"  Read this page to learn how to exchange the keys with DiffieHellman key exchange technique. 
6.2.2: Elliptic Curve Discrete Logarithm Problem  Cameron McLeman's "Elliptic Curve Discrete Logarithm Problem"  Read this page, which introduces elliptic curve discrete logarithm problems. Make sure you know what the problems ask you to solve. 
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"  Read this article to learn about the system parameters, key and signature generation, verification, correctness, and security of the ElGamal signature scheme. 
7.4: Autokey Identity Schemes  University of Delaware: David Mills' "Autokey Identity Schemes"  Read this page to learn about autokey identity schemes. 
Wikipedia: "Public Key Infrastructure"  Read this article for general overview of public key infrastructure. 

7.5: Cryptography  Science or Magic?  Massachusetts Institute of Technology: James Massey's "Cryptography  Science or Magic?"  Watch this lecture about cryptography. Professor Massey presents a number of topics, including Nobreak Cryptography, Noleak Secret Sharing, Nokey Cryptography, and Nowatch Coin Tossing, 