Articles

Faulty Measurement Detection and Anonymous Credentials at OONI

Many people rely on OONI's public dataset to judge whether a website is reachable in a given country, and our OONI Coverage work for Taiwan and neighbouring regions is built on the same data. Anyone can submit to the dataset, so fabricated submissions or misconfigured devices producing misleading records dilute the reliability of the whole thing. In a recent engineering post,1 OONI explains how it finds faulty measurements and how the anonymous credential system it is rolling into production blocks abuse without storing personal data. Scoring the trustworthiness of measurements without keeping personal data is a privacy-engineering pattern worth studying in its own right, and we come back to it in the section on the credential system.

This is our guide to and summary of OONI's engineering post From Heuristics to Anonymous Credentials: Assessing OONI's Approach to Bad Measurements (2026-07-06). It follows the post's sections rather than translating it. The original has around 20 charts and several full data tables; read it for the detailed numbers.

OONI (Open Observatory of Network Interference) is a global project that observes internet censorship. OONI Probe connects to the sites on a test list one by one and reports whether each is reachable locally, and every result goes into a public dataset. Anyone can download the data for analysis, and anyone can also send data in. The question the post sets out to answer is how to recognise and filter out poor-quality measurements while keeping submissions open.

Structure of the Original Post

OONI first builds a baseline for spotting faulty measurements from the data it already has, then assesses how far the new anonymous credential system can raise that baseline. A heuristic here is a simple, cheap rule of thumb: it does not aim for perfect accuracy, only for a first pass that flags suspicious measurements. The post has three parts. It checks how many problems simple rules can find in existing data (existing heuristics and four groups of findings), proposes more advanced rules (new heuristics), and then sets out what to do once faulty data has been found (mitigation strategies and anonymous credentials).

Existing Metrics and Four Checks

The Existing metrics and heuristics section uses no new technology. It only asks whether the data OONI already collects is enough to recognise faulty measurements. OONI picked four checks that cost users no privacy: IP geolocation mismatches, measurement volume spikes, timestamp inconsistencies, and contradictions between OS and version metadata. Each comes with a caveat describing when the signal misfires. The GeoIP database bundled with the probe can be out of date, for example, so probe_cc (the country code the probe reports) will sometimes disagree with the real IP for ordinary reasons, and that baseline error has to be filtered out first. The four checks and their caveats are the methodological basis for everything that follows.

Findings Across Four Anomaly Types

IP Geolocation Mismatches

From 19 to 21 March 2025, OONI logged calls to the /api/v1/check-in endpoint and compared the country code and ASN (autonomous system number) each probe reported with the real egress IP seen by the collector. Of 16,139 samples, 1,196 did not match, about 7.41%. The ten most common country-code mismatches:

Reported country Country of real IP Count
US United States CA Canada 89
CA Canada RU Russia 49
CZ Czechia US United States 43
BS Bahamas US United States 36
CA Canada US United States 30
CA Canada SG Singapore 30
CZ Czechia GB United Kingdom 25
CA Canada KH Cambodia 18
AU Australia KH Cambodia 18
US United States DE Germany 16

Almost all of the mismatches came from VPNs. The networks that appeared most were known VPN hosting providers such as Datacamp, Cloudflare and M247. All 49 records reporting Canada with a real IP in Russia came from Cloudflare, which corresponds to users of a VPN such as WARP. Most rows in the table follow the same pattern: the probe reports country A while its traffic leaves through a VPN exit in country B. The post found no mismatches clearly attributable to deliberate tampering or probe misconfiguration.

Measurement Volume Spikes

OONI counted how many measurements each probe produced per minute. The mean was 8 and the 99th percentile was 54. Filtering for extreme cases above 200 per minute turned up a client calling itself ooniprobe-react-os, which is not an official OONI release. It submitted data only for probe_cc = CN (China), sending web_connectivity measurements at 200 per minute, roughly three per second, far outside the normal range. More oddly, ooniprobe-react-os submitted faster than other probes in the same region, with no network bottleneck to match its volume. Another case was a burst of submissions from Myanmar on 6 January 2025.

Timestamp Inconsistencies

OONI compared each measurement's measurement_start_time with the timestamp embedded in its measurement_uid, looking for records uploaded too late or dated in the future. Between 2 March and 1 April 2025, only 0.82% of more than 34.4 million measurements had timestamp anomalies. Most were in the past, and they were concentrated on Linux, whose 2.16% anomaly rate is clearly higher than the other platforms:

Platform Past anomalies (>1h) Future anomalies (>1h) Total anomalies Platform total Anomaly rate
ios 2,375 0 2,375 240,843 0.99%
windows 34,192 24,938 59,130 10,503,040 0.56%
android 21,132 5,509 26,641 10,389,320 0.26%
macos 906 0 906 3,103,961 0.03%
linux 185,322 7,908 193,230 8,947,716 2.16%

A large share of the anomalies came from a single ASN in Venezuela. After contacting a local partner, OONI found that those devices had the wrong time zone configured. With Venezuela excluded, the Linux figures drop sharply while the other platforms barely change. Misconfiguration alone is enough to produce misleading records, with no malice involved.

Contradictory OS and Version Metadata

OONI checked whether the software name matched the platform, for example software_name = ooniprobe-android labelled as iOS. There were 718 measurements from Android software on non-Android platforms. Some were traced to OONI team members' own development machines; others came from the same China-only ooniprobe-react-os client. The post also lists several unfamiliar software names (Vladhog, murakami-ooniprobe, MySorgenia, Dismantle and others) and works out where each came from. Much of the data that looks suspicious comes from development work or third-party forks and has nothing to do with attacks.

Implications for Data Users

OONI found no large-scale malicious pollution in its data. The vast majority of anomalies come from VPNs, misconfiguration, development machines or unofficial forks. Defences are still needed, but the threat today is not an imminent large-scale attack.

Our OONI Coverage analysis rests on the same public data, so a source without heavy pollution gives that analysis firmer footing. The four findings are also a reminder that probe_cc is not ground truth for local network conditions. Geolocation mismatches caused by VPNs and wrong time zones are part of the data, and they need filtering before analysis. In networks where genuine coverage is already thin, as in much of the Asia-Pacific, a small amount of such noise moves the picture more than it would elsewhere.

Proposed New Heuristics

Beyond the existing rules, OONI wants to add more advanced detection. Location has always been the hardest part, because the probe looks up the GeoIP database itself and the database goes stale. The options under consideration include asking the phone's operating system for the mobile country and network codes (MCC/MNC), querying the OS location service, or matching IPs to locations on the server instead. The post notes a limitation for each: server-side matching cannot see the real IP when a circumvention tool sits in between, and asking for location permission may worry users. OONI also wants anomaly detection at the network and protocol layers, such as recognising man-in-the-middle devices (antivirus software that rewrites traffic, for instance) from their TLS handshake fingerprints.

Principles for Handling Faulty Measurements

Detection is followed by handling, and OONI sets two principles. First, the final decision on whether a measurement is faulty goes through human review, so that automated rules do not discard good data. Second, data that has already been submitted is never modified unless leaving it unchanged would affect user privacy. Because a human has to be involved, handling can only happen after the faulty data has entered the data pipeline.

The available tools include blocking pseudonyms that behave abnormally, rate-limiting submissions, dynamically adjusting how many submissions are accepted for a given region and time window, and rotating issuer keys. A pseudonym is the identifier the anonymous credential system gives a probe. It stays fixed within one network, cannot be linked across networks, and does not map to anyone's real identity; the next section explains how. The post is open about the trade-offs. A rule accepting only probes older than six months would block Sybil attacks (flooding the dataset with fake identities), and it would also block legitimate new probes.

The Anonymous Credential System

Problems with Fixed Probe IDs

The obvious approach is to give every probe an ID and keep an allowlist on the server. Even a random ID, if it never changes, is enough to single out one probe, which is a privacy disaster, and a probe can get around a block by switching to a new ID. The core tension the credential system resolves is how to do access control and trust scoring together without keeping personal data long-term.

Range-Based Credentials

The idea is close to an age check at a bar door: the staff look at a document proving the holder is an adult and let them in, without learning their name, address or date of birth. OONI's credential proves something different, namely that a probe has been around long enough and has submitted enough measurements.

The server issues the credential, but it is stored only on the probe; the server keeps no copy and the credential is not sent anywhere else. It cryptographically encodes the probe's age and submission count (msm_count), and proves only that each value falls within a range, such as "more than 1,000 measurements" or "older than a week", without revealing the exact figures. Ranges are a deliberate choice: an exact submission count is close to a unique fingerprint and would make the probe identifiable, while a coarse range does not leak identity.

Zero-Knowledge Proofs at Submission

When it submits, the probe uses its credential to produce a zero-knowledge proof, a cryptographic method for proving a statement true without revealing the details. The server sees only the proof, never the underlying values, and can still decide whether the measurement satisfies an access rule, such as "probes in this country and ASN need 1,000 prior submissions". Trust is also bound to a specific country-code and ASN pair. Reputation a probe builds in one network cannot be carried to another, which stops someone from building up credentials in a low-threshold network and using them to attack a different one.

A brand-new probe starts with little age and few submissions, so it does not meet the stricter rules and simply keeps running measurements. Each time it submits, the server verifies the proof and returns an updated credential with the count incremented by one. Once enough time and volume have accumulated, the probe crosses thresholds like "one week" and "1,000 measurements", and its measurements from then on can be marked verified. At no point does OONI obtain a fixed ID for the probe or store any personal data.

Copied Credentials and Sybil Attacks

Since the credential lives on the probe, could someone copy it a hundred times and pose as a hundred probes, each with its own reputation? The network-local property described above prevents this. Within one network, the same credential always derives the same pseudonym, so any number of copies is still treated as one probe rather than a hundred independent trusted identities. OONI is candid that credentials alone cannot fully solve Sybil attacks; complete defence needs application-layer measures such as rate-limiting new registrations and capping submissions per region. What the credential does is raise the cost of an attack, because an adversary first has to cultivate a set of probes that are old enough and have submitted enough.

Verification States and Long-Term Metrics

Each measurement ends up marked verified, unverified or failed, and data users can decide for themselves how much weight to give each. Some effects only show over time. OONI will keep tracking the ratio between the three states to diagnose whether a client update has broken the protocol implementation, or whether old probes have not been updated. It will also count probes by protocol version and measure how long server-side verification of one measurement takes, so that performance regressions are caught early.

Value as a Privacy Design Reference

Access control and trust scoring without storing personal data is a problem many systems run into. OONI trades away precise blocking of individual probes, and in return gets anonymity through range proofs and credentials stored only on the client. That trade-off is useful study material for anyone who cares about privacy design, and it connects to our Personal Privacy Guide Track.

Reliability of the Dataset

OONI's public data is not heavily polluted by malicious submissions. The anomalies it found mostly come from honest mistakes such as VPNs, wrong time zones and development machines, so the data remains a sound basis for understanding blocking in Taiwan and elsewhere. For the cryptography behind the credentials, OONI has two related posts: one sets out the system's requirements,2 and the other announces its design and implementation.3 Our guide to the second is OONI Probe's Anonymous Credential System.

Section-by-Section Summary

Section in the original Focus Key figure or conclusion
Existing metrics and heuristics, Approach A detection baseline from existing data Four checks that cost no privacy
IP geolocation mismatches Reported location against real IP 7.41% mismatched, mostly VPNs
Measurement volume anomalies Submission rate spikes from single probes China-only ooniprobe-react-os at three per second
Timestamp inconsistencies Measurement timestamps that do not line up 0.82% anomalous, wrong time zones in Venezuela
Probe OS, version metadata Software names that contradict the platform 718 records, including team development machines
New heuristics More advanced detection ideas MCC/MNC, server-side GeoIP, TLS fingerprints
Mitigation strategies Handling faulty data once found Human review, no retroactive edits, rate limits, Sybil resistance
Naive solution Problems with fixed IDs A fixed ID de-anonymizes; a new ID evades blocks
Anonymous credentials solution Credential-based trust scoring Range proofs, client-side storage, no fixed ID
Future validation Long-term validation metrics Ratio of verified, unverified and failed

Glossary

Term Meaning
Heuristic A simple, cheap rule of thumb that flags suspicious measurements without aiming for perfection
OONI Probe OONI's mobile and desktop app, which connects to each site on a test list and reports whether it is reachable locally
Probe The device or program running measurements
probe_cc The country code the probe reports
probe_asn The ASN the probe reports
ASN Autonomous system number, identifying a block of IP addresses under one administration, usually an ISP or institution
msm_count The number of measurements a probe has submitted
Check-in endpoint The API a probe calls before measuring, reporting its country code and ASN
web_connectivity Web Connectivity, OONI's most common test, which checks whether a website is reachable locally
Ground truth The actual local network conditions, used as the reference for what probes report
Sybil attack An attack that floods the dataset with fake identities to skew results
Pseudonym A probe's identifier under the credential system, fixed within one region and IP, unlinkable across networks, and not a personal identity
verified, unverified, failed The three trust labels the credential system gives each measurement