Topic Name Description
Course Introduction Page Course Syllabus
Page Course Terms of Use
Unit 1: Introduction to Cryptography Page Unit 1 Learning Outcomes
1.1: Introduction URL 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 URL Cryptography: "History"

Read this article to familiarize yourself with cryptography's history.

1.3: Basics of Information Theory URL 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 URL Practical Cryptography: "Cryptanalysis"

Read this page to learn about the basic cryptanalysis techniques.

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

Read this page to learn about various cryptanalysis techniques.

1.5: Cryptography, Politics, and Policy URL 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 URL 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 Page Unit 2 Learning Outcomes
2.1: Classical Ciphers and Their Cryptanalysis URL 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.

URL 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.

URL Practical Cryptography: "Beaufort Cipher"

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

URL 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.

URL 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.

URL 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.

URL Practical Cryptography: "Four-Square Cipher"

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

URL Practical Cryptography: "Hill Cipher"

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

URL Practical Cryptography: "Playfair Cipher"

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

URL Practical Cryptography: "Polybius Square Cipher"

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

URL Practical Cryptography: "Rail-fence Cipher"

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

URL Practical Cryptography: "Simple Substitution Cipher"

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

URL Practical Cryptography: "Straddle Checkerboard Cipher"

Learn the algorithm and check out the JavaScript example.

URL 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 URL Practical Cryptography: "Enigma Cipher"

Read this page, which discusses the Enigma Cipher. Go through the JavaScript example and read about mathematical description.

URL Practical Cryptography: "Lorenz Cipher"

Read this page, which discusses the Lorenz Cipher and go through the Javascript example.

2.3: Ciphers in Code URL 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 Page Unit 3 Learning Outcomes
3.1: Substitution-Permutation Network URL Wikipedia: "Substitution-Permutation Network"

Read this article to learn about substitution-permutation networks.

3.2: Data Encryption Standard URL 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 URL Wikipedia: "Advanced Encryption Standard"

Read this article about the advanced encryption standard.

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

Watch this lecture about layers of abstraction in cryptography.

Unit 4: Hash Functions Page Unit 4 Learning Outcomes
4.1: Cryptographic Hash URL 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 URL 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 URL 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 URL 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 URL 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 Page Unit 5 Learning Outcomes
5.1: Introduction URL Andrew Ross' "Public Key Cryptography"

Read this introduction to public key cryptography.

5.1.1: Example of Public Key Cryptography URL 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 URL 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 URL Robert Milson's "Euclid's Algorithm"

Read this page about Euclid's algorithm. Work through the given example.

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

Read this page to learn how the Chinese Remainder theorem works.

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

Read this definition of the Legendre symbol.

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

Read this page.

URL Christoph Bergemann's "Calculating the Jacobi Symbol"

Read this page.

5.2.5: Subgroup URL Yann Lamontagne's "Subgroup"

Read this definition of a subgroup.

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

Read this introduction to prime factorization.

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

Read this to learn about integer factorization.

5.3.2: The Pollard p-1 Algorithm URL 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 URL 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 URL 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 Solovay-Strassen Algorithm URL Christoph Bergemann's "Solovay-Strassen Test"

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

5.3.6: Strong Pseudoprimes URL Wikipedia: "Strong Pseudoprime"

Read this article to learn the definitions and properties of pseudoprime numbers. Go through the examples.

5.3.7: Miller-Rabin Prime Test URL 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 URL 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 Page Unit 6 Learning Outcomes
6.1: Elliptic Curve Cryptography URL Wikipedia: "Elliptic Curve Cryptography"

Read this article.

6.2: Elliptic Curves URL 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: Diffie-Hellman Key Exchange URL Cameron McLeman's "Diffie-Hellman Key Exchange"

Read this page to learn how to exchange the keys with Diffie-Hellman key exchange technique.

6.2.2: Elliptic Curve Discrete Logarithm Problem URL 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 Page Unit 7 Learning Outcomes
7.1: Key Exchange URL 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 URL 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 URL 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 URL University of Delaware: David Mills' "Autokey Identity Schemes"

Read this page to learn about autokey identity schemes.

URL Wikipedia: "Public Key Infrastructure"

Read this article for general overview of public key infrastructure.

7.5: Cryptography - Science or Magic? URL Massachusetts Institute of Technology: James Massey's "Cryptography - Science or Magic?"

Watch this lecture about cryptography. Professor Massey presents a number of topics, including No-break Cryptography, No-leak Secret Sharing, No-key Cryptography, and No-watch Coin Tossing,