Skip to content

Conformance vectors that carry real vendor evidence #116

Description

@imran-siddique

ROADMAP.md names this under Next, and it is the largest honesty gap in the conformance suite:

the quote vectors verify chain, signature and nonce binding against a synthetic PKI, which does not establish that an implementation can parse a real AMD, Intel or NVIDIA quote

The SDK has real captures (snp_quote_azure.json, tdx_quote_azure.json, tdx_quote_gcp.json, gpu_h100_attestation.json) and its own tests verify against them. The conformance suite does not: an independent implementation can pass wcm conformance today and still fail on the first real quote it sees.

What a proposal needs to settle before any vectors are written:

  1. Vector shape. A conformance vector is language-neutral JSON with an expected outcome. A real capture drags in a certificate chain, a vendor root that must not come from the chain being verified, and a validity window. Does the vector carry the chain inline, or name a root the runner is expected to have staged?
  2. Nonce binding, honestly. The Azure SEV-SNP capture binds the vTPM attestation key in REPORT_DATA, not a caller nonce, so "the report echoes the nonce" is not a property every real capture has. The vector needs to express which binding applies, per capture, rather than assuming one.
  3. Expiry. Real leaf certificates expire. A vector that starts failing in a year is worse than no vector. Injected clock, or a documented refresh duty?
  4. Refusals. The positive case proves little on its own. Wrong nonce, tampered body, stripped chain, and a root outside the chain are the cases that separate a parser from a verifier.

GPU-side is the same gap with one extra wrinkle: an H200 report has ranges that move between calls even under an identical nonce (see the note in nvidia.py), so a vector must not encourage pinning a report digest.

Design proposal welcome before implementation. Please open the discussion here rather than opening with a PR full of vectors.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions