Seal attestation is the cryptographic core of CPHAR. A verifier sends a random challenge; the intact seal signs the challenge with a non-exportable key; the verifier checks the signature against the registered public key and the seal's status. The signature is evidence that the seal is alive at signing time.
Challenge-response flow
sequenceDiagram
participant V as Verifier
participant R as Registry
participant S as Cryptographic Seal
V->>R: Look up active seal_id
R->>V: Public key + revocation status
V->>V: Generate fresh nonce
V->>S: SealChallenge { seal_id, nonce, timestamp, domain }
S->>S: Tamper check
S->>V: SealAttestation { signature, firmware_measurement }
V->>V: Verify signature, status, freshness
Message format
What this proves
What this does not prove
- That the material inside the sealed unit is unchanged. The seal proves only that it is still active.
- That the seal was physically attached to the correct lot. That binding lives in the registry and depends on inspection and custody controls.
- That the seal cannot be cloned, side-channelled, or extracted given sufficient adversary capability. See threat model.
Assumptions
Freshness window
A SealAttestation is meaningful only within a freshness window relative to its timestamp and challenge_hash. Recommended defaults:
- Maximum age of
timestampaccepted by the verifier: 60 seconds. - Maximum delay between issuing a
SealChallengeand receiving the response: 30 seconds.
These are defaults, not requirements. Tighter windows reduce replay surface; looser windows accommodate satellite or store-and-forward links. Operators should document the window they enforce.