Solving cryptopals challenges (in Python) ! Limiting myself to only use modules from the standard library.
Environment
(.venv) cryptopals$ python --version
Python 3.11.2
To validate challenges
(.venv) cryptopals$ pytest */*.py
Use -vv
and -s
for more output.
To run a particular challenge
(.venv) cryptopals$ python set1/challenge1.py
Progress: 45/66 (68.18 %) completed (last completed, Challenge 45)
- 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
- 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
- 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
- Challenge 25 Break "random access read/write" AES CTR
- Challenge 26 CTR bitflipping
- Challenge 27 Recover the key from CBC with IV=Key
- Challenge 28 Implement a SHA-1 keyed MAC
- Challenge 29 Break a SHA-1 keyed MAC using length extension
- Challenge 30 Break an MD4 keyed MAC using length extension
- Challenge 31 Implement and break HMAC-SHA1 with an artificial timing leak
- Challenge 32 Break HMAC-SHA1 with a slightly less artificial timing leak
- 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
- Challenge 41 Implement unpadded message recovery oracle
- Challenge 42 Bleichenbacher's e=3 RSA Attack
- Challenge 43 DSA key recovery from nonce
- Challenge 44 DSA nonce recovery from repeated nonce
- Challenge 45 DSA parameter tampering
- Challenge 46 RSA parity oracle
- Challenge 47 Bleichenbacher's PKCS 1.5 Padding Oracle (Simple Case)
- Challenge 48 Bleichenbacher's PKCS 1.5 Padding Oracle (Complete Case)
- Challenge 49 CBC-MAC Message Forgery
- Challenge 50 Hashing with CBC-MAC
- Challenge 51 Compression Ratio Side-Channel Attacks
- Challenge 52 Iterated Hash Function Multicollisions
- Challenge 53 Kelsey and Schneier's Expandable Messages
- Challenge 54 Kelsey and Kohno's Nostradamus Attack
- Challenge 55 MD4 Collisions
- Challenge 56 RC4 Single-Byte Biases
- Challenge 57 Diffie-Hellman Revisited: Small Subgroup Confinement
- Challenge 58 Pollard's Method for Catching Kangaroos
- Challenge 59 Elliptic Curve Diffie-Hellman and Invalid-Curve Attacks
- Challenge 60 Single-Coordinate Ladders and Insecure Twists
- Challenge 61 Duplicate-Signature Key Selection in ECDSA (and RSA)
- Challenge 62 Key-Recovery Attacks on ECDSA with Biased Nonces
- Challenge 63 Key-Recovery Attacks on GCM with Repeated Nonces
- Challenge 64 Key-Recovery Attacks on GCM with a Truncated MAC
- Challenge 65 Truncated-MAC GCM Revisited: Improving the Key-Recovery Attack via Ciphertext Length Extension
- Challenge 66 Exploiting Implementation Errors in Diffie-Hellman