Go from trusting crypto libraries blindly to knowing exactly which guarantee each one gives you — and which single mistake voids it.
You call encrypt(), the tests pass, and you still have no idea whether what you shipped is actually safe. That gap is where real breaches live: a random number reused twice, a message authentication code (MAC) checked after decryption instead of before, a key stretched from a password with no salt. This course closes it. You start by breaking Caesar and Vigenère ciphers by hand, then meet the idea that turned secrecy into a science — Shannon’s proof that some schemes leak literally nothing. From there you build the modern toolkit: the Advanced Encryption Standard (AES) and the modes of operation that make or break it; hash functions and MACs, including the length-extension attack that has forged real API requests; public-key cryptography (Rivest-Shamir-Adleman or RSA, Diffie-Hellman, and elliptic-curve cryptography or ECC) and why it lets strangers agree on a key in the open; digital signatures and the reused nonce that exposed the PlayStation 3 signing key; authenticated encryption as TLS 1.3 uses it; proofs that reveal nothing; and what replaces RSA once quantum computers arrive. Every attack here is one you implement yourself in Python.
Built by Lakshya Kumar
Paste this into any AI chat. Fill in the bracketed parts with your context — you'll get back a straight answer on whether this belongs on your plate.
We grant free access case-by-case — students, career-switchers, builders on a tight budget. Sign in to send us a note.
Sign in to applyFinished the tasks? Take the prompt to your AI and get tested on it. We copy the prompt and open the app — just paste it in.
Perfect secrecy is something you can prove, not a claim you accept — and the proof shows exactly which schemes only pretend.
The Advanced Encryption Standard is only as strong as the mode wrapped around it, and the wrong mode leaks your plaintext.
Two people who have never met can agree on a key in full public view, and that single trick is what makes HTTPS possible.
A hash tells you data changed; a message authentication code tells you who changed it — confusing the two is how requests get forged.
One reused random number leaked the PlayStation 3 signing key; here you mount that exact attack, then close it for good.
Convince a skeptic you know a secret while telling them nothing about it — the machinery behind anonymous credentials and rollups.
Encryption alone lets an attacker flip bits in your message; this is the layer that makes every TLS 1.3 connection notice.
Sum ten salaries no one is allowed to see, and learn the noise budget that decides how much you can compute before it breaks.
Encrypted traffic captured today can be stored and cracked later, which is why standards bodies already picked RSA’s replacements.
Complete all modules, then submit the required number of capstone projects. Each must earn a passing rating from an admin reviewer.
Choose one: implement a TLS 1.3 handshake simulation (HKDF, record layer, AEAD); implement a zero-knowledge proof of knowledge for a secret discrete logarithm with Fiat-Shamir; or implement a Paillier-based private sum protocol for 3 parties. Include a security analysis of what your implementation proves and what one change would break it.
I'm studying Cryptography: classical ciphers, information-theoretic security, symmetric encryption (AES, stream ciphers, modes), hash functions and MACs, public-key cryptography (RSA, DH, ECC), digital signatures (ECDSA, Schnorr), zero-knowledge proofs, authenticated encryption (GCM, ChaCha20-Poly1305), partially homomorphic encryption (Paillier), and post-quantum preview. Context: 1. My goal: [e.g. "understand TLS end-to-end", "understand ZKPs for a blockchain project", "audit code that uses crypto libraries"] 2. My background: [e.g. "completed number theory module", "software engineer who calls crypto APIs"] 3. One thing to understand deeply: [e.g. "why does Schnorr work?", "how does AEAD prevent tampering?"] Answer: - For (3): give the mathematical proof in 4 steps, then a Python snippet demonstrating it. - Based on (1): which attack or failure mode is most relevant to my goal? - What's the most common cryptographic mistake at my skill level?
Implement a simplified TLS 1.3 handshake from scratch: key exchange (X25519), key schedule, certificate verification. Confirm interoperability with a real server (e.g., OpenSSL) using your client. Document the bytes on the wire.
Implement a Merkle tree with inclusion + non-inclusion proofs over 1M leaves. Benchmark proof generation, proof verification, and storage. Compare two hash functions (SHA-256 vs Poseidon) and document the tradeoffs for ZK-friendliness.
Build a CLI that encrypts a directory using authenticated encryption (AES-GCM or ChaCha20-Poly1305) + a strong KDF (Argon2id). Include integrity-protected metadata, deletion-proof storage, and a recovery flow from a passphrase. Test against tampered files.
Take a cryptographic implementation (your own or an open-source one) and audit it for side-channel issues: timing, cache, branch. Document any leaks you find and the fix (constant-time alternative). Produce a written audit report.
Free online. The most comprehensive modern reference. Use alongside Modules 7–10.