I am currently taking this online course, taught by Prof. Dan Boneh of Stanford University. Come join us at:
We just started a week ago, so there’s still time to catch up. There are many other interesting courses at Coursera that you can take for free: https://www.coursera.org/courses
Cryptography is an indispensable tool for protecting information in computer systems. This course explains the inner workings of cryptographic primitives and how to correctly use them. Students will learn how to reason about the security of cryptographic constructions and how to apply this knowledge to real-world applications. The course begins with a detailed discussion of how two parties who have a shared secret key can communicate securely when a powerful adversary eavesdrops and tampers with traffic. We will examine many deployed protocols and analyze mistakes in existing systems. The second half of the course discusses public-key techniques that let two or more parties generate a shared secret key. We will cover the relevant number theory and discuss public-key encryption, digital signatures, and authentication protocols. Towards the end of the course we will cover more advanced topics such as zero-knowledge, privacy mechanisms, and other forms of encryption. Throughout the course students will be exposed to many exciting open problems in the field.
Homework and Grading
- There will be a weekly problem set that includes an optional programming component. Students are expected to solve these assignments on their own, but can discuss clarification questions on the course forum.
- Students can attempt each of the problem sets four times. After each submission the system will provide explanations about correct and incorrect anwers. When students attempt to solve the problem set again, many of the questions will be different.
- The programming assignments are optional. Students are free to use any language of their choice to solve the programming assignments. Our sample code will be given in Python although that code is not required to complete these optional assignments.
- All problem sets and programming projects are due three weeks after the relevant lectures are released. Submissions after this three weeks period will be graded at 50% of maximum. Despite the three week window we encourage students to submit solutions 10 days after the lectures are released. This will keep the class moving as a group.
- Statement of accomplishment will be given to students who obtain more than 70% of the maximum score on the problem sets and final exam. Students who also complete the programming assignments will receive a statement of accomplishment saying that they also completed the programming part of the course.
- In-video quizzes are not graded and are only there to help students with self assessment.
- Many of the modules contain links to research papers for further readings. These are intended for students interested in learning more about the material covered. These further readings are optional.
- There will be a final exam (no midterm) that is similar in style to the problem sets, but covers the material of the entire course.
- Background and overview.
- One-time encryption using stream ciphers.
- Semantic security.
- Block ciphers and pseudorandom functions.
- Chosen plaintext security and modes of operation.
- The DES and AES block ciphers.
- Message integrity. CBC-MAC, HMAC, PMAC, and CW-MAC.
- Collision resistant hashing.
- Authenticated encryption. CCM, GCM, TLS, and IPsec.
- Key derivation functions.
- Odds and ends: deterministic encryption, non-expanding encryption, and format preserving encryption.
- Basic key exchange: Diffie-Hellman, RSA, and Merkle puzzles.
- A crash course in computational number theory.
- Number theoretic hardness assumptions.
- Public key encryption.
- Trapdoor permutations and RSA.
- The ElGamal system and variants.