Remote Attestation Is How a Device Proves It Hasn't Been Tampered With.

Measured boot records what ran; attestation is the part that makes a remote verifier believe it. The gap between the two is where device trust quietly collapses.

Field Notes · 8 min read

Measured boot tends to be described as if it settled the question. Each stage hashes the next into a tamper-evident register before handing over control, so the device ends up holding a faithful record of what ran. The record is real. It is also worthless to anyone who is not holding the device: a register inside the silicon convinces nobody on the far side of a network, and the party deciding whether to trust this device — a fleet service, a gateway, a cloud backend — has only the device's word for what happened.

Remote attestation exists to close that gap, and it is routinely specified as a protocol and deployed as a checkbox. The device emits something that looks like proof; nothing on the other end is positioned to disbelieve it. A design that cannot say who appraises the evidence, against what, and with what consequence has not added a security property. It has added a message.

What attestation actually claims

Attestation is a signed statement, made by a trusted component, about the state of a device, addressed to a party that did not observe that state. Three roles are involved, and designs routinely collapse them into one. The attester is the device, which produces evidence. The verifier appraises that evidence and reaches a verdict. The relying party is the system that acts on the verdict by admitting the device, releasing a credential, or scheduling an update.

The claim itself is narrower than the name suggests. It says that at the moment of the statement, specific software was loaded, in a specific order, under a specific configuration. It does not say the software is free of vulnerabilities, and it says nothing about what happens after boot. A device attested clean at power-on can be taken over at runtime through a memory-corruption bug that no boot-time measurement could see. Stating that boundary honestly is part of the design, because it determines how often evidence must be refreshed and which decisions it is allowed to gate.

Measurement is not the quote

Measurement is the recording half. Before a boot stage transfers control, it hashes the next component — its code and, importantly, the configuration that changes its behavior — and folds the digest into a platform configuration register, a PCR, using an extend operation: the new register value is the hash of the old value followed by the new digest. Software cannot write a PCR directly, only extend it, and because the operation is one-way and order-dependent, the final value commits to the entire ordered sequence of what was loaded. A separate event log lists the individual digests so a verifier can replay them; the log is untrusted memory, and the register is what makes it checkable.

The quote is the exporting half, and it is the part that home-grown designs most often omit. A quote is a signature, made inside the hardware root of trust, over a structure that commits to the selected register values and to a nonce supplied by the verifier. The signing key is restricted: it will sign only structures the hardware itself assembled, never arbitrary bytes handed to it by software. That restriction is the whole point. If the key could sign anything, malware with access to the interface would simply ask it to sign a quote describing clean firmware. On a microcontroller with no TPM, the same roles are played by a small protected service that holds the key and signs a measurement that early boot code placed where later software cannot overwrite it.

1 · challenge2 · evidence3 · appraisal4 · decisionVerifiersends a freshrandom nonceDeviceroot of trustsigned quote:PCRs + nonceVerifier checkssignature chain validPCRs match referencevalues · nonce freshDecisiongrant ordenythe nonce is remembered, then must match the one inside the quote
The nonce goes out, a signed quote comes back, and the comparison against reference values — not the signature alone — decides the outcome.

The freshness problem

A quote is a signed claim, and a signed claim can be copied. Without freshness, an attacker who once captured a valid quote from a healthy device can replay it forever while the real device runs modified firmware. The countermeasure is the nonce: the verifier generates an unpredictable value for each request, the device includes it in the signed structure, and the verifier accepts the quote only if the nonce matches the one it issued and has not been seen before.

Nonces are not always available. Devices on intermittent links often cannot be challenged on demand, so designers reach for timestamps or counters instead. That moves the trust to the clock or counter, which now has to be protected as carefully as the key: a device whose clock can be rolled back reopens the replay window. A second failure survives even correct nonce handling. In a relay attack, a compromised device forwards the verifier's challenge to a genuine, uncompromised one and returns the genuine quote. The signature is valid and the nonce is fresh, yet the quote describes the wrong machine. The defense is to bind the evidence to the channel and the identity it travels with, for example by folding a value exported from the TLS 1.3 session into the signed data.

The verifier is the whole point

A valid signature establishes that some key signed some structure. Everything of value happens in appraisal: does the signature chain to an authority the verifier trusts, do the register values match reference values — the known-good, sometimes called golden, measurements — for a software version that policy still permits, and is the nonce the one that was issued. Reference values must come from the release process itself, published and signed alongside the firmware they describe.

Then comes the question that decides whether any of it matters: what does the relying party do with the verdict? Attestation that no relying party checks changes nothing. The verdict has to gate something real — network admission, release of the device's cloud credentials, eligibility for an update, access to data — and the failure semantics have to be chosen on purpose. The failure patterns are consistent enough to list.

  • Trust on first use — The baseline is captured from whatever the first device reported, so a device that was already compromised becomes the definition of healthy.
  • Signature-only checks — The verifier confirms the quote is well formed and signed, then never compares the measurements against anything.
  • Allowlists that only grow — Every version ever shipped stays acceptable, including the ones with known vulnerabilities that policy was supposed to retire.
  • Advisory verdicts — A failed attestation turns a dashboard amber and nothing else changes; the device keeps its network access and its credentials.
  • Fail-open outages — When the verifier cannot be reached the device is waved through, so blocking that one connection bypasses the whole scheme.
A signed quote that no relying party is obliged to act on is not a security control; it is a log entry with better cryptography.

The identity of the attesting key

The verifier also has to know whose evidence it is reading and whether the signing key lives in genuine hardware at all. TPM-style designs separate two keys for this reason. The endorsement key is a long-lived identity bound to the hardware, typically accompanied by a certificate from whoever made the secure component, and it is used to establish that the hardware is real. The attestation key is created for signing quotes and is tied to the same hardware through a credential-activation exchange, in which a challenge is encrypted to the endorsement key so that only a component holding both keys can recover it. Separating them keeps the permanent identifier out of every signature.

Embedded designs often reproduce the concept without the standard, and the common failures are the ones the concept was built to prevent. One attestation key shared across a product line means a single extraction lets any device forge any quote. A key held in ordinary flash is readable by exactly the adversary attestation is meant to detect. A key reachable by later boot stages lets compromised firmware sign a clean-looking quote about itself. And an identity with no revocation path leaves the fleet unable to retire a device whose key has leaked.

What a trustworthy attestation design looks like

Pulled together, the design has a short list of properties, and each answers a specific failure above. The signing key is hardware-protected, unique per device, and restricted to quote structures. Measurement covers configuration as well as code. Every challenge carries a fresh nonce and the evidence is bound to the channel. The verifier holds reference values published by the release process, enforces a minimum version so rollback does not become a loophole, and sits in front of something that matters. Failure closes, and evidence is refreshed as often as device state can change.

There is also a test most designs never run: take a development unit, alter its firmware or a boot-time setting, and confirm that the relying party actually withholds the credential. An attestation scheme that has never been observed rejecting anything is unproven.

Attestation earns its keep at the seams — key custody, the source of reference values, freshness, and the consequence of a failed verdict — not in the quote every implementation can produce. When 6QURE reviews an embedded attestation design, that is where the hours go: following the evidence from the register that measured the code to the access decision it is supposed to change, and asking at each hand-off what an attacker who reached that point could do. If you are building one, or inheriting one, we are glad to examine it with you.

Facing something like this in your own environment?