S0 — Seed-URL pairing + ATM keypair separation #14
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of #13. Closes gaps G3 (ATM holds operator nsec) and G9 (no ACL on auto-account-from-npub).
2026-05-26 — payload swap (NIP-26 → NIP-46 bunker URL) + blocked
Original framing had the seed URL carry a NIP-26 delegation token signed by the operator's nsec. That primitive is dead (see epic #13 status block and lnbits#9). The seed URL now carries a NIP-46
bunker://connection URL issued by the sidecarnsecbunkerd(lnbits#18 §F).Sequencing decision (per epic #13): wait for lnbits#18 to land before shipping S0. No transitional shim — wiring a seed URL format we'd rewrite in two weeks is throwaway work. The ATM keeps the Option 1 stopgap (operator nsec on disk) until the bunker is real and S0 ships alongside S2 + S7 in Sprint 2.
Today's stopgap (Option 1, stays in place until Sprint 2)
deploy/nixos/provision-atm.sh:99inaiolabs/lamassu-nextwrites the operator's ownnsecinto/var/lib/bitspire/.envasVITE_ATM_PRIVATE_KEY. Physical compromise of the ATM ⇒ total operator compromise on every relay.Proposed (post-lnbits#18)
nsecand never overwrites it with the operator's. (It already generates one whenATM_PRIVATE_KEYis unset — we just stop the manual override.)bunker://<target_pubkey>?relay=<url>&secret=<token>URL.{atm_npub, bunker_url, relay_list}is rendered as QR on the operator's satmachineadmin dashboard and consumed by the ATM at first boot (or pasted as a string via web UI).bunker_admin.revoke_user(target_pubkey)→ bunker rejects subsequent requests. Re-pair issues a fresh token.Changes
aiolabs/satmachineadminPOST /api/v1/dca/machines/:id/pair→ returns one-shot seed URL with a freshly-issued bunker connection URL (uses the lnbits admin client introduced by lnbits#18).dca_machinesgetsbunker_connection_id+bunker_token_expires_atcolumns so we can show the expiry + a "Re-pair" button.aiolabs/lamassu-nextdeploy/nixos/provision-atm.sh: stop acceptingATM_PRIVATE_KEY=<operator nsec>; instead consume a seed URL via--seed-urlflag or stdin.Acceptance
/var/lib/bitspire/.envcontains only the ATM's own nsec + a bunker connection URL — never the operator's nsec.Reference
aiolabs/lnbits#18§F — per-device scoped tokens (this issue's authority primitive).~/dev/nostr-protocol/nips/46.md.docs/security-pathway-v1.md§5.1, §6.S0 — needs a follow-up edit reflecting the NIP-26→NIP-46 swap.S0 — Seed-URL pairing + ATM keypair separation (NIP-26 delegation)to S0 — Seed-URL pairing + ATM keypair separation➡️ Migrated to aiolabs/spirekeeper#9 (aiolabs/spirekeeper#9).
The v2-bitspire line of this extension now lives in its own repo,
aiolabs/spirekeeper. Tracking for this issue continues there; closing here. (Issue numbers were reassigned in the new repo.)