Step 1 of 10
The company logs in
A cheese maker in Abruzzo (region ITF1, category dairy) logs in to the issuer with its real identity. The issuer checks that it is in the official register of food establishments and that it has not used up its yearly quota (e.g. 50 tokens).
- Food company sees its own identity
- Issuer sees who the company is, how many tokens it asks for
- Issuer does not see anything about future submissions
Step 2 of 10
Tokens are made at home
On its own computer the client draws 50 random tokens and, for each, a secret random number r. It seals each token in an “envelope”: b = token · rᵉ mod n. The tokens and the r values never leave the company.
- Food company sees tokens and secret r values
- Issuer does not see the tokens
- Platform does not see anything yet
Step 3 of 10
The issuer signs without looking
The company sends the 50 envelopes. To the issuer they look like random numbers. It signs each one with its private key and sends them back, and records only one fact: “this company received 50 tokens”.
- Issuer sees 50 random-looking envelopes, a counter
- Issuer does not see the tokens, or the signatures the company will end up with
Step 4 of 10
The company opens the envelopes
Dividing by r removes the envelope and leaves a valid issuer signature on each token. The client checks each signature against the issuer’s single public key, published in the log, then throws r away. The tokens wait days or weeks before use, so times cannot be matched.
- Food company sees 50 signed tokens
- Issuer does not see which signed token came from which envelope: mathematically impossible
Step 5 of 10
An isolate is sequenced
Months later environmental monitoring finds Listeria. The contract lab sequences it and the client computes the cgMLST profile (1748 alleles). Metadata are reduced to species, month, region and category, and generalised if fewer than k = 5 companies share them. The client also makes a fresh key pair for this record only.
- Food company sees everything about its isolate
- Platform does not see the exact date, the plant, the product
Step 6 of 10
Anonymous submission
The client sends token, signature, profile, coarse metadata and the one-time public key through a relay that hides its network address. The platform checks the signature with the issuer’s public key, checks the token was never used, checks k-anonymity, then stores the record and appends its hash to the log.
- Platform sees a valid token, a profile, ‘Listeria, 2026-10, ITF1, dairy’
- Platform does not see who sent it
- Issuer does not see that this token was spent by this company
Step 7 of 10
Public health clusters
The lab compares the profile with human cases. Here it is within 7 alleles of three patients, the cgMLST threshold for Listeria. The genome was not altered, so detection is as good as with identified data.
- Public-health lab sees a record in a cluster with human cases
- Public-health lab does not see which company it belongs to
Step 8 of 10
A private alert
The lab encrypts an alert to the one-time key that came with the record (HPKE) and posts it on a public bulletin. The ciphertext looks the same as every other alert on the bulletin.
- Public-health lab sees that it sent an alert to record X
- Platform does not see who can read it
Step 9 of 10
Only one company can read it
Every company downloads the whole bulletin and tries its own keys. Only the cheese maker’s key fits. It can now act: clean, investigate, test product, contact the authority, before the cluster becomes public. Because everyone downloads everything, nobody learns who got an alert.
- Food company sees “your isolate matches human cases”
- Platform does not see who opened which alert
- Public-health lab does not see who opened which alert
Step 10 of 10
Optional: lifting anonymity
Only if the system is set up with an identity escrow, and only in a serious outbreak under published rules, at least t of the n consortium members (e.g. ministry, institute, region, trade association) can jointly open the identity of one record. The vote is logged; no member can do it alone. Many deployments skip this step entirely.
- Consortium sees one identity, only if t members agree
- Consortium does not see any other record