commvita
Connected care platform
Privacy Enhancing Technology

Privacy Enhancing Technology — policies, the token vault, watermarking and the audit trail

Written for a Caldicott Guardian and an information governance lead. Every route data can leave by is a written policy carrying its lawful basis, its recipient, the categories it covers, how long it’s kept and when it’s next reviewed. Direct identifiers are swapped for tokens held in a vault that stores no identifiers. Every registered export carries a fingerprint, so a leaked extract traces back to the organisation that released it. And every access is audited, including the ones that were refused. Reached at /privacy-pet.

Live vs demonstrated: Live — real, API-backed platform logic (wired end-to-end today) Demonstrated — representative control surface with seeded data / illustrative UI mock-up
© 2026 Commvita Digital Health Solutions Ltd. All rights reserved.

1 Every route data can leave by is a written policy

Ask most organisations to list the ways patient data leaves them and you get a pause, then a partial answer. A statutory return here, a shared-record connection there, a claims feed, a research extract, a social services bridge. Each was signed off by somebody, at some point, on a legal basis recorded in a document nobody can find. The PET layer at /privacy-pet makes that list a live register.

The Policy Manager showing six active privacy policies with total policies six, six overdue for review and one requiring consent; each row names the purpose, the third party and whether they are a controller, processor or recipient, the legal basis as legal obligation or legitimate interest, the data categories, the retention in days and a review date flagged when it has passed
Privacy Enhancing Technology · Policy ManagerCaptured from the running system, build B-591 · seeded data

A policy is one row and it holds what an information governance file should hold: the purpose in a sentence, the recipient and whether they’re a controller, a processor or a plain recipient, the lawful basis, the categories of data, the roles allowed to use the route, the retention period in days, whether consent is required, whether pseudonymisation is required, and the date the policy is next due for review. The tiles above the table count what is active and, more usefully, what is overdue for review — in the demonstration estate that’s six of six, which is the honest state of a register nobody has touched since it was seeded.

What this register does, and what it doesn’t do yet. It’s API-backed: policies are read, created and amended through the platform, and the counts are computed from the rows rather than typed. It’s a register of record. It gates nothing at runtime: deactivating a policy here doesn’t close a data flow somewhere else in the platform, and no other module asks this table for permission before running an extract. Where enforcement exists today it lives on the path itself: a secondary-use objection is checked before a research extract is materialised, and disclosure control is applied on the query path. If a Caldicott Guardian asks whether switching a policy off stops the flow, the answer isn’t yet.

2 Identifiers become tokens, and the vault holds no identifiers

An NHS number is the most useful column in any dataset and the most dangerous. Analysts need a stable key to join on; nobody outside direct care needs the number itself. Tokenisation gives the first without the second.

The Token Vault with five tokens broken down by type — one each for date of birth, email, name, NHS number and phone — a tokenise form taking a value and a data type, and a vault table listing each token identifier, its data type, its access count and when it was created
Privacy Enhancing Technology · Token VaultCaptured from the running system, build B-591 · seeded data

Send a value and a type to the vault and you get a token back. What is stored is a keyed hash of the value, computed with the service’s own secret, together with the token, the type, how many times it has been used and when it was last touched. The original never lands in the table. Keying the hash matters more than it sounds: an NHS number is a ten-digit space and a date of birth is smaller still, so a plain hash of either can be reversed by a laptop in an afternoon. A keyed hash can’t, without the secret.

Ask for the same value twice and you get the same token back, which is what makes a token useful as a join key across two extracts. Ask the platform to turn a token back into a person and there’s nothing to ask: no reverse lookup exists in the API. That’s a limit by design and it’s also a ceiling: this is one-way pseudonymisation and can’t act as a reversible linkage service, so a study that needs to return a finding to a named patient can’t be served by this vault alone. The vault itself is admin-only.

3 Every export carries a fingerprint that names who took it

The hardest breach to investigate is the one where a file turns up somewhere it shouldn’t be and forty people had access to something like it. A fingerprint per export turns that from an interview exercise into a lookup.

The Watermark Console with three fingerprints, two active and one marked leaked with a banner calling for investigation; the registry lists each fingerprint identifier against the person and organisation that took the export, the export type as CSV, FHIR bundle or API response, the record count from one to 15,302, the date and a mark-as-leaked action
Privacy Enhancing Technology · Watermark ConsoleCaptured from the running system, build B-591 · seeded data

Registering an export mints a fingerprint identifier and a secret seed, and returns watermark bits derived from the two by a keyed hash. The registry then holds who took it, for which organisation, under which policy, in what format, and how many records. When an extract turns up where it shouldn’t, the console marks that fingerprint leaked with the source, flips its status, and writes a flagged entry into the access audit in the same action — so the investigation starts with a name, an organisation and a policy instead of a mailing list.

The ceiling, stated plainly. This is a register of exports. It isn’t a covert marking scheme. The platform issues and holds the fingerprint and its seed; it doesn’t alter the delivered rows to carry hidden marks, so a leaked extract is traced by its registered fingerprint, not by inspecting the data. And exports made by other modules don’t call this register automatically today — an export is fingerprinted when it’s registered here. Anyone assessing this should read it as evidence-grade export tracking for the routes wired to it, and no more.

4 The audit is the product

Article 30 of the UK GDPR wants records of processing activity. What an information governance lead needs is narrower and harder: who touched what, under which policy, how many records, and what happened — including the attempts that were refused.

The PET Audit Trail with three data access events, one allowed, one flagged and one denied, filterable by outcome; each row shows the timestamp, the person and organisation, the fingerprint of the export, the policy it ran under, the data categories, the record count and the access type, with a denied de-tokenisation attempt and a flagged export whose fingerprint was later found leaked
Privacy Enhancing Technology · Audit TrailCaptured from the running system, build B-591 · seeded data

Each event joins three things a normal system keeps apart: the person, the policy the access ran under, and the fingerprint of the export it produced. Outcomes are allowed, denied or flagged, and the denied ones are the interesting half. The seeded trail shows a de-tokenisation attempt refused for want of the right role, and an export that was allowed at the time and later flagged when its fingerprint surfaced in a public channel. Both are the record telling the truth about itself.

Who can see what. The whole panel is role-gated at the API itself and not only in the interface. Policies and summary counts are readable at care-coordinator level and above; the token vault and this audit trail are admin-only; creating or amending a policy, and marking a fingerprint leaked, are admin actions. A read that a role isn’t entitled to doesn’t come back thinner, it doesn’t come back.

5 What sits around it, and what commvita doesn’t claim

The PET layer is the governance surface. The controls that shape a research dataset itself, the secure data environment, the anonymisation tiers, k-anonymity and cell suppression, and the extract ledger recording every dataset released, live in the research module and are described in the research and secure data environment explainer instead of restated here.

Two claims worth refusing, because both are commonly made. There’s no differential privacy in this platform. No noise is added to a query result and no privacy budget is spent or accounted for, so nothing here should be described as differentially private — a wrongly accounted budget gives false assurance, which is worse than no budget at all. And cell suppression, which is real and does run on the federated query path, uses a single organisation-wide threshold instead of a different threshold per data domain. Both of those are stated here so nobody has to discover them in an assurance review.

What a Guardian gets from this in an afternoon. The list of routes data can leave by, the lawful basis for each, who may use it, how long it’s kept, when it was last reviewed, which exports went out under it, and every access — allowed, refused or flagged.

Where it lives in commvita

CapabilityRouteModel / APIStatus
Privacy policy register · basis, recipient, categories, retention, review/privacy-petAPI /privacy/policies · create and amend at admin● Live
Overdue-review and consent-required counts/privacy-petAPI /privacy/summary · computed from the rows● Live
Token vault · keyed hash, stable token, per-type counts/privacy-petAPI /privacy/token-vault · /privacy/tokenize · no reverse lookup● Live
Export fingerprints and leak marking/privacy-petAPI /privacy/fingerprints · /mark-leaked → audit entry● Live
Data access audit · allowed, denied, flagged/privacy-petAPI /privacy/audit · admin only● Live
Watermarks embedded inside delivered rowsNot built — the fingerprint is registered, the data isn’t altered☉ Demonstrated
Policy enforced at query timeNot built — register of record; enforcement lives on the extract and query paths☉ Demonstrated
Secure data environment, k-anonymity, extract ledger/clinical-studies · /federated-queryCovered in the research explainer● Live
It isn’t differential privacy. It isn’t differential privacy and doesn’t claim to be. It isn’t an anonymisation engine: the tiers and disclosure control that shape a research dataset sit on the research path instead of in this panel. It isn’t a data loss prevention product watching email and endpoints, and it won’t stop somebody photographing a screen. It carries no medical-device claim: it governs data about care, it doesn’t make clinical decisions, and every consequential action here, approving a route, declaring a leak or refusing a request, is taken by a named person.
© 2026 Commvita Digital Health Solutions Ltd. All rights reserved. UK GDPR Art.5, Art.6, Art.9, Art.30 · Data Protection Act 2018 Caldicott Principles · National Data GuardianNHS Data Security & Protection Toolkit ICO anonymisation and pseudonymisation guidanceRecords management: NHS code of practice Non-SaMD