◆ ALICE IN AI LAND the vault · the stages · glitch range · flash the badge · the level maker · about
checking for WebHID… GitHub

The badge is the key

Every badge carries a vault: a 32-byte key written at the booth and a label saying which batch it belongs to. The stages that matter are sealed under keys derived from it, so a page opens them only with a badge plugged in — and a crawler, a script or a model reading this site gets ciphertext. The key never leaves the badge except into the page that asked.

This page reads a badge's vault and, for the booth, writes one. It needs WebHID — Chrome or Edge on a computer. A badge that already has a key only takes a new one, or an erase, while SELECT is physically held on it.

no badge connected
—
—
—
—

Provision — the booth

One key per event, the same on every badge: it is what the sealed stages are sealed under (software/tools/seal-stage.mjs reads it from ALICE_STAGE_KEY). Generate it once, keep it where the organisers keep secrets, and paste it here for each badge. The label is free text, fifteen bytes, shown on the gate when the badge passes.

connect a badge first

A blank badge takes its first key as it is. To re-key or erase one, hold SELECT on the badge while pressing the button — the state above says SELECT held when the badge sees it. The badge erases its sector after the transfer ends, so the read-back waits a moment.

The beacon — phones and other browsers

Where there is no WebHID the badge spells its vault on the stick axes. Hold SELECT + Y on the badge; the bar fills over about two seconds and the decoded serial and key appear below. This is what the gate on the stages and the range does on a phone, so it is the thing to try after a flash.

press a button on the badge so the browser lists it, then hold SELECT + Y
—
—
—
0 good · 0 bad

Notes

The vault is HID feature report 0xF1, one of the vendor reports the DualShock 4 descriptor already declares, so the descriptor the badge presents is unchanged and iOS keeps binding it. A real DualShock 4 answers the same report with zeros, and this page says so. Wire formats: software/controller/src/vault.h; the browser side is src/vault.js, proven against a model of the firmware by software/tools/verify-badge.mjs.

On Linux, Chrome needs read/write access to the badge's /dev/hidraw* node; a udev rule for 054c:09cc (the one Steam ships) is enough. The key lives in the last 4 KB sector of the flash, which no firmware image reaches, so it survives reflashing.