Skip to main content
An attestation is only meaningful if it was produced for your request and not replayed from an earlier one. The report-data binding is what ties a report to a specific request.

The Binding

Inside a sealed environment, the hardware stamps a small piece of caller-supplied data into the signed report. That field is the report data. It commits the report to two things at once:
Because the value includes your nonce, a report produced for one request cannot stand in for another. A different nonce produces different report data, and the signature would not match.

How It Is Checked

Two separate checks, worth keeping distinct:
  1. The binding is recomputed. The signing address and the nonce are concatenated in the same form and compared against the report data observed in the evidence. The comparison is case-insensitive. A mismatch fails the check.
  2. The observed nonce must equal your nonce. Separately from recomputing the report data, the nonce in the evidence is checked against the one you sent.
Both must hold. Together they establish that the report was produced for a request carrying your nonce and committed to the expected signing address.

Send a Fresh Nonce Every Time

Nothing stores nonces between requests. There is no memory of nonces already seen, and a nonce is not rejected for having been used before. The freshness comes entirely from you choosing a fresh, unpredictable nonce every time.
  • Send a fresh random nonce and the checks confirm the report is fresh for this request. This is the supported pattern.
  • Omit the nonce and an empty-binding report is permitted. It is allowed, but you get no replay protection: an empty binding commits to nothing fresh, so an old report could satisfy it.
Replay protection is a property of the protocol you follow, not of the attestation in the abstract. A Nito attestation is replay-resistant when you supply a fresh nonce and verify it was echoed back. Generate the nonce from a cryptographically secure random source, at least 32 bytes, hex encoded, and never reuse one. The verify-yourself recipe does this as step one.

Reports Are Request-Local

Attestation reports are produced for the request that asked for them and are never persisted. Each one stands alone: a fresh nonce, a fresh report, a fresh binding check.

How This Fits the Baseline

The binding and the nonce match are gates 4 and 5 of the seven-gate baseline, and gate 7 extends the nonce check into the nested payload for accelerator envelopes. The address side is governed by an additional invariant on address-only model binding.

The Seven-Gate Baseline

Where these checks sit in the sequence.

Address-Only Model Binding

How the address binding is validated.

Verify It Yourself

Generating and checking a nonce in practice.