Overview
This is Mountain View High School’s (team mv-infosec) design for the 2025 MITRE eCTF competition: a secure decoder that decrypts subscription-gated satellite-TV broadcast frames on a MAX78000 microcontroller. In the attack phase, the team received another team’s design package to attack.
Features
- Decodes encrypted broadcast frames and verifies them before playback
- Subscription-based access control, with per-channel subscription updates sent to the decoder
- Key derivation using a binary key tree so a single subscription update can grant access to a bounded time range
- Ascon AEAD for frame encryption/authentication and Ed25519 for signing
- Host-side encoder and subscription-generation tools in Python
- CI build pipeline (GitHub Actions) for the Rust firmware
How it works
The decoder is no_std Rust firmware for the MAX78000 (via max7800x-hal), handling incoming packets, subscription updates, and frame decryption. Keys are derived using the Ascon hash function walking a binary interval tree, so a subscription for a time range can be represented compactly and issued as a single key. The host-side ectf25_design Python package generates global secrets, per-decoder subscriptions, and encodes broadcast frames for testing. The attack-phase package for the target team contains its C decoder (AES and SHA-256) and design document, subscription files (own.sub, expired.sub, pirated.sub), an attacker protocol file and a recorded broadcast (recording.json).
Contribution
- Added subscription handling to the encoder side of the design package (new
subscription.py, changes toencoder.pyandgen_subscription.py) - Merged
key.pyintosubscription.pyand fixed the subscription logic - Moved the GitHub Actions build workflow to a self-hosted runner and adjusted it for Windows
