◇ OpenCyber Academy
Doctoral research · Chapter 5 · English

Chapter 5 — Main study and independent validation

Open, free learning for anyone who wants to protect people and technology. No account is required to read this text or its worked answers.

Chapter 5 — Main study and independent validation

Lesson map

Lesson 05 published. Map, example, EX027.

flowchart TD
  N0["Learning outcomes"]
  N1["5.1 The attack model"]
  N2["5.2 Results"]
  N3["5.3 Pseudonymisation is not anonymisation"]
  N4["5.4 Independent validation"]
  N5["Lab — Linkage attack on three release types"]
  N6["Synthesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
  N6 --> EX["Worked example"]
  EX --> Q["Exercise EX027"]

Logical drawing

flowchart LR
  N0["Learning outcomes"]
  N1["5.1 The attack model"]
  N2["5.2 Results"]
  N3["5.3 Pseudonymisation is not anonymisation"]
  N4["5.4 Independent validation"]
  N5["Lab — Linkage attack on three release types"]
  N6["Synthesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX027"]
[Learning outcomes]
    |
    v
[5.1 The attack model]
    |
    v
[5.2 Results]
    |
    v
[5.3 Pseudonymisation is not anonymisation]
    |
    v
[5.4 Independent validation]
    |
    v
[Lab — Linkage attack on three release types]
    |
    v
[Synthesis]
    |
    v
[Worked example] --> [Exercise EX027]

Learning outcomes

You will (1) run a linkage attack on synthetic releases; (2) compare risk across release methods; (3) validate results with an independent team.

5.1 The attack model

Ines defines an attacker who knows the home zone, work zone and birth year of 500 target riders, perhaps from a social network or an employer directory. Against pseudonymised microdata, in which names are replaced but exact values remain, the attacker looks for a row matching each target exactly. Against the k-anonymised file, the attacker finds the matching class and guesses one row at random. Against the differentially private counts there are no rows to link. Defining the attacker precisely matters because NISTIR 8053 warns that re-identification estimates depend on the assumed knowledge, which must be stated openly.

5.2 Results

The lab shows that pseudonymisation alone lets the attacker re-identify 415 of the 500 targets with certainty, 83.0%. The k-anonymised file prevents any certain match; random guessing within classes yields about 4.4 expected correct guesses, 0.9% of targets. The differentially private counts give the attacker no record to link at all, and the risk is instead bounded by epsilon. H1 is supported in direction, but the comparison is not like for like: the k-anonymous file leaks little under this attack, and its remaining risk comes from attacks that Ines has not yet tried, such as combining journeys.

5.3 Pseudonymisation is not anonymisation

The 83.0% figure makes a legal point concrete. The GDPR defines pseudonymisation in Article 4(5) as processing so that data can no longer be attributed to a person without additional information kept separately, and it treats pseudonymised data as personal data. Valemont's original plan was to replace card numbers with random tokens and call the file anonymous. Ines's result shows why that would be wrong: the tokens hide names, but the remaining attributes identify most riders. She writes this finding as a recommendation the authority can act on immediately, independent of the rest of the thesis.

5.4 Independent validation

Ines asks a team from another university to run the attack on her released files without seeing her code. They receive the synthetic population, the releases and the attack description, and report their own re-identification rates. Their results differ from hers by less than one percentage point. She also asks them to try one attack she did not design, combining two days of journeys; they find that the k-anonymous file leaks more under that attack. Ines reports both results, because independent validation is only valuable if it is allowed to find problems in the main study.

Lab — Linkage attack on three release types

# Linkage attack: an adversary knows home zone, work zone and birth year of 500 targets.
import random
from collections import Counter
r = random.Random(7)
riders = [(r.randrange(40), r.randrange(40), r.randrange(1940, 2008)) for _ in range(20000)]
targets = r.sample(range(20000), 500)
raw = Counter(riders)
hit_raw = sum(1 for t in targets if raw[riders[t]] == 1)
g = lambda x: (x[0] // 8, x[1] // 8, x[2] // 10)
gen = Counter(g(x) for x in riders)
kept = [t for t in targets if gen[g(riders[t])] >= 5]
exp = sum(1 / gen[g(riders[t])] for t in kept)
print(f"pseudonymised microdata: {hit_raw} of 500 targets re-identified with certainty ({hit_raw/5:.1f}%)")
print(f"k-anonymised (k>=5): 0 certain; expected correct guesses {exp:.1f} ({exp/5:.1f}%)")
print("differentially private counts: no record-level rows to link; risk bounded by epsilon instead")

Run with python3 lab_link.py. Verified output:

pseudonymised microdata: 415 of 500 targets re-identified with certainty (83.0%)
k-anonymised (k>=5): 0 certain; expected correct guesses 4.4 (0.9%)
differentially private counts: no record-level rows to link; risk bounded by epsilon instead

Worked example

Ines finds 83.0% certain re-identification for pseudonymised data, 0.9% expected correct guesses for k = 5, and no linkable rows for differentially private counts; an independent team confirms the figures and finds an extra multi-day weakness.

Synthetic case. The attacker, targets and releases are synthetic; GDPR Article 4(5) and NISTIR 8053 are real.

Errors and limits

One attacker model cannot represent all attackers. Differential privacy removes linkage but its real protection depends on the epsilon accounting chosen.

Exercises

Synthesis

Chapter 5 measures risk under a stated attack and validates it independently. Chapter 6 faces peer critique and revises the claims.

Continue studying — chapter 05 of 08

← Chapter 04 (draft) · Course chapter index · Chapter 06 (draft) →