Skip to content

kgeorgiou/cryptopals

Repository files navigation

What?

Cryptopals

This is a different way to learn about crypto than taking a class or reading a book. We give you problems to solve. They're derived from weaknesses in real-world systems and modern cryptographic constructions. We give you enough info to learn about the underlying crypto concepts yourself. When you're finished, you'll not only have learned a good deal about how cryptosystems are built, but you'll also understand how they're attacked.

Why?

Learn about crypto concepts while practicing Go.

Progress

Set 1: Basics

  • Challenge 1: Convert hex to base64
  • Challenge 2: Fixed XOR
  • Challenge 3: Single-byte XOR cipher
  • Challenge 4: Detect single-character XOR
  • Challenge 5: Implement repeating-key XOR
  • Challenge 6: Break repeating-key XOR
  • Challenge 7: AES in ECB mode
  • Challenge 8: Detect AES in ECB mode

Set 2: Block crypto

  • Challenge 9: Implement PKCS#7 padding
  • Challenge 10: Implement CBC mode
  • Challenge 11: An ECB/CBC detection oracle
  • Challenge 12: Byte-at-a-time ECB decryption (Simple)
  • Challenge 13: ECB cut-and-paste
  • Challenge 14: Byte-at-a-time ECB decryption (Harder)
  • Challenge 15: PKCS#7 padding validation
  • Challenge 16: CBC bitflipping attacks

Set 3: Block & stream crypto

  • Challenge 17: The CBC padding oracle
  • Challenge 18: Implement CTR, the stream cipher mode
  • Challenge 19: Break fixed-nonce CTR mode using substitutions
  • Challenge 20: Break fixed-nonce CTR statistically
  • Challenge 21: Implement the MT19937 Mersenne Twister RNG
  • Challenge 22: Crack an MT19937 seed
  • Challenge 23: Clone an MT19937 RNG from its output
  • Challenge 24: Create the MT19937 stream cipher and break it

Set 4: Stream crypto and randomness

Set 5: Diffie-Hellman and friends

  • Challenge 33: Implement Diffie-Hellman
  • Challenge 34: Implement a MITM key-fixing attack on Diffie-Hellman with parameter injection
  • Challenge 35: Implement DH with negotiated groups, and break with malicious "g" parameters
  • Challenge 36: Implement Secure Remote Password (SRP)
  • Challenge 37: Break SRP with a zero key
  • Challenge 38: Offline dictionary attack on simplified SRP
  • Challenge 39: Implement RSA
  • Challenge 40: Implement an E=3 RSA Broadcast attack

Set 6: RSA and DSA

Set 7: Hashes

Set 8: Abstract Algebra

About

The Cryptopals Crypto Challenges

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages