Structural attack

A structural attack maps who communicates with whom and how often, using graph analysis to infer roles, hierarchies and relationships from metadata alone, without reading a single message.

In this model each person is a node and each communication is a directed edge. The properties of the resulting network, which nodes have the most connections, which serve as bridges between groups, which clusters communicate densely internally and sparsely across boundaries, can reveal information that was never intended to be disclosed.

Who talks to whom

The input is a log of email metadata: sender, recipient, and timestamp. No message content is needed. The attack proceeds in stages.

# Build communication graph from metadata only
for each email in log:
    add directed edge from sender to recipient
    record timestamp on edge

# Compute structural properties for each node
for each node (email address):
    out_degree = number of distinct recipients written to
    in_degree  = number of distinct senders written by
    betweenness_centrality = how often this node lies on the
                             shortest path between other nodes

# Identify clusters (probable departments or teams)
run community_detection on undirected version of graph
→ groups of nodes with dense internal edges and sparse external edges

# Infer roles from graph position
if node has high betweenness AND high out_degree:
    → candidate for a structurally central role
if node receives from many distinct senders inside one cluster:
    → candidate for a coordinating or supervisory role
otherwise:
    → no structural claim

# Bootstrapping from partial knowledge
if a small number of identities are known:
    use them to label their clusters
    extend labels to unlabelled nodes by structural proximity

The structure of the communication graph is the information; the known identities are anchors for reading it. Leadership is one interpretation of a central position, and testing it needs labels the graph does not contain.

Against the org chart

greenhouse-attacks’ structural.py runs this against the email-Eu-core graph published by the Stanford Network Analysis Project: 986 people who sent or received anything, 24,929 distinct sender-recipient pairs once self-addressed mail is dropped, no content of any kind, and integer identifiers. Repeated messages between the same two people collapse into a single edge, so what is measured is who wrote to whom and not how often. The label file covers all 1,005 nodes with a department out of 42, and the scoring uses the nodes the graph and the labels have in common, so the recovery can be scored instead of admired.

The run also flattens time. The static file has no timestamps in it, so the graph is one snapshot, and how the structure formed or shifted is a separate source of information this experiment never touches.

Louvain on the undirected projection, against those departments:

Resolution

Communities found

NMI

ARI

0.5

3

0.303

0.058

1.0

8

0.601

0.336

1.5

14

0.664

0.499

2.0

24

0.703

0.534

At resolution 2.0 the 24 communities score an NMI of 0.703 and an ARI of 0.534 against the 42 departments. Traffic alone therefore recovers a substantial amount of the department structure without reproducing the departments themselves. At lower resolutions several departments sit inside one larger community, so raising the resolution brings the count nearer the number of labels, and raising it is a choice made by whoever runs the attack rather than something the data settles.

Labelling a few people and inheriting their communities is supposed to be the step that makes this cheap. Every community holding at least one known person takes the majority department among its anchors, and every member of that community is given it; communities with no anchor stay unlabelled. On those terms the anchors buy reach. They do not buy much accuracy.

Known identities

Share of the graph reached

Of those, correct

3

17%

47%

5

27%

56%

10

49%

53%

25

74%

53%

50

89%

55%

Three anchors reach a sixth of the graph and place fewer than half of those correctly. Fifty reach most of it and place 55% correctly. Reach climbs with the number of anchors from 17% to 89%; accuracy wanders between 47% and 56% and never improves with it.

The role inference cannot be scored on this evidence. Ranking by betweenness and out-degree names 81 people of 986 at the ninetieth percentile, and the dataset has no seniority or job title to check them against. Read as a rule, high betweenness and high out-degree is taken as evidence of leadership. Read as arithmetic, it is a threshold on two continuous measures with the cut point chosen by the analyst: moving that point from the ninety-fifth percentile to the seventieth takes the list from 39 people to 245.

Departments, partly and measurably. Roles, not from this.

Precise conclusions

The Court of Justice said as much about metadata without running anything. Striking down the Data Retention Directive in Digital Rights Ireland on 8 April 2014, it held that retained traffic and location data “may allow very precise conclusions to be drawn concerning the private lives of the persons whose data has been retained, such as the habits of everyday life, permanent or temporary places of residence, daily or other movements, the activities carried out, the social relationships of those persons and the social environments frequented by them”. Social relationships and social environments are in that list, and the Court put them inside Articles 7 and 8 of the Charter. A communication graph is one way relationships of that kind become readable from metadata alone. The case concerned traffic and location data retained by providers, so the reading is by analogy and not a ruling about graph analysis.

Topology alone also crosses between networks. Narayanan and Shmatikov re-identified, in 2009, a third of the users who could be verified to hold accounts on both an anonymised Twitter graph and a Flickr graph, at a 12% error rate, using no names, no content and no timestamps. Only who was connected to whom.

The same graph techniques can be pointed at leaked corporate datasets, at intelligence collection, and at internal investigations wherever the metadata is available. A dataset of anonymised email logs, with addresses replaced by hashes, may still show a legible organisational structure if the graph is sufficiently dense.

This is also the argument against the claim that collecting metadata rather than content is inherently less invasive. One part of communication metadata is the structure it describes, who writes to whom and how often, and that structure can be substantially informative about the people inside it.

The structure stays visible

Adding noise to communication patterns, occasionally sending messages to randomly selected contacts with no substantive content, can degrade the reliability of graph analysis, though one person’s cover traffic has limited effect against a much larger graph that nobody else has altered. End-to-end encryption keeps message content from anyone who cannot decrypt it. It does not by itself hide the fact of a communication, its frequency or its timing from the infrastructure handling the traffic. Metadata-minimising protocols cut down what timing and addressing information an intermediate system ever sees, attacking the same problem one layer further down. How often somebody writes, and to whom, is sensitive on its own.

Last reviewed: 2026-09-19.