The programming assignments for Coursera Cryptography I by Stanford University are optional, and are only now being worked on (WIP) after I have finished the course. I'll be using Rust to work on these.
Week 1: Many Time Pad
Let us see what goes wrong when a stream cipher key is used more than once. Given ciphertexts encrypted with the same stream cipher key, our goal is to decrypt the target ciphertext to get the secret message.
Week 2: AES in CBC and CTR modes
Implement two encryption/decryption systems, one using AES in CBC mode and another using AES in counter mode (CTR). Given pairs of AES key and ciphertext, our goal is to recover the plaintext.
Our goal in this project is to build a file authentication system that lets browsers authenticate and play video chunks as they are downloaded without having to wait for the entire file.
Week 4: Padding Oracle Attack
Let's experiment with a padding oracle attack against a toy website. Knowing that the website is vulnerable to a CBC padding oracle attack, our goal is to decrypt the ciphertext in the sample intercepted URL.
Our goal is to write a program to compute discrete log modulo a prime p. In this project, we'll implement an algorithm that runs in time roughly √2^40 = 2^20 using a meet-in-the-middle attack.
Week 6: RSA Problem
Our goal in this project is to break RSA when the public modulus N is generated incorrectly. If the primes p and q are close to each other, N = pq can be easily factored.
The Coursera Cryptography I is offered by Stanford University and taught by Professor Dan Boneh. Only shortened/paraphrased description of the programming assignments are provided in this repository. Please visit the online course for the original and full description of the weekly programming assignments.