skip to content

Running a per-element LINDDUN pass over a transit card tap ledger, which threats dominate and where?

level: seniorimportance: should knowfreq 52%

answer

  1. Split the design before applying any letters
  2. Different element kinds take different types
  3. One type belongs to the person only
  4. A stable pseudonym is not anonymity
  5. The adversary already has legitimate access

basics

~20 s

Linkability on the tap ledger dominates, escalating to identifiability. A per-element pass applies six LINDDUN types to the flow, store and analytics process, but only linkability, identifiability and unawareness to the rider, whose card number is a pseudonym, not anonymity.

solid answer

~50 s

A LINDDUN pass runs per element, so split the design first: the rider as data subject, the tap event flowing from gate reader to backend, the fare and tap ledger, and the analytics process. In the classic mapping the system-side elements - flow, store and process - take linkability, identifiability, non-repudiation, detectability, disclosure and non-compliance, while the rider takes only linkability, identifiability and unawareness, because unawareness is a property of the person, not of a component. Linkability dominates here: the card number is stable, so every tap joins into one trip series on the ledger. That series becomes identifiability the moment it touches a top-up paid by card, a registered concession, or a 07:40 tap at the same station every weekday. With an insider analyst holding legitimate query access as the adversary, outsider disclosure is not the leading threat - linkable records reachable through sanctioned queries is.

go deeper

for a junior

Know that a LINDDUN pass is applied element by element rather than to the system as a whole, and that a card number with no name attached is still personal data once every trip is stored under it.

for a middle

Be able to split a design into subject, flow, store and process and say which threat types apply to each, including why unawareness attaches only to the person.

for a senior

Show that you pick a realistic adversary first. With an insider holding legitimate query access, linkability of records they may already read outranks disclosure, and you can trace re-identification through joins and derived copies.

for a principal

Own the scope decision: how deep the element decomposition goes before the pass stops paying for itself, and how findings on shared analytics data become a standing constraint rather than a one-off report.

## Why per-element, and what the elements are LINDDUN's value comes from being systematic: rather than brainstorming privacy concerns, you walk each element of the system model and ask which of the seven threat types apply to *that* element. Coverage becomes visible — an unexamined element × type pair is an empty cell somebody can point at — and the output is reviewable by someone who was not in the room. For a city transit smartcard system, the elements are: - the **rider** (the data subject in the model), - the **tap event flow** from gate reader to the fare backend, - the **tap and fare ledger** where every tap is stored under a card number, - the **analytics process** that produces journey and occupancy statistics. ## The mapping table The classic LINDDUN mapping restricts which threat types apply to which kind of element: | Element | Linkability | Identifiability | Non-repudiation | Detectability | Disclosure | Unawareness | Non-compliance | | --- | --- | --- | --- | --- | --- | --- | --- | | Data store | x | x | x | x | x | | x | | Data flow | x | x | x | x | x | | x | | Process | x | x | x | x | x | | x | | Data subject / external entity | x | x | | | | x | | The shape matters more than memorising the cells. **Unawareness only lands on the person**, because it describes what the subject understands and can control, which is not a property a database can have. Conversely, non-repudiation, detectability, disclosure and non-compliance are properties of how the system handles data, so they do not attach to the human element. ## What dominates on this system **Linkability on the ledger.** The card number is stable across years of travel. Every tap under it joins into one series, which is a movement history: where this person enters and leaves the network, at what times, how often, and with which other card taps in a repeated correlation. This threat is present even if nobody in the organisation ever tries to name the rider, and it is the one that survives every access control you put in front of the data, because the linkage is a property of the stored schema rather than of who reads it. **Identifiability as the escalation.** The card number is a pseudonym, not anonymity. It becomes identifying at the first join with an identified record: a top-up paid with a named payment card, a registered concession or student card, a lost-card replacement tied to a customer record, or — with no join at all — a daily 07:40 tap at one residential station and a 08:20 tap at one office station, which is a home-and-work pair narrow enough to name a person. **Unawareness on the rider.** The rider was told the card is anonymous because it carries no name. That framing is false in the way that matters, and the gap between the rider's understanding and what the ledger supports is the unawareness threat. **Detectability on the flow and ledger.** Even without reading a trip, being able to tell that a particular card was active on a given day is a harm in itself for some riders — presence at a location on a date, inferred purely from the existence of a record. **Non-compliance on the store and the analytics process.** The stated policy might say taps are kept for fare settlement and dispute handling; if the analytics process reads a multi-year window for planning purposes, the processing has drifted from the stated purpose and the retention that supports it. ## Getting the adversary right The attacker position changes which threats are leading. Here, take an **insider analyst with legitimate query access** to the ledger — planning staff whose job is to run route analyses. Under that adversary, disclosure to an unauthorised outsider is not the top threat; it is already assumed that this person can read the data. What matters is that the data they are entitled to read is *linkable*, so a legitimate route query is one join away from a movement profile for an individual. Threat models that assume only an anonymous external attacker systematically miss this, and it is the single most common reason a privacy pass on an analytics platform comes back empty. ## Practical discipline Two habits keep the pass honest. First, walk elements in a fixed order and record every cell you consider, including the ones you dismiss and why — a dismissal with a reason is a finding, an absence is not. Second, follow the derived copies: exports to a planning warehouse, caches, and backups are elements too, and linkability that was scoped away in the primary ledger often survives untouched in them.

  • Why is unawareness not mapped onto the tap ledger itself?
    Unawareness describes the data subject's state — what the rider understands about the collection and whether they can see, correct or stop it. A database cannot hold or fail that property, so in the classic mapping it attaches only to the person in the model. The ledger instead takes linkability, identifiability, non-repudiation, detectability, disclosure and non-compliance, which are all properties of how the system handles the data.
  • The card number is random and carries no name. Why is identifiability still on the list?
    Because a pseudonym is only unlinkable until something joins it. A top-up paid with a named payment card, a registered concession, or a replacement issued against a customer record all attach an identity. Even with no join at all, a repeated 07:40 tap at one residential station paired with a workplace station is a home-and-work signature narrow enough to name someone. Linkability plus outside context re-identifies without any name ever being stored.
  • What does the per-element pass give you that a freeform privacy brainstorm does not?
    Coverage you can show and a result someone else can review. Every element crossed with every applicable threat type is asked once, so an unexamined pair is a visible empty cell rather than an invisible omission, and a dismissed threat carries a recorded reason. A brainstorm produces whatever the loudest person in the room happened to think of, and gives you no way to tell what was never considered.

saying these in an interview costs you the question

  • Calls a stable card number anonymous data
  • Maps unawareness onto the database or the flow
  • Treats an outside breach as the only adversary
  • Skips the analytics process as internal and safe
  • Lists threats per system instead of per element
  • Ignores exports, caches and backups as elements

context