provenance-gatekeeper
- •
Attribution
- •
Solved by Muhammad Dhafin Ramadhan during the competition. These are rn’s study notes based on the teammate’s documented solve, not an independent rn solve.
- •
- •
What it asked
- •
Recover the deterministic release token expected by a stripped gatekeeper binary from its CI trace and DSSE attestation.
- •
- •
Approach
- •
The CI trace disclosed both the field order and algorithm. The DSSE statement confirmed builder ID, invocation ID, subject digest, and release branch.
- •
Serialize , then take the first 32 hexadecimal characters of .
- •
No brute force is needed; the token is deterministic and every input is present in the supplied evidence.
- •
- •
Solution
- •
import hashlib fields = [ "https://github.com/pnup-kamsiber/builder@v4", "run-2026-09-06-ctfd-7f31", "3e78febe430f86e8081b64a8903015e8ef30985cb9343628f7731dc09f028c93", "refs/heads/release/national-final", ] full_hash = hashlib.sha256(":".join(fields).encode()).hexdigest() token = full_hash[:32] assert token == "4206b8df935dfd79f6401f280fa8d821" print(token)
- •
- •
Verification
- •
The token recomputes locally and matches the successful gatekeeper transcript in the document.
- •
- •
Concepts
- •
DSSE and in-toto provenance; deterministic token derivation; binary validation paths; supply-chain metadata exposure.
- •
- •