Skip to content

INFO

This English text is a translation of the original German document, Pseudonymisierung, which was written to coordinate with our Data Protection Officer. It is provided for convenience; in case of discrepancies, the German version takes precedence.

Pseudonymization

Requirements

  1. The ID exchange process takes place via a trusted third party (TCA).
  2. Re-identification by the trusted third party must be possible.
  3. sIDs must remain consistent across repeated transmissions.

Transmission Process

In a transmission process, the CDA requests the assignment of original IDs (oIDs) to transport IDs ( tIDs) from the TCA. Before the patient bundle is sent to the research domain agent (RDA), the oIDs are replaced by tIDs.
After receiving the transport-pseudonymized patient bundle, the RDA requests the mapping of tIDs to stable pseudonyms (sIDs) and replaces the tIDs with sIDs.

Generation of Transport and Pseudonymized IDs

sID

The TCA uses gPAS to generate and store pseudonyms. Two pseudonyms are generated for each patient:

patientOIDpatientSIDSalt_+patientOIDSalt

The keys used are the patient’s oID and the concatenation of the fixed string Salt and the oID. Note that Salt is a literal string, not a variable or actual salt.

The first pseudonym replaces the oID of the patient resource—i.e., it is a direct mapping to the patient’s sID and can be used for re-identification. The second pseudonym is used as a salt for generating pseudonyms for the remaining resources:

Resource-sID=SHA256(Salt+oID)

Security Note

The combination of alphabet size A and salt length n — that is, An possible variants — must be sufficiently large to be resistant to brute-force attacks (see Security Aspects).

tID

For each oID, a random number is generated to serve as the tID.
The mapping

oIDtID

is temporarily stored in a key-value store, so tIDs may vary between transmissions.

Example

Assume we have a patient with two resources:

Patient:
  oID = 1,
  Ressourcen:
  [
    Encounter: oID = 2,
    Medication: oID = 3
  ]

The CDA sends the IDs to be pseudonymized to the TCA:

1d7dsjdg4Salt_15kf8344f

Transport Mapping: Replacing oIDs with tIDs

Once the CDA sends the oIDs to be pseudonymized to the TCA, temporary transport IDs (tIDs) are generated. These tIDs replace the original oIDs before the data is forwarded to the RDA.

Example Transport Mapping:

184613221234186571397354168

After this mapping, the bundle with transport-pseudonymized IDs is forwarded to the RDA:

transport-Patient:
  tID = 84613221,
  Ressourcen:
  [
    Encounter: tID = 34186571,
    Medication: tID = 97354168
  ]

Research Mapping

After the RDA has received the transport-pseudonymized bundle, it requests the mapping of tIDs to stable pseudonyms (sIDs) from the TCA. These sIDs are intended for research purposes and remain constant across repeated transmissions.

Example Research Mapping:

84613221d7dsjdg434186571SHA256(5kf83442)97354168SHA256(5kf83443)

The RDA then replaces the tIDs with the sIDs:

research-Patient:
 <sID = d7dsjdg4,
 Ressourcen: [
  Encounter: sID = SHA256(5kf83442),
  Medication: sID = SHA256(5kf83443)
 ]

Security Aspects

Brute-Forcing the Salt

Assume an attacker knows the oIDs and sIDs and attempts to establish a relationship between them. To do so, they try to brute-force the salt.

The time T required to determine the salt is given by:

T=Anv

where A is the alphabet size, n is the salt length, and v is the number of hashes per second.

With current hardware, 109 hashes per second is a realistic assumption.

Alphabet Size (A)Length (n)Possible Combinations (A)Time at 109 Hashes/Second
10 (Digits)81080.1 s
10 (Digits)121012103 s (16 min)
10 (Digits)161016107 s (4 months)
10 (Digits)2410241015 s (32 million years)
26 (Lowercase)82682.11011210 s (3.5 min)
26 (Lowercase)1226129.510169.5107 s (3 years)
26 (Lowercase)1626164.410224.41013 s (1.4 million years)
26 (Lowercase)2426249.110339.11024 s (31017 yrs)
62 (Alphanumeric)86282.210142.2105 s (2.5 days)
62 (Alphanumeric)1262123.210213.21012 s (100,000 years)
62 (Alphanumeric)1662164.810284.81019 s (1.51012 yrs)
62 (Alphanumeric)2462241.010431.01034 s (31026 yrs)