This is an old revision of the document!
Table of Contents
Provenance: security:email_authentication
The working log behind email_authentication: every query with its denominator, the hand maps, the folds and their residue, the quotes that were checked and the one that turned out not to be a quote, the external sources that were accepted and the ones that were rejected, and what the four reviewers found. Corpus-level caveats — how the 5,859 papers were selected, why 2025–2026 are provisional — are on corpus and are not restated here.
This is a log, not prose. It is for someone checking a number.
1. The run
| Date | 2026-09-09 |
| Corpus at the time | data/extract/run1/extractions.jsonl, 5,859 papers, 7 venues (CCS, IMC, NDSS, PETS, USENIX Security, TheWebConf, IEEE S&P), 2010–2026 |
| Page population | 31 papers — the INFRA verdict of scripts/msg_fold.mjs |
| Report script | scripts/report_email_authentication.mjs (754 lines), output reproduced in full in section 8 below |
| Model | Claude Opus 5, one main agent |
| Sub-agents | one currency research pass (sonnet); three focused review passes (sonnet); one generic review pass (fable). All findings and dispositions in section 12 below |
| Pages touched | security:email_authentication (created), provenance:security:email_authentication (created), literature:bibliography (+26 entries, 1 corrected), security (five children → six), roadmap (row moved from Queued to Assessed) |
| New BibTeX keys | 26 — 24 for the population, plus jeitner2021_injection (adjacent) and yajima2023_first (the BIMI measurement outside the corpus, added after review). One existing entry corrected: lee2020_longitudinal |
2. The population, and why it was not re-derived
The 31 papers were not derived by a query written for this page. They are the INFRA verdict of scripts/msg_fold.mjs, the hand map published on 2026-09-02 with email_tracking and printed by scripts/report_email_tracking.mjs section H. That map screened a 354-paper candidate pool, built by unioning a title-slug regex with a full-text density threshold over message-channel vocabulary, and gave every paper in the pool one of eleven verdicts. INFRA is the one whose object is the machinery that carries the message rather than the message.
Reusing it rather than writing a new query is a deliberate choice with a cost and a benefit:
- Benefit. The population is already published, already hand-read, already carries a one-line reason per paper, and the count already appears in two places on
privacy:email_tracking. Re-deriving it would have produced a second, slightly different 31 and left the two pages disagreeing. - Cost. The candidate pool that produced it was built for a page about message tracking. Its recall for email-infrastructure work is therefore a property of somebody else's regex. Section 3 is the recall check that closes this.
scripts/report_email_authentication.mjs imports the map and throws if the INFRA slice is no longer 31 papers, and again if any of its own hand maps stops covering exactly those 31 slugs:
if (INFRA.length !== 31) throw new Error(`msg_fold INFRA slice is ${INFRA.length}, page was written against 31`); if (PAPERS.length !== 31) throw new Error(`only ${PAPERS.length} of 31 INFRA slugs found in extractions.jsonl`); ... assertComplete('KEYS', KEYS); assertComplete('MECH', MECH); assertComplete('METHOD', METHOD);
assertComplete reports both directions — a slug in the population with no map entry, and a map entry for a slug not in the population. Both were exercised during development by deleting entries; both fire.
31 of 5,859 is not a rate, and the page says so. The only honest denominator for it is the 354-paper candidate pool, which belongs to the other page.
3. Recall: does the hand map miss email-authentication papers?
A full-text probe over all 5,859 papers (paper.cols.txt, whitespace collapsed; 4 papers have no .cols file and count as negatives), counting occurrences of each mechanism family:
const PATS = { spf: /\bSPF\b|Sender Policy Framework/g, dkim: /\bDKIM\b|DomainKeys/g, dmarc: /\bDMARC\b/g, starttls: /STARTTLS|\bSTART ?TLS\b/g, dane: /\bTLSA\b|\bDANE\b/g, mtasts: /MTA-STS|TLS-RPT|TLSRPT/g, smime: /S\/MIME|SMIMEA|OPENPGPKEY/g, smtp: /\bSMTP\b|\bMTA\b|\bMX record/g, bimi: /\bBIMI\b|Brand Indicators/g, arc: /Authenticated Received Chain|\bARC (chain|set|seal)/g, }; // mech = spf+dkim+dmarc+dane+mtasts+bimi+arc ; tls = starttls+smime
| Probe | Admission rule | Papers hit | of the 31 | Mapped to another verdict | Unmapped |
|---|---|---|---|---|---|
| TIGHT | mech≥10 or tls≥10 or (smtp≥30 and mech≥3) | 45 | 30 | 5 | 10 |
| WIDE | mech≥4 or tls≥4 or (smtp≥15 and mech≥2) | 77 | 31 | 14 | 32 |
Widening the probe added 32 unmapped papers and none of them belongs on the page. Read by hand on 2026-09-09, they are DANE-for-HTTPS (When HTTPS Meets CDN, IEEE S&P 2014, 60 DANE/TLSA hits and not one about mail), DNSSEC registrar and resolver work, ALPACA, DROWN, Let's Encrypt, a DNS toolkit paper, PDF encryption, and two software-engineering interview studies where S/MIME appears in a quotation. The full list is in section H of the report output.
Two things this establishes and one it does not:
- The hand map is not missing a cluster. A regex twice as permissive as the one that would sensibly be written for this topic finds nothing new.
- The probe cannot replace the hand map. The TIGHT probe misses one of the 31 —
IMC/2017/email-typosquatting, whose subject is misdirected mail and which names no authentication mechanism at all. A page defined by the regex would have dropped it. - It does not establish that the seven venues are the field. EuroS&P, ACSAC, RAID, AsiaCCS, TMA, PAM, ANRW and ACM CCR are outside the corpus entirely, and this literature publishes in several of them.
Boundary cases: papers I considered and left out
| Paper | msg_fold verdict | Decision |
|---|---|---|
WWW/2024/unfiltered-measuring-cloud-based-email-filtering-bypasses | SE (spam / filtering) | Left out, and this is the one I would most expect a reasonable person to decide the other way. Its measured object is a delivery-path misconfiguration (the hosting provider accepts mail that did not come via the contracted filter) and its instrument is SMTP probing — both squarely this page's. It is filed under filtering because filtering is what the bypass defeats. I did not move it, because the task brief says to reuse the published verdict rather than re-derive, and because privacy:email_tracking publishes “31 papers” in two places: silently making it 32 would put two live pages in disagreement. Instead it is named on the content page in Adjacent, and deliberately not in the 31, with the argument stated. If a future run wants it in, change msg_fold.mjs and both pages together. |
NDSS/2025/hades-attack-…-email-blocklists | SE | Left out. Object is blocklist manipulation. |
NDSS/2026/one-email-many-faces-…-email-aliases | EID | Left out. Alias identity confusion is email_tracking's subject. |
2024/inbox-invasion-…-mime-ambiguities | SE | Left out. Content inspection, not transport. |
USENIX/2021/injection-attacks-reloaded-tunnelling-malicious-payloads-over-dns | not in the candidate pool at all | Left out. Its object is DNS response injection; SPF validators (libspf2, policyd-spf) are among the vulnerable consumers, which makes it the direct methodological ancestor of SPFail. Cited on the page as adjacent, and a BibTeX entry was added for it. |
4. Every query, with its population
All counts are of papers, never of extraction tuples. Sentinels (not-stated, none-mentioned) are never counted as an answer. Reproduce with node scripts/report_email_authentication.mjs.
| # | Question | Population (denominator) | Answer | Report section |
|---|---|---|---|---|
| Q1 | How many papers, and when? | the 31 | 2015:2 2017:1 2018:2 2019:1 2020:2 2021:2 2022:5 2023:5 2024:4 2025:6 2026:1 — 28 are ≥2018, 21 are ≥2022 | A |
| Q2 | Which venues? | the 31 | USENIX 16, IMC 7, NDSS 4, CCS 1, IEEE S&P 1, TheWebConf 1, PETS 1 | A |
| Q2b | How concentrated is the authorship? | the 31; authors from corpus2/.meta plus out/authors.json (PETS and USENIX .meta records carry none, so the cache is not optional — two papers had to have their authors fetched during this run before the query would cover all 31) | 111 distinct authors. Five first authors have more than one paper here, covering 13 of the 31; twelve people appear on four or more; Haixin Duan appears on 7. The page's first draft said “three of the 31 share a first author”, from impression — this query replaced it | A3 |
| Q3 | Which mechanism does each paper measure? | the 31, multi-valued, hand map | SPF 16, DKIM 12, DMARC 12, STARTTLS 9, delivery-path 6, S/MIME+OpenPGP 6, DANE 4, DNSSEC 3, MTA-STS 2, autoconfig 2, ARC 1 | B |
| Q4 | Which instrument does each paper use? | the 31, multi-valued, hand map | dns-scan 18, account-delivery-test 14, smtp-probe 13, client-matrix 11, software-testbed 7, provider-logs 6, operator-survey 5, code-analysis 3, notification-experiment 3, passive-dns 2, user-study 2, honey-domain 1. Instruments per paper: mean 2.74, median 3, range 1-5, distribution {1:4, 2:7, 3:14, 4:5, 5:1} | C |
| Q5 | Did the instrument mix change? | the 31, split 2015–2019 (6) / 2020–2022 (9) / 2023–2026 (16) | operator-survey 0/6 → 1/9 → 4/16; software-testbed 0/6 → 2/9 → 5/16; their union is 8 of the 16 papers from 2023 on, and 0 of the 6 from 2015-2019; code-analysis goes the other way, 1/6 → 2/9 → 0/16 | C |
| Q6 | What sampling frames? | the 31; all 31 record at least one population[].sourceList | hand-built list 13, Tranco 9, Alexa 7, Adobe-2013 breach list 5, operator logs 5, passive DNS/OpenINTEL 3, university lists 3, TLD zone files 3, Enron 2, other top list 2, IPv4 space 1 | D |
| Q7 | Did the frame date? | the 17 of the 31 naming a domain-list frame | last Alexa use 2023; first Tranco use 2021; first zone-file use 2023; papers from 2024 onwards using Alexa: 0 | D |
| Q8 | Ethics review reported? | the 31 | none-mentioned 12, explicitly-discussed-no-review 6, approved 5, not-required 4, sought-outcome-unstated 2, exempt 2 | F |
| Q8b | Is that worse than the corpus? | the 4,965 corpus papers carrying an ethics object | No, better. none-mentioned 64.2% corpus against 38.7% here; approved 20.1% corpus against 16.1% here. n = 31, so neither gap is a difference. The page's first draft said the distribution was worse than the corpus, from impression; the figures reviewer caught it and the comparison is now computed in the script | F |
| Q9 | Affected parties notified? | the 31 | yes 19, partial 6, not-stated 3, no 2, not-applicable 1 | F |
| Q10 | Artifacts? | the 31 | availability public 20, none-mentioned 9, promised 1, withheld 1; 18 give a codeUrl | F |
| Q11 | Statistics beyond description? | the 31 | descriptive-only 29; hypothesis-test 2; regression 1; correlation 1; resampling 1; 0 papers have no statistics tuple at all | F |
| Q12 | Hand coding and agreement? | the 19 of the 31 that coded something by hand | 0 report an inter-rater agreement metric | F |
| Q13 | People recruited? | the 31 | 8 papers; five operator surveys with n = 39, 74, 16, 95, 117; one MTurk field study n = 488; one lab study n = 50; one 48-university field study. Recruitment channel: the extraction says 3 of 5 and undercounts by one – [1Ashiq, Md. Ishtiaq; Li, Weitong; Fiebig, Tobias; Chung, Taejoong (2023): "You've Got Report: Measurement and Security Implications of DMARC Reporting", in: Proceedings of the USENIX Security Symposium. (Link)] names MailOP, NANOG and MESSEU in its own text and the extractor recorded not-stated | F |
| Q14 | Which mechanisms does the corpus never measure? | all 5,859 papers, full-text probe | BIMI named in 5, all 5 in the 31, all 5 related-work sentences (hand-read) – measured by none. REQUIRETLS named in 0. TLS-RPT named in 3, all in the 31, and it is not unmeasured: [1Ashiq, Md. Ishtiaq; Li, Weitong; Fiebig, Tobias; Chung, Taejoong (2023): "You've Got Report: Measurement and Security Implications of DMARC Reporting", in: Proceedings of the USENIX Security Symposium. (Link)] Table 4 measures provider support, 2 of 8 EHPs. The page's first two drafts got this wrong in both directions; see section 12 below | G |
| Q15 | Is the population complete? | all 5,859 papers, two probes | see section 3 above | H |
| Q16 | What tools do these papers use? | the 26 of the 31 naming at least one tool as used | Postfix 10, OpenSSL/pyOpenSSL 5, a PGP implementation 5, an SPF validator library 4, ZMap 4, Dovecot 3, a spam/blocklist service 3 … residue in section 6 | I |
The full per-paper lists behind Q3, Q4 and Q16 are printed in the report output; they are not reproduced here because they are the same 31 slugs eleven times over.
Figures published on the page, with denominators
53 figures, each hand-keyed in the FIGURES array of the report script with its population and its evidence quote, and each printed by report section E. They are not repeated here — section E of the output embedded in section 8 below is the authoritative list, and it is generated, so it cannot drift from the script. Read it rather than this page if you are checking a number.
Three figures on the page are derived rather than quoted, and are marked here because a derived percentage is where an inferred denominator hides:
- “4,167,633 domains (41.7%)” — the paper states the count and states the population as the top ten million; the percentage is mine, 4,167,633 / 10,000,000.
- “882,183 domains (8.8%)” — same paper, same arithmetic.
- MTA-STS “0.07%–0.13% by TLD” — the paper's own Table 1 gives the per-TLD percentages and the header of the column they are shares of reads “Domains with MX Records”. The four zone totals in that table sum to 86.8 million; the page does not publish 68,030 / 86.8M as a combined rate, because the paper does not, and because the prose and the table disagree with each other on
.org(0.12% in the prose, 0.13% in Table 1). The page quotes the range, not a combined figure.
5. The hand maps
Two of the page's tables are hand maps, not extraction fields, because the schema has no field for them. Both live in the report script, both are asserted complete against the 31, and both are my judgement.
MECH— which deployed mechanism the paper measures, read off its own results section. Not which it mentions: every one of the 31 mentions SPF. A paper whose object is where mail goes rather than any single mechanism getsdelivery-path.METHOD— the instrument families, defined in theMETHODSdictionary in the script so the definition travels with the count. A paper gets every family it actually ran, which is why the mean is 2.7.
Judgement calls inside them worth naming:
email-typosquattinggetsdelivery-pathandhoney-domain. It measures neither an authentication mechanism nor a transport-security mechanism; it measures what happens to mail that is addressed wrongly. It is in the population becausemsg_foldput it there and because misdirection is a delivery-path property.heads-in-the-cloudsgetsdelivery-pathanddns-scanonly. Its subject is university cloud migration generally; MX-record concentration is one section of it. It is the weakest fit of the 31 and I would not have admitted it from scratch.s-minegetssmtp-probefor its internet-wide LDAP scan. LDAP is not SMTP; the family is “actively connect to servers and drive a protocol” and there is no better bucket. Flagged rather than renamed.DNSSECis listed as a measured mechanism for three papers because DANE cannot be measured without it, not because those papers are DNSSEC studies.
6. Folds, and the residue in full
Two free-text fields were folded. Both residues are printed by the script and are reproduced here, because a residue that exists only in a local script output is a residue nobody will ever look at.
6a. ''population[].sourceList'' → sampling frame
Rule (report section D):
[/alexa/i, 'Alexa (retired Nov 2022)'], [/tranco/i, 'Tranco'], [/majestic|umbrella|domcop|quantcast/i, 'another top list (Majestic / Umbrella / DomCop)'], [/zone file|verisign|internetstiftelsen|public interest registry|czds/i, 'TLD zone files'], [/passive dns|farsight|sie|dnsdb|openintel/i, 'passive DNS / OpenINTEL'], [/adobe/i, 'Adobe 2013 breach address list'], [/enron/i, 'Enron corpus'], [/gmail|coremail|smtp connection log|reception log|delivery log/i, 'operator logs'], [/university|times higher|the top100|institution/i, 'university lists'], [/custom (seed|client|list)|selected public|public software|specialized mailing|mailing list|nanog|mailop/i, 'hand-built list'], [/ipv4|address space|scans\.io|censys|zmap/i, 'IPv4 address space'],
43 distinct strings did not fold. They are almost all one-off study-specific populations rather than reusable frames, which is the finding: outside the top-list/zone-file/passive-DNS trio, everybody builds their own. The full residue is in report section D and is reproduced verbatim in the embedded output below. A sample of what is in it: “48 universities”, “DomCop Top 10M list”, “dmarcian's DMARC Data Reporters”, “emailclientmarketshare.com”, “mailsac.com”, “public LDAP servers”, “reachable mail servers identified in setup guides”, “shared infrastructure settings: cloud servers, proxy services, serverless functions, CI/CD platforms, and CDN services”, “Tor exit list”, “VPNGate”.
One residue entry is a sentinel and should be read as one, not as a frame: “not-stated” for USENIX/2021/why-tls-is-better-without-starttls.
One is a pointer rather than a source and would be wrong to fold into anything: “based on [56]”, “previous work [44]” and “prior research [40]” (all USENIX/2025/email-spoofing-with-smtp-smuggling). The extractor recorded the citation instead of the list. That is an extraction limitation, not a study one.
6b. ''tools[].name'' (''usedOrMentioned === "used"'') → tool family
Denominator: the 26 of the 31 papers that name at least one tool as used. The fold merges implementations of the same thing (libspf2/pyspf/Mail::SPF/policyd-spf/spfmilter/python-postfix-policyd-spf → “an SPF validator library”; GnuPG/gpg/GPGME/Enigmail/GPG Suite/OpenKeychain/OpenPGP.js → “a PGP implementation”). The unmapped residue is large — roughly a hundred distinct strings across the 31 papers — and is printed in full in report section I. It is dominated by single-use infrastructure (QEMU, GNU Parallel, mitmproxy, Qualtrics, jc, hashcat, Google Translate) and by named commercial services (Netstar URL Categorization, Coremail spam filter, GoDaddy Domains API, HaveIBeenPwned).
The fold is not cosmetic. Without it, OpenSSL and openssl are two tools, ZMap, Zmap and XMap are three, and every one of them falls below any reporting threshold.
7. Quotes: what was checked, and the two-column problem
7a. The 49 published figures
Every figure the page publishes carries an evidence.quote in the FIGURES array, and the script locates each one in paper.cols.txt in three modes — exact after whitespace collapse, whitespace-and-hyphen folded, punctuation folded. Four figures needed two fragments, giving 57 fragments in total; three of those second fragments exist because the source sentence is not contiguous in any available rendering, and the fourth is a corroborating quotation rather than a splice.
Final state: 55 exact, 2 punctuation-folded, 0 unlocatable. The script prints *** N QUOTE(S) COULD NOT BE LOCATED *** and the page's quotes were rewritten until that line disappeared.
That is a selection effect and it should be stated as one. Reaching zero meant changing the quote, never the figure. Ten quotes were rewritten in the first pass and one in the last; in every case the number and the claim stayed and only the string moved, usually by shortening to the contiguous part of the same sentence. The full before/after list:
| Figure | First quote (unlocatable) | Published quote |
|---|---|---|
| DKIM 28.1% | “find at least 28.1% of the domains have deployed DKIM” | “28.1% of Alexa Top 1 million domains have enabled DKIM” — a different sentence in the same abstract |
| DANE 0.60–0.73% | the whole caption | split into two fragments, spliced set |
| Extended Hell(o) SPF | the whole sentence | split into two fragments, spliced set |
| MTA-STS 68,030 | “we find adoption to have risen 3-4 times, with adoption ranging between 53,800 (0.07%)” | the contiguous tail, plus Table 1's .com row as quote2 |
| MTA-STS 19.6% | the results-section sentence | the contributions-list sentence, which is contiguous |
| MTA-STS 29.6% | the results-section sentence | the contributions-list phrasing plus a corroborating second fragment |
| MTA-STS 94.7% | “Out of the 94 participants … 89 (94.7%) had heard of the standard” | “While awareness of MTA-STS was high (94.7%)” |
| Efail S/MIME | “exfiltration channels exist for 23 of the 35 tested S/MIME email clients” | “23 of the 35 tested S/MIME email clients” |
| SPF Beyond survey | “54 (87.1%) answered yes, while only 8 explicitly indicated they do not” | “answered yes, while only 8 explicitly indicated they do not” |
| BreakSPF 51.7% | “51.7% of domains have SPF records that include more than 65,536” | “findings revealed that 51.7% of domains have SPF records” |
| Misleading UI 25 of 35 | “Table 4 shows the 25 email providers that have misleading UIs” | “25 out of 35 providers will automatically load the spoofed sender's photo” |
No figure was dropped for being unquotable, and no figure's value changed to make a quote fit.
7b. The spliced sentences, and why they are not errors
paper.cols.txt repairs two-column reading order, but it cannot repair a sentence that the PDF itself interrupts with a table row, a figure caption or a running head. Three of the page's figures sit on such a sentence and carry a spliced annotation in the script. A fourth figure carries a second quote fragment that is an independent corroborating quotation rather than a split sentence, and a fifth spliced sentence – the DANE rollover figure – is stated in the page's prose rather than in a figure row, so three is a floor rather than a total. I checked each against paper.txt and paper.norm.txt as well; none of the three renderings contains the sentence contiguously, so this is the PDF's layout, not the extraction pipeline's fault.
| Paper | Role | What the sentence looks like in .cols |
|---|---|---|
a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email | spliced figure (spliced set) | “0.60% (.com) ∼ 0.73% (.net) of all 4.1 Datasets domains with MX records have corresponding TLSA records in the latest snapshot.” — a section heading lands inside a figure caption |
extended-hell-o-… | spliced figure (spliced set) | “Our analysis shows that only 4,167,633 do” … “mains in the top ten million implement SPF” — broken mid-word by a column break |
unraveling-the-complexities-of-mta-sts-… (68,030 row) | spliced figure (spliced set) | Table 1 is interleaved with a figure legend; quote2 is the .com row of that table |
unraveling-the-complexities-of-mta-sts-… (29.6% row) | corroborating fragment, not a splice | the second fragment is an independent sentence from the contributions list, quoted because the figure appears twice in the paper with different framing. No spliced annotation |
breakspf-… | shortened, not split | “findings revealed that 51.7% of domains have SPF records” … “that include more than 65,536 (216 ) IP addresses” — a table of error types sits between them, so the published quote stops at the first half |
efail-… | shortened, not split | “Of the tested 48 email clients, 13 load ex-” [table rows] “ternal images by default.” — the published quote is the contiguous “23 of the 35 tested S/MIME email clients” instead |
under-the-hood-of-dane-mismanagement-in-smtp | prose figure, outside FIGURES | “more than 87% of SMTP servers in each case perform rollovers incor-” [column break] “rectly at least once”. Stated in the page's What to Report section, not in a figure row, so the script does not track it. This is why three is a floor |
So: three figures carry a spliced annotation, one carries a second fragment for a different reason, two were shortened to a contiguous fragment rather than split, and at least one prose figure outside the tracked array is spliced too.
Consequence for the page: it does not present any of these five as one continuous quotation. It states the figure and leaves the split-quote evidence here.
7c. The extraction's own quotes
As a check on the extraction rather than on the page: all 206 detection[].evidence.quote values across the 31 papers were located.
| Mode | Quotes |
|---|---|
| exact | 119 |
| punctuation-folded | 11 |
not contiguous in .cols | 76 (36.9%) |
36.9% is far above the 0.9% unlocatable rate data/extract/README.md reports corpus-wide, and that difference needs explaining rather than reporting. Of the 76: 11 contain an explicit ellipsis inserted by the extractor and were never expected to match. The remaining 65 were sampled by hand on 2026-09-09 — eight of them read in context in paper.cols.txt:
| Paper | Quote | Verdict | |
|---|---|---|---|
| DKIM deployment 2022 | “We find 28.1% domains support DKIM based on active scanning on Alexa top 1M domains” | Real. .cols reads “We find 28.1% domains support 1190 31st USENIX Security Symposium Table 3: … DKIM based on active scanning on Alexa top 1M domains” — a page number, a running head and a table caption inside the sentence | |
| DANE ecosystem 2020 | “0.60% (.com) ∼ 0.73% (.net) of all domains with MX records …” | Real. Section heading inside a figure caption | |
| Efail 2018 | “Of the tested 48 email clients, 13 load external images by default.” | Real. Table rows inside the sentence | |
| Johnny 2019 | “Using this attack, we were able to spoof arbitrary signature verification results in Enigmail, GPG Suite, and Mailpile.” | Real. Column break inside the sentence | |
| Heads in the Clouds 2023 | “In the U.S. from 87 (33.46%) to 196 (75.38%), in the U.K. from 15 (13.04%) to 64 (55.65%).” | Real. A parenthetical about Brightspace and Blackboard is interleaved | |
| BreakSPF 2024 | “51.7% of domains have SPF records that include more than 65,536 (216 ) IP addresses.” | Real. Table of error types interleaved. Note (216 ) is the PDF's rendering of the superscript in 2 | 16 |
| Extended Hell(o) 2023 | “Our analysis shows that only 4,167,633 domains in the top ten million implement SPF.” | Real. Broken mid-word | |
| 27 Years 2022 | “In contrast, 2,287,922 (2.8%) were signed using S/MIME or PGP.” | Not verbatim. The paper says “In contrast, 2,287,922 (2.8%) emails were signed.” and the “using S/MIME or PGP” comes from the next sentence. The number and the claim are right; the extractor merged two adjacent sentences into one quotation. The page states the figure and does not quote this sentence. |
So: 7 of 8 sampled are real sentences broken by page furniture; 1 of 8 is a genuine extractor paraphrase that preserves the figure. A .cols-only quote check on a two-column mail-measurement paper produces false failures at a rate that would be alarming if you did not look at them, and one true failure that a passing check would have hidden. Both directions are worth knowing.
8. The report script and its output
Committed as scripts/report_email_authentication.mjs. Re-runnable against the current data/extract/run1; every figure on the content page comes from its output, and it throws rather than silently continuing if the population or any hand map moves.
- report_email_authentication.mjs
// Report script for `security:email_authentication`. // // Every figure on that page is printed here with its own denominator, and // every quote the page puts in quotation marks is verified against // data/fulltext/<year>/<venue>/<slug>/paper.cols.txt before it is printed. // // Population rule: the page's 31 papers are NOT re-derived here. They are the // `INFRA` verdict of scripts/msg_fold.mjs — the hand map published with // `privacy:email_tracking` (2026-09-02), which screened a 354-paper candidate // pool and separated "the object of measurement is a message" from "the object // of measurement is the machinery that carries the message". This script // imports that map and asserts that the INFRA slice is still 31 papers, so a // change to msg_fold.mjs breaks this report instead of silently moving the // page's denominator. // // Everything this script adds on top of that population is hand-keyed below // (MECH, METHOD, FIGURES) and checked for completeness against the 31: a slug // missing from any map throws. // // Usage: node scripts/report_email_authentication.mjs // node scripts/report_email_authentication.mjs --format wiki (tables only) import fs from 'node:fs'; import path from 'node:path'; import { loadExtractions, dataRoot } from './lib.mjs'; import { MAP as MSG_MAP } from './msg_fold.mjs'; const ROOT = dataRoot(); const H = (s) => console.log('\n' + '='.repeat(78) + '\n' + s + '\n' + '='.repeat(78)); // --------------------------------------------------------------------------- // A. Population // --------------------------------------------------------------------------- const INFRA = Object.entries(MSG_MAP) .filter(([, v]) => v[0] === 'INFRA') .map(([slug, v]) => ({ slug, reason: v[1] })); const INFRA_SLUGS = new Set(INFRA.map((x) => x.slug)); const ALL = loadExtractions(); const PAPERS = ALL.filter((p) => INFRA_SLUGS.has(p.slug)).sort( (a, b) => a.year - b.year || a.venue.localeCompare(b.venue) ); const bySlug = new Map(PAPERS.map((p) => [p.slug, p])); if (INFRA.length !== 31) throw new Error(`msg_fold INFRA slice is ${INFRA.length}, page was written against 31`); if (PAPERS.length !== 31) throw new Error(`only ${PAPERS.length} of 31 INFRA slugs found in extractions.jsonl`); const key = (p) => `${p.venue}/${p.year}/${p.slug}`; // --------------------------------------------------------------------------- // B. Hand maps. A slug missing from either map throws (see assertComplete). // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // B0. Citekey per paper. Hand-keyed so the page's reference table is generated // rather than retyped; assertComplete below throws if a paper has no key. // --------------------------------------------------------------------------- const KEYS={ 'security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security':'foster2015_security', 'neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security':'durumeric2015_neither', 'email-typosquatting':'szurdi2017_email', 'efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels':'poddebniak2018_efail', 'end-to-end-measurements-of-email-spoofing-attacks':'hu2018_measurements', 'johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails':'mueller2019_johnny', 'a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email':'lee2020_longitudinal', 'composition-kills-a-case-study-of-email-sender-authentication':'chen2020_composition', 'weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof':'shen2021_weak', 'why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email':'poddebniak2021_better', 'spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val':'bennett2022_spfail', 'a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment':'wang2022_longitudinal', 'under-the-hood-of-dane-mismanagement-in-smtp':'lee2022_under', 'revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot':'wang2022_revisiting', '27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry':'stransky2022_years', 'heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio':'fiebig2023_heads', 'lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild':'czybik2023_lazy', 'youve-got-report-measurement-and-security-implications-of-dmarc-reporting':'ashiq2023_report', 'content-type-multipart-oracle-tapping-into-format-oracles-in-email-end-to-end-en':'ising2023_content', 'extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i':'blechschmidt2023_hello', 'bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s':'li2024_bounce', 'breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet':'wang2024_breakspf', 'fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism':'ma2024_fakebehalf', 'spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr':'ashiq2024_beyond', 'unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema':'ashiq2025_unraveling', 'email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify':'wang2025_email', 'a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems':'tang2025_multifaceted', 's-mine-collecting-and-analyzing-s-mime-certificates-at-scale':'oendaroe2025_mine', 'understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden':'li2025_characterizing', 'automatic-insecurity-exploring-email-auto-configuration-in-the-wild':'wen2025_automatic', 'coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack':'li2026_coordmail', }; // Which deployed mechanism(s) the paper MEASURES — not which it mentions. // Read off the paper's own results section. `delivery-path` means the object is // where mail goes and who carries it, with no single mechanism as the subject. const MECH = { 'security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security': ['STARTTLS', 'SPF', 'DKIM', 'DMARC', 'DNSSEC'], 'neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security': ['STARTTLS', 'SPF', 'DKIM', 'DMARC'], 'email-typosquatting': ['delivery-path'], 'efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels': ['S/MIME+OpenPGP'], 'end-to-end-measurements-of-email-spoofing-attacks': ['SPF', 'DKIM', 'DMARC'], 'johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails': ['S/MIME+OpenPGP'], 'a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email': ['DANE', 'STARTTLS', 'DNSSEC'], 'composition-kills-a-case-study-of-email-sender-authentication': ['SPF', 'DKIM', 'DMARC'], 'weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof': ['SPF', 'DKIM', 'DMARC'], 'why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email': ['STARTTLS'], 'spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val': ['SPF'], 'a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment': ['DKIM'], 'under-the-hood-of-dane-mismanagement-in-smtp': ['DANE', 'STARTTLS', 'DNSSEC'], 'revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot': ['ARC', 'SPF', 'DKIM', 'DMARC'], '27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry': ['S/MIME+OpenPGP'], 'heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio': ['delivery-path'], 'lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild': ['SPF', 'DMARC'], 'youve-got-report-measurement-and-security-implications-of-dmarc-reporting': ['DMARC'], 'content-type-multipart-oracle-tapping-into-format-oracles-in-email-end-to-end-en': ['S/MIME+OpenPGP'], 'extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i': ['SPF', 'DKIM', 'DMARC', 'MTA-STS', 'DANE', 'STARTTLS', 'S/MIME+OpenPGP'], 'bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s': ['delivery-path', 'SPF', 'DKIM', 'DMARC'], 'breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet': ['SPF', 'DMARC'], 'fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism': ['SPF', 'DKIM', 'DMARC'], 'spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr': ['SPF'], 'unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema': ['MTA-STS', 'STARTTLS'], 'email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify': ['SPF', 'DKIM', 'delivery-path'], 'a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems': ['STARTTLS', 'DANE', 'autoconfig'], 's-mine-collecting-and-analyzing-s-mime-certificates-at-scale': ['S/MIME+OpenPGP'], 'understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden': ['delivery-path', 'SPF'], 'automatic-insecurity-exploring-email-auto-configuration-in-the-wild': ['autoconfig', 'STARTTLS'], 'coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack': ['delivery-path', 'SPF', 'DKIM'], }; // The instrument. A paper gets every family it actually ran. const METHODS = { 'dns-scan': 'resolve DNS records (TXT/MX/TLSA/_mta-sts) over a domain list', 'passive-dns': 'query a passive-DNS archive instead of resolving live', 'smtp-probe': 'open SMTP sessions against real MTAs and drive the protocol', 'account-delivery-test': 'register accounts at real providers, send crafted mail, observe the inbox', 'client-matrix': 'test N mail clients (MUAs) by hand or semi-automatically', 'provider-logs': 'analyse logs, headers or mailboxes from a real mail operator', 'operator-survey': 'survey mail administrators', 'notification-experiment': 'notify misconfigured operators, then rescan', 'software-testbed': 'run MTA/library implementations in a controlled lab', 'code-analysis': 'read the implementation source', 'honey-domain': 'register domains or addresses and receive live mail', 'user-study': 'recruit end users', }; const METHOD = { 'security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security': ['dns-scan', 'smtp-probe', 'account-delivery-test'], 'neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security': ['dns-scan', 'smtp-probe', 'provider-logs'], 'email-typosquatting': ['honey-domain', 'dns-scan'], 'efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels': ['client-matrix'], 'end-to-end-measurements-of-email-spoofing-attacks': ['dns-scan', 'account-delivery-test', 'client-matrix', 'user-study'], 'johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails': ['client-matrix', 'code-analysis'], 'a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email': ['dns-scan', 'smtp-probe', 'account-delivery-test', 'software-testbed'], 'composition-kills-a-case-study-of-email-sender-authentication': ['account-delivery-test', 'client-matrix'], 'weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof': ['account-delivery-test', 'client-matrix'], 'why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email': ['client-matrix', 'smtp-probe', 'software-testbed'], 'spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val': ['smtp-probe', 'code-analysis', 'notification-experiment'], 'a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment': ['dns-scan', 'passive-dns', 'provider-logs'], 'under-the-hood-of-dane-mismanagement-in-smtp': ['dns-scan', 'smtp-probe', 'operator-survey'], 'revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot': ['provider-logs', 'account-delivery-test', 'code-analysis'], '27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry': ['provider-logs'], 'heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio': ['dns-scan'], 'lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild': ['dns-scan', 'notification-experiment', 'account-delivery-test'], 'youve-got-report-measurement-and-security-implications-of-dmarc-reporting': ['dns-scan', 'passive-dns', 'account-delivery-test', 'operator-survey'], 'content-type-multipart-oracle-tapping-into-format-oracles-in-email-end-to-end-en': ['client-matrix'], 'extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i': ['dns-scan', 'smtp-probe', 'account-delivery-test', 'notification-experiment', 'operator-survey'], 'bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s': ['provider-logs', 'dns-scan'], 'breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet': ['dns-scan', 'account-delivery-test', 'software-testbed'], 'fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism': ['account-delivery-test', 'client-matrix', 'user-study'], 'spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr': ['dns-scan', 'smtp-probe', 'operator-survey', 'software-testbed'], 'unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema': ['dns-scan', 'smtp-probe', 'account-delivery-test', 'operator-survey'], 'email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify': ['account-delivery-test', 'smtp-probe', 'software-testbed'], 'a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems': ['client-matrix', 'smtp-probe', 'dns-scan'], 's-mine-collecting-and-analyzing-s-mime-certificates-at-scale': ['smtp-probe', 'client-matrix'], 'understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden': ['provider-logs', 'dns-scan'], 'automatic-insecurity-exploring-email-auto-configuration-in-the-wild': ['dns-scan', 'client-matrix', 'software-testbed'], 'coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack': ['smtp-probe', 'account-delivery-test', 'software-testbed'], }; function assertComplete(name, map) { const missing = [...INFRA_SLUGS].filter((s) => !(s in map)); const extra = Object.keys(map).filter((s) => !INFRA_SLUGS.has(s)); if (missing.length || extra.length) throw new Error(`${name}: missing ${missing.length} ${JSON.stringify(missing)}; extra ${extra.length} ${JSON.stringify(extra)}`); } assertComplete('KEYS', KEYS); assertComplete('MECH', MECH); assertComplete('METHOD', METHOD); for (const [slug, ms] of Object.entries(METHOD)) for (const m of ms) if (!(m in METHODS)) throw new Error(`${slug}: unknown method family ${m}`); // --------------------------------------------------------------------------- // C. Hand-keyed figures. Every one of these appears on the page. `quote` is // checked verbatim against paper.cols.txt below; `pdfOnly: true` marks a // quote the .cols rendering splices and that was verified against paper.pdf // text instead (see the provenance page). // --------------------------------------------------------------------------- const FIGURES = [ // --- adoption, in publication order, each with the population it measured --- { g: 'adoption', slug: 'neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security', what: 'STARTTLS', value: '81.8% (648,030)', pop: 'mail-enabled domains among the Alexa Top Million, 26 Apr 2015', quote: 'In total, 648,030 (81.8%) of mail-enabled domains supported STARTTLS' }, { g: 'adoption', slug: 'neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security', what: 'DMARC', value: '1.1%', pop: 'Alexa Top Million domains with an MX record, Apr 2015', quote: 'only 35% successfully configure encryption, and 1.1% specify a DMARC authentication policy' }, { g: 'adoption', slug: 'end-to-end-measurements-of-email-spoofing-attacks', what: 'SPF', value: '44.9%', pop: 'Alexa top 1 million domains, Jan 2018 snapshot', quote: 'About 44.9% of the domains have published a valid SPF record in 2018' }, { g: 'adoption', slug: 'a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment', what: 'DKIM', value: '28.1% (lower bound)', pop: 'Alexa Top 1 million domains, probed with 40 selectors harvested from passive DNS', quote: '28.1% of Alexa Top 1 million domains have enabled DKIM' }, { g: 'adoption', slug: 'a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email', what: 'DANE (TLSA)', value: '0.60%–0.73%', pop: 'second-level domains WITH an MX record in .com / .net', quote: '0.60% (.com) ∼ 0.73% (.net) of all', quote2: 'domains with MX records have corresponding TLSA records in the latest snapshot', spliced: 'a column break drops the figure caption "4.1 Datasets" into the middle of the sentence' }, { g: 'adoption', slug: 'extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i', what: 'SPF', value: '4,167,633 domains (41.7%)', pop: 'Tranco top 10 million domains, 2023', quote: 'Our analysis shows that only 4,167,633 do', quote2: 'mains in the top ten million implement SPF', spliced: 'the sentence is broken mid-word by a column break' }, { g: 'adoption', slug: 'extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i', what: 'DMARC', value: '882,183 domains (8.8%)', pop: 'Tranco top 10 million domains, final scan June 2023', quote: 'Of the top 10 million domains, 882,183 deployed a DMARC policy at the time of our final scan in June 2023' }, { g: 'adoption', slug: 'extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i', what: 'MTA-STS', value: '6,948 records, 569 with a policy file', pop: 'Tranco top 10 million domains WITH an MX record, 2023', quote: 'However, only 569 of these domains actually had a policy file hosted in that location' }, { g: 'adoption', slug: 'lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild', what: 'SPF', value: '56.5% / 60.2%', pop: '12 million domains (all) vs the top 1 million of them, 2023', quote: 'a clear increase in SPF usage to 56.5 % can be observed from our scan' }, { g: 'adoption', slug: 'lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild', what: 'DMARC', value: '13.6% / 22.6%', pop: '12 million domains (all) vs the top 1 million of them, 2023', quote: 'is now at 22.6 % for the top 1 million domains and 13.6 % for all domains' }, { g: 'adoption', slug: 'breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet', what: 'SPF', value: '60.9% published, 55.9% valid', pop: 'Tranco top million domains, 2023–24', quote: '60.9% of the top million domains have deployed SPF records, and 55.9% have deployed valid SPF records' }, { g: 'adoption', slug: 'unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema', what: 'MTA-STS', value: '68,030 domains (0.07%–0.13%)', pop: 'domains WITH AN MX RECORD in the .com/.net/.org/.se zone files (86.8M; Table 1 column header reads "Domains with MX Records"), 29 Sep 2024', quote: 'have risen 3-4 times, with adoption ranging between 53,800 (0.07%)', quote2: '.com 73,939,004 53,800 (0.07%)', spliced: 'Table 1, whose header column reads "Domains with MX Records", is interleaved with a figure legend; quote2 is the .com row' }, // --- what the receiver actually does, as opposed to what the sender publishes --- { g: 'enforcement', slug: 'security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security', what: 'SPF enforcement', value: '10 providers acted', pop: '22 large providers where the authors held an account, 2014–15', quote: 'Almost all providers performed the SPF DNS query, but only 10 took action, half at the SMTP layer' }, { g: 'enforcement', slug: 'spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr', what: 'inbound SPF validation before DATA', value: '6.8% (81,843)', pop: '1.2 million reachable SMTP servers derived from four zone files', quote: 'initiate SPF queries prior to issuing the DATA command' }, { g: 'enforcement', slug: 'unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema', what: 'sender-side MTA-STS validation', value: '19.6% (469)', pop: '2,394 sender domains observed in the authors’ deliverability tests', quote: 'Our sender-side dataset reveals that 19.6% of domains perform MTA-STS validation when sending email to an MTA-STS enabled domain' }, { g: 'enforcement', slug: 'a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email', what: 'DANE-validating senders', value: '4 providers', pop: '29 email providers tested end to end', quote: 'we find that only four email service providers (mail.com, comcast.net, gmx.com, tutanota.com) actually fetch TLSA records' }, { g: 'enforcement', slug: 'end-to-end-measurements-of-email-spoofing-attacks', what: 'forged mail reaching the inbox', value: '34 of 35 providers', pop: '35 public email providers, Dec 2017 – Jan 2018', quote: 'out of the 35 email services allowed at least one forged email to arrive the inbox' }, { g: 'enforcement', slug: 'weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof', what: 'sender-inconsistency checks', value: '12 services', pop: '30 email services and 23 clients tested, 2021', quote: 'only 12 services perform the sender inconsistency checks' }, // --- misconfiguration: the second thing every one of these papers measures --- { g: 'misconfig', slug: 'lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild', what: 'SPF authorising >100,000 IPv4 addresses', value: '34.7%', pop: 'the SPF-publishing domains of the 12 million scanned, 2023', quote: '34.7 % of the domains allow emails to be sent from over 100 000 IP addresses' }, { g: 'misconfig', slug: 'spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr', what: 'SPF needing >10 DNS lookups', value: '6.5%', pop: '55 million domains that have SPF records, latest of 17 monthly zone-file scans', quote: 'We use our latest scan and focus on 55 M domains that have SPF records' }, { g: 'misconfig', slug: 'unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema', what: 'MTA-STS incorrectly configured', value: '29.6% (20,144)', pop: 'the 68,030 domains that published an MTA-STS record, Sep 2024', quote: '29.6% of domains with MTA-STS records in our latest scan', quote2: 'We find that out of the 20,144 misconfigured domains, 640 (3.2%) domains will encounter email delivery failures' }, { g: 'misconfig', slug: 'under-the-hood-of-dane-mismanagement-in-smtp', what: 'invalid TLSA records', value: 'over 22%', pop: 'SMTP servers serving .com domains, hourly snapshots', quote: 'the percentage of SMTP servers with invalid TLSA records is over 22% when they serve domains in .com' }, { g: 'misconfig', slug: 'a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment', what: 'DKIM keys ≤ 1024 bits', value: '84%', pop: '3,627,871 domains with DKIM keys in passive DNS', quote: 'of 3,627,871 domains still use DKIM keys that are less or equal to 1024 bits' }, { g: 'misconfig', slug: 'a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment', what: 'shared DKIM keys', value: '66.9% (2,427,682)', pop: 'the DKIM-publishing domains in the passive-DNS set', quote: 'we find 61,062 DKIM keys shared by more than one domain' }, { g: 'misconfig', slug: 'youve-got-report-measurement-and-security-implications-of-dmarc-reporting', what: 'external rua without an authorisation record', value: '26% (520K)', pop: '2 million DMARC records naming an external reporting domain', quote: 'we find that 520K (26%) of them do not have the authorization DMARC records' }, { g: 'misconfig', slug: 'extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i', what: 'STARTTLS certificate validation failure', value: '30.0%', pop: '2,112,682 connectable MXs, 2023', quote: 'Of the remaining 2,112,682 MXs, only 1,478,060 (70.0%) passed proper certificate validation' }, { g: 'misconfig', slug: 'automatic-insecurity-exploring-email-auto-configuration-in-the-wild', what: 'auto-configuration support', value: '7.52% (79,212)', pop: '1,053,469 domains scanned for Autodiscover / Autoconfig / SRV', quote: 'domains support at least one auto-configuration mechanism' }, { g: 'misconfig', slug: 'lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild', what: 'SPF with no restrictive all qualifier', value: '5.9% (427,767)', pop: 'the SPF-publishing domains of the 12 million scanned, 2023 (427,767 / 0.059 = 7.25M, i.e. the SPF-publishing subset, not all 12M)', quote: 'the SPF configuration is missing a restrictive all policy' }, { g: 'clients', slug: 'end-to-end-measurements-of-email-spoofing-attacks', what: 'providers showing any security indicator on a forged message', value: '9 of 35', pop: '35 popular email providers, web and mobile interfaces inspected by hand', quote: 'only 9 of 35 providers have implemented some security indicators' }, { g: 'clients', slug: 'end-to-end-measurements-of-email-spoofing-attacks', what: 'providers showing a MISLEADING element on a forged message', value: '25 of 35', pop: 'the same 35 providers', quote: '25 out of 35 providers will automatically load the spoofed sender\'s photo' }, { g: 'logs', slug: '27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry', what: 'emails encrypted', value: '0.06% (46,973)', pop: 'the same 81.6 million emails at one university', quote: '46,973 (0.06%) emails were encrypted' }, // --- the client side --- { g: 'clients', slug: 'efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels', what: 'exfiltration channels', value: '23 of 35 S/MIME, 10 of 28 OpenPGP', pop: '48 mail clients tested', quote: '23 of the 35 tested S/MIME email clients' }, { g: 'clients', slug: 'johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails', what: 'signature spoofing', value: '14 of 20 OpenPGP, 15 of 22 S/MIME', pop: '25 mail clients tested', quote: 'in 14 out of 20 tested OpenPGP-capable email clients' }, { g: 'clients', slug: 'why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email', what: 'plaintext downgrade', value: '15 of 28', pop: '28 mail clients tested, 2021', quote: 'In total, 15 of 28 clients could be downgraded to plaintext and leaked sensitive data' }, { g: 'clients', slug: 'a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems', what: 'silent TLS downgrade', value: '19 of 49', pop: '49 mail clients tested, 2025', quote: 'we found that 19 clients may inadvertently downgrade the security of the email protocols to no-TLS without notifying the user' }, { g: 'clients', slug: 'automatic-insecurity-exploring-email-auto-configuration-in-the-wild', what: 'auto-configuration attack', value: '22 of 29', pop: '29 mail clients exercised against controlled servers', quote: '22/29 clients were vulnerable to at least one of the attack scenarios' }, // --- provider-side logs --- { g: 'logs', slug: '27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry', what: 'users who ever used S/MIME or PGP', value: '5.46%', pop: '81.6 million emails from 37,089 accounts at one university, 27 years', quote: 'We found that only 5.46% of all users ever used S/MIME or PGP' }, { g: 'logs', slug: 'bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s', what: 'hard bounces', value: '8.11% (24M)', pop: '298 million emails at one large Chinese ESP', quote: '259M (87.07%) are non-bounced, 14M (4.82%) are soft-bounced, and 24M (8.11%) are hard-bounced' }, { g: 'logs', slug: 'bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s', what: 'bounces caused by sender authentication failure', value: '2.19% (701K)', pop: 'the same 298 million emails; share of all, not of bounces', quote: 'We find that 701K (2.19%) emails are hard-bounced due to sender authentication failure' }, { g: 'logs', slug: 'understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden', what: 'paths relying entirely on third-party relaying', value: '82.7% (86.9M)', pop: '105 million emails with a reconstructable intermediate path', quote: 'We find that 82.7% of email intermediate paths fall into the Third-party hosting category' }, { g: 'logs', slug: 'understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden', what: 'concentration of the relay market (HHI)', value: '40%', pop: 'middle nodes across all reconstructed intermediate paths', quote: 'we obtain an HHI of 40% for the middle node market, which indicates a highly concentrated market' }, { g: 'logs', slug: 'neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security', what: 'inbound Gmail messages authenticated by SPF, DKIM or both', value: '94.40%', pop: 'Gmail SMTP handshake logs, April 2015', quote: 'During April 2015, 94.40% of incoming Gmail messages were authenticated with DKIM, SPF, or both' }, // --- notification experiments --- { g: 'notify', slug: 'lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild', what: 'SPF errors fixed two weeks after notification', value: '6,931 errors', pop: 'notified domains, rescanned two weeks later; total errors fell 3.28%', quote: 'We observe that 6 931 errors have been fixed by that time' }, { g: 'notify', slug: 'extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i', what: 'SPF misconfiguration remediated one month after notification', value: '39.7% vs 20.7% control', pop: 'notified vs undeliverable-notification domains; Fisher exact p = 7.8e-43', quote: 'only 1,076 were still misconfigured in November, which is a decrease of 39.7%' }, { g: 'notify', slug: 'spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val', what: 'still vulnerable after four months', value: 'just over 80%', pop: 'domains inferred vulnerable to the libSPF2 flaw, remeasured over four months', quote: 'just over 80% of domains that we were able to infer results for were still vulnerable' }, // --- operator surveys --- { g: 'survey', slug: 'spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr', what: 'operators who validate SPF inbound', value: '87.1% (54)', pop: '62 survey respondents who answered that question (95 started)', quote: 'answered yes, while only 8 explicitly indicated they do not' }, { g: 'survey', slug: 'unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema', what: 'operators who had heard of MTA-STS', value: '94.7% (89)', pop: '94 respondents who answered that question (117 engaged with the survey)', quote: 'While awareness of MTA-STS was high (94.7%)' }, { g: 'survey', slug: 'youve-got-report-measurement-and-security-implications-of-dmarc-reporting', what: 'DMARC publishers who also send reports', value: '66% (26)', pop: '39 operators who said they publish DMARC records; 74 answered any question', quote: 'Out of 39 operators who published DMARC records, we also find that 26 (66%) also send DMARC reports' }, // --- shared infrastructure: the 2024-2026 turn --- { g: 'shared', slug: 'breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet', what: 'domains exploitable through a shared-infrastructure IP inside their own SPF', value: '23,916', pop: 'Tranco top million; 23 of them in the top 1,000', quote: 'We uncover that 23,916 domains are vulnerable to BreakSPF attacks' }, { g: 'shared', slug: 'breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet', what: 'SPF records covering more than 65,536 addresses', value: '51.7%', pop: 'the SPF-publishing domains of the Tranco top million', quote: 'findings revealed that 51.7% of domains have SPF records' }, { g: 'shared', slug: 'email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify', what: 'exploitable sender/receiver pairs', value: '36 of 440', pop: '20 sending x 22 receiving public email services', quote: 'we identified 36 exploitable pairs out of the 440' }, { g: 'shared', slug: 'coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack', what: 'reflected mail passing SPF or DKIM', value: '77.89% (7,851)', pop: '10,079 exploitable bounce servers found by probing', quote: 'We discover that emails from 7,851 (77.89%) bounce servers could be verified by SPF or DKIM' }, { g: 'shared', slug: 'lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild', what: 'domains spoofable by renting shared web hosting', value: '26,095', pop: 'domains whose SPF authorised the rented hosts; 4 of 5 providers allowed it', quote: 'we are able to send emails with valid SPF entries from 26 095 domains' }, ]; // --------------------------------------------------------------------------- // D. Quote verification against paper.cols.txt (three whitespace/hyphen modes) // --------------------------------------------------------------------------- const colsCache = new Map(); function colsText(p) { if (colsCache.has(p.slug)) return colsCache.get(p.slug); const f = path.join(ROOT, 'fulltext', String(p.year), p.venue, p.slug, 'paper.cols.txt'); const v = fs.existsSync(f) ? fs.readFileSync(f, 'utf8') : null; colsCache.set(p.slug, v); return v; } const norm = (s) => s.replace(/[‘’]/g, "'").replace(/[“”]/g, '"').replace(/[‐-―]/g, '-').replace(/\s+/g, ' ').trim(); const nospace = (s) => norm(s).replace(/[\s-]/g, ''); const nopunct = (s) => nospace(s).replace(/[^a-z0-9]/gi, '').toLowerCase(); function locate(p, quote) { const t = colsText(p); if (t === null) return 'NO-COLS-FILE'; if (norm(t).includes(norm(quote))) return 'exact'; if (nospace(t).includes(nospace(quote))) return 'whitespace-folded'; if (nopunct(t).includes(nopunct(quote))) return 'punctuation-folded'; // The .cols rendering repairs two-column reading order but still interposes // page furniture (running heads, table captions, figure labels) inside a // sentence that spans a column break. A quote that is real in the PDF but // interrupted in .cols shows up here as 'spliced': both ends are present, // the middle is not contiguous. Anything on the page must be 'exact' or a // fragment short enough to be contiguous -- see FIGURES. const h = nopunct(t); let pre = 0, suf = 0; for (let k = 1; k <= quote.length; k++) { if (h.includes(nopunct(quote.slice(0, k)))) pre = k; else break; } for (let k = 1; k <= quote.length; k++) { if (h.includes(nopunct(quote.slice(quote.length - k)))) suf = k; else break; } if (pre >= 25 && suf >= 25) return `spliced(head ${pre}ch / tail ${suf}ch)`; return `NOT FOUND (longest head ${pre}ch: "${quote.slice(0, pre)}")`; } // --------------------------------------------------------------------------- // E. Output // --------------------------------------------------------------------------- const wikiOnly = process.argv.includes('--format') && process.argv[process.argv.indexOf('--format') + 1] === 'wiki'; H('A. POPULATION'); console.log(`corpus : ${ALL.length} extracted papers, 7 venues, 2010-2026`); console.log(`page population : ${PAPERS.length} papers, verdict INFRA in scripts/msg_fold.mjs`); console.log(` denominator note: this is 0.53% of ${ALL.length}. It is NOT a share of anything`); console.log(` meaningful; it is a hand-mapped topical slice of a 354-paper`); console.log(` candidate pool published with privacy:email_tracking.`); const yrs = {}, vns = {}; for (const p of PAPERS) { yrs[p.year] = (yrs[p.year] || 0) + 1; vns[p.venue] = (vns[p.venue] || 0) + 1; } console.log('\nby year :', Object.entries(yrs).map(([k, v]) => `${k}:${v}`).join(' ')); console.log('by venue :', Object.entries(vns).sort((a, b) => b[1] - a[1]).map(([k, v]) => `${k}:${v}`).join(' ')); console.log(`\n2018-2026: ${PAPERS.filter(p => p.year >= 2018).length} of 31; 2022-2026: ${PAPERS.filter(p => p.year >= 2022).length} of 31`); console.log('\nThe list, oldest first:'); for (const p of PAPERS) console.log(` ${key(p)}\n ${MSG_MAP[p.slug][1]}`); H('A2. THE 31, AS THE PAGE PRINTS THEM (DokuWiki table, generated -- do not retype)'); { const VEN = { USENIX: 'USENIX Sec', IMC: 'IMC', NDSS: 'NDSS', CCS: 'CCS', 'IEEE-SP': 'IEEE S&P', WWW: 'TheWebConf', PETS: 'PETS' }; console.log('^ Year ^ Venue ^ Paper ^ What it measures ^'); for (const p of PAPERS) console.log(`| ${p.year} | ${VEN[p.venue]} | {[${KEYS[p.slug]}]} | ${MSG_MAP[p.slug][1]} |`); const dupes = Object.values(KEYS).filter((k, i, a) => a.indexOf(k) !== i); if (dupes.length) throw new Error(`duplicate citekeys: ${dupes}`); console.log(`\n${new Set(Object.values(KEYS)).size} distinct citekeys for ${PAPERS.length} papers.`); } H('A3. WHO WROTE THEM. Author concentration across the 31.'); { // Authors come from data/corpus2/.meta plus out/authors.json, the same two // sources bibgen.mjs uses -- PETS and USENIX .meta records carry no authors, // so the cache is not optional here. A paper with no author list is reported, // not skipped: an undercount would understate the concentration. const metaDir = path.join(ROOT, 'corpus2/.meta'); const idx = new Map(); for (const f of fs.readdirSync(metaDir).filter((x) => x.endsWith('.json'))) for (const r of JSON.parse(fs.readFileSync(path.join(metaDir, f), 'utf8')).papers) idx.set(`${r.venue}/${r.year}/${r.slug}`, r); const cachePath = path.join(path.dirname(new URL(import.meta.url).pathname), '..', 'out', 'authors.json'); const cache = fs.existsSync(cachePath) ? JSON.parse(fs.readFileSync(cachePath, 'utf8')) : {}; const firsts = new Map(), all = new Map(); const noAuthors = []; for (const p of PAPERS) { const k = key(p); const au = (idx.get(k) && idx.get(k).authors) || cache[k] || null; if (!au || !au.length) { noAuthors.push(k); continue; } const norm = (a) => String(a).trim(); const f = norm(au[0]); if (!firsts.has(f)) firsts.set(f, []); firsts.get(f).push(k); for (const a of new Set(au.map(norm))) { if (!all.has(a)) all.set(a, []); all.get(a).push(k); } } console.log(`denominator: ${PAPERS.length - noAuthors.length} of ${PAPERS.length} papers have an author list.`); if (noAuthors.length) console.log(` NO AUTHOR LIST (excluded, and this undercounts the concentration): ${JSON.stringify(noAuthors)}`); const repeatFirst = [...firsts.entries()].filter(([, v]) => v.length > 1).sort((a, b) => b[1].length - a[1].length); const covered = new Set(repeatFirst.flatMap(([, v]) => v)); console.log(`\nFirst authors with more than one paper here: ${repeatFirst.length}, covering ${covered.size} of ${PAPERS.length} papers`); for (const [a, v] of repeatFirst) console.log(` ${String(v.length).padStart(2)} ${a}`); console.log('\nAuthors on four or more of the 31:'); for (const [a, v] of [...all.entries()].filter(([, v]) => v.length >= 4).sort((x, y) => y[1].length - x[1].length)) console.log(` ${String(v.length).padStart(2)} ${a}`); console.log(`\ndistinct authors across the ${PAPERS.length - noAuthors.length}: ${all.size}`); } H('B. MECHANISM MEASURED (hand map, paper-counted, multi-valued)'); { const c = new Map(); for (const p of PAPERS) for (const m of MECH[p.slug]) { if (!c.has(m)) c.set(m, []); c.get(m).push(key(p)); } console.log(`denominator: ${PAPERS.length} papers. Multi-valued, so shares do not sum to 100%.\n`); for (const [m, list] of [...c.entries()].sort((a, b) => b[1].length - a[1].length)) console.log(` ${String(list.length).padStart(2)} ${((list.length / PAPERS.length) * 100).toFixed(1).padStart(5)}% ${m}`); console.log('\n MECHANISMS NO PAPER MEASURES THE DEPLOYMENT OF (full-text probe, section G):'); console.log(' BIMI -- named in 5 corpus papers, all 5 in this population, all 5 related-work sentences'); console.log(' TLS-RPT -- named in 3, all 3 in this population. NOT untouched: youve-got-report'); console.log(' Table 4 measures provider support (2 of 8 EHPs) and its survey asks'); console.log(' operators whether they send reports. What nobody has done is scan a'); console.log(' DOMAIN POPULATION for _smtp._tls records, the way four papers scan SPF.'); console.log(' REQUIRETLS -- named in 0 papers corpus-wide'); if (!wikiOnly) { console.log('\n papers per mechanism:'); for (const [m, list] of [...c.entries()].sort((a, b) => b[1].length - a[1].length)) { console.log(` ${m}:`); for (const k of list) console.log(` ${k}`); } } } H('C. INSTRUMENT (hand map, paper-counted, multi-valued)'); { const c = new Map(); for (const p of PAPERS) for (const m of METHOD[p.slug]) { if (!c.has(m)) c.set(m, []); c.get(m).push(key(p)); } // Mean and median are both printed and both labelled. An earlier version of // this line computed the mean and called it the median, and the page repeated // the mislabel; they differ here (2.74 vs 3). const per = PAPERS.map((p) => METHOD[p.slug].length).sort((a, b) => a - b); const mean = per.reduce((a, b) => a + b, 0) / per.length; const median = per[Math.floor(per.length / 2)]; const hist = {}; for (const n of per) hist[n] = (hist[n] || 0) + 1; console.log(`denominator: ${PAPERS.length} papers. Multi-valued: MEAN ${mean.toFixed(2)}, MEDIAN ${median}, range ${per[0]}-${per[per.length - 1]}, distribution ${JSON.stringify(hist)} (instruments per paper).\n`); for (const [m, list] of [...c.entries()].sort((a, b) => b[1].length - a[1].length)) console.log(` ${String(list.length).padStart(2)} ${((list.length / PAPERS.length) * 100).toFixed(1).padStart(5)}% ${m.padEnd(24)} ${METHODS[m]}`); { const late = PAPERS.filter((p) => p.year >= 2023); const newish = late.filter((p) => METHOD[p.slug].includes('operator-survey') || METHOD[p.slug].includes('software-testbed')); console.log(`\n papers from 2023 onwards running an operator survey OR a software testbed: ${newish.length} of ${late.length}`); for (const p of newish) console.log(` ${key(p)} [${METHOD[p.slug].filter((m) => m === 'operator-survey' || m === 'software-testbed').join(', ')}]`); } console.log('\n by period (does the instrument date?):'); const periods = [['2015-2019', (y) => y <= 2019], ['2020-2022', (y) => y >= 2020 && y <= 2022], ['2023-2026', (y) => y >= 2023]]; const all = [...c.keys()].sort(); console.log(' ' + 'instrument'.padEnd(24) + periods.map(([n]) => n.padStart(11)).join('')); for (const m of all) { const row = periods.map(([, f]) => { const n = PAPERS.filter((p) => f(p.year) && METHOD[p.slug].includes(m)).length; const d = PAPERS.filter((p) => f(p.year)).length; return `${n}/${d}`.padStart(11); }); console.log(' ' + m.padEnd(24) + row.join('')); } if (!wikiOnly) { console.log('\n papers per instrument:'); for (const [m, list] of [...c.entries()].sort((a, b) => b[1].length - a[1].length)) { console.log(` ${m}:`); for (const k of list) console.log(` ${k}`); } } } H('D. SAMPLING FRAME (population[].sourceList, folded, paper-counted)'); { // Fold: only the frames a domain-list scan can draw from. Residue printed. const FOLD = [ [/alexa/i, 'Alexa (retired Nov 2022)'], [/tranco/i, 'Tranco'], [/majestic|umbrella|domcop|quantcast/i, 'another top list (Majestic / Umbrella / DomCop)'], [/zone file|verisign|internetstiftelsen|public interest registry|czds/i, 'TLD zone files'], [/passive dns|farsight|sie|dnsdb|openintel/i, 'passive DNS / OpenINTEL'], [/adobe/i, 'Adobe 2013 breach address list'], [/enron/i, 'Enron corpus'], [/gmail|coremail|smtp connection log|reception log|delivery log/i, 'operator logs'], [/university|times higher|the top100|institution/i, 'university lists'], [/custom (seed|client|list)|selected public|public software|specialized mailing|mailing list|nanog|mailop/i, 'hand-built list'], [/ipv4|address space|scans\.io|censys|zmap/i, 'IPv4 address space'], ]; const c = new Map(); const residue = new Map(); for (const p of PAPERS) { const seen = new Set(); for (const s of p.population) { const v = s.sourceList; if (v === null || v === undefined) continue; const hit = FOLD.find(([re]) => re.test(v)); if (hit) seen.add(hit[1]); else { if (!residue.has(v)) residue.set(v, new Set()); residue.get(v).add(key(p)); } } for (const f of seen) { if (!c.has(f)) c.set(f, new Set()); c.get(f).add(key(p)); } } const withPop = PAPERS.filter((p) => p.population.length > 0).length; console.log(`denominator: ${withPop} of ${PAPERS.length} papers record at least one population[].sourceList.\n`); for (const [f, s] of [...c.entries()].sort((a, b) => b[1].size - a[1].size)) console.log(` ${String(s.size).padStart(2)} ${f}`); // The frame moved, and it is datable. Printed per paper so the claim on the // page ("Alexa through 2022, Tranco after, zone files from 2023") is the // script's, not the prose's. console.log('\n Which frame, by paper (only papers naming a domain-list frame):'); let alexaLast = 0, trancoFirst = 9999, zoneFirst = 9999; for (const p of PAPERS) { const srcs = p.population.map((x) => x.sourceList).filter(Boolean); const a = srcs.some((v) => /alexa/i.test(v)); const t = srcs.some((v) => /tranco/i.test(v)); const z = srcs.some((v) => /zone file|verisign|internetstiftelsen|public interest registry/i.test(v)); if (!(a || t || z)) continue; if (a) alexaLast = Math.max(alexaLast, p.year); if (t) trancoFirst = Math.min(trancoFirst, p.year); if (z) zoneFirst = Math.min(zoneFirst, p.year); console.log(` ${p.year} ${p.venue.padEnd(8)} ${(a ? 'Alexa ' : '').padEnd(6)}${(t ? 'Tranco ' : '').padEnd(7)}${(z ? 'zone-files' : '').padEnd(10)} ${p.slug.slice(0, 48)}`); } console.log(`\n last Alexa use: ${alexaLast}; first Tranco use: ${trancoFirst}; first zone-file use: ${zoneFirst}`); console.log(` papers from 2024 onwards using Alexa: ${PAPERS.filter((p) => p.year >= 2024 && p.population.some((x) => /alexa/i.test(x.sourceList || ''))).length}`); console.log(`\n UNMAPPED RESIDUE: ${residue.size} distinct strings, printed in full --`); for (const [v, s] of [...residue.entries()].sort()) console.log(` "${v}" (${[...s].join(', ')})`); } H('E. FIGURES ON THE PAGE, with their denominators and their quote check'); { const groups = {}; for (const f of FIGURES) (groups[f.g] ||= []).push(f); let bad = 0, byMode = {}; for (const [g, list] of Object.entries(groups)) { console.log(`\n--- ${g} ---`); for (const f of list) { const p = bySlug.get(f.slug); if (!p) throw new Error(`FIGURES references a slug outside the population: ${f.slug}`); const modes = [['quote', locate(p, f.quote)]]; if (f.quote2) modes.push(['quote2', locate(p, f.quote2)]); for (const [, m] of modes) { byMode[m] = (byMode[m] || 0) + 1; if (!['exact', 'whitespace-folded', 'punctuation-folded'].includes(m)) bad++; } console.log(` ${f.what}`); console.log(` value : ${f.value}`); console.log(` DENOMINATOR : ${f.pop}`); console.log(` source : ${key(p)}`); console.log(` quote [${modes[0][1]}]: "${f.quote}"`); if (f.quote2) console.log(` quote2 [${modes[1][1]}]: "${f.quote2}"`); if (f.spliced) console.log(` SPLICE : ${f.spliced} -- the page states this figure without presenting it as one continuous quotation`); } } console.log(`\n ${FIGURES.length} figures, ${FIGURES.length + FIGURES.filter((f) => f.quote2).length} quote fragments. Location modes: ${JSON.stringify(byMode)}`); if (bad) console.log(` *** ${bad} QUOTE(S) COULD NOT BE LOCATED -- do not publish these ***`); else console.log(' All figure quotes located in paper.cols.txt.'); } H('F. WHAT THE 31 PAPERS REPORT ABOUT THEMSELVES (extraction enums, not hand maps)'); { const stated = (v) => v !== null && v !== undefined && !['not-stated', 'none-mentioned', 'not-applicable', 'unclear', 'unknown'].includes(v); const tally = (label, f) => { const c = new Map(); for (const p of PAPERS) { const v = String(f(p)); c.set(v, (c.get(v) || 0) + 1); } console.log(`\n ${label} (denominator ${PAPERS.length}):`); for (const [v, n] of [...c.entries()].sort((a, b) => b[1] - a[1])) console.log(` ${String(n).padStart(2)} ${v}`); }; tally('ethics.reviewOutcome', (p) => p.ethics.reviewOutcome); { // The page used to say this population's ethics reporting is "worse than the // corpus-wide picture". It is not. Computed here so the comparison is the // script's rather than an impression. const withEthics = ALL.filter((p) => p.ethics !== null && p.ethics !== undefined); const corpusNone = withEthics.filter((p) => p.ethics.reviewOutcome === 'none-mentioned').length; const corpusApproved = withEthics.filter((p) => p.ethics.reviewOutcome === 'approved').length; const pageNone = PAPERS.filter((p) => p.ethics.reviewOutcome === 'none-mentioned').length; const pageApproved = PAPERS.filter((p) => p.ethics.reviewOutcome === 'approved').length; console.log(`\n CORPUS COMPARISON (denominator: the ${withEthics.length} papers with an ethics object):`); console.log(` none-mentioned: corpus ${corpusNone} (${((corpusNone / withEthics.length) * 100).toFixed(1)}%) vs this page ${pageNone}/${PAPERS.length} (${((pageNone / PAPERS.length) * 100).toFixed(1)}%)`); console.log(` approved : corpus ${corpusApproved} (${((corpusApproved / withEthics.length) * 100).toFixed(1)}%) vs this page ${pageApproved}/${PAPERS.length} (${((pageApproved / PAPERS.length) * 100).toFixed(1)}%)`); console.log(` n=31 is small: do not read a few points either way as a difference.`); } tally('ethics.notifiedAffectedParties', (p) => p.ethics.notifiedAffectedParties); tally('artifacts.availability', (p) => p.artifacts.availability); console.log(`\n papers whose artifacts.codeUrl is set: ${PAPERS.filter((p) => p.artifacts.codeUrl).length} of ${PAPERS.length}`); for (const p of PAPERS) if (p.artifacts.codeUrl) console.log(` ${key(p)}\n ${p.artifacts.codeUrl}`); console.log(`\n statistics[].kind, papers (denominator ${PAPERS.length}, multi-valued):`); { const c = new Map(); for (const p of PAPERS) for (const s of new Set(p.statistics.map((x) => x.kind))) c.set(s, (c.get(s) || 0) + 1); for (const [v, n] of [...c.entries()].sort((a, b) => b[1] - a[1])) console.log(` ${String(n).padStart(2)} ${v}`); console.log(` ${String(PAPERS.filter((p) => p.statistics.length === 0).length).padStart(2)} (no statistics tuple at all)`); } console.log(`\n humanAnnotation: ${PAPERS.filter((p) => p.humanAnnotation.length > 0).length} of ${PAPERS.length} papers coded something by hand;`); console.log(` of those, ${PAPERS.filter((p) => p.humanAnnotation.some((h) => stated(h.agreementMetric))).length} report an inter-rater agreement metric.`); console.log(`\n participants: ${PAPERS.filter((p) => p.participants.length > 0).length} of ${PAPERS.length} recruited people.`); for (const p of PAPERS) for (const a of p.participants) console.log(` ${key(p)} n=${a.n} kind=${a.studyKind} recruitment=${a.recruitment}`); } H('G. FULL-TEXT PROBES: mechanisms the corpus does NOT measure'); { const PROBES = { BIMI: /\bBIMI\b|Brand Indicators for Message/g, 'TLS-RPT': /TLS-RPT|TLSRPT|\bsmtp-tls-report/gi, REQUIRETLS: /REQUIRETLS/g, 'DANE (any)': /\bTLSA\b|\bDANE\b/g, 'MTA-STS': /MTA-STS/g, ARC: /Authenticated Received Chain|\bARC (chain|set|seal|header)/g, }; let nofile = 0; const hits = {}; for (const k of Object.keys(PROBES)) hits[k] = []; for (const p of ALL) { const t = colsText(p); if (t === null) { nofile++; continue; } const flat = t.replace(/\s+/g, ' '); for (const [k, re] of Object.entries(PROBES)) { re.lastIndex = 0; const m = flat.match(re); if (m) hits[k].push({ k: key(p), n: m.length, infra: INFRA_SLUGS.has(p.slug) }); } } console.log(`probe population: all ${ALL.length} extracted papers; ${nofile} have no paper.cols.txt and count as negative.\n`); for (const [k, list] of Object.entries(hits)) { const inf = list.filter((x) => x.infra).length; console.log(` ${k.padEnd(12)} mentioned in ${String(list.length).padStart(4)} papers corpus-wide; ${inf} of them in this page's 31`); } { // The page claimed "every paper in this population cites the Informational // RFC 7489". The generic reviewer falsified it by grepping. Computed here so // the corrected sentence is the script's. let cites = 0; const noRfc = []; for (const p of PAPERS) { const t = colsText(p); if (t === null) { noRfc.push([key(p), 'NO .cols FILE']); continue; } if (t.includes('7489')) cites++; else noRfc.push([key(p), t.includes('DMARC') ? 'names DMARC, not the RFC' : 'never mentions DMARC']); } console.log(`\n RFC 7489 (the Informational DMARC RFC that RFC 9989 obsoleted in May 2026):`); console.log(` cited by ${cites} of the ${PAPERS.length}; the other ${noRfc.length} do not --`); for (const [k, why] of noRfc) console.log(` ${why.padEnd(26)} ${k}`); } console.log('\n BIMI, in full -- every corpus paper that names it:'); for (const x of hits.BIMI.sort((a, b) => b.n - a.n)) console.log(` ${String(x.n).padStart(2)}x ${x.infra ? '[in the 31]' : ' '} ${x.k}`); console.log('\n A mention is not a measurement. Hand-read 2026-09-09: all five BIMI mentions are'); console.log(' related-work or background sentences ("BIMI is built on DMARC and has not ...").'); console.log(' No paper in these seven venues measures BIMI deployment. REQUIRETLS: 0 mentions.'); } H('H. RECALL: is the 31 missing anything?'); { const PATS = { spf: /\bSPF\b|Sender Policy Framework/g, dkim: /\bDKIM\b|DomainKeys/g, dmarc: /\bDMARC\b/g, starttls: /STARTTLS|\bSTART ?TLS\b/g, dane: /\bTLSA\b|\bDANE\b/g, mtasts: /MTA-STS|TLS-RPT|TLSRPT/g, smime: /S\/MIME|SMIMEA|OPENPGPKEY/g, smtp: /\bSMTP\b|\bMTA\b|\bMX record/g, bimi: /\bBIMI\b|Brand Indicators/g, arc: /Authenticated Received Chain|\bARC (chain|set|seal)/g, }; const mapped = new Set(Object.keys(MSG_MAP)); const run = (name, admit) => { const out = []; for (const p of ALL) { const t = colsText(p); if (t === null) continue; const flat = t.replace(/\s+/g, ' '); const c = {}; for (const [k, re] of Object.entries(PATS)) { re.lastIndex = 0; const m = flat.match(re); c[k] = m ? m.length : 0; } const mech = c.spf + c.dkim + c.dmarc + c.dane + c.mtasts + c.bimi + c.arc; const tls = c.starttls + c.smime; if (admit(mech, tls, c.smtp)) out.push({ k: key(p), slug: p.slug, title: p.title, mech, tls, smtp: c.smtp, c }); } const infra = out.filter((o) => INFRA_SLUGS.has(o.slug)).length; const other = out.filter((o) => mapped.has(o.slug) && !INFRA_SLUGS.has(o.slug)); const un = out.filter((o) => !mapped.has(o.slug)); console.log(`\n ${name}: ${out.length} papers hit | ${infra}/31 of the population | ${other.length} already mapped to another verdict | ${un.length} unmapped`); return { out, other, un }; }; const tight = run('TIGHT (mech>=10 or tls>=10 or (smtp>=30 and mech>=3))', (m, t, s) => m >= 10 || t >= 10 || (s >= 30 && m >= 3)); const wide = run('WIDE (mech>=4 or tls>=4 or (smtp>=15 and mech>=2))', (m, t, s) => m >= 4 || t >= 4 || (s >= 15 && m >= 2)); const missed = [...INFRA_SLUGS].filter((s) => !tight.out.some((o) => o.slug === s)); console.log(`\n Population papers the TIGHT probe misses: ${missed.length} -- ${JSON.stringify(missed)}`); console.log(` (The probe is a recall check on the hand map, not the population rule. It cannot`); console.log(` find email-typosquatting, whose subject is misdirected mail and which names no`); console.log(` mechanism; the hand map can. That is the argument for the hand map.)`); console.log('\n Every UNMAPPED paper the WIDE probe admits, read by hand 2026-09-09:'); for (const o of wide.un.sort((a, b) => (b.mech + b.tls) - (a.mech + a.tls))) console.log(` ${String(o.mech).padStart(3)}m ${String(o.tls).padStart(3)}t ${o.k}\n ${o.title}`); console.log('\n VERDICT: none of them measures deployed email authentication or transport security.'); console.log(' They are DNS, PKI and TLS papers that name SPF or STARTTLS in passing (DANE for'); console.log(' HTTPS/CDN, DNSSEC registrar studies, ALPACA, DROWN, a DNS toolkit paper).'); console.log(' Widening the probe from TIGHT to WIDE added 0 papers to the population.'); console.log('\n Papers the probe hits that msg_fold gave a DIFFERENT verdict (boundary cases):'); for (const o of wide.other.sort((a, b) => (b.mech + b.tls) - (a.mech + a.tls))) console.log(` ${String(o.mech).padStart(3)}m ${String(o.tls).padStart(3)}t [${MSG_MAP[o.slug][0]}] ${o.k}`); } H('I. TOOLS NAMED AS USED (paper-counted, folded, residue printed)'); { const FOLD = [ [/^postfix$/i, 'Postfix'], [/^exim$/i, 'Exim'], [/^sendmail$/i, 'Sendmail'], [/^qmail$/i, 'qmail'], [/^dovecot$/i, 'Dovecot'], [/microsoft exchange/i, 'Microsoft Exchange'], [/^z?map$/i, 'ZMap'], [/^zgrab/i, 'ZGrab2'], [/^xmap$/i, 'XMap'], [/^censys$/i, 'Censys'], [/^unbound$/i, 'Unbound'], [/^bind9?$/i, 'BIND'], [/openintel/i, 'OpenINTEL'], [/farsight|\bsie\b/i, 'Farsight SIE passive DNS'], [/^checkdmarc$/i, 'checkdmarc'], [/libspf2|pyspf|mail::spf|policyd-spf|spfmilter|python-postfix-policyd-spf/i, 'an SPF validator library'], [/^opendkim$|^opendmarc$|^openarc$/i, 'OpenDKIM / OpenDMARC / OpenARC'], [/openssl|pyopenssl/i, 'OpenSSL / pyOpenSSL'], [/gnupg|^gpg$|gpgme|enigmail|gpg suite|openkeychain|openpgp\.js/i, 'a PGP implementation'], [/^pkilint$/i, 'pkilint'], [/badkeys|fastgcd|factordb|pwnedkeys|hashcat/i, 'a weak-key checker'], [/^dnstwist$/i, 'dnstwist'], [/spamassassin|spamhaus|spamcop|rspamd|milter-greylist/i, 'a spam/blocklist service or filter'], ]; const c = new Map(); const residue = new Map(); for (const p of PAPERS) { const seen = new Set(); for (const t of p.tools) { if (t.usedOrMentioned !== 'used') continue; const hit = FOLD.find(([re]) => re.test(t.name)); if (hit) seen.add(hit[1]); else { if (!residue.has(t.name)) residue.set(t.name, new Set()); residue.get(t.name).add(key(p)); } } for (const f of seen) { if (!c.has(f)) c.set(f, new Set()); c.get(f).add(key(p)); } } console.log(`denominator: ${PAPERS.filter((p) => p.tools.some((t) => t.usedOrMentioned === 'used')).length} of ${PAPERS.length} papers name at least one tool as used.\n`); for (const [f, s] of [...c.entries()].sort((a, b) => b[1].size - a[1].size)) console.log(` ${String(s.size).padStart(2)} ${f}`); console.log(`\n UNMAPPED RESIDUE: ${residue.size} distinct strings across ${new Set([...residue.values()].flatMap((s) => [...s])).size} papers.`); console.log(' Printed in full because a page that folds must show what it could not fold:'); const cols = [...residue.keys()].sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())); for (let i = 0; i < cols.length; i += 3) console.log(' ' + cols.slice(i, i + 3).map((x) => x.padEnd(34)).join('')); } H('J. QUOTE SPOT-CHECK OF THE EXTRACTION ITSELF'); { // Every detection[].evidence.quote in the 31, located in paper.cols.txt. let n = 0; const modes = {}; const bad = []; for (const p of PAPERS) for (const d of p.detection) { n++; const m = locate(p, d.evidence.quote); modes[m] = (modes[m] || 0) + 1; if (!['exact','whitespace-folded','punctuation-folded'].includes(m)) bad.push(`${key(p)} [${d.evidence.section}] "${d.evidence.quote}"`); } console.log(`${n} detection[].evidence.quote values across the ${PAPERS.length} papers.`); console.log(`location modes: ${JSON.stringify(modes)}`); console.log(`unlocatable: ${bad.length} (${((bad.length / n) * 100).toFixed(1)}%) --`); for (const b of bad) console.log(` ${b}`); } H('K. DONE'); console.log(`figures published: ${FIGURES.length}`); console.log(`population : ${PAPERS.length} papers`); console.log(`generated : run this file, do not retype its numbers`);
Unedited output of the above, run 2026-09-09 against data/extract/run1 (5,859 papers):
- report_email_authentication-output.txt
============================================================================== A. POPULATION ============================================================================== corpus : 5859 extracted papers, 7 venues, 2010-2026 page population : 31 papers, verdict INFRA in scripts/msg_fold.mjs denominator note: this is 0.53% of 5859. It is NOT a share of anything meaningful; it is a hand-mapped topical slice of a 354-paper candidate pool published with privacy:email_tracking. by year : 2015:2 2017:1 2018:2 2019:1 2020:2 2021:2 2022:5 2023:5 2024:4 2025:6 2026:1 by venue : USENIX:16 IMC:7 NDSS:4 CCS:1 IEEE-SP:1 WWW:1 PETS:1 2018-2026: 28 of 31; 2022-2026: 21 of 31 The list, oldest first: CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security provider-side mail security IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security STARTTLS / SPF / DKIM / DMARC deployment IMC/2017/email-typosquatting doppelganger mail domains catching misdirected mail USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels S/MIME and OpenPGP exfiltration channels USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks spoofing reaching the inbox and what the UI shows USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails signature spoofing in mail clients USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email DANE for SMTP USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication sender-authentication composition flaws USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof sender spoofing across 30 providers USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email STARTTLS IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry 27 years of mail encryption at one university IMC/2022/spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val SPF implementation vulnerabilities USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment DKIM deployment USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp DANE mismanagement WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot ARC and forwarding IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild SPF configuration PETS/2023/heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio MX-record concentration as the measurement USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting DMARC aggregate reporting USENIX/2023/content-type-multipart-oracle-tapping-into-format-oracles-in-email-end-to-end-en format oracles in mail end-to-end encryption USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i confidentiality and integrity mechanisms in the wild IMC/2024/bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s delivery failures at a large ESP NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet SPF at shared infrastructure USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism spoofing via the on-behalf-of delegation USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr SPF operations IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema MTA-STS deployment IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden the hops between sender and recipient NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems TLS and autoconfiguration in mail clients NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild mail autoconfiguration USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify SMTP smuggling USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale S/MIME certificates at scale NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack SMTP middleware amplification ============================================================================== A2. THE 31, AS THE PAGE PRINTS THEM (DokuWiki table, generated -- do not retype) ============================================================================== ^ Year ^ Venue ^ Paper ^ What it measures ^ | 2015 | CCS | {[foster2015_security]} | provider-side mail security | | 2015 | IMC | {[durumeric2015_neither]} | STARTTLS / SPF / DKIM / DMARC deployment | | 2017 | IMC | {[szurdi2017_email]} | doppelganger mail domains catching misdirected mail | | 2018 | USENIX Sec | {[poddebniak2018_efail]} | S/MIME and OpenPGP exfiltration channels | | 2018 | USENIX Sec | {[hu2018_measurements]} | spoofing reaching the inbox and what the UI shows | | 2019 | USENIX Sec | {[mueller2019_johnny]} | signature spoofing in mail clients | | 2020 | USENIX Sec | {[lee2020_longitudinal]} | DANE for SMTP | | 2020 | USENIX Sec | {[chen2020_composition]} | sender-authentication composition flaws | | 2021 | USENIX Sec | {[shen2021_weak]} | sender spoofing across 30 providers | | 2021 | USENIX Sec | {[poddebniak2021_better]} | STARTTLS | | 2022 | IEEE S&P | {[stransky2022_years]} | 27 years of mail encryption at one university | | 2022 | IMC | {[bennett2022_spfail]} | SPF implementation vulnerabilities | | 2022 | USENIX Sec | {[wang2022_longitudinal]} | DKIM deployment | | 2022 | USENIX Sec | {[lee2022_under]} | DANE mismanagement | | 2022 | TheWebConf | {[wang2022_revisiting]} | ARC and forwarding | | 2023 | IMC | {[czybik2023_lazy]} | SPF configuration | | 2023 | PETS | {[fiebig2023_heads]} | MX-record concentration as the measurement | | 2023 | USENIX Sec | {[ashiq2023_report]} | DMARC aggregate reporting | | 2023 | USENIX Sec | {[ising2023_content]} | format oracles in mail end-to-end encryption | | 2023 | USENIX Sec | {[blechschmidt2023_hello]} | confidentiality and integrity mechanisms in the wild | | 2024 | IMC | {[li2024_bounce]} | delivery failures at a large ESP | | 2024 | NDSS | {[wang2024_breakspf]} | SPF at shared infrastructure | | 2024 | USENIX Sec | {[ma2024_fakebehalf]} | spoofing via the on-behalf-of delegation | | 2024 | USENIX Sec | {[ashiq2024_beyond]} | SPF operations | | 2025 | IMC | {[ashiq2025_unraveling]} | MTA-STS deployment | | 2025 | IMC | {[li2025_characterizing]} | the hops between sender and recipient | | 2025 | NDSS | {[tang2025_multifaceted]} | TLS and autoconfiguration in mail clients | | 2025 | NDSS | {[wen2025_automatic]} | mail autoconfiguration | | 2025 | USENIX Sec | {[wang2025_email]} | SMTP smuggling | | 2025 | USENIX Sec | {[oendaroe2025_mine]} | S/MIME certificates at scale | | 2026 | NDSS | {[li2026_coordmail]} | SMTP middleware amplification | 31 distinct citekeys for 31 papers. ============================================================================== A3. WHO WROTE THEM. Author concentration across the 31. ============================================================================== denominator: 31 of 31 papers have an author list. First authors with more than one paper here: 5, covering 13 of 31 papers 3 Chuhan Wang 3 Md. Ishtiaq Ashiq 3 Ruixuan Li 2 Damian Poddebniak 2 Hyeonmin Lee Authors on four or more of the 31: 7 Haixin Duan 6 Qingfeng Pan 5 Sebastian Schinzel 5 Taejoong Chung 5 Jianjun Chen 5 Baojun Liu 5 Yanzhong Lin 4 Damian Poddebniak 4 Fabian Ising 4 Chuhan Wang 4 Md. Ishtiaq Ashiq 4 Tobias Fiebig distinct authors across the 31: 111 ============================================================================== B. MECHANISM MEASURED (hand map, paper-counted, multi-valued) ============================================================================== denominator: 31 papers. Multi-valued, so shares do not sum to 100%. 16 51.6% SPF 12 38.7% DKIM 12 38.7% DMARC 9 29.0% STARTTLS 6 19.4% delivery-path 6 19.4% S/MIME+OpenPGP 4 12.9% DANE 3 9.7% DNSSEC 2 6.5% MTA-STS 2 6.5% autoconfig 1 3.2% ARC MECHANISMS NO PAPER MEASURES THE DEPLOYMENT OF (full-text probe, section G): BIMI -- named in 5 corpus papers, all 5 in this population, all 5 related-work sentences TLS-RPT -- named in 3, all 3 in this population. NOT untouched: youve-got-report Table 4 measures provider support (2 of 8 EHPs) and its survey asks operators whether they send reports. What nobody has done is scan a DOMAIN POPULATION for _smtp._tls records, the way four papers scan SPF. REQUIRETLS -- named in 0 papers corpus-wide papers per mechanism: SPF: CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof IMC/2022/spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i IMC/2024/bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack DKIM: CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i IMC/2024/bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack DMARC: CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i IMC/2024/bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism STARTTLS: CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild delivery-path: IMC/2017/email-typosquatting PETS/2023/heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio IMC/2024/bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack S/MIME+OpenPGP: USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry USENIX/2023/content-type-multipart-oracle-tapping-into-format-oracles-in-email-end-to-end-en USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale DANE: USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems DNSSEC: CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp MTA-STS: USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema autoconfig: NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild ARC: WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot ============================================================================== C. INSTRUMENT (hand map, paper-counted, multi-valued) ============================================================================== denominator: 31 papers. Multi-valued: MEAN 2.74, MEDIAN 3, range 1-5, distribution {"1":4,"2":7,"3":14,"4":5,"5":1} (instruments per paper). 18 58.1% dns-scan resolve DNS records (TXT/MX/TLSA/_mta-sts) over a domain list 14 45.2% account-delivery-test register accounts at real providers, send crafted mail, observe the inbox 13 41.9% smtp-probe open SMTP sessions against real MTAs and drive the protocol 11 35.5% client-matrix test N mail clients (MUAs) by hand or semi-automatically 7 22.6% software-testbed run MTA/library implementations in a controlled lab 6 19.4% provider-logs analyse logs, headers or mailboxes from a real mail operator 5 16.1% operator-survey survey mail administrators 3 9.7% code-analysis read the implementation source 3 9.7% notification-experiment notify misconfigured operators, then rescan 2 6.5% user-study recruit end users 2 6.5% passive-dns query a passive-DNS archive instead of resolving live 1 3.2% honey-domain register domains or addresses and receive live mail papers from 2023 onwards running an operator survey OR a software testbed: 8 of 16 USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting [operator-survey] USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i [operator-survey] NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet [software-testbed] USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr [operator-survey, software-testbed] IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema [operator-survey] NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild [software-testbed] USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify [software-testbed] NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack [software-testbed] by period (does the instrument date?): instrument 2015-2019 2020-2022 2023-2026 account-delivery-test 2/6 4/9 8/16 client-matrix 3/6 3/9 5/16 code-analysis 1/6 2/9 0/16 dns-scan 4/6 3/9 11/16 honey-domain 1/6 0/9 0/16 notification-experiment 0/6 1/9 2/16 operator-survey 0/6 1/9 4/16 passive-dns 0/6 1/9 1/16 provider-logs 1/6 3/9 2/16 smtp-probe 2/6 4/9 7/16 software-testbed 0/6 2/9 5/16 user-study 1/6 0/9 1/16 papers per instrument: dns-scan: CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security IMC/2017/email-typosquatting USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild PETS/2023/heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i IMC/2024/bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild account-delivery-test: CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack smtp-probe: CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email IMC/2022/spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack client-matrix: USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email USENIX/2023/content-type-multipart-oracle-tapping-into-format-oracles-in-email-end-to-end-en USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale software-testbed: USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack provider-logs: IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot IMC/2024/bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden operator-survey: USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema code-analysis: USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails IMC/2022/spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot notification-experiment: IMC/2022/spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i user-study: USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism passive-dns: USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting honey-domain: IMC/2017/email-typosquatting ============================================================================== D. SAMPLING FRAME (population[].sourceList, folded, paper-counted) ============================================================================== denominator: 31 of 31 papers record at least one population[].sourceList. 13 hand-built list 9 Tranco 7 Alexa (retired Nov 2022) 5 Adobe 2013 breach address list 5 operator logs 3 passive DNS / OpenINTEL 3 university lists 3 TLD zone files 2 Enron corpus 2 another top list (Majestic / Umbrella / DomCop) 1 IPv4 address space Which frame, by paper (only papers naming a domain-list frame): 2015 CCS Alexa security-by-any-other-name-on-the-effectiveness- 2015 IMC Alexa neither-snow-nor-rain-nor-mitm-an-empirical-anal 2017 IMC Alexa email-typosquatting 2018 USENIX Alexa end-to-end-measurements-of-email-spoofing-attack 2021 USENIX Tranco why-tls-is-better-without-starttls-a-security-an 2022 IMC Alexa spfail-discovering-measuring-and-remediating-vul 2022 USENIX Alexa a-large-scale-and-longitudinal-measurement-study 2023 IMC Tranco lazy-gatekeepers-a-large-scale-study-on-spf-conf 2023 USENIX Alexa zone-files youve-got-report-measurement-and-security-implic 2024 NDSS Tranco breakspf-how-shared-infrastructures-magnify-spf- 2024 USENIX zone-files spf-beyond-the-standard-management-and-operation 2025 IMC Tranco zone-files unraveling-the-complexities-of-mta-sts-deploymen 2025 IMC Tranco understanding-and-characterizing-intermediate-pa 2025 NDSS Tranco automatic-insecurity-exploring-email-auto-config 2025 USENIX Tranco email-spoofing-with-smtp-smuggling-how-the-share 2025 USENIX Tranco s-mine-collecting-and-analyzing-s-mime-certifica 2026 NDSS Tranco coordmail-exploiting-smtp-timeout-and-command-in last Alexa use: 2023; first Tranco use: 2021; first zone-file use: 2023 papers from 2024 onwards using Alexa: 0 UNMAPPED RESIDUE: 43 distinct strings, printed in full -- "48 universities" (USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify) "BankDomain" (NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild) "DNS server survey" (USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email) "Facebook leak and name-dataset" (USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i) "FreeDisposableProvider" (NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild) "Google Custom Search JSON API results" (NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems) "Google Play Store" (USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email) "GovDomain" (NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild) "Internet hosts with open TCP/25 ports" (NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack) "PassiveDNS1 and QiAnXin PassiveDNS2" (USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment) "Top100Provider" (NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild) "Tor exit list" (NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet) "VPNGate" (NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet) "Wikipedia pages listing universities" (PETS/2023/heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio) "aggregate dataset shared with us by email-security-scans.org" (IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema) "based on [56]" (USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify) "college students recruited for the study" (USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism) "custom mail-server setup guides" (NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems) "custom provider list" (USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment, WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot) "custom provider lists from related work, security-aware providers, and globally/Germany-popular providers" (USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i) "custom selection from Android, iOS, macOS, and Windows email clients" (NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems) "custom target selection" (USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof, USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism) "custom target-domain list" (WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot) "dmarcian's DMARC Data Reporters" (USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting) "emailclientmarketshare.com" (USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication) "free mail domains list" (USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale) "http://artinvoice.hu/spams/" (USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels) "http://untroubled.org/spam/" (USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels) "iTunes store" (USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email) "intermediate path dataset" (IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden) "mailsac.com" (WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot) "not-stated" (USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email) "open-source proxy repositories" (NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet) "popular MTA programs identified by a prior study" (USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email) "popular open-source DMARC reporting software" (USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting) "previous work [44]" (USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify) "prior research [40]" (USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify) "public LDAP servers" (USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale) "public email datasets" (USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels) "reachable mail servers identified in setup guides" (NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems) "reachable mail servers" (NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems) "shared infrastructure settings: cloud servers, proxy services, serverless functions, CI/CD platforms, and CDN services" (NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet) "synthetic Facebook password-reset emails" (USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels) ============================================================================== E. FIGURES ON THE PAGE, with their denominators and their quote check ============================================================================== --- adoption --- STARTTLS value : 81.8% (648,030) DENOMINATOR : mail-enabled domains among the Alexa Top Million, 26 Apr 2015 source : IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security quote [exact]: "In total, 648,030 (81.8%) of mail-enabled domains supported STARTTLS" DMARC value : 1.1% DENOMINATOR : Alexa Top Million domains with an MX record, Apr 2015 source : IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security quote [exact]: "only 35% successfully configure encryption, and 1.1% specify a DMARC authentication policy" SPF value : 44.9% DENOMINATOR : Alexa top 1 million domains, Jan 2018 snapshot source : USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks quote [exact]: "About 44.9% of the domains have published a valid SPF record in 2018" DKIM value : 28.1% (lower bound) DENOMINATOR : Alexa Top 1 million domains, probed with 40 selectors harvested from passive DNS source : USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment quote [exact]: "28.1% of Alexa Top 1 million domains have enabled DKIM" DANE (TLSA) value : 0.60%–0.73% DENOMINATOR : second-level domains WITH an MX record in .com / .net source : USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email quote [exact]: "0.60% (.com) ∼ 0.73% (.net) of all" quote2 [exact]: "domains with MX records have corresponding TLSA records in the latest snapshot" SPLICE : a column break drops the figure caption "4.1 Datasets" into the middle of the sentence -- the page states this figure without presenting it as one continuous quotation SPF value : 4,167,633 domains (41.7%) DENOMINATOR : Tranco top 10 million domains, 2023 source : USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i quote [exact]: "Our analysis shows that only 4,167,633 do" quote2 [exact]: "mains in the top ten million implement SPF" SPLICE : the sentence is broken mid-word by a column break -- the page states this figure without presenting it as one continuous quotation DMARC value : 882,183 domains (8.8%) DENOMINATOR : Tranco top 10 million domains, final scan June 2023 source : USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i quote [exact]: "Of the top 10 million domains, 882,183 deployed a DMARC policy at the time of our final scan in June 2023" MTA-STS value : 6,948 records, 569 with a policy file DENOMINATOR : Tranco top 10 million domains WITH an MX record, 2023 source : USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i quote [exact]: "However, only 569 of these domains actually had a policy file hosted in that location" SPF value : 56.5% / 60.2% DENOMINATOR : 12 million domains (all) vs the top 1 million of them, 2023 source : IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild quote [exact]: "a clear increase in SPF usage to 56.5 % can be observed from our scan" DMARC value : 13.6% / 22.6% DENOMINATOR : 12 million domains (all) vs the top 1 million of them, 2023 source : IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild quote [exact]: "is now at 22.6 % for the top 1 million domains and 13.6 % for all domains" SPF value : 60.9% published, 55.9% valid DENOMINATOR : Tranco top million domains, 2023–24 source : NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet quote [exact]: "60.9% of the top million domains have deployed SPF records, and 55.9% have deployed valid SPF records" MTA-STS value : 68,030 domains (0.07%–0.13%) DENOMINATOR : domains WITH AN MX RECORD in the .com/.net/.org/.se zone files (86.8M; Table 1 column header reads "Domains with MX Records"), 29 Sep 2024 source : IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema quote [exact]: "have risen 3-4 times, with adoption ranging between 53,800 (0.07%)" quote2 [exact]: ".com 73,939,004 53,800 (0.07%)" SPLICE : Table 1, whose header column reads "Domains with MX Records", is interleaved with a figure legend; quote2 is the .com row -- the page states this figure without presenting it as one continuous quotation --- enforcement --- SPF enforcement value : 10 providers acted DENOMINATOR : 22 large providers where the authors held an account, 2014–15 source : CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security quote [exact]: "Almost all providers performed the SPF DNS query, but only 10 took action, half at the SMTP layer" inbound SPF validation before DATA value : 6.8% (81,843) DENOMINATOR : 1.2 million reachable SMTP servers derived from four zone files source : USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr quote [exact]: "initiate SPF queries prior to issuing the DATA command" sender-side MTA-STS validation value : 19.6% (469) DENOMINATOR : 2,394 sender domains observed in the authors’ deliverability tests source : IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema quote [exact]: "Our sender-side dataset reveals that 19.6% of domains perform MTA-STS validation when sending email to an MTA-STS enabled domain" DANE-validating senders value : 4 providers DENOMINATOR : 29 email providers tested end to end source : USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email quote [exact]: "we find that only four email service providers (mail.com, comcast.net, gmx.com, tutanota.com) actually fetch TLSA records" forged mail reaching the inbox value : 34 of 35 providers DENOMINATOR : 35 public email providers, Dec 2017 – Jan 2018 source : USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks quote [exact]: "out of the 35 email services allowed at least one forged email to arrive the inbox" sender-inconsistency checks value : 12 services DENOMINATOR : 30 email services and 23 clients tested, 2021 source : USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof quote [exact]: "only 12 services perform the sender inconsistency checks" --- misconfig --- SPF authorising >100,000 IPv4 addresses value : 34.7% DENOMINATOR : the SPF-publishing domains of the 12 million scanned, 2023 source : IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild quote [exact]: "34.7 % of the domains allow emails to be sent from over 100 000 IP addresses" SPF needing >10 DNS lookups value : 6.5% DENOMINATOR : 55 million domains that have SPF records, latest of 17 monthly zone-file scans source : USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr quote [exact]: "We use our latest scan and focus on 55 M domains that have SPF records" MTA-STS incorrectly configured value : 29.6% (20,144) DENOMINATOR : the 68,030 domains that published an MTA-STS record, Sep 2024 source : IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema quote [exact]: "29.6% of domains with MTA-STS records in our latest scan" quote2 [exact]: "We find that out of the 20,144 misconfigured domains, 640 (3.2%) domains will encounter email delivery failures" invalid TLSA records value : over 22% DENOMINATOR : SMTP servers serving .com domains, hourly snapshots source : USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp quote [exact]: "the percentage of SMTP servers with invalid TLSA records is over 22% when they serve domains in .com" DKIM keys ≤ 1024 bits value : 84% DENOMINATOR : 3,627,871 domains with DKIM keys in passive DNS source : USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment quote [exact]: "of 3,627,871 domains still use DKIM keys that are less or equal to 1024 bits" shared DKIM keys value : 66.9% (2,427,682) DENOMINATOR : the DKIM-publishing domains in the passive-DNS set source : USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment quote [exact]: "we find 61,062 DKIM keys shared by more than one domain" external rua without an authorisation record value : 26% (520K) DENOMINATOR : 2 million DMARC records naming an external reporting domain source : USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting quote [exact]: "we find that 520K (26%) of them do not have the authorization DMARC records" STARTTLS certificate validation failure value : 30.0% DENOMINATOR : 2,112,682 connectable MXs, 2023 source : USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i quote [exact]: "Of the remaining 2,112,682 MXs, only 1,478,060 (70.0%) passed proper certificate validation" auto-configuration support value : 7.52% (79,212) DENOMINATOR : 1,053,469 domains scanned for Autodiscover / Autoconfig / SRV source : NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild quote [exact]: "domains support at least one auto-configuration mechanism" SPF with no restrictive all qualifier value : 5.9% (427,767) DENOMINATOR : the SPF-publishing domains of the 12 million scanned, 2023 (427,767 / 0.059 = 7.25M, i.e. the SPF-publishing subset, not all 12M) source : IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild quote [exact]: "the SPF configuration is missing a restrictive all policy" --- clients --- providers showing any security indicator on a forged message value : 9 of 35 DENOMINATOR : 35 popular email providers, web and mobile interfaces inspected by hand source : USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks quote [punctuation-folded]: "only 9 of 35 providers have implemented some security indicators" providers showing a MISLEADING element on a forged message value : 25 of 35 DENOMINATOR : the same 35 providers source : USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks quote [exact]: "25 out of 35 providers will automatically load the spoofed sender's photo" exfiltration channels value : 23 of 35 S/MIME, 10 of 28 OpenPGP DENOMINATOR : 48 mail clients tested source : USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels quote [exact]: "23 of the 35 tested S/MIME email clients" signature spoofing value : 14 of 20 OpenPGP, 15 of 22 S/MIME DENOMINATOR : 25 mail clients tested source : USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails quote [exact]: "in 14 out of 20 tested OpenPGP-capable email clients" plaintext downgrade value : 15 of 28 DENOMINATOR : 28 mail clients tested, 2021 source : USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email quote [exact]: "In total, 15 of 28 clients could be downgraded to plaintext and leaked sensitive data" silent TLS downgrade value : 19 of 49 DENOMINATOR : 49 mail clients tested, 2025 source : NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems quote [exact]: "we found that 19 clients may inadvertently downgrade the security of the email protocols to no-TLS without notifying the user" auto-configuration attack value : 22 of 29 DENOMINATOR : 29 mail clients exercised against controlled servers source : NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild quote [exact]: "22/29 clients were vulnerable to at least one of the attack scenarios" --- logs --- emails encrypted value : 0.06% (46,973) DENOMINATOR : the same 81.6 million emails at one university source : IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry quote [exact]: "46,973 (0.06%) emails were encrypted" users who ever used S/MIME or PGP value : 5.46% DENOMINATOR : 81.6 million emails from 37,089 accounts at one university, 27 years source : IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry quote [exact]: "We found that only 5.46% of all users ever used S/MIME or PGP" hard bounces value : 8.11% (24M) DENOMINATOR : 298 million emails at one large Chinese ESP source : IMC/2024/bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s quote [exact]: "259M (87.07%) are non-bounced, 14M (4.82%) are soft-bounced, and 24M (8.11%) are hard-bounced" bounces caused by sender authentication failure value : 2.19% (701K) DENOMINATOR : the same 298 million emails; share of all, not of bounces source : IMC/2024/bounce-in-the-wild-a-deep-dive-into-email-delivery-failures-from-a-large-email-s quote [exact]: "We find that 701K (2.19%) emails are hard-bounced due to sender authentication failure" paths relying entirely on third-party relaying value : 82.7% (86.9M) DENOMINATOR : 105 million emails with a reconstructable intermediate path source : IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden quote [punctuation-folded]: "We find that 82.7% of email intermediate paths fall into the Third-party hosting category" concentration of the relay market (HHI) value : 40% DENOMINATOR : middle nodes across all reconstructed intermediate paths source : IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden quote [exact]: "we obtain an HHI of 40% for the middle node market, which indicates a highly concentrated market" inbound Gmail messages authenticated by SPF, DKIM or both value : 94.40% DENOMINATOR : Gmail SMTP handshake logs, April 2015 source : IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security quote [exact]: "During April 2015, 94.40% of incoming Gmail messages were authenticated with DKIM, SPF, or both" --- notify --- SPF errors fixed two weeks after notification value : 6,931 errors DENOMINATOR : notified domains, rescanned two weeks later; total errors fell 3.28% source : IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild quote [exact]: "We observe that 6 931 errors have been fixed by that time" SPF misconfiguration remediated one month after notification value : 39.7% vs 20.7% control DENOMINATOR : notified vs undeliverable-notification domains; Fisher exact p = 7.8e-43 source : USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i quote [exact]: "only 1,076 were still misconfigured in November, which is a decrease of 39.7%" still vulnerable after four months value : just over 80% DENOMINATOR : domains inferred vulnerable to the libSPF2 flaw, remeasured over four months source : IMC/2022/spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val quote [exact]: "just over 80% of domains that we were able to infer results for were still vulnerable" --- survey --- operators who validate SPF inbound value : 87.1% (54) DENOMINATOR : 62 survey respondents who answered that question (95 started) source : USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr quote [exact]: "answered yes, while only 8 explicitly indicated they do not" operators who had heard of MTA-STS value : 94.7% (89) DENOMINATOR : 94 respondents who answered that question (117 engaged with the survey) source : IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema quote [exact]: "While awareness of MTA-STS was high (94.7%)" DMARC publishers who also send reports value : 66% (26) DENOMINATOR : 39 operators who said they publish DMARC records; 74 answered any question source : USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting quote [exact]: "Out of 39 operators who published DMARC records, we also find that 26 (66%) also send DMARC reports" --- shared --- domains exploitable through a shared-infrastructure IP inside their own SPF value : 23,916 DENOMINATOR : Tranco top million; 23 of them in the top 1,000 source : NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet quote [exact]: "We uncover that 23,916 domains are vulnerable to BreakSPF attacks" SPF records covering more than 65,536 addresses value : 51.7% DENOMINATOR : the SPF-publishing domains of the Tranco top million source : NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet quote [exact]: "findings revealed that 51.7% of domains have SPF records" exploitable sender/receiver pairs value : 36 of 440 DENOMINATOR : 20 sending x 22 receiving public email services source : USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify quote [exact]: "we identified 36 exploitable pairs out of the 440" reflected mail passing SPF or DKIM value : 77.89% (7,851) DENOMINATOR : 10,079 exploitable bounce servers found by probing source : NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack quote [exact]: "We discover that emails from 7,851 (77.89%) bounce servers could be verified by SPF or DKIM" domains spoofable by renting shared web hosting value : 26,095 DENOMINATOR : domains whose SPF authorised the rented hosts; 4 of 5 providers allowed it source : IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild quote [exact]: "we are able to send emails with valid SPF entries from 26 095 domains" 53 figures, 57 quote fragments. Location modes: {"exact":55,"punctuation-folded":2} All figure quotes located in paper.cols.txt. ============================================================================== F. WHAT THE 31 PAPERS REPORT ABOUT THEMSELVES (extraction enums, not hand maps) ============================================================================== ethics.reviewOutcome (denominator 31): 12 none-mentioned 6 explicitly-discussed-no-review 5 approved 4 not-required 2 sought-outcome-unstated 2 exempt CORPUS COMPARISON (denominator: the 4965 papers with an ethics object): none-mentioned: corpus 3188 (64.2%) vs this page 12/31 (38.7%) approved : corpus 998 (20.1%) vs this page 5/31 (16.1%) n=31 is small: do not read a few points either way as a difference. ethics.notifiedAffectedParties (denominator 31): 19 yes 6 partial 3 not-stated 2 no 1 not-applicable artifacts.availability (denominator 31): 20 public 9 none-mentioned 1 promised-not-yet-available 1 explicitly-withheld papers whose artifacts.codeUrl is set: 18 of 31 USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails https://github.com/RUB-NDS/Johnny-You-Are-Fired USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email https://dane-study.github.io USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication https://github.com/chenjj/espoofer USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof https://github.com/mo-xiaoxi/EmailSpoofingTestTool USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email https://github.com/FHMS-ITS/EAST IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry https://publications.teamusec.de/2022-oaklandemail/ USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp https://dane-study.github.io PETS/2023/heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio https://github.com/headsinthecloud/cloudheadschecker USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting https://dmarc-study.github.io/ USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i https://github.com/letoams/openpgpkeymilter/pull/8 USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr https://spf-measurement.github.io IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema https://mta-sts.netsecurelab.org IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden https://github.com/RUI-XUAN-LI/Email_Path NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems https://github.com/tls-downgrade/email-security.git NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild https://github.com/emailconfigtest/mailconfig USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify https://zenodo.org/records/14738722 USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale https://github.com/FHMS-ITS/SMINE NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack https://github.com/RUI-XUAN-LI/CoordMail statistics[].kind, papers (denominator 31, multi-valued): 29 descriptive-only 2 hypothesis-test 1 regression 1 correlation 1 resampling 0 (no statistics tuple at all) humanAnnotation: 19 of 31 papers coded something by hand; of those, 0 report an inter-rater agreement metric. participants: 8 of 31 recruited people. USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks n=488 kind=field-study recruitment=mechanical-turk USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp n=39 kind=survey recruitment=professional-network USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting n=74 kind=survey recruitment=not-stated USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i n=16 kind=survey recruitment=not-stated USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism n=50 kind=lab-study recruitment=university-pool USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr n=95 kind=survey recruitment=professional-network IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema n=117 kind=survey recruitment=professional-network USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify n=48 kind=field-study recruitment=not-stated ============================================================================== G. FULL-TEXT PROBES: mechanisms the corpus does NOT measure ============================================================================== probe population: all 5859 extracted papers; 4 have no paper.cols.txt and count as negative. BIMI mentioned in 5 papers corpus-wide; 5 of them in this page's 31 TLS-RPT mentioned in 3 papers corpus-wide; 3 of them in this page's 31 REQUIRETLS mentioned in 0 papers corpus-wide; 0 of them in this page's 31 DANE (any) mentioned in 54 papers corpus-wide; 14 of them in this page's 31 MTA-STS mentioned in 11 papers corpus-wide; 9 of them in this page's 31 ARC mentioned in 6 papers corpus-wide; 6 of them in this page's 31 RFC 7489 (the Informational DMARC RFC that RFC 9989 obsoleted in May 2026): cited by 18 of the 31; the other 13 do not -- never mentions DMARC IMC/2017/email-typosquatting never mentions DMARC USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels names DMARC, not the RFC USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails names DMARC, not the RFC USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof names DMARC, not the RFC USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email never mentions DMARC IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry names DMARC, not the RFC USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp never mentions DMARC USENIX/2023/content-type-multipart-oracle-tapping-into-format-oracles-in-email-end-to-end-en names DMARC, not the RFC IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema never mentions DMARC IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden never mentions DMARC NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems names DMARC, not the RFC NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild never mentions DMARC USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale BIMI, in full -- every corpus paper that names it: 9x [in the 31] USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks 9x [in the 31] USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication 7x [in the 31] USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting 4x [in the 31] USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr 3x [in the 31] USENIX/2021/weak-links-in-authentication-chains-a-large-scale-analysis-of-email-sender-spoof A mention is not a measurement. Hand-read 2026-09-09: all five BIMI mentions are related-work or background sentences ("BIMI is built on DMARC and has not ..."). No paper in these seven venues measures BIMI deployment. REQUIRETLS: 0 mentions. ============================================================================== H. RECALL: is the 31 missing anything? ============================================================================== TIGHT (mech>=10 or tls>=10 or (smtp>=30 and mech>=3)): 45 papers hit | 30/31 of the population | 5 already mapped to another verdict | 10 unmapped WIDE (mech>=4 or tls>=4 or (smtp>=15 and mech>=2)): 77 papers hit | 31/31 of the population | 14 already mapped to another verdict | 32 unmapped Population papers the TIGHT probe misses: 1 -- ["email-typosquatting"] (The probe is a recall check on the hand map, not the population rule. It cannot find email-typosquatting, whose subject is misdirected mail and which names no mechanism; the hand map can. That is the argument for the hand map.) Every UNMAPPED paper the WIDE probe admits, read by hand 2026-09-09: 60m 0t IEEE-SP/2014/when-https-meets-cdn-a-case-of-authentication-in-delegated-service When HTTPS Meets CDN: A Case of Authentication in Delegated Service. 50m 0t IMC/2017/mission-accomplished-https-security-after-diginotar Mission accomplished?: HTTPS security after diginotar. 35m 1t PETS/2025/real-world-deniability-in-messaging Real-World Deniability in Messaging 32m 0t USENIX/2021/injection-attacks-reloaded-tunnelling-malicious-payloads-over-dns Injection Attacks Reloaded: Tunnelling Malicious Payloads over DNS 18m 0t IEEE-SP/2021/cross-layer-attacks-and-how-to-use-them-for-dns-cache-poisoning-device-tracking Cross Layer Attacks and How to Use Them (for DNS Cache Poisoning, Device Tracking and More). 18m 0t PETS/2026/cryptographically-secured-domain-validation Cryptographically-Secured Domain Validation 12m 6t IEEE-SP/2024/tcp-spoofing-reliable-payload-transmission-past-the-spoofed-tcp-handshake TCP Spoofing: Reliable Payload Transmission Past the Spoofed TCP Handshake. 16m 0t IMC/2023/wolf-in-sheeps-clothing-evaluating-security-risks-of-the-undelegated-record-on-d Wolf in Sheep's Clothing: Evaluating Security Risks of the Undelegated Record on DNS Hosting Services. 11m 2t IMC/2022/zdns-a-fast-dns-toolkit-for-internet-measurement ZDNS: a fast DNS toolkit for internet measurement. 0m 10t USENIX/2021/alpaca-application-layer-protocol-confusion-analyzing-and-mitigating-cracks-in-t ALPACA: Application Layer Protocol Confusion - Analyzing and Mitigating Cracks in TLS Authentication 8m 0t NDSS/2026/continuous-user-behavior-monitoring-using-dns-cache-timing-attacks Continuous User Behavior Monitoring using DNS Cache Timing Attacks 2m 6t USENIX/2026/opossum-attack-application-layer-desynchronization-using-opportunistic-tls Opossum Attack: Application Layer Desynchronization using Opportunistic TLS 6m 2t IEEE-SP/2023/is-cryptographic-deniability-sufficient-non-expert-perceptions-of-deniability-in Is Cryptographic Deniability Sufficientƒ Non-Expert Perceptions of Deniability in Secure Messaging. 7m 0t CCS/2019/lets-encrypt-an-automated-certificate-authority-to-encrypt-the-entire-web Let's Encrypt: An Automated Certificate Authority to Encrypt the Entire Web. 7m 0t CCS/2023/silence-is-not-golden-disrupting-the-load-balancing-of-authoritative-dns-servers Silence is not Golden: Disrupting the Load Balancing of Authoritative DNS Servers. 0m 7t USENIX/2024/the-challenges-of-bringing-cryptography-from-research-papers-to-products-results The Challenges of Bringing Cryptography from Research Papers to Products: Results from an Interview Study with Experts 0m 7t NDSS/2025/attributing-open-source-contributions-is-critical-but-difficult-a-systematic-analysis-of-github-practices-and-their-impact-on-software-supply-chain-security Attributing Open-Source Contributions is Critical but Difficult: A Systematic Analysis of GitHub Practices and Their Impact on Software Supply Chain Security 7m 0t IEEE-SP/2024/practical-attacks-against-dns-reputation-systems Practical Attacks Against DNS Reputation Systems. 6m 0t NDSS/2015/upgrading-https-in-mid-air-an-empirical-study-of-strict-transport-security-and-k Upgrading HTTPS in Mid-Air: An Empirical Study of Strict Transport Security and Key Pinning 6m 0t IMC/2018/ldplayer-dns-experimentation-at-scale LDplayer: DNS Experimentation at Scale. 4m 1t IMC/2017/understanding-the-role-of-registrars-in-dnssec-deployment Understanding the role of registrars in DNSSEC deployment. 0m 5t CCS/2019/practical-decryption-exfiltration-breaking-pdf-encryption Practical Decryption exFiltration: Breaking PDF Encryption. 5m 0t NDSS/2025/a-large-scale-measurement-study-of-the-proxy-protocol-and-its-security-implications A Large-Scale Measurement Study of the PROXY Protocol and its Security Implications 0m 4t USENIX/2016/drown-breaking-tls-using-sslv2 DROWN: Breaking TLS Using SSLv2 0m 4t NDSS/2017/measuring-small-subgroup-attacks-against-diffie-hellman Measuring small subgroup attacks against Diffie-Hellman 4m 0t IMC/2020/behind-closed-doors-a-network-tale-of-spoofing-intrusion-and-false-dns-security Behind Closed Doors: A Network Tale of Spoofing, Intrusion, and False DNS Security. 0m 4t IMC/2021/tracing-your-roots-exploring-the-tls-trust-anchor-ecosystem Tracing your roots: exploring the TLS trust anchor ecosystem. 0m 4t USENIX/2022/hyperdegrade-from-ghz-to-mhz-effective-cpu-frequencies HyperDegrade: From GHz to MHz Effective CPU Frequencies 4m 0t IMC/2023/stale-tls-certificates-investigating-precarious-third-party-access-to-valid-tls Stale TLS Certificates: Investigating Precarious Third-Party Access to Valid TLS Keys. 0m 4t USENIX/2025/x-509dos-exploiting-and-detecting-denial-of-service-vulnerabilities-in-cryptogra X.509DoS: Exploiting and Detecting Denial-of-Service Vulnerabilities in Cryptographic Libraries using Crafted X.509 Certificates 4m 0t IEEE-SP/2014/analyzing-forged-ssl-certificates-in-the-wild Analyzing Forged SSL Certificates in the Wild. 2m 0t IEEE-SP/2015/vetting-ssl-usage-in-applications-with-sslint Vetting SSL Usage in Applications with SSLINT. VERDICT: none of them measures deployed email authentication or transport security. They are DNS, PKI and TLS papers that name SPF or STARTTLS in passing (DANE for HTTPS/CDN, DNSSEC registrar studies, ALPACA, DROWN, a DNS toolkit paper). Widening the probe from TIGHT to WIDE added 0 papers to the population. Papers the probe hits that msg_fold gave a DIFFERENT verdict (boundary cases): 36m 3t [SE] WWW/2024/unfiltered-measuring-cloud-based-email-filtering-bypasses 33m 0t [SE] NDSS/2025/hades-attack-understanding-and-evaluating-manipulation-risks-of-email-blocklists 10m 0t [PHISH] CCS/2025/phishing-susceptibility-and-the-in-effectiveness-of-common-anti-phishing-interve 10m 0t [EID] NDSS/2026/one-email-many-faces-a-deep-dive-into-identity-confusion-in-email-aliases 8m 0t [PHISH] USENIX/2014/a-look-at-targeted-attacks-through-the-lense-of-an-ngo 7m 0t [INST] USENIX/2016/hey-you-have-a-problem-on-the-feasibility-of-large-scale-web-vulnerability-notif 7m 0t [PHISH] USENIX/2017/detecting-credential-spearphishing-in-enterprise-settings 7m 0t [PHISH] USENIX/2019/high-precision-detection-of-business-email-compromise 4m 3t [INST] PETS/2023/comparing-large-scale-privacy-and-security-notifications 6m 0t [SE] CCS/2024/inbox-invasion-exploiting-mime-ambiguities-to-evade-email-attachment-detectors 4m 1t [SE] USENIX/2012/b-bel-leveraging-email-delivery-for-spam-mitigation 4m 0t [PHISH] USENIX/2019/detecting-and-characterizing-lateral-phishing-at-scale 4m 0t [INST] USENIX/2021/effective-notification-campaigns-on-the-web-a-matter-of-trust-framing-and-suppor 4m 0t [PHISH] IEEE-SP/2023/design-and-evaluation-of-inclusive-email-security-indicators-for-people-with-vis ============================================================================== I. TOOLS NAMED AS USED (paper-counted, folded, residue printed) ============================================================================== denominator: 29 of 31 papers name at least one tool as used. 10 Postfix 5 OpenSSL / pyOpenSSL 4 ZMap 4 a spam/blocklist service or filter 4 a PGP implementation 3 BIND 3 Dovecot 2 OpenINTEL 2 Unbound 2 an SPF validator library 2 OpenDKIM / OpenDMARC / OpenARC 2 a weak-key checker 1 Exim 1 qmail 1 Sendmail 1 Microsoft Exchange 1 ZGrab2 1 checkdmarc 1 Farsight SIE passive DNS 1 dnstwist 1 XMap 1 pkilint 1 Censys UNMAPPED RESIDUE: 68 distinct strings across 26 papers. Printed in full because a page that folds must show what it could not fold: active scanning tool Alexa Web Information Service Amazon Mechanical Turk Apple Mail AS59645 BTTF historic bulk whois serviceauthoritative DNS server AWS AWS EC2 bag-of-words analysis BERT browser-based crawler check_host function Cloudflare DNS Coremail Coremail spam filter Cure53 HTTPLeaks Db-IP Debian Code Search Docker Drain Email Privacy Tester GitHub Code Search GNU Parallel GoDaddy API GoDaddy Domains API Google Custom Search JSON API Google Form Google Hosted S/MIME Google Translate HaveIBeenPwned html5sec instrumented SMTP client Internet Archive's Wayback Machine iOS Mail ip-api iRedAPD jc King Kplaysearch Let's Encrypt Linode Mail-In-a-Box Mailman3 Microsoft Outlook mitmproxy Mozilla CA list Mozilla NSS Mozilla NSS root store Mozilla Thunderbird mtpolicyd Netstar URL Categorization and Threat Intelligence Solution Nginx OWASP Cross Site Scripting Filter Evasion Cheat SheetPublic Suffix List (PSL) pyasn Python PyWhois QEMU Qualtrics Ruby Whois STARTTLS command injection testing toolSympa tcpdump Textract Ubuntu 18.04 LTS root store VirusTotal WHOIS History API Wireshark ============================================================================== J. QUOTE SPOT-CHECK OF THE EXTRACTION ITSELF ============================================================================== 206 detection[].evidence.quote values across the 31 papers. location modes: {"exact":119,"NOT FOUND (longest head 16ch: \"If there was no \")":1,"spliced(head 60ch / tail 42ch)":1,"punctuation-folded":11,"NOT FOUND (longest head 36ch: \"our larger measurement to all 7,269 \")":1,"NOT FOUND (longest head 23ch: \"exfiltration channels e\")":1,"NOT FOUND (longest head 7ch: \"and 10 \")":1,"spliced(head 51ch / tail 46ch)":1,"spliced(head 42ch / tail 25ch)":1,"NOT FOUND (longest head 23ch: \"This extensive list of \")":1,"NOT FOUND (longest head 14ch: \"We identified \")":1,"spliced(head 73ch / tail 47ch)":1,"spliced(head 107ch / tail 27ch)":1,"spliced(head 130ch / tail 25ch)":1,"NOT FOUND (longest head 8ch: \"Table 4 \")":1,"spliced(head 36ch / tail 46ch)":1,"spliced(head 77ch / tail 61ch)":1,"spliced(head 27ch / tail 128ch)":1,"spliced(head 61ch / tail 59ch)":1,"spliced(head 59ch / tail 26ch)":1,"spliced(head 35ch / tail 80ch)":1,"spliced(head 46ch / tail 56ch)":1,"spliced(head 53ch / tail 62ch)":1,"spliced(head 58ch / tail 36ch)":1,"spliced(head 61ch / tail 40ch)":1,"spliced(head 55ch / tail 25ch)":1,"spliced(head 57ch / tail 65ch)":1,"NOT FOUND (longest head 24ch: \"In contrast, 2,287,922 (\")":1,"spliced(head 27ch / tail 116ch)":1,"NOT FOUND (longest head 30ch: \"Overall, we encountered three \")":1,"NOT FOUND (longest head 7ch: \"Around \")":1,"spliced(head 30ch / tail 54ch)":1,"NOT FOUND (longest head 12ch: \"we find the \")":1,"NOT FOUND (longest head 13ch: \"We find that \")":1,"spliced(head 48ch / tail 33ch)":1,"spliced(head 55ch / tail 51ch)":1,"spliced(head 66ch / tail 51ch)":1,"spliced(head 30ch / tail 50ch)":1,"spliced(head 66ch / tail 60ch)":1,"spliced(head 56ch / tail 60ch)":1,"spliced(head 65ch / tail 28ch)":1,"NOT FOUND (longest head 9ch: \"The U.S. \")":1,"NOT FOUND (longest head 12ch: \"In the U.S. \")":1,"NOT FOUND (longest head 50ch: \"In the U.S., we find that the adoption of Zoom... \")":1,"spliced(head 62ch / tail 48ch)":1,"spliced(head 54ch / tail 95ch)":1,"NOT FOUND (longest head 58ch: \"Thus, their amplification factor is 1,460× (= 5,839 200 × \")":1,"spliced(head 53ch / tail 45ch)":1,"spliced(head 27ch / tail 98ch)":1,"spliced(head 41ch / tail 43ch)":1,"spliced(head 52ch / tail 91ch)":1,"spliced(head 39ch / tail 51ch)":1,"spliced(head 56ch / tail 53ch)":1,"NOT FOUND (longest head 20ch: \"We found that only T\")":1,"NOT FOUND (longest head 50ch: \"The spoofing email passed the verification of SPF \")":1,"NOT FOUND (longest head 10ch: \"all 16 tar\")":1,"spliced(head 118ch / tail 26ch)":1,"spliced(head 33ch / tail 57ch)":1,"NOT FOUND (longest head 7ch: \"54 (87.\")":1,"spliced(head 79ch / tail 55ch)":1,"spliced(head 25ch / tail 26ch)":1,"spliced(head 49ch / tail 25ch)":1,"spliced(head 36ch / tail 29ch)":1,"NOT FOUND (longest head 110ch: \"Out of the 94 participants who responded to the question about their familiarity with MTA-STS, 89 (94.7%) had \")":1,"NOT FOUND (longest head 12ch: \"At last, we \")":1,"spliced(head 65ch / tail 66ch)":1,"spliced(head 56ch / tail 46ch)":1,"NOT FOUND (longest head 20ch: \"For Autoconfig, ... \")":1,"spliced(head 96ch / tail 49ch)":1,"NOT FOUND (longest head 5ch: \"we de\")":1,"spliced(head 49ch / tail 102ch)":1,"spliced(head 41ch / tail 50ch)":1,"NOT FOUND (longest head 49ch: \"20.51 % of certificates fall into this category. \")":1,"spliced(head 54ch / tail 34ch)":1,"NOT FOUND (longest head 12ch: \"We found 71,\")":1,"NOT FOUND (longest head 22ch: \"We find that for each \")":1,"spliced(head 42ch / tail 48ch)":1,"spliced(head 85ch / tail 65ch)":1} unlocatable: 76 (36.9%) -- CCS/2015/security-by-any-other-name-on-the-effectiveness-of-provider-based-email-security [methodology] "If there was no DNSKEY record, then the domain was marked as not supporting DNSSEC." IMC/2015/neither-snow-nor-rain-nor-mitm-an-empirical-analysis-of-email-delivery-security [results] "As of April 26, 2015, Gmail successfully initiated STARTTLS connections for 80% of outgoing messages, while 60% of incoming connections initiated a STARTTLS session." IMC/2017/email-typosquatting [results] "our larger measurement to all 7,269 suspected typosquatting domains resulted in 15 emails being apparently opened and/or read by someone, and two honey tokens being accessed." USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels [abstract] "exfiltration channels exist for 23 of the 35 tested S/MIME email clients" USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels [abstract] "and 10 of the 28 tested OpenPGP email clients." USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels [results] "Out of 48 tested mail clients 17 had missing isolation which would allow leaking secret messages" USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels [results] "Of the tested 48 email clients, 13 load external images by default." USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels [results] "This extensive list of test-cases allowed us to bypass external content blocking in 22 email clients." USENIX/2018/efail-breaking-s-mime-and-openpgp-email-encryption-using-exfiltration-channels [results] "We identified five mail clients which are prone to JavaScript execution" USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks [results] "About 44.9% of the domains have published a valid SPF record in 2018 ... and 5.1% have a valid DMARC record in 2018" USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks [results] "35 email providers can be grouped into 3 categories based on their protocols: Full Authentication (16) ... SPF/DKIM but no DMARC (15) ... No Authentication (4)" USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks [introduction] "only 9 of 35 providers have implemented some security indicators: 8 providers have security indicators on their web interface ... and only 4 providers ... for the mobile apps." USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks [results] "Table 4 shows the 25 email providers that have misleading UIs." USENIX/2018/end-to-end-measurements-of-email-spoofing-attacks [results] "the corresponding click-through rates are 48.9% (without security indicator) and 37.2% (with security indicator) respectively." USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails [evaluation] "for ten OpenPGP capable clients and seven clients supporting S/MIME we could spoof visually indistinguishable signatures on all UI levels" USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails [evaluation] "On four additional OpenPGP capable clients and eight clients supporting S/MIME, we could spoof visually indistinguishable signatures on the first UI level" USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails [evaluation] "Using this attack, we were able to spoof arbitrary signature verification results in Enigmail, GPG Suite, and Mailpile." USENIX/2019/johnny-you-are-fired-spoofing-openpgp-and-s-mime-signatures-in-emails [evaluation] "On five PGP email clients, including popular products such as Thunderbird and Apple Mail, we could completely hide the original signed part" USENIX/2020/a-longitudinal-and-comprehensive-study-of-the-dane-ecosystem-in-email [results] "0.60% (.com) ∼ 0.73% (.net) of all domains with MX records have corresponding TLSA records in the latest snapshot." USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication [results] "We found 18 types of exploits: 6 of the email providers were affected by intra-server attacks, and all proved vulnerable to UI-mismatch and ambiguous-replay attacks." USENIX/2020/composition-kills-a-case-study-of-email-sender-authentication [methodology] "We evaluated 10 popular email providers and 19 email clients using a combination of manual analysis and black-box testing." USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email [results] "We found more than 300, 000 hosts still vulnerable to the command injection" USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email [results] "The response injection vulnerability (BR ) was present in 17 of 28 clients in at least one protocol." USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email [results] "We could achieve full session fixation in POP3 or IMAP for two servers, allowing to potentially present the attacker's mailbox to the victim." USENIX/2021/why-tls-is-better-without-starttls-a-security-analysis-of-starttls-in-the-email [appendix] "Excluding cloud mail apps, only three clients - Trojitá, Geary, and OfflineIMAP - did not verify certificates correctly" IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry [results] "In contrast, 2,287,922 (2.8%) were signed using S/MIME or PGP." IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry [results] "Overall, we identified 374 rendezvous where both sender and recipient exchanged public S/MIME keys due to sending signed emails to each other." IEEE-SP/2022/27-years-and-81-million-opportunities-later-investigating-the-use-of-email-encry [results] "Overall, we encountered three instances of private PGP keys (and their private sub keys) being sent via email" IMC/2022/spfail-discovering-measuring-and-remediating-vulnerabilities-in-email-sender-val [results] "Around 6% of conclusively measured servers exhibited SPF macro expansion errors that were distinct from the libSPF2 vulnerability expansion fingerprint." USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment [results] "We find 28.1% domains support DKIM based on active scanning on Alexa top 1M domains" USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment [results] "we find the records of 8,147 (2.9%) domains are misconfigured" USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment [results] "We find that 2,074,178 (94.1%) domains use weak DKIM signatures" USENIX/2022/a-large-scale-and-longitudinal-measurement-study-of-dkim-deployment [results] "We find 1,451,956 (65.9%) domains still use rsa-sha1 to generate DKIM signatures" USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp [results] "we find that 89% and 95.7% of TLSA records in SSDO and SSDS respectively are invalid due to DNSSEC issues" USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp [results] "more than 87% of SMTP servers in each case perform rollovers incorrectly at least once during our measurement period." USENIX/2022/under-the-hood-of-dane-mismanagement-in-smtp [results] "we find that 7,976 (94.4%) of these certificates are issued by popular CAs" WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot [results] "First, regardless of the target domain's DMARC policies, all spoofing emails enter Gmail's inbox without raising any warnings." WWW/2022/revisiting-email-forwarding-security-under-the-authenticated-received-chain-prot [results] "Firefox Relay completely removes all authentication-related headers (including ARC Sets) from the original email and converts the original plain text email into an HTML format." IMC/2023/lazy-gatekeepers-a-large-scale-study-on-spf-configuration-in-the-wild [results] "In our analysis of SPF, we observe a variety of errors in 2.9 % (211 018) of the domains." PETS/2023/heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio [results] "The U.S. developed towards a situation where all of the three major operators are used at universities at the same time, rising from 79 institutions (30.38%) in January 2015 to 227 (87.31%) in October 2022." PETS/2023/heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio [results] "In the U.S. from 87 (33.46%) to 196 (75.38%), in the U.K. from 15 (13.04%) to 64 (55.65%)." PETS/2023/heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio [results] "In the U.S., we find that the adoption of Zoom... has been an ongoing process that already started back in 2016 leading to 212 (81.54%) U.S. universities using Zoom... in October 2022." PETS/2023/heads-in-the-clouds-measuring-universities-migration-to-public-clouds-implicatio [results] "Similarly, we find 58 (71.60%) universities in Germany having BigBlueButton related names under their domain." USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting [introduction] "Out of 7 popular email hosting providers that support DMARC reporting, we identify 6 of them do not follow the security recommendations from RFC7489" USENIX/2023/youve-got-report-measurement-and-security-implications-of-dmarc-reporting [results] "Thus, their amplification factor is 1,460× (= 5,839 200 × 50)." USENIX/2023/content-type-multipart-oracle-tapping-into-format-oracles-in-email-end-to-end-en [introduction] "The evaluation in Section 5 includes 19 E2EE-capable and widely used MUAs and uncovers several side-channels leaking the decryption status." USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i [results] "only gmail.com, yahoo.com, aol.com, protonmail.com, outlook.com, and mail.ru request the MTA-STS record of our email server" USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i [results] "Our analysis shows that only 4,167,633 domains in the top ten million implement SPF." USENIX/2023/extended-hell-o-a-comprehensive-large-scale-study-on-email-confidentiality-and-i [results] "6,948 domains with an MX have an MTA-STS record ... However, only 569 of these domains actually had a policy file hosted in that location." NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet [results] "51.7% of domains have SPF records that include more than 65,536 (216 ) IP addresses." NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet [methodology] "By collecting IP addresses from the above five types of services, we obtained a total of 87,430 IP addresses" NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet [results] "We found that only Tencent CDN service suffers from our proposed A3 attack." NDSS/2024/breakspf-how-shared-infrastructures-magnify-spf-vulnerabilities-across-the-internet [results] "The spoofing email passed the verification of SPF and DMARC." USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism [results] "all 16 target providers allow test emails to pass their authentications and reach the recipients' inboxes without displaying any user warnings" USENIX/2024/fakebehalf-imperceptible-email-spoofing-attacks-against-the-delegation-mechanism [results] "half of the 18 participants who received emails with deceptive Delegate information (admin@victim.com) mistakenly identified them as legitimate." USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr [introduction] "The vast majority of SPF records are syntactically correct, with fewer than 0.4% errors." USENIX/2024/spf-beyond-the-standard-management-and-operational-challenges-in-practice-and-pr [results] "54 (87.1%) answered yes, while only 8 explicitly indicated they do not." IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema [results] "As of 2024-09, we find adoption to have risen 3-4 times, with adoption ranging between 53,800 (0.07%) domains for .com and 7,355 (0.12%) domains for .org." IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema [results] "among the 68,030 domains that have an MTA-STS record, 20,144 (29.6%) domains are incorrectly configured." IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema [results] "In our latest snapshot, 1,326 (1.9%) domains ... are unable to present a valid TLS certificate on all MXes." IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema [results] "we find that a total of 469 (19.6%) domains perform MTA-STS validation when sending to an MTA-STS-enabled domain" IMC/2025/unraveling-the-complexities-of-mta-sts-deployment-and-management-in-securing-ema [results] "Out of the 94 participants who responded to the question about their familiarity with MTA-STS, 89 (94.7%) had heard of the standard." IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden [methodology] "At last, we obtain the intermediate path of 105M (4.3%) emails, which we refer to as the intermediate path dataset." IMC/2025/understanding-and-characterizing-intermediate-paths-of-email-delivery-the-hidden [results] "We find that the HHI for the middle node provider market is 29%, for the incoming node is 37%, and for the outgoing node is 18%." NDSS/2025/a-multifaceted-study-on-the-use-of-tls-and-auto-detect-in-email-ecosystems [results] "Out of the 810 setup guides, we found that 310 (38.27%) are generic, and 500 (61.73%) are specific." NDSS/2025/automatic-insecurity-exploring-email-auto-configuration-in-the-wild [results] "For Autoconfig, ... 84.22% (36,417/43,238) did not redirect to HTTPS URLs." USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify [results] "The results indicated that 18 out of 20 public email services were vulnerable to SMTP smuggling on the sending side" USENIX/2025/email-spoofing-with-smtp-smuggling-how-the-shared-email-infrastructures-magnify [results] "we determined that the remaining 1,577 domains were vulnerable to SMTP smuggling." USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale [results] "we collected certificates from 1,395 servers ... resulting in a final dataset of 41,692,142 unique certificates from a total of 2,879 LDAP hosts." USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale [results] "After applying these filters, 38,374,783 or around 92 % of our dataset are S/MIME-capable." USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale [results] "20.51 % of certificates fall into this category. Table 6 shows that ... 40.50% ... 38.99%." USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale [results] "Missing Mandatory Information This category, representing 79.61 % of all certificates ... Key Usage Issue 65.15 % ... Insecure Parameters 50.77 %" USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale [results] "We found 71,214 distinct S/MIME certificates that can be classified as weak" USENIX/2025/s-mine-collecting-and-analyzing-s-mime-certificates-at-scale [results] "We find that for each configuration tested, at least one of the clients accepted the certificate for either signing or encryption." NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack [results] "We achieve a BCE of 3,801 by utilizing 20 email middleware and a 140-second attack cycle." NDSS/2026/coordmail-exploiting-smtp-timeout-and-command-interaction-to-coordinate-email-middleware-for-convergence-amplification-attack [discussion] "After implementing the random delay, the attack traffic is distributed over time ... This results in a reduction of the BCE by approximately 15x." ============================================================================== K. DONE ============================================================================== figures published: 53 population : 31 papers generated : run this file, do not retype its numbers
9. External and industry sources
The corpus stops in 2026 and its newest paper went to press before most of what follows. Everything in this section was fetched on 2026-09-09, not recalled. Where a claim was checked by a sub-agent and not re-fetched by the main run, it says so — that distinction is the point of the table.
9a. Accepted, with how it was verified
| Claim on the page | Source | Verification |
|---|---|---|
| DMARC republished on the standards track as RFC 9989/9990/9991, May 2026, obsoleting RFC 7489 and RFC 9091 | rfc-editor.org/rfc/rfc9989.txt | Re-fetched by the main run. The title page reads Obsoletes: 7489, 9091 / Category: Standards Track / May 2026. Independently re-confirmed by the currency review against datatracker |
pct= removed; t=y/n introduced | RFC 9989 §A.6 | Re-fetched. grep of the RFC text returns the appendix title “Removal of the 'pct' Tag” at line 2958 and the quoted sentence. Re-confirmed by the currency review |
| RFC 7208 (SPF), 7672 (DANE for SMTP), 8461 (MTA-STS), 8460 (TLS-RPT), 8689 (REQUIRETLS) all current, none obsoleted | datatracker | Currency review, by curl grep of the Obsoleted by field rather than by a summariser. Every RFC named on the page was swept for an obsoleting document; only 7489 and 9091 are obsoleted, and the page says so |
| RFC 6376 (DKIM) is an Internet Standard, not merely Proposed, and is not obsoleted | datatracker | Currency review |
ARC (RFC 8617) still Experimental; draft-ietf-dmarc-arc-to-historic active, revision -00, last updated 2026-04-22 | datatracker | Currency review. The page's first draft carried no date for this and hedged; the date is now stated |
draft-ietf-dkim-dkim2-spec active, revision -06, last updated 2026-08-28 | datatracker | Fetched twice (research pass and currency review) |
| BIMI still an individual Internet-Draft, revision -14, 2026-05-01, no working group | datatracker | Fetched twice |
| Google: 5,000 messages/24h, from 1 Feb 2024, plus the November 2025 enforcement sentence | support.google.com/a/answer/14229414 | Quotation confirmed verbatim by the currency review. Note it is on /a/answer/14229414 and not on the older /mail/answer/81126 |
| Yahoo mirrors the requirements and the February 2024 date but states no numeric threshold | senders.yahooinc.com/best-practices/ | Currency review searched the raw HTML for any #,000 pattern: none. The only “volume” strings are CSS icon class names |
| Microsoft: 5 May 2025, >5,000/day, junk-foldering now and rejection “date to be announced” | Microsoft Defender for Office 365 blog 4399730 | Currency review, by curl with a browser User-Agent. WebFetch returns only the page title for this URL; curl gets the article. A 2026-09-02 run of privacy:email_tracking recorded this host as blocked outright — it is not blocked, it is fetch-tool-dependent, and that earlier note is too strong |
checkdmarc 6.0.1 (2026-09-04), parsedmarc 11.0.1 (2026-09-03) | PyPI JSON API | Re-fetched by the main run |
libspf2: no tags at all; last version bump to 1.2.11 on 2021-06-09; a commit “Fix integer underflow” on 2023-10-04 never released | GitHub API, shevek/libspf2 | Re-fetched by the main run. /tags returns []; the three most recent commits are 2023-10-04, 2021-06-09, 2021-06-09 |
OpenARC upstream last commit 2018-09-21, newest tag v1.0.0.Beta1; maintained fork flowerysong/OpenARC at v1.3.0, 2025-10-29, seven releases since Oct 2024 | GitHub API | Re-fetched by the main run, both repos, commits and releases. This is the one that would have been got wrong by repeating the paper's 2022 sentence |
| Alexa site retired 1 May 2022, APIs 15 Dec 2022 | Alexa's own support pages | Currency review |
| Verisign directs .com/.net/.name zone-file requests to ICANN CZDS | Verisign's zone-file-access page | Currency review, verbatim |
| Cisco Umbrella and Majestic top lists still published daily | the Umbrella S3 bucket listing and the Majestic page | Currency review; Umbrella has top-1m-2026-09-07.csv.zip, Majestic's page is stamped 09 Sep 2026 |
dane-study.github.io, spf-measurement.github.io, mta-sts.netsecurelab.org, github.com/chenjj/espoofer all live | direct curl | Currency review, all HTTP 200 (mta-sts.netsecurelab.org 301s from http to https) |
internet.nl does not test MTA-STS | internet.nl/test-mail/ | Currency review. Its mail test covers IPv6, DNSSEC, SPF, DKIM, DMARC, STARTTLS, DANE and RPKI. The page's first draft implied MTA-STS was in scope; corrected |
pypi.org and GitHub release feeds for the whole tool table | see the rows on the page | Currency review re-fetched every row; 12 of 13 matched as published and one did not (OpenARC's newest tag, below) |
| BIMI has been measured once, outside the corpus: [2Yajima, Masanori; Chiba, Daiki; Yoneya, Yoshiro; Mori, Tatsuya (2023): "A First Look at Brand Indicators for Message Identification (BIMI)", in: Proceedings of the 24th International Conference on Passive and Active Measurement, pp. 479-495. Springer Nature Switzerland. (DOI)], PAM 2023, top million Nov 2022, 3,538 BIMI records, 396 (11%) with a valid VMC | Crossref 10.1007/978-3-031-28486-1_20 | Re-fetched by the main run for the BibTeX entry. Found by a currency sub-agent that was asked specifically to falsify the page's “nobody has measured this” claims – and did |
9b. Rejected, and why
The rejected ones matter more than the accepted ones: they are what stops the next run re-adding a vendor listicle.
| Source | Why rejected |
|---|---|
| dmarcian, Valimail, EasyDMARC, Red Sift OnDMARC, PowerDMARC, DuoCircle, dmarcreport.com | All commercially alive; none publishes a deployment figure with a stated population and method. Valimail's “2026 State of DMARC Report” puts its methodology behind a lead-capture form, which is not a citable methodology. Named on the page as rejected, so the next run does not re-add them |
| AutoSPF, Validity blog, DMARCguard, Skysnag | Marketing content; several are not measurement at all |
| A RIPE Labs post linking an OpenINTEL “stats page” | The link redirects to an unrelated marketing domain — apparently spam-injected. Not reused |
stats.dnssec-tools.org DANE percentage | Methodology page is sound (full daily census plus live STARTTLS/TLSA validation) but the dashboard is a client-rendered SPA that could not be scraped; the last concrete figure reachable is ~17.54% from February 2024. A stale number from a live-looking dashboard is exactly the trap, so no figure from it is on the page |
| Google Transparency Report, “Email encryption in transit” | URL returns 200 but is a pure SPA; recency could not be established either way. Not cited, and not described as discontinued either |
uriports.com MTA-STS survey | Gives a real Top-1M time series (0.3% → 0.7%, Jan 2024–2026) but does not fully disclose its detection method. Borderline; left off rather than caveated onto the page |
| UK NCSC Mail Check | Reported as being retired on 2026-03-31, with no final compliance report carrying a methodology. Not cited |
US CISA BOD 18-01 dashboard (pulse.cio.gov) | Does not resolve at all |
9c. Accepted with a caveat printed on the page
- SIDN Labs
.nlmail statistics (full census via OpenINTEL). The page carries the 2026-09-01 figures and the warning that the DANE/TLSA share moved from 26.57% to 37.24% in one month without the page saying why. That jump is either real or a methodology change; nobody should cite the figure without resolving it, and the page says so rather than quietly using the number. - Forum Standaardisatie, Meting Informatieveiligheidstandaarden overheid begin 2026 (12 May 2026), a bulk
internet.nltest over Dutch government domain registers. The page states n and the source, and frames both Dutch sources as a ceiling rather than a world.
9d. Where the currency pass and the earlier research pass disagreed
- The research pass reported Tranco's own documentation as recording Alexa's shutdown dates. It does not. Tranco's methodology page records 1 August 2023 as the date Tranco stopped ingesting Alexa as a source, which is a different fact. The page's footnote was corrected to cite Alexa's own support pages for the shutdown and to drop the Tranco attribution.
- The research pass reported the Microsoft announcement host as blocked. The currency pass fetched it. See 9a.
10. What could not be established
- Whether the seven venues are the field. They are not. EuroS&P, ACSAC, RAID, AsiaCCS, TMA, PAM, ANRW and ACM CCR are outside the corpus, and this subfield publishes in several of them. Every count on the page is a count over the seven, and the page says so in its first paragraph. Closing this needs a corpus extension, not a better query.
- Whether “nobody has measured BIMI” is true of the world. It is true of these seven venues, established by a full-text probe plus hand-reading all five mentions. [1Ashiq, Md. Ishtiaq; Li, Weitong; Fiebig, Tobias; Chung, Taejoong (2023): "You've Got Report: Measurement and Security Implications of DMARC Reporting", in: Proceedings of the USENIX Security Symposium. (Link)] itself points outside the corpus to a BIMI study (Yajima, Chiba, Yoneya and Mori) for a 19%-of-Tranco DMARC figure, which is direct evidence that BIMI work exists elsewhere. The page's claim is scoped to the seven venues and should not be read more widely.
- A combined MTA-STS deployment rate. The source paper gives per-TLD rates against per-TLD MX-having populations and does not combine them; neither does the page. The four zone totals sum to 86.8 million, but publishing 68,030 / 86.8M would be my arithmetic on a denominator the paper never presents as one.
- Whether the SIDN DANE jump is real. See 9c. The underlying series were fetched directly (
stats.sidnlabs.nl/data/mail-tlsa-mx-active.json): 2026-08-01 = 26.566815%, 2026-09-01 = 37.24301%. Neither the chart description nor/en/info.htmlmentions a methodology change, and/en/info.htmldoes not contain the strings “TLSA” or “DANE” at all. The jump is real in the data and unexplained on the site. - Whether the 2024 bulk-sender mandates changed deployment. Nobody in this corpus has measured it, and the page lists it as an open question rather than asserting an effect. This is the most consequential gap on the page: after February 2024 the incentive to publish DMARC depends on Gmail sending volume, which no paper in the population controls for.
- Two denominators on the page are readings, not quotations. [3Czybik, Stefan; Horlboge, Micha; Rieck, Konrad (2023): "Lazy Gatekeepers: A Large-Scale Study on SPF Configuration in the Wild", in: Proceedings of the ACM Internet Measurement Conference. (DOI)] writes “34.7 % of the domains allow emails to be sent from over 100 000 IP addresses” in its abstract without saying which domains; Figure 5's CDF is over domains that have an SPF record, so the page reads it that way. Taken literally against all 12 million the figure would be 4.2M domains rather than 2.4M. [4Wang, Chuhan; Kuranaga, Yasuhiro; Wang, Yihang; Zhang, Mingming; Zheng, Linkai; Li, Xiang; Chen, Jianjun; Duan, Haixin; Lin, Yanzhong; Pan, Qingfeng (2024): "BreakSPF: How Shared Infrastructures Magnify SPF Vulnerabilities Across the Internet", in: Proceedings of the Network and Distributed System Security Symposium. (Link)]'s 51.7% carries an explicit exclusion in its Table II note – SPF records that configure no IP addresses at all, such as
v=spf1 -all, are dropped – which the page's cell does not spell out. Both readings were confirmed by the citations review against the underlying absolute counts. - Inter-rater agreement. 19 of 31 papers coded something by hand and 0 report a metric. The extraction records
humanAnnotation[].agreementMetricas absent; I did not go back to all 19 PDFs to confirm the absence is the paper's rather than the extractor's. Treat “0 of 19” as an extraction result, not a hand-verified one. This is the weakest number on the page.
11. Judgement calls
- Reuse the published population rather than re-derive it. Section 2. The cost is that recall depends on somebody else's regex; section 3 is the check that closes it. A reasonable person could have re-derived and got a slightly different 31.
- Leave
Unfilteredout. Section 3. The clearest arguable call on the page, and it is argued in the open on both the content page and here rather than being decided silently. - A whole section on standards that postdate every paper in the corpus. Half of What Changed Under You in 2025–2026 is not corpus-derived at all. It is here because the page's reader is about to run a measurement, and a page that told them DMARC is RFC 7489 would be actively harmful — a purely corpus-driven page cannot know that RFC 9989 exists.
- Publish the tool-liveness table with its dates. Every row will rot. It is dated in the section heading so a reader can see how stale it is, which is better than the alternative of naming tools with no date at all.
- Call
libspf2“stalled” in a table cell. That is a judgement about a volunteer project. It rests on: no tags at all in the repository, the last version bump in June 2021, and a commit whose message says “Fix integer underflow” sitting unreleased since October 2023. The page states those three facts next to the judgement. - Name the mechanism/instrument maps as mine. Both are in the Methodology and limitations section of the content page as hand maps, not extraction fields, because they are the two tables a reader is most likely to mistake for query output.
- State enforcement figures without combining them. The receiver-side table has six rows with six different populations (22 providers, 35 providers, 29 providers, 30 services, 1.2M servers, 2,394 domains). Averaging them would produce a number, and the number would mean nothing.
- Keep the page at the seven-venue scope rather than adding an outside-literature survey. The page names what is outside (the Dutch national measurements, the BIMI study [1Ashiq, Md. Ishtiaq; Li, Weitong; Fiebig, Tobias; Chung, Taejoong (2023): "You've Got Report: Measurement and Security Implications of DMARC Reporting", in: Proceedings of the USENIX Security Symposium. (Link)] cites) and does not pretend to systematise it.
- No
~~DISCUSSION~~on provenance pages. Following the established convention on this wiki: comments belong on the content page.
12. Reviews
Four reviewers, all told explicitly that the main run's context may not be exhaustive, and all handed the page text, the report script, its output and these notes. The three focused passes ran in parallel first; the generic pass ran after their findings were applied.
12a. Figures against the script (''sonnet'')
Brief: re-run the script, diff against the committed output, check every number on the page against it, look for figures whose stated population differs from the one the script computes, and mutate the script rather than reading it. Verdict on the re-run: byte-identical to the committed output, no diff.
| # | Finding | Disposition |
|---|---|---|
| 1 | “TLS-RPT appears only as a side channel … never as a deployment measurement” is false. [1Ashiq, Md. Ishtiaq; Li, Weitong; Fiebig, Tobias; Chung, Taejoong (2023): "You've Got Report: Measurement and Security Implications of DMARC Reporting", in: Proceedings of the USENIX Security Symposium. (Link)] Table 4 measures provider support: 2 of 8 EHPs support TLS-RPT reporting, and no open-source software does. TLS-RPT is also named in 3 of the 31, not 1 | Accepted. Verified the table caption and the sentence “there are only 2 popular email hosting providers and no open-source software that support TLS-RPT at this moment” directly. Page rewritten; the mechanism table now carries an explicit note that TLS-RPT is deliberately absent from it and why. This is the finding I got wrong twice: the first draft under-claimed the mention count, and my own pre-review correction over-claimed in the other direction by saying nobody measures it |
| 2 | “between them they account for four of the sixteen 2023–2026 papers” is wrong. Operator-survey 4 + software-testbed 5, overlap 1, union 8 | Accepted. Page corrected to eight. The union is now computed and its members listed by the script, so it cannot drift again |
| 3 | “Six of the twelve rows silently restrict to domains that have an MX record” — it is five, and the reviewer checked all twelve against their source papers | Accepted, and found independently by the main run before the review landed. Page corrected to five, with the note that one of the five says “mail-enabled domains” instead |
| 4 | “five sentences are interrupted mid-sentence” — the script annotates three as spliced; the fourth second-fragment is a corroborating quote, not a splice | Accepted. Page and section 7b corrected to three, with the caveat that at least one prose figure outside the FIGURES array is also spliced, so three is a floor |
| 5 | The page's one-sentence description of the WIDE recall probe omits that mech silently includes BIMI, that tls is a separate threshold bucket rather than pooled, and that there is a third branch on raw SMTP mentions. The reviewer mutation-tested the conclusion: dropping the threshold to mech>=2 or tls>=2 still admits only web-PKI/DNSSEC/TLS papers and still covers 31/31, so “adds nothing” is robust rather than a fragile threshold pick | Accepted for the description, which the main run had also flagged; the page now states the rule in full. The mutation test is the most valuable thing in this review and is recorded in section 3 |
| 6 | The script's FIGURES entry for MTA-STS 68,030 labels its population “all domains in the .com/.net/.org/.se zone files” while its own spliced note says Table 1's column header reads “Domains with MX Records”. The page is right; the script's internal metadata was wrong | Accepted. Script corrected. A script that disagrees with itself will eventually be believed over the page |
| 7 | “That distribution is worse than the corpus-wide picture” (ethics) is backwards. Corpus-wide none-mentioned is 64.2% of the 4,965 papers carrying an ethics object; this population is 38.7% | Accepted, and this was the worst error on the page — an unsupported comparison written from impression, in a section about other people's rigour. The comparison is now computed by the script and printed with its denominator, and the page says the population is better than the corpus and that n = 31 makes neither gap a difference |
| 8 | Mutation test: deleting a slug from MECH does throw MECH: missing 1 […] | Confirmed working, no change |
| 9 | “only three state a recruitment channel” undercounts by one: [1Ashiq, Md. Ishtiaq; Li, Weitong; Fiebig, Tobias; Chung, Taejoong (2023): "You've Got Report: Measurement and Security Implications of DMARC Reporting", in: Proceedings of the USENIX Security Symposium. (Link)] names MailOP, NANOG and MESSEU in its own text and the extractor recorded not-stated | Accepted. Page corrected to four of five, with the extractor's error named. A good reminder that a sentinel can be the extractor's, not the paper's |
Nothing else in the denominators table, the mechanism table, the instrument fold, the sampling-frame fold, the period breakdowns, the venue counts, the artifact counts or the quote-location split was found to differ from the script.
12b. Citations and quotes (''sonnet'')
Brief: every {[key]} resolves, no duplicates or same-paper collisions, every new BibTeX entry checked against the PDF cover page rather than the venue listing, every quoted string verbatim, ten named load-bearing claims checked against the paper, and the web claims held to a primary source.
| # | Finding | Disposition |
|---|---|---|
| 1 | lee2020_longitudinal carries Gireesh, Aniketh. The paper's own byline reads Aniketh Girish; “Gireesh” appears only on USENIX's auto-generated proceedings cover sheet | Accepted and fixed in the live bibliography. Verified by hand: both spellings are in the PDF text, one on the USENIX cover and one on the paper's own title block. Exactly the failure mode the wiki has recorded before — USENIX publishes authors three ways and only the paper is right |
| 2 | The OpenARC row says the newest upstream tag is v1.0.0.Beta1. It is rel-openarc-1-0-0-Beta3, and there is branch activity past 2018 | Accepted and fixed. Re-verified without the API (rate-limited) by scraping /tags and the branch atom feeds: tags newest-first are Beta3 (commit 2019-08-08), Beta2, v1.0.0.Beta1, v1.0.0.Beta0, v0.1.0; master last committed 2018-09-21 and develop 2020-10-16. My error was taking the first element of an unsorted GitHub /tags response as the newest — the same ordering trap this wiki has already recorded for releases.atom. The row now gives all four dates |
| 3 | “S/MINE, 41.7 million certificates” — 41.7M is the raw X.509 crawl; the paper's own abstract says 38 million fulfil the S/MIME requirements | Accepted and fixed. The page now gives both numbers and says which is which |
| 4 | “35 public email providers” — [5Hu, Hang; Wang, Gang (2018): "End-to-End Measurements of Email Spoofing Attacks", in: Proceedings of the USENIX Security Symposium. (Link)] says popular in all five places, never public. The distinction is the sampling criterion | Accepted and fixed |
| 5 | The OpenARC quotation drops a leading “Also,” and silently capitalises “the” | Accepted in substance, resolved differently. The sentence is no longer quoted on the page: the row was rewritten around the four verified dates, which is stronger evidence than the 2022 sentence anyway |
| 6 | SIDN Labs figures unverifiable — the dashboard is JS-rendered | Rejected as a finding, accepted as a warning. A second sub-agent reached the underlying JSON series (stats.sidnlabs.nl/data/mail-active.json and mail-tlsa-mx-active.json) and confirmed 84.24% and 37.24% at 2026-09-01 and 26.57% at 2026-08-01, exactly as published. Recorded here because “I could not fetch it” and “it is wrong” are different, and a reviewer that conflates them costs a real figure |
Confirmed with no change: all 37 page citekeys resolve in the 885-entry bibliography; bib_dedup_scan.py finds no definite duplicate pair including the new entries; 24 of the 25 entries then present have author lists matching the PDF cover page position by position, including the four flagged for diacritics and splicing; the RFC 9989 quotations, the Google November-2025 quotation and the libspf2 commit message are verbatim; nine of the ten named load-bearing claims are correct against the paper and its stated population, the tenth being finding 3.
12c. External currency (''sonnet'', fan-out)
Brief: fetch, do not recall; check every standard, every mandate, every tool row, every link, every sampling frame and every external statistic as of 2026-09-09; and try to falsify the page's “nobody has measured this” claims. This pass fanned out into six parallel checks.
| # | Finding | Disposition |
|---|---|---|
| 1 | The BIMI claim is falsifiable and false as written. [2Yajima, Masanori; Chiba, Daiki; Yoneya, Yoshiro; Mori, Tatsuya (2023): "A First Look at Brand Indicators for Message Identification (BIMI)", in: Proceedings of the 24th International Conference on Passive and Active Measurement, pp. 479-495. Springer Nature Switzerland. (DOI)], A First Look at Brand Indicators for Message Identification (BIMI), PAM 2023: top million, November 2022, 3,538 BIMI records, only 396 (11%) with a valid Verified Mark Certificate | Accepted. This is the single most valuable review finding on the page. The claim is now scoped to the seven venues, the PAM 2023 paper is cited with its figures, and a BibTeX entry was added. It is also the paper [1Ashiq, Md. Ishtiaq; Li, Weitong; Fiebig, Tobias; Chung, Taejoong (2023): "You've Got Report: Measurement and Security Implications of DMARC Reporting", in: Proceedings of the USENIX Security Symposium. (Link)] already cited as its BIMI reference — the main run had seen that citation and still wrote “nobody” |
| 2 | internet.nl does not test MTA-STS | Accepted and fixed, with the consequence spelled out: it cannot be your MTA-STS instrument |
| 3 | The Alexa footnote's claim that Tranco's documentation records the shutdown dates is wrong; Tranco records 1 August 2023, the date it stopped ingesting Alexa | Accepted and fixed. Attribution moved to Amazon's own support pages |
| 4 | draft-ietf-dmarc-arc-to-historic is Active, revision -00, last updated 2026-04-22 | Accepted. The page's hedge (“not independently re-fetched”) is replaced by the date |
| 5 | DKIM's RFC 6376 is an Internet Standard, not merely Proposed, and is updated by RFC 8301, 8463, 8553 and 8616 | Accepted as context, not published. The page cites RFC 6376 without claiming a maturity level, so there was nothing to correct; the fact is recorded here for the next run |
| 6 | REQUIRETLS and the bulk-mandate-effect claims survived a search of PAM, TMA, ANRW, arXiv, CoNEXT and the named venues. The closest hit is Hureau et al., PAM 2024, on DMARC misconfiguration — not a before/after study of the mandates | Accepted. Both claims on the page are now scoped to “no paper found in these venues, nor in PAM, TMA, ANRW or arXiv, as of September 2026” rather than “nobody” |
| 7 | Microsoft's announcement URL is not blocked; WebFetch returns only the title and curl with a browser User-Agent returns the article | Accepted. A 2026-09-02 note on privacy:email_tracking calls this host blocked outright; it is fetch-tool-dependent. Recorded in 9a rather than edited onto the other page |
| 8 | Twelve of the thirteen tool rows verified exactly as published, including the libspf2 zero-tags finding and the flowerysong fork | Confirmed, no change |
| 9 | SIDN Labs and Forum Standaardisatie figures verified exactly, including the 26.57% → 37.24% jump and the absence of any explanation on the site | Confirmed, no change |
12d. Generic (''fable'')
Brief: no checklist. Whatever the three focused passes were not looking for — overstatement, structure, whether the page answers its own question, and the provenance page itself.
| # | Finding | Disposition |
|---|---|---|
| 1 | “Every paper in this population cites the Informational RFC 7489.” is false. Grepping the 31 paper.cols.txt files: 18 cite 7489, 13 do not, and 7 of those never mention DMARC at all | Accepted, and this is the best catch of the four reviews. Verified independently, added as a query to the report script, and the page now says 18 of 31 with the 7-paper detail. The reviewer's own diagnosis is right and worth keeping: “The figures reviewer checked script output, the citations reviewer checked quotes, the currency reviewer checked the RFC — nobody owned the word 'every'.” That is the recurring failure mode of a review layer built out of focused briefs: the claim no brief owns is the one that survives |
| 2 | The page never tells a student to split by policy strength — p=none against quarantine/reject, ?all against -all. Every adoption figure in the denominators table is a presence rate, and the page's own Dutch government row reports DMARC at quarantine or reject 86% separately for exactly this reason | Accepted. A fifth denominator trap and a What to Report bullet were added, and [3Czybik, Stefan; Horlboge, Micha; Rieck, Konrad (2023): "Lazy Gatekeepers: A Large-Scale Study on SPF Configuration in the Wild", in: Proceedings of the ACM Internet Measurement Conference. (DOI)]'s 5.9% of SPF-publishing domains with no restrictive all is now a published figure with its quote checked. This is the substantive gap in the first draft |
| 3 | The outcome variable of an account-based delivery test is never described, though 14 of the 31 use the instrument. A student will code it binary | Accepted. A paragraph on the four-outcome ladder plus the interface dimension, with [5Hu, Hang; Wang, Gang (2018): "End-to-End Measurements of Email Spoofing Attacks", in: Proceedings of the USENIX Security Symposium. (Link)]'s 9-of-35 and 25-of-35 as published figures, and a What to Report bullet |
| 4 | Three internal count mismatches: heading “The Six Instruments” over “twelve identifiable instruments”; “which of the four different questions” over a six-row table; “the same five mechanisms” over six rows | Accepted, all three |
| 5 | Twelve overstatements, quoted individually: “Most rejected drafts are missing three or more”, “and reviewers now say so”, “all four have been published wrong somewhere”, “bigger than most of the effects people publish”, “the three-sided design this topic now expects”, “you are designing a 2015 paper”, “measuring 2021 code”, “a policy change, not a security trend”, “and it is the right filter”, “the only internet-scale figure”, “Every account-based delivery paper since”, and an uncited geo/resolver claim | All twelve accepted. Three were cut outright, the rest scoped, attributed or turned into the underlying fact. The “and it is the right filter” fix is the one that added information rather than removing it: MX-filtering is right for a receiving-side mechanism and a lossy proxy for a sending-side one, and [4Wang, Chuhan; Kuranaga, Yasuhiro; Wang, Yihang; Zhang, Mingming; Zheng, Linkai; Li, Xiang; Chen, Jianjun; Duan, Haixin; Lin, Yanzhong; Pan, Qingfeng (2024): "BreakSPF: How Shared Infrastructures Magnify SPF Vulnerabilities Across the Internet", in: Proceedings of the Network and Distributed System Security Symposium. (Link)] reports both variants separately |
| 6 | Six of the 31 are S/MIME and OpenPGP client-crypto work that the page mentioned in one sentence | Accepted. A short subsection now says what transfers and what does not, and why the two papers in that slice that did get a prevalence had to find an unusual population to do it |
| 7 | The content page states “Zero of nineteen” with emphasis while the provenance page calls the same number “the weakest number on this page” | Accepted. The caveat is now on the content page in the same sentence as the number, not only in the log |
| 8 | Rendering: DokuWiki has no backtick markup, so the double-backtick form the page used around _mta-sts rendered literally; and the media syntax {{ }} in this page's section 3 would have rendered as a broken image | Both accepted and fixed. A third item, that [[programming:internet_scanning]] is a red link, was rejected: it is a page queued on the roadmap, scripts/sitemap.mjs gates on exactly that, and a forward link to a queued page is the wiki's convention rather than a defect. The content page now says so inline. Checking that red link did surface a real one, though: a bare [[roadmap]] written from a security: page resolves to security:roadmap and rendered red; anchored to [[:roadmap]]. And writing this very row reproduced the bug: all four literals above had to be wrapped in nowiki, because '''' monospace escapes neither a link nor a plugin tag |
| 9 | The provenance page's own §9a still gave OpenARC's newest tag as v1.0.0.Beta1 after §12b recorded the correction | Accepted. Fixed. This is the standing hazard with a provenance page: a corrected figure survives in the log's own tables, and grepping the log for the old value is part of applying a fix |
| 10 | §7b said three spliced sentences over a five-row table | Accepted. The table now carries a role column — spliced figure / corroborating fragment / shortened / prose figure outside the tracked array — so 3 + 1 + 2 + 1 is visible |
| 11 | §7a says the figures “were rewritten until that line disappeared”, which is a selection effect the log does not admit | Accepted, and this is the finding that most improved the provenance page. §7a now lists every quote that was rewritten, with the before and after, and states that no figure was dropped and no value changed |
| 12 | Working-log notes are sitting in content-page footnotes | Partly accepted. The Microsoft “an earlier run recorded this host as blocked” note moved here. The CZDS and Tranco notes stayed: both tell the reader something they need before acting (read the CZDS terms yourself; do not cite Tranco for Alexa's shutdown dates), which is content, not log |
| 13 | First person on the content page (“where I think”, “my judgement”) where the neighbours keep “I” for provenance | Accepted, both rewritten |
| 14 | “p=none is unchanged and is still where the RFC tells domain owners to start” is deployment advice to domain owners, not measurement | Accepted, cut |
| 15 | Author concentration: “three of the 31 share a first author” undercounts | Already fixed before this review landed — the main run had computed it independently and replaced the sentence with the script's figures. The reviewer read a version from a few minutes earlier; recorded because a review of a moving page is a real hazard and this run created it |
| 16 | Provenance §1 said “+25 entries” two rows above “26 new keys” | Accepted, reconciled |
| 17 | Ethics figures repeated in three places; the instrument table appears twice | Partly accepted. The duplication of the instrument table is deliberate (narrative first, period split in the query section) and the second now says so. The ethics repetition was left: the Ethics section and Where these papers go quiet serve different readers, and the numbers agree |
12e. What the review layer was worth
Nine findings from the figures pass, six from the citations pass, nine from the currency pass, seventeen from the generic pass. Six of them changed a claim a reader would have acted on: the ethics comparison was backwards, the BIMI claim was falsifiable, TLS-RPT is measured, a published author's name was wrong, “every paper cites RFC 7489” was false, and the page had no advice at all about policy strength. Three were caught by the main run independently before the reviews landed (the MX-row count, the WIDE-probe description, the author concentration), which is the argument for doing your own pass as well as commissioning four. The generic pass, with no checklist, produced the most findings and two of the six that mattered — including the one whose diagnosis names why: three focused briefs each assumed another owned the word “every”.
One rejection is worth as much as the accepts: the citations reviewer reported the SIDN Labs figures as unverifiable because the dashboard is JS-rendered, and a different agent reached the JSON behind it and confirmed them. “I could not fetch it” is not “it is wrong”, and treating the two as the same would have cost the page its only current external deployment statistic.
References
- [1]
- Ashiq, Md. Ishtiaq; Li, Weitong; Fiebig, Tobias; Chung, Taejoong (2023): "You've Got Report: Measurement and Security Implications of DMARC Reporting", in: Proceedings of the USENIX Security Symposium. (Link)
- [2]
- Yajima, Masanori; Chiba, Daiki; Yoneya, Yoshiro; Mori, Tatsuya (2023): "A First Look at Brand Indicators for Message Identification (BIMI)", in: Proceedings of the 24th International Conference on Passive and Active Measurement, pp. 479-495. Springer Nature Switzerland. (DOI)
- [3]
- Czybik, Stefan; Horlboge, Micha; Rieck, Konrad (2023): "Lazy Gatekeepers: A Large-Scale Study on SPF Configuration in the Wild", in: Proceedings of the ACM Internet Measurement Conference. (DOI)
- [4]
- Wang, Chuhan; Kuranaga, Yasuhiro; Wang, Yihang; Zhang, Mingming; Zheng, Linkai; Li, Xiang; Chen, Jianjun; Duan, Haixin; Lin, Yanzhong; Pan, Qingfeng (2024): "BreakSPF: How Shared Infrastructures Magnify SPF Vulnerabilities Across the Internet", in: Proceedings of the Network and Distributed System Security Symposium. (Link)
- [5]
- Hu, Hang; Wang, Gang (2018): "End-to-End Measurements of Email Spoofing Attacks", in: Proceedings of the USENIX Security Symposium. (Link)
