One owner of our Safe is a PicoQuorum signer: a small device with a screen and a secure chip that approves Safe transactions. This page covers four things:
The honest limits are in THREAT-MODEL.md. Please read it once.
The operator publishes a ceremony record for each chip: docs/mainnet/attest/attest-<serial>.json
in this repository. It holds only public values, read off the chip:
With Node 20 or later:
git clone https://github.com/jmcpheron/pico-quorum && cd pico-quorum
tools/quorum verify docs/mainnet/attest/attest-<serial>.json --chain eth --safe eth:<SAFE ADDRESS>
Every line should say pass. What the lines mean:
| Line | Meaning |
|---|---|
| factory certificate signed by Infineon OPTIGA(TM) Trust M CA … | the chip is a genuine Infineon Trust M (Infineon’s CA key is pinned in the tool) |
| record (F1D0) / owner address | the chip’s record names its key, and the owner address follows from that key |
| binding (F1D1) | the chip’s factory key signed “this chip holds this key” (read the caveat in THREAT-MODEL.md) |
| sealed (as reported) | the key, record and binding can never be changed |
| spares (as reported) | note until the ceremony’s last step froze the rest of the chip; pass after |
| Ethereum: getSigner gives the same owner | Safe’s own passkey factory, onchain, derives the same owner address from this key |
| Ethereum: an owner of Safe … | after it has been added |
Without the tool, check the one line that matters onchain:
0x1d31f259ee307358a26dfb23eb365939e8641195.getSigner(x, y, verifiers) with:
x, y: the public key printed in the record (qx, qy in docs/TRUSTM.md for TM1)verifiers = 0x0100c2b78104907f722dabac4c69f826a522b2754de4Why the Safe web app can’t execute these. Once a transaction carries the Pico’s contract
signature, and the threshold is 2 or more, the web app cannot execute it. It fails with
GS021. That’s a web app limitation, not a bad signature.
What to do instead:
tools/quorum live exec --chain eth <nonce>.
Treat its key as compromised. It can still sign, and a Trust M keeps no record of its signatures.
Never accept an urgent owner change that arrives only by chat. Confirm by voice, or in person.