Every analysis produces a package: the result file and a manifest describing exactly what produced it. The point of the manifest is that it does not require us to be honest — the hashes either match or they do not, and the hardware signature either validates against the processor vendor or it does not.
Be clear about what is on this page. The package below is a sample, published so you can see the format and run the one check that works today: hash the output file and compare it with the manifest. That check is real and it will pass. The other three are not checkable here — this sample carries no live signature and no live attestation quote, because it was not produced by a production enclave running against a retailer’s data. A package that proves a run happened is something we hand you during an evaluation, against your own test file, and the last section of this page says exactly what to ask for.
Each link is a hash the processor signs together with the others. Swap the code, the data, or the thresholds and the signature stops matching — checkable by anyone, without access to our systems.
The package
The procedure
Hash the result file and compare it with output.sha256 in the manifest. If they differ, the result you are holding is not the one that was produced.
curl -sO https://liftmosaic.com/verify/sample-output.csv
curl -sO https://liftmosaic.com/verify/sample-manifest.json
shasum -a 256 sample-output.csv
It should print c949b677a56b34cddc8a0a7898c32604c6b9f71e8b80c7aad1ca653a6d16a5db, which is the value recorded in the manifest.
Each data owner hashes their own export before handing it over and keeps that value. Comparing it against the inputs[].sha256 entries proves the run used the file they intended and not a substituted or stale one. Only the owner can perform this check, which is the point — it does not depend on us, and it does not require anyone to show their data to anyone.
The policy a retailer signs names the templates permitted, each by its code_sha256. If a manifest carries a hash that is not in the signed policy, the run was not authorised, and that is visible from the two documents alone without any access to the system that ran it.
The enclave.measurement field is the value the processor itself reports for the code and configuration loaded into the trusted environment. It is validated against the processor vendor's attestation service — for Intel TDX, Intel Trust Authority — which is operated by the chip vendor and not by us. A manifest whose quote does not validate there proves nothing about where the computation ran.
What the fields mean
| Field | What it tells you |
|---|---|
| template.code_sha256 | Fingerprint of the exact analysis code. Must appear in the retailer's signed policy, or the run was not authorised. |
| inputs[].sha256 | Fingerprint of each input dataset. Each owner checks their own against the file they exported. |
| policy.min_cell_households | The suppression floor in force. Any result cell representing fewer households than this was withheld. |
| policy.regime | Which protection applied. query_allowance means counted and capped access, not differential privacy. When a run uses calibrated noise, this field says so and carries the parameters. |
| policy.destinations_allowlist | The only places an audience from this run could be sent. The enclave cannot reach anywhere else. |
| allowance.used_this_quarter | How much of the requester's disclosure allowance has been spent. The data owner sees this accumulate across every run, which is how repeated probing becomes visible. |
| enclave.measurement | What the processor attests was loaded. Validated against the chip vendor's service, not ours. |
| output.suppressed_cells | How many cells were withheld for falling under the floor. A non-zero value tells you the result is incomplete by design and where. |
Being straight about it
For your security team
A live signed manifest from a real run on your own data, with the quote validated by your team against Intel's service rather than reported by us. The full template source for every analysis in your signed policy, read before you sign it rather than after. The policy document itself, with thresholds, allowance ceiling and destination allowlist as explicit fields. And a walkthrough of what happens when a template is updated — because the answer must be that the old signature stops matching and the run stops, not that it quietly continues.
If any vendor, us included, answers these with assurances rather than artefacts, that is the answer.
Lift Mosaic. This verification package is published from a demonstration run on synthetic data. The manifest format, the field semantics and the checking procedure are the production ones.