◇ OpenCyber Academy
Doctoral research · Chapter 7 · English

Chapter 7 — Thesis synthesis and reproducibility archive

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 7 — Thesis synthesis and reproducibility archive

Lesson map

Lesson 07 published. Map, example, EX039.

flowchart TD
  N0["Learning outcomes"]
  N1["7.1 The synthesis"]
  N2["7.2 What goes in the archive"]
  N3["7.3 A leak caught"]
  N4["7.4 Licensing and access"]
  N5["Lab — Manifest and identifier check for the thesis a"]
  N6["Synthesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
  N6 --> EX["Worked example"]
  EX --> Q["Exercise EX039"]

Logical drawing

flowchart LR
  N0["Learning outcomes"]
  N1["7.1 The synthesis"]
  N2["7.2 What goes in the archive"]
  N3["7.3 A leak caught"]
  N4["7.4 Licensing and access"]
  N5["Lab — Manifest and identifier check for the thesis a"]
  N6["Synthesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX039"]
[Learning outcomes]
    |
    v
[7.1 The synthesis]
    |
    v
[7.2 What goes in the archive]
    |
    v
[7.3 A leak caught]
    |
    v
[7.4 Licensing and access]
    |
    v
[Lab — Manifest and identifier check for the thesis a]
    |
    v
[Synthesis]
    |
    v
[Worked example] --> [Exercise EX039]

Learning outcomes

You will (1) synthesise findings into defensible claims; (2) build a reproducibility archive; (3) check that no identifier leaves in supplementary files.

7.1 The synthesis

Ines writes her central claim carefully. Pseudonymisation alone leaves most synthetic riders re-identifiable. A well-chosen k-anonymised file resists simple linkage but leaks under multi-day attacks. Differentially private counts remove record linkage, with error that is negligible for busy routes and serious for quiet routes at low epsilon. Planners in a structured review accepted counts at epsilon one. The claim is bounded by the synthetic population, three planners and the attacks tested. She checks every sentence of the claim against a table, a figure or a lab output so that nothing in the conclusion floats free of evidence.

7.2 What goes in the archive

Thornbury requires a reproducibility archive. Ines includes the pre-registered protocol, the analysis code with its random seeds, the results tables and a short instruction file that explains how to rerun everything. Each file is listed in a manifest with its SHA-256 digest, so that any later change can be detected. She does not include the synthetic population itself, only the generator and its seed, because the population can be rebuilt exactly. This makes the archive small enough to deposit in the university repository while keeping every number in the thesis reproducible by an examiner with ordinary tools.

7.3 A leak caught

When Ines runs the archive check, it blocks one file. A sample rows file she had added to illustrate the data format contains a column named rider identifier with a token copied from an early test that used real card formats. Although the token is fictitious, the check is designed to stop exactly this kind of slip. She removes the file and replaces it with a format description. The episode illustrates why data protection by design, as described in Article 25 of the GDPR and the EDPB guidelines, includes the research outputs as well as the main system being studied.

7.4 Licensing and access

Ines publishes code under an open licence and states that the generator is synthetic and contains no personal data. She adds a data statement that explains what the archive contains, what it does not, and who to contact at the authority about access to real data under its own procedures. Prof. Aaltonen reminds her that open science and data protection are compatible when the archive is designed for both from the start. She records the statement in the thesis front matter as well as in the archive so that readers who never open the repository still understand its limits.

Lab — Manifest and identifier check for the thesis archive

# SHA-256 manifest for a synthetic thesis archive; the release check flags any file containing a raw rider id.
import hashlib
files = {"protocol.md": b"pre-registered protocol v3", "analysis.py": b"seed=7; epsilon grid", "results.csv": b"eps,mae\n0.1,10.1\n", "README.md": b"rerun: python3 analysis.py", "sample_rows.csv": b"rider_id,zone\nR-104233,12\n"}
for n, b in files.items():
    flag = "BLOCK (contains rider_id)" if b"rider_id" in b else "ok"
    print(f"{hashlib.sha256(b).hexdigest()[:16]}  {n:16s} {flag}")

Run with python3 lab_archive.py. Verified output:

a52eebd60ecdcdf6  protocol.md      ok
fec505cc4b189e5f  analysis.py      ok
56ae8db2fd66c425  results.csv      ok
0859d3705f295926  README.md        ok
59ddbf48bee52954  sample_rows.csv  BLOCK (contains rider_id)

Worked example

Ines writes a bounded central claim, builds a five-file manifest with SHA-256 digests and catches a sample file with a rider identifier column, which she replaces before deposit.

Synthetic case. The archive files and the token are synthetic; GDPR Article 25 and EDPB Guidelines 4/2019 are real.

Errors and limits

A keyword check catches only identifiers it is told to look for; free text can still leak. Digests prove integrity, not correctness.

Exercises

Synthesis

Chapter 7 produces a bounded claim and a clean archive. Chapter 8 prepares the defense and publication.

Continue studying — chapter 07 of 08

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