pico-quorum

Locking the chip: what each lock does to the multisig

Living decision doc (started 2026-09-25). Locks on the ATECC608 are permanent, so each one gets decided here first, with evidence, before anyone holds A on a red screen. Record what was done, and when, in the buildlog.

Chip #1: 0123f3acfd2a826bee, the dev console’s only chip

Readout (2026-09-25, read only)

   
Part ATECC608A, revision 00006002
Config zone locked (2026-09-17)
Data zone open
Slot locks none (bytes 88–89 = ff ff)
Config Byte for byte, the wallet table in firmware/atecc.py, which is cryptoauthlib’s test_ecc608_configdata, Microchip’s test config. The only byte that differs is 52, where the chip keeps counter 0.
Counter 0 7
Slot Kind Key Lockable Notes
0 P-256 private 9fad2e82… yes GenKey allowed. LimitedUse: every signature counts against counter 0. The console’s key.
2 P-256 private 82004df5… no GenKey allowed. Can never be sealed: a scratch key.
7 P-256 private empty yes GenKey, and PrivWrite (an encrypted import)
10 “AES”, clear writes always, not secret never written yes CountMatch limit slot (config byte 18 = 0xA1)

The multisig already works with this chip, with nothing locked

These checks are free, read only, and move no funds.

What the locks do

The sources are the ATECC608A full datasheet (a preliminary copy, the only one public), the ATECC508A complete datasheet (DS20005927A), and cryptoauthlib. Confidence is high unless marked.

Not verified on silicon: the Lock error code for a refused lock, CountMatch before the data lock, and the factory contents of the data slots.

Chip #2 and later: quorum v1

Fresh chips don’t get this table. They get quorum v1: one sealed signing key, slots 1-15 dead, CountMatch off, and each zone locked against a CRC the chip checks. The ceremony is in the ceremony image. See PROVISIONING.md.

Chip #1 stays as it is. The console pins it with QUORUM_EXPECT = {"serial": "0123f3acfd2a826bee", "slot": 0, "owner": "0x2843705391b7E2cf06b0b964b532Ad9891535E53", "locked": True} (tools/fw pin). The chip map no longer writes the test table or locks a zone without a CRC. Its data zone stays open: no CountMatch trap is sprung.

Decision (2026-09-25)

Slot 0 only, after rung 2. Done: slot 0 is sealed and the data zone is still open. Slot 2 is the scratch key and slot 7 is free. The next chips get their own config and a full ceremony.

Recommendation (as written before the decision)

Checklist before locking slot 0