CTF Key Recovery
Reconstruct the exact verifier
Write down input normalization, encoding, required length, transforms, comparison bytes, success condition, and retry behavior. Separate presentation decoding from authentication logic; similar XOR loops may use different keys.
Use the cheapest invertible relation
For repeating XOR with period p:
textcipher[i] = plain[i] XOR key[i mod p] key[i mod p] = cipher[i] XOR plain[i]
Recover every key position from known plaintext and reject inconsistent positions. Run scripts/recover_repeating_xor.py for a reproducible derivation.
Escalate only as needed:
- algebraic inversion
- known-plaintext constraints
- printable/format constraints
- SMT solver
- bounded brute force
See references/verifier-checklist.md before declaring success.
Validate twice
- Re-encrypt or replay the recovered key against the reconstructed verifier.
- Run the original challenge through its real input path and observe the success branch.
Record the raw key separately from any platform wrapper such as flag{...}.
Quality gates
- Do not treat a plaintext-looking substring as the answer without verifier parity.
- Do not mix display constants with comparison constants.
- Preserve byte order, signedness, encoding, and terminators.
- Test wrong length, one-byte mutation, and the recovered key.


