Official conference badge for BSides San Diego 2026, designed and built by Electronic Cats. It is a standalone cryptography challenge device with BLE cooperative play and a hidden easter egg.
| Component | Details |
|---|---|
| MCU | ESP32-C6 |
| Display | SH1106G OLED 128x64 (I2C) |
| LEDs | 2x WS2812B NeoPixel |
| Input | 4-axis joystick + boot button |
| Motion | Accelerometer (shake detection) |
| Wireless | Bluetooth Low Energy (BLE) |
| Input | Action |
|---|---|
| Joystick UP / DOWN | Navigate menu |
| Joystick RIGHT | Confirm / Enter |
| Joystick LEFT | Back / Cancel |
| Shake | Magic 8 Ball answer (in 8 Ball mode) |
The badge has two tiers of cryptography challenges plus cooperative and secret modes.
Shake the badge for a fortune. Not everything is as random as it seems.
Three challenges based on classical cryptography. You must first prove you know your history before the menu unlocks.
- Challenge 1 — substitution cipher
- Challenge 2 — rotation cipher
- Challenge 3 — transposition cipher
Complete all three to earn the basic flag.
Four challenges based on modern cryptographic primitives. Harder gate, harder ciphers — and the hints may not mean what you think.
- Challenge 1 — encoding
- Challenge 2 — bitwise operation
- Challenge 3 — stream cipher (read the hint carefully)
- Challenge 4 — your badge knows the answer
Complete all four to earn the advanced flag.
Find another badge holder. Bring your badges within ~10 cm of each other. The badges will detect each other over BLE, negotiate roles automatically, and perform a handshake. Both players unlock simultaneously.
If you cannot find another player physically, there is a manual entry path in the menu.
There is a hidden interaction that can only be triggered after completing specific prerequisites. When activated, it broadcasts an event visible to every badge in the room.
Figure out the conditions. You will know when you find it.
| Color / Pattern | Meaning |
|---|---|
| Blue (solid) | Boot |
| Red (solid) | Idle |
| Red (blinking) | BLE handshake received |
| Rainbow (cycling) | All advanced challenges complete |
| Red (solid, instant) | Forbidden Shake triggered |
- Arduino IDE 2.x
- esp32 by Espressif Systems board package
Add this URL under File → Preferences → Additional boards manager URLs:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
| Setting | Value |
|---|---|
| Board | ESP32C6 Dev Module |
| USB CDC On Boot | Enabled |
| Flash Mode | QIO 80MHz |
| Flash Size | 4MB (32Mb) |
| Partition Scheme | Huge APP (3MB No OTA/1MB SPIFFS) |
| Upload Speed | 921600 |
Install via Library Manager:
Adafruit SH110X(pulls in Adafruit GFX automatically)FastLEDAESLib
BLE libraries (BLEDevice, BLEServer, BLEScan) are included with the ESP32 board package.
# Open firmware/firmware.ino in Arduino IDE and click Upload
# If the board does not enumerate, hold BOOT (GPIO 9) while connecting USBTo read the full firmware from a working badge and write it to a new board:
pip install esptool
# Read from source badge (4MB flash)
esptool.py --chip esp32c6 -p /dev/cu.usbmodem101 -b 921600 \
read_flash 0x0 0x400000 badge_full.bin
# Write to new board
esptool.py --chip esp32c6 -p /dev/cu.usbmodem102 -b 921600 \
write_flash 0x0 badge_full.bin
# Optional: erase saved progress on the new board (NVS partition)
esptool.py --chip esp32c6 -p /dev/cu.usbmodem102 erase_region 0x9000 0x4000The MAC address is burned into eFuse and is not cloned. Each board will have its own BLE identity and may get a different Coop role assignment.
├── Firmware/
│ ├── firmware/ # Main badge firmware (Arduino sketch)
│ └── badge_blinker/ # Standalone BLE blinker tool
└── hardware/ # KiCad PCB design files
MIT — see LICENSE.
Designed and developed by the Electronic Cats firmware and hardware team.
