Level 0 — Open: start naked, harden as you learn
L0 is one line of firmware:
POST https://https.chirpiot.com/ingest/sunny-otter-7c2f ← your payload, nothing elseNo token, no certificate, no clock sync, no TLS stack eating your MCU’s RAM. This is the level where an idea gets proven or abandoned — and both outcomes should take an evening, not a month.
What L0 is for
At L0, your idea lives or dies faster than anyone could bother to hack it. That’s not bravado, it’s attack economics: an attacker needs discovery, motive, and time, and a days-old prototype with an unguessable id and worthless data offers none of the three. You have a sensor, a hunch, and an hour — L0 exists so the distance between “hunch” and “chart on a dashboard” is minutes, and the experiment is concluded before it was ever worth attacking. It’s also for hardware you can’t modify — commercial gear that can only aim a fixed frame at an IP address.
What can go wrong (we won’t pretend otherwise)
Anyone who knows your hardware id can send data as your device, and if they capture a payload they can replay it. Your first defenses are boring but real: a generated id like sunny-otter-7c2f is unguessable (a MAC address isn’t — vendor prefixes are public), and platform rate-limits blunt the firehose.
The hardening ladder — due diligence without leaving L0
This is the part nobody else offers: because you control the payload bytes and you write the decoder, you can add protection in user space and stay in your development cycle with confidence:
- 1Sign your payload yourself. Give the spec a secret, append
hmac_sha256(secret, payload)on the device, and verify in your decoder — a forged or corrupted message never becomes decoded data, never reaches your routines, never touches your dashboard. (Your decoder hascrypto.hmac_sha256andmeta["secret"]built in.) Add a timestamp inside the payload and reject stale ones: replay handled too. - 2Bounce the spammers. If your script decides it’s being spammed, it can call
block()— the offending source is blocked at the front door for an hour, before it costs you anything. (We block the sender’s address, not the hardware id — blocking the id would let an attacker lock out your real device on purpose.) - 3Bind before first contact. Claim-code onboarding means your device’s very first packet lands already bound to your account — there’s no window where someone else can claim it.
That ladder is real security engineering, done in a scripting sandbox, on your schedule. It is also, deliberately, a working demonstration of why the higher levels exist: step 1 is L2’s idea in user space.
When to leave L0
When the project stops being an experiment: it actuates something, other people rely on the data, or you’re shipping units to customers. Then move up: L1 asks the device to store and send one token — and the browser flasher will write it to your fleet over USB.