synsema

All posts · · 5 min read

What your customer checks before sending you their data

A confidential deployment nobody verifies is an ordinary deployment with extra cost. Here is the checklist a serious counterparty runs, what your side has to publish for it to pass, and the limits worth stating yourself before they ask.

teesecurityconfidential-computingsales

"We run it in a TEE" is a claim. On the other side of the table there is someone whose job is to turn claims into checks, and they will ask three questions: what code is running, who says so, and what does that code do with my data?

The good news is that all three have mechanical answers. The work is publishing them before the meeting rather than during it.

The checklist they run§

1. Fetch the identity. An attested service publishes GET /.well-known/attestation: the platform's signed document, the public key, the hash of the program and the hash of the configuration it runs under.

2. Verify the document. Signature, certificate chain to the platform's root, validity window — failing closed at the first doubt. With Synsema on the client this is one call, with the clock passed in explicitly rather than read from the host:

let v be attestation_verify(bytes(seen["document"], "base64"),
    {"format": seen["format"], "now": floor(now()),
     "expect": {"measurements": {"pcr0": PINNED}}})

3. Recompute the binding. The document commits to sha256(public_key ‖ program_sha ‖ config_sha). A document that verifies but binds a different key or program is worthless; a key that matches but has no document is just a key. The order matters: verify, recompute, compare, then send.

4. Read the configuration. config carries the ceiling the program ran under, whether information-flow labels were on, the profile, and whether the announced key is the one terminating TLS. Its hash is inside the signed payload, so a hardened configuration cannot be attested and a loose one served.

5. Ask what comes out. This is the question the hardware does not answer, and the one that decides the deal. synsema code check --json lists every declassify in the program with its line and the sentence the author wrote for it:

"declassify": [
  {"line": 11, "reason": "the yes/no is what the lender asked for; the score stays inside"}
]

One entry, one sentence, enforced at runtime: everything else that is private is refused at the response, the log and the file — before the effect happens.

What your side publishes§

Put these four things where a stranger can find them without asking you:

A page with those four is worth more in a procurement conversation than any amount of prose about hardware isolation.

The limits — say them first§

Stating the boundary yourself is what separates an engineering claim from a marketing one, and reviewers notice:

Who asks for this§

The pattern repeats across industries that look nothing alike:

They are the same architecture: a small program, data nobody outside may read, and one value that comes out with a reason attached.

Where to start§

Build the small version first: one route, one decision, labels on, an identity document, and the verifier in the hands of one friendly customer. Everything else — the site, the sign-up, the dashboard, the jobs, the billing — is ordinary product work that belongs outside the box, and deploys here in one command.

The engine-side reference is Attestation and Information-flow labels.