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 ​

In pseudonymization, the original IDs (oID) from the clinical domain (CD) are replaced with pseudonyms (sID) in the research domain (RD).
The process is designed with the help of a Trusted Center (TC) so that

  • the CD has no knowledge of the sIDs,
  • the RD has no knowledge of the oIDs,
  • and the TC itself has no access to the medical data content (see [1]).

Requirements ​

  1. The ID exchange process is handled via a Trusted Center Agent (TCA).
  2. Re-identification must be possible via the Trusted Center.
  3. The sIDs must remain consistent across repeated transmissions.

Transmission Process ​

Data transmission is managed by one agent each in the clinical domain (CDA), the research domain ( RDA), and the trusted center (TCA).

In a transmission process, the CDA sends a list of oIDs to be pseudonymized to the TCA.
The patient ID (PID) is handled separately, as it is used for re-identification.

The TCA generates a pseudonym for the oPID.
For the oIDs of other resources, a hash is calculated using a salt.
The TCA generates the salt, which is used in the hash function to protect the resulting sIDs from brute-force attacks.

Next, the TCA generates a transport ID (tID) for each oID and sends the transport mapping (tMap: oID ➙ tID) back to the CDA.
A secure mapping (sMap: tID ➙ sID) is created for the research domain.

The identifier for the sMap (sMapName) is sent to the CDA.
The CDA first replaces the oIDs with tIDs in the patient bundle, then sends the transport-pseudonymized patient bundle and sMapName to the RDA.
Upon receipt, the RDA requests the corresponding sMap and replaces the tIDs with sIDs.

The following diagram illustrates the transmission process in detail:

Generation of Transport and Pseudonymized IDs ​

sID ​

The TCA uses gPAS to generate and store pseudonyms. For each patient, two pseudonyms are generated:

oPID→sPID"Salt_"+oPID→Salt

The keys used are the oPID of the patient and the concatenation of the literal "Salt_" with the oPID. Note: "Salt_" is a fixed string, not a variable or real salt.

The first pseudonym maps the patient oPID directly to a sPID and can be used for re-identification. The second pseudonym acts as a salt for the other resource IDs:

Ressourcen-sID=SHA256(Salt+oID)

Security Note

The combination of alphabet size A and salt length n—i.e., An possible variants—must be chosen large enough to resist brute-force attacks (see security aspects).

Example ​

Suppose there is a patient in the CDA with two resources:

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

The CDA sends the oIDs (1, 2, 3) to the TCA. The TCA generates:

1→d7dsjdg4Salt_1→5kf8344f

Using the salt, the TCA computes:

2→SHA256(5kf8344f2)3→SHA256(5kf8344f3)

tID ​

For each oID, a random number is generated as the tID.

The mapping:

oID→tID

is temporarily stored in a key-value store. Thus, tIDs can vary on repeated transfers. The retention time of tIDs is configurable in the TCA.

Transport Mapping: Replacing oIDs with tIDs ​

Once the CDA sends the oIDs to be pseudonymized to the TCA, temporary transport IDs (tIDs) are generated and sent back with the sMapName. The CDA replaces the oIDs with tIDs and sends the data and sMapName to the RDA.

Example Transport Mapping:

1→846132212→341865713→97354168
transport-Patient:
  tID = 84613221,
  Ressourcen:
  [
    Encounter: tID = 34186571,
    MedicationAdministration: tID = 97354168
  ]

Secure Mapping ​

After receiving the transport-pseudonymized bundle, the RDA requests the sMap using the sMapName and replaces the tIDs with sIDs. The sIDs are intended for research purposes and remain stable across transfers.

Example Secure Mapping:

84613221→d7dsjdg434186571→SHA256(5kf8344f2)97354168→SHA256(5kf8344f3)
research-Patient:
 <sID = d7dsjdg4,
 Ressourcen: [
  Encounter: sID = SHA256(5kf8344f2),
  MedicationAdministration: sID = SHA256(5kf8344f3)
 ]

Security Aspects ​

Salt Brute-Forcing ​

Suppose an attacker knows both oIDs and sIDs and attempts to determine the mapping using brute-force.

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

T=Anv

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

As of 2025, hardware capable of 1015 SHA256 hashes per second is realistically available for $25,000, consuming 15 J/TH. These figures are based on SHA256 Bitcoin mining hardware.

Alphabet Size (A)Length (n)Possible Combinations (Aⁿ)Time @ 1015 Hashes/secPower Use (15 J/TH) in kWh
26 (lowercase)122612≈9,5⋅101695 s4,0⋅10−1
26 (lowercase)162616≈4,4⋅1022∼1,4 years1,8⋅105
26 (lowercase)242624≈9,1⋅1033∼177 years3,8⋅1016
62 (alphanumeric)126212≈3,2⋅1021∼38 days1,3⋅104
62 (alphanumeric)166216≈4,8⋅1028∼15 years2,0⋅1011
62 (alphanumeric)246224≈1,0⋅1043∼3⋅1020 years4,3⋅1025

References ​