Email security standards
Criteria verified as of August 2026. Re-verify on the web before committing to anything (§8).
1. Scope and triggers
Applies to defending the email channel: sender authentication (SPF, DKIM, DMARC) and its
full rollout up to a reject policy; the inventory of who sends on your behalf;
transport security (MTA-STS, TLS-RPT, DANE); brand indicators (BIMI); subdomain and
sending-provider policy; interpretation of aggregate and failure reports;
survival of email across lists and forwarding (ARC); inbound defence (filtering, isolation
of attachments and links, quarantine, external-origin banners); business email
compromise fraud (BEC) and its process control; training and simulations; and the reporting
mailbox as a signal source.
Triggers: v=spf1, _dmarc, v=DMARC1, p=none/p=quarantine/p=reject, sp=, np=,
t=y, rua=/ruf=, adkim/aspf, pct=, selector._domainkey, v=DKIM1; k=rsa; p=,
v=ARC1, Authentication-Results:, ARC-Seal, _mta-sts, .well-known/mta-sts.txt,
_smtp._tls, v=TLSRPTv1, _25._tcp TLSA, default._bimi, v=BIMI1, VMC/CMC,
List-Unsubscribe-Post: List-Unsubscribe=One-Click, 550 5.7.26, dmarcian/parsedmarc,
opendkim/opendmarc, swaks, "aggregate report", "alignment", "domain spoofing",
"phishing", "BEC", "CEO fraud", "bank account change", "phishing simulation".
Guiding principle: email is the most used inbound channel against the people of an
organisation, and it is the only one whose baseline defence depends on three DNS records that almost
nobody reviews. Here the criteria are concrete and verifiable: either the record is published and
aligned, or it is not — you check it in 30 seconds with dig. Corollary: DMARC is not a
DNS project, it is an inventory project. 90 % of the real work of getting to
p=reject is discovering who sends on your behalf (billing, HR, the CRM, the print shop,
that plugin) and the part that fails is not the technical one, it is that nobody had that list.
Not applicable: the detection rule and its analytic content (including turning a
reported email into a detection) belong to detection-engineering-standards, the confirmed
incident, the containment that preserves evidence and mailbox forensics belong to
incident-response-forensics-standards, and the incident process — severity, command,
communication, postmortem — belongs to incident-management-standards; here it ends the moment
there is confirmed compromise. DNS zone operation (delegation, DNSSEC, TTL,
registrar management) belongs to dns-standards — here we set what the record must contain and
why —, identity and mailbox access (MFA, conditional access, OAuth tokens,
session revocation, forwarding rules as an IoC of a compromised account) belong to
identity-access-management-standards, cryptography and PKI (key size, TLS,
certificate chains, S/MIME) to cryptography-pki-standards, CVE triage of the
mail product to vulnerability-management-standards, the SOC's queue, shift and metrics
to soc-operations-standards, and the indicator, its expiry and intelligence
about brand impersonation to threat-intelligence-standards.
Also: mail-servers-standards (the server that implements these controls: Postfix,
Exim, Dovecot, Rspamd, queues, storage and outbound IP reputation — here the
policy and the content of the record, there the daemon that applies them),
offensive-security-standards (any simulated campaign requires written scope and
authorisation; this skill is defensive), privacy-engineering-standards
(the mailbox and its headers are personal data: legal basis, minimisation and retention of the
simulations and of archiving), grc-compliance-standards (regulatory notification duty
and audit evidence), networking-standards and firewall-policy-standards
(outbound SMTP, egress and IP reputation), observability-standards (telemetry
platform), itsm-itil-standards (the ticket and the SLA), macos-fleet-standards and
endpoint-security-standards (the mail client and what happens
after the click), ai-governance-standards and mlsecops-standards (if the filter decides with a
model: governance, bias and evaluation).
2. Default decisions
Verify on the web the status of every RFC and draft before pinning it in a project (§8).
| Control |
Verified standard |
Default decision |
| SPF |
RFC 7208, Proposed Standard (obsoletes RFC 4408; updated by 7372, 8553, 8616) |
A single v=spf1 record, ending in -all. ~all only during rollout |
| DKIM |
RFC 6376, Internet Standard (updated by 8301, 8463, 8553, 8616) |
Always sign. rsa-sha256 with ≥2048 bits; ed25519-sha256 (RFC 8463) as a dual signature, never alone |
| DMARC |
RFC 9989 (core) + RFC 9990 (aggregate report) + RFC 9991 (failure report), Proposed Standard, May 2026 — they obsolete RFC 7489 and RFC 9091 |
Destination p=reject with rua active. Explicit sp and np |
| ARC |
RFC 8617, Experimental |
Seal at your own intermediaries (lists, gateways); do not trust someone else's ARC without a trust list |
| Auth-Results |
RFC 8601, Proposed Standard (obsoletes 7601) |
The edge MTA writes the header and deletes the forged ones arriving from outside |
| MTA-STS |
RFC 8461, Proposed Standard |
mode: enforce, high max_age (maximum allowed 31,557,600 s). testing only as a prior step with TLS-RPT active |
| TLS-RPT |
RFC 8460, Proposed Standard |
Always, and before MTA-STS/DANE: it is the only way to see what you break |
| DANE SMTP |
RFC 7672 (TLSA: RFC 6698, upd. by 7218, 7671, 8749), Proposed Standard |
Only if your zone and the MXs' zones are signed with DNSSEC; otherwise, MTA-STS |
| BIMI |
NOT an RFC: draft-brand-indicators-for-message-identification-14 (May 2026), Individual Submission, IESG state "I-D Exists" |
Optional and last. Requires DMARC at quarantine/reject, an SVG logo and a paid VMC/CMC issued by an MVA |
| List unsubscribe |
RFC 8058, Proposed Standard |
List-Unsubscribe + List-Unsubscribe-Post in every commercial or subscribed email |
What changed with DMARCbis and has to be rewritten (RFC 9989, verified in the IANA registry
of the document itself): pct, rf and ri move to historic; np is added (policy for
non-existent subdomains), psd (the domain is a public suffix) and t (test
mode). The public suffix list (PSL) is replaced by the DNS Tree Walk: up to
8 queries ascending the tree (if the name has ≥8 labels, it jumps to the rightmost 7).
And the fact that corrects the usual belief: DMARC is no longer Informational of the
independent stream — it is now Proposed Standard of the IETF stream.
3. Structure and conventions
; --- SPF: only one, ≤10 terms with a DNS lookup, ending in -all
example.com. IN TXT "v=spf1 include:_spf.proveedor.example -all"
; --- DKIM: one selector per sender and per rotation; k=rsa p=<key ≥2048b>
2026q3._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; t=s; p=MIIBIjAN..."
; --- DMARC: final destination; np=reject is published from day 1
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; sp=reject; np=reject; adkim=s; aspf=s; rua=mailto:dmarc@example.com"
; --- Authorisation of the external report destination (RFC 9990 §4)
example.com._report._dmarc.proveedor.example. IN TXT "v=DMARC1"
; --- Transport
_mta-sts.example.com. IN TXT "v=STSv1; id=20260805T120000Z;" ; policy at https://mta-sts.example.com/.well-known/mta-sts.txt
_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"
_25._tcp.mx1.example.com. IN TLSA 3 1 1 <hash> ; only with DNSSEC
; --- Subdomain that does NOT send: empty SPF and reject DMARC
_dmarc.static.example.com. IN TXT "v=DMARC1; p=reject;"
static.example.com. IN TXT "v=spf1 -all"
- One subdomain per sending use case (
mkt., invoices., notif.), each with its own
SPF and its own DKIM. It isolates a provider's failure and allows an sp different from the root domain's.
- Every domain and subdomain that does not send email publishes
v=spf1 -all and a reject DMARC,
including parked domains, old campaign ones and defensive registrations.
- Strict alignment (
adkim=s; aspf=s) is the goal, not the starting point: the
relaxed one accepts the organisational subdomain and it is what allows a compromised
provider to sign as you. Tighten after closing the inventory.
np=reject from day one: no legitimate email comes from a subdomain that does not
exist. Zero cost, it covers impersonation through an invented subdomain.
- A selector per sender and per rotation (
2026q3._domainkey), never a shared selector:
rotating without a new selector implies a window in which in-transit signatures break.
4. Verification and gates
- The inventory is the deliverable, not the DNS record. It is built with
rua at p=none
until every sender in the aggregate report is identified and classified (legitimate
authenticated / legitimate unauthenticated / unknown / impersonator). Without that table closed,
moving up to quarantine cuts real mail.
- The ramp with DMARCbis is no longer by percentage (
pct is historic): you move up by publishing
p=quarantine with t=y — the receiver does not apply the policy but does report — and then
t=n. Careful: t has no effect when the policy is none.
- Automated gates (they break the build or open a ticket, in order of cost): (1)
dig +
an SPF/DKIM/DMARC/MTA-STS syntax validator over all the domains in the inventory,
daily; (2) SPF DNS query counter — the standard mandates permerror on exceeding
10 querying terms (include, a, mx, ptr, exists, redirect), and
recommends a maximum of 2 void lookups, so the alarm threshold is 8, not 10;
(3) DKIM key length and algorithm; (4) expiry of the MTA-STS policy certificate
and of the VMC; (5) a diff of the DNS record against the expected one (drift detection).
- Parse the aggregate reports with a tool, not by eye: they are compressed XML, one
per receiver per day (RFC 9990: feedback daily or more frequently). Without an aggregator there is
no rollout.
- Test the failure path, not just the happy one: send from an unauthorised source and
check that the receiver rejects it; deliberately break the MTA-STS policy in
testing and
check that the TLS-RPT report arrives.
- Audit the
ruf before publishing it: the failure report carries message content and
is personal data; many receivers do not send it and publishing it without a legal basis and without
minimisation is a privacy problem, not a security improvement.
5. Inbound defence, BEC and people
- Modern phishing rarely carries a malicious attachment. It carries a link to a credential
harvesting page or to an OAuth consent flow, or simply text
asking for an action. A programme that only measures blocked attachments is measuring the
easy part. The controls that do matter: URL rewriting and detonation at click
time (not only at delivery), attachment isolation, blocking by the file's real
type and not by extension, and a visible external-origin header in the client.
- Lookalike impersonation: DMARC protects your domain, it does not protect against
exarnple.com.
You need lookalike-domain monitoring and a quarantine rule for a display name that
imitates an internal executive when the From is external.
- BEC: no technical control stops it on its own. The fraud carries no malware and no link, and
frequently comes from a legitimate and compromised mailbox, so it passes SPF, DKIM and DMARC. The
only control that works is a process one: mandatory out-of-band verification —
a call to a number from the supplier master, never to the one in the email — for every onboarding or
bank account change and for every payment above a threshold, with dual
approval and no exception for urgency or hierarchy. The exception "the CEO is asking and it is
urgent" is the attack.
- Magnitude, with a primary source and its declared bias: the FBI IC3's Internet Crime Report 2025
records 24,768 BEC complaints and 3,046,598,558 USD in reported
losses, second by amount after investment fraud, against 32,320,105 USD in
ransomware. Methodology and limits, verbatim from the report: they are voluntary
complaints, mostly from the US, with possible duplicates, and the ransomware
figure "does not include estimates from lost business, time, wages, files, or equipment"
— which is why they cannot be compared as if they were the same type of data. What the data does
support: BEC moves money by direct transfer (the report itself puts
wire/ACH transfer at 86 % as the BEC route) and that is why its direct loss is
disproportionate to its case volume.
- Training and simulations: a simulation measures the reporting rate, which is the actionable
metric; the click rate only measures which lure you used. Rules: never lures involving salary,
dismissal, bonus or health; zero individual consequences for falling for it; aggregate results,
never a named ranking; and the declared objective is reducing the time to the first
report. A programme that punishes produces the worst possible outcome: people who fall for it and
do not tell anyone.
- The reporting mailbox is a first-order detection source — a "report" button in the
client, with acknowledgement and a response — because a user who reports detects campaigns the
filter let through. Here the channel and the response commitment are defined; the rule
written from that signal belongs to
detection-engineering-standards and the retroactive search
and purge of the same message across all mailboxes is incident containment.
6. Outbound, third parties and operability
- A live inventory of authorised senders, with a business owner, assigned subdomain,
authentication method and review date. **Onboarding a provider = an entry in the inventory
- a subdomain + its own DKIM**; if it does not fit in the SPF, it fits in a delegated subdomain.
- Chained SPF breaks by itself: every SaaS
include: drags in its own and the
budget of 10 lookups runs out without warning. Faced with the limit: flattening no (it breaks
when the provider changes IPs), delegating by subdomain yes, and prioritising DKIM, which
does not consume the DNS budget and survives forwarding.
- Requirements of the large mailbox providers (verified in Google's source): since
1-Feb-2024, every sender to Gmail needs SPF or DKIM, valid forward and reverse DNS (PTR),
a TLS connection, RFC 5322 format and a spam rate <0.3 %** in Postmaster Tools;
anyone sending **>5000 messages/day needs SPF and DKIM, DMARC (the policy may be
p=none), alignment of the From with SPF or DKIM and one-click unsubscribe plus a visible link.
Additional Google guidance: stay below 0.10 % and never reach 0.30 %.
- Lists and forwarding always break SPF, and DKIM when the intermediary modifies the message
(a prefixed subject, an added footer). Mitigation in order: do not modify the body, rewrite
the
From to a list domain (From rewriting), and ARC so the final receiver
can evaluate the previous authentication — remembering that ARC is Experimental and only helps
if the receiver trusts that sealer.
- Operability: alert on a drop in aggregate report volume (it indicates a broken record
or a badly published zone), on the appearance of an unknown sender with volume, on
a change to the MTA-STS policy and on TLS validation failures in TLS-RPT. Rehearse DKIM key
rotation before you need it.
7. Long-term sustainability and prohibitions
Quarterly review of the sender inventory and of the DNS record; DKIM key rotation
at least annually with a new selector; review of the status of the drafts (BIMI, DKIM2) every
cycle. Every record change versioned in the zone repository.
- ❌ Leaving DMARC at
p=none indefinitely. p=none protects against nothing: it is only the
measuring instrument. Without an agreed exit date, the project is dead and published.
- ❌
+all in SPF — it authorises the whole internet to send on your behalf. Equally vetoed are
?all in production and a second v=spf1 record on the same name (permerror).
- ❌ Publishing DKIM with a key <2048 bits. RFC 8301 requires ≥1024 and forbids
verifiers from treating a signature with less as valid; 1024 is the legal minimum, not the criteria.
- ❌
rsa-sha1: RFC 8301 explicitly forbids it for signing and for verifying.
- ❌ Adding a sending provider without inventorying it. It is the number one cause of a
DMARC rollout cutting legitimate mail months later.
- ❌ Flattening the SPF by expanding a third party's IPs to dodge the limit of 10.
It breaks silently the day the provider changes range.
- ❌ Measuring training by click rate and nothing else, publishing named rankings or
applying disciplinary consequences for falling for a simulation.
- ❌ Using salary, dismissal, bonus, health or family emergency lures in a simulation.
- ❌ Authorising a payment or bank account change with verification through the same email
thread, or with the phone number that appears in that email.
- ❌ Publishing
ruf with an external destination without a legal basis, without minimisation and without
_report._dmarc authorisation from the receiving domain.
- ❌ DANE without DNSSEC in your zone and in the MXs': without signing, validation adds nothing.
- ❌ Putting MTA-STS in
enforce without having gone through testing with TLS-RPT active, or
publishing a max_age of hours "just in case" — it nullifies the protection against the
downgrade attack.
- ❌ Treating BIMI as a security control: it is branding. And buying a VMC before being at
p=reject is money paid up front for work not done.
- ❌ Trusting
Authentication-Results headers or externally originated ARC seals without an explicit
list of trusted intermediaries: they are text anybody can write.
- ❌ Launching a simulated phishing campaign without written scope and authorisation
(see
offensive-security-standards) or without notifying the SOC (deconfliction).
8. Mandatory web verification
- Every RFC, one by one, at
rfc-editor.org, checking obsoleted-by and not just the
number: SPF 7208, DKIM 6376 (+8301, +8463), DMARC 9989/9990/9991 (which
obsolete 7489 and 9091 — almost all the literature still cites 7489), ARC 8617,
MTA-STS 8461, TLS-RPT 8460, DANE-SMTP 7672 (TLSA 6698), Auth-Results
8601, one-click unsubscribe 8058.
- BIMI status: it is still an individual Internet-Draft, not an RFC. Check the revision and
its expiry at
datatracker.ietf.org before citing it as a standard.
- Declared discrepancy: the BIMI draft rev. 14 (May 2026) normatively references
RFC 7489 and the
pct tag, which RFC 9989 (May 2026) declares historic. Until it is
updated, the condition "quarantine with pct=100" has no literal equivalent in DMARCbis;
interpret it as "quarantine without test mode (t=n)" and confirm with the receiver.
- DKIM2 work at the IETF (
dkim working group, draft-ietf-dkim-dkim2-* drafts): it is
work in progress, there is no RFC. Do not design against it yet.
- Requirements of the large mailbox providers, which change without notice: Google (verified),
Yahoo and Microsoft. Declared gap: it has not been possible to confirm against an accessible
primary source the threshold and the exact enforcement date of Microsoft's requirements for
high-volume senders to consumer domains (Microsoft's page does not serve content
without JavaScript). Verify before citing it; do not take a blog's figure on faith.
- Figures discarded for lack of public methodology: "90 % of cyberattacks
start with email", "95 % of breaches are human error", the average cost of a
breach and the detection rates of any secure email vendor. If the source is
a provider selling the control the figure justifies and it publishes neither method nor sample,
it is not used. Sources with a declared methodology: IC3/FBI (voluntary complaints, US
bias), ENISA, CISA, and the mailbox operators' reports on their own traffic.
- The status of the validators and aggregators being recommended (licence and maintenance) before
pinning a tool.
If the web contradicts this document, the web wins — flag the discrepancy.
1---2name: email-security-standards3description: Email as an attack surface and the DNS records that defend it. Use when publishing or auditing SPF (v=spf1, the 10 DNS-lookup limit, +all, chained include, ~all vs -all), DKIM selectors, key length and rotation (selector._domainkey, rsa-sha256, ed25519-sha256), DMARC (_dmarc TXT, p=none/quarantine/reject, sp, np, t, adkim/aspf alignment, rua/ruf, the DMARCbis tree walk and the removal of pct), aggregate and failure report parsing, ARC and mailing-list or forwarding breakage, Authentication-Results headers, MTA-STS (_mta-sts TXT and .well-known/mta-sts.txt), TLS-RPT (_smtp._tls), DANE TLSA for SMTP with DNSSEC, BIMI (default._bimi, VMC/CMC, Mark Verifying Authority), third-party sending providers and the inventory of who sends on your behalf, Gmail/Yahoo/Outlook bulk-sender requirements and one-click unsubscribe (List-Unsubscribe-Post), inbound filtering, attachment and URL isolation, business email compromise and out-of-band payment verification, phishing simulations, or the reported-phish mailbox.4---56# Email security standards78Criteria verified as of **August 2026**. Re-verify on the web before committing to anything (§8).910## 1. Scope and triggers1112Applies to **defending the email channel**: sender authentication (SPF, DKIM, DMARC) and its13full rollout up to a reject policy; the inventory of **who sends on your behalf**;14transport security (MTA-STS, TLS-RPT, DANE); brand indicators (BIMI); subdomain and15sending-provider policy; interpretation of aggregate and failure reports;16survival of email across lists and forwarding (ARC); inbound defence (filtering, isolation17of attachments and links, quarantine, external-origin *banners*); business email18compromise fraud (BEC) and its process control; training and simulations; and the reporting19mailbox as a signal source.2021Triggers: `v=spf1`, `_dmarc`, `v=DMARC1`, `p=none`/`p=quarantine`/`p=reject`, `sp=`, `np=`,22`t=y`, `rua=`/`ruf=`, `adkim`/`aspf`, `pct=`, `selector._domainkey`, `v=DKIM1; k=rsa; p=`,23`v=ARC1`, `Authentication-Results:`, `ARC-Seal`, `_mta-sts`, `.well-known/mta-sts.txt`,24`_smtp._tls`, `v=TLSRPTv1`, `_25._tcp` TLSA, `default._bimi`, `v=BIMI1`, VMC/CMC,25`List-Unsubscribe-Post: List-Unsubscribe=One-Click`, `550 5.7.26`, `dmarcian`/`parsedmarc`,26`opendkim`/`opendmarc`, `swaks`, "aggregate report", "alignment", "domain spoofing",27"phishing", "BEC", "CEO fraud", "bank account change", "phishing simulation".2829**Guiding principle**: email is the most used inbound channel against the people of an30organisation, and **it is the only one whose baseline defence depends on three DNS records that almost31nobody reviews**. Here the criteria are concrete and verifiable: either the record is published and32aligned, or it is not — you check it in 30 seconds with `dig`. Corollary: **DMARC is not a33DNS project, it is an inventory project**. 90 % of the real work of getting to34`p=reject` is discovering who sends on your behalf (billing, HR, the CRM, the print shop,35that plugin) and **the part that fails is not the technical one, it is that nobody had that list**.3637**Not applicable**: the **detection rule and its analytic content** (including turning a38reported email into a detection) belong to `detection-engineering-standards`, the **confirmed39incident, the containment that preserves evidence and mailbox forensics** belong to40`incident-response-forensics-standards`, and the **incident process** — severity, command,41communication, postmortem — belongs to `incident-management-standards`; here it ends the moment42there is confirmed compromise. **DNS zone operation** (delegation, DNSSEC, TTL,43registrar management) belongs to `dns-standards` — here we set **what the record must contain and44why** —, **identity and mailbox access** (MFA, conditional access, OAuth tokens,45session revocation, forwarding rules as an IoC of a compromised account) belong to46`identity-access-management-standards`, **cryptography and PKI** (key size, TLS,47certificate chains, S/MIME) to `cryptography-pki-standards`, **CVE triage** of the48mail product to `vulnerability-management-standards`, **the SOC's queue, shift and metrics**49to `soc-operations-standards`, and **the indicator, its expiry and intelligence50about brand impersonation** to `threat-intelligence-standards`.51Also: `mail-servers-standards` (**the server that implements these controls**: Postfix,52Exim, Dovecot, Rspamd, queues, storage and outbound IP reputation — **here the53policy and the content of the record, there the daemon that applies them**),54`offensive-security-standards` (**any simulated campaign requires written scope and55authorisation**; this skill is **defensive**), `privacy-engineering-standards`56(the mailbox and its headers are personal data: legal basis, minimisation and retention of the57simulations and of archiving), `grc-compliance-standards` (regulatory notification duty58and audit evidence), `networking-standards` and `firewall-policy-standards`59(outbound SMTP, egress and IP reputation), `observability-standards` (telemetry60platform), `itsm-itil-standards` (the ticket and the SLA), `macos-fleet-standards` and61`endpoint-security-standards` (the mail client and what happens62after the click), `ai-governance-standards` and `mlsecops-standards` (if the filter decides with a63model: governance, bias and evaluation).6465## 2. Default decisions6667> Verify on the web the status of every RFC and draft before pinning it in a project (§8).6869| Control | Verified standard | Default decision |70|---|---|---|71| SPF | **RFC 7208**, Proposed Standard (obsoletes RFC 4408; updated by 7372, 8553, 8616) | A single `v=spf1` record, ending in `-all`. `~all` only during rollout |72| DKIM | **RFC 6376**, Internet Standard (updated by 8301, 8463, 8553, 8616) | Always sign. `rsa-sha256` with **≥2048 bits**; `ed25519-sha256` (RFC 8463) as a dual signature, never alone |73| DMARC | **RFC 9989** (core) + **RFC 9990** (aggregate report) + **RFC 9991** (failure report), Proposed Standard, May 2026 — **they obsolete RFC 7489 and RFC 9091** | Destination `p=reject` with `rua` active. Explicit `sp` and `np` |74| ARC | **RFC 8617**, **Experimental** | Seal at your own intermediaries (lists, gateways); do **not** trust someone else's ARC without a trust list |75| Auth-Results | **RFC 8601**, Proposed Standard (obsoletes 7601) | The edge MTA writes the header and **deletes the forged ones** arriving from outside |76| MTA-STS | **RFC 8461**, Proposed Standard | `mode: enforce`, high `max_age` (maximum allowed 31,557,600 s). `testing` only as a prior step with TLS-RPT active |77| TLS-RPT | **RFC 8460**, Proposed Standard | Always, and **before** MTA-STS/DANE: it is the only way to see what you break |78| DANE SMTP | **RFC 7672** (TLSA: RFC 6698, upd. by 7218, 7671, 8749), Proposed Standard | Only if **your zone and the MXs' zones are signed with DNSSEC**; otherwise, MTA-STS |79| BIMI | **NOT an RFC**: `draft-brand-indicators-for-message-identification-14` (May 2026), *Individual Submission*, IESG state "I-D Exists" | Optional and **last**. Requires DMARC at `quarantine`/`reject`, an SVG logo and a **paid VMC/CMC** issued by an MVA |80| List unsubscribe | **RFC 8058**, Proposed Standard | `List-Unsubscribe` + `List-Unsubscribe-Post` in every commercial or subscribed email |8182**What changed with DMARCbis and has to be rewritten** (RFC 9989, verified in the IANA registry83of the document itself): `pct`, `rf` and `ri` move to **historic**; `np` is added (policy for84**non-existent** subdomains), `psd` (the domain is a public suffix) and **`t` (test85mode)**. The public suffix list (PSL) is replaced by the **DNS Tree Walk**: up to86**8 queries** ascending the tree (if the name has ≥8 labels, it jumps to the rightmost 7).87And the fact that corrects the usual belief: **DMARC is no longer Informational of the88independent stream — it is now Proposed Standard of the IETF stream.**8990## 3. Structure and conventions9192```dns93; --- SPF: only one, ≤10 terms with a DNS lookup, ending in -all94example.com. IN TXT "v=spf1 include:_spf.proveedor.example -all"95; --- DKIM: one selector per sender and per rotation; k=rsa p=<key ≥2048b>962026q3._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; t=s; p=MIIBIjAN..."97; --- DMARC: final destination; np=reject is published from day 198_dmarc.example.com. IN TXT "v=DMARC1; p=reject; sp=reject; np=reject; adkim=s; aspf=s; rua=mailto:dmarc@example.com"99; --- Authorisation of the external report destination (RFC 9990 §4)100example.com._report._dmarc.proveedor.example. IN TXT "v=DMARC1"101; --- Transport102_mta-sts.example.com. IN TXT "v=STSv1; id=20260805T120000Z;" ; policy at https://mta-sts.example.com/.well-known/mta-sts.txt103_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"104_25._tcp.mx1.example.com. IN TLSA 3 1 1 <hash> ; only with DNSSEC105; --- Subdomain that does NOT send: empty SPF and reject DMARC106_dmarc.static.example.com. IN TXT "v=DMARC1; p=reject;"107static.example.com. IN TXT "v=spf1 -all"108```109110- **One subdomain per sending use case** (`mkt.`, `invoices.`, `notif.`), each with its own111 SPF and its own DKIM. It isolates a provider's failure and allows an `sp` different from the root domain's.112- **Every domain and subdomain that does not send email publishes `v=spf1 -all` and a reject DMARC**,113 including *parked* domains, old campaign ones and defensive registrations.114- **Strict alignment (`adkim=s; aspf=s`) is the goal**, not the starting point: the115 relaxed one accepts the organisational subdomain and it is what allows a compromised116 provider to sign as you. Tighten **after** closing the inventory.117- **`np=reject` from day one**: no legitimate email comes from a subdomain that does not118 exist. Zero cost, it covers impersonation through an invented subdomain.119- **A selector per sender and per rotation** (`2026q3._domainkey`), never a shared selector:120 rotating without a new selector implies a window in which in-transit signatures break.121122## 4. Verification and gates123124- **The inventory is the deliverable, not the DNS record.** It is built with `rua` at `p=none`125 until **every sender in the aggregate report is identified and classified** (legitimate126 authenticated / legitimate unauthenticated / unknown / impersonator). Without that table closed,127 moving up to `quarantine` cuts real mail.128- **The ramp with DMARCbis is no longer by percentage** (`pct` is historic): you move up by publishing129 `p=quarantine` with **`t=y`** — the receiver does not apply the policy but does report — and then130 `t=n`. Careful: `t` **has no effect** when the policy is `none`.131- **Automated gates** (they break the build or open a ticket, in order of cost): (1) `dig` +132 an SPF/DKIM/DMARC/MTA-STS syntax validator over **all** the domains in the inventory,133 daily; (2) **SPF DNS query counter** — the standard mandates `permerror` on exceeding134 **10 querying terms** (`include`, `a`, `mx`, `ptr`, `exists`, `redirect`), and135 recommends a maximum of **2 *void lookups***, so the alarm threshold is 8, not 10;136 (3) DKIM key length and algorithm; (4) expiry of the MTA-STS policy certificate137 and of the VMC; (5) a *diff* of the DNS record against the expected one (drift detection).138- **Parse the aggregate reports with a tool, not by eye**: they are compressed XML, one139 per receiver per day (RFC 9990: feedback **daily or more frequently**). Without an aggregator there is140 no rollout.141- **Test the failure path, not just the happy one**: send from an unauthorised source and142 check that the receiver rejects it; deliberately break the MTA-STS policy in `testing` and143 check that the TLS-RPT report arrives.144- **Audit the `ruf`** before publishing it: the failure report carries message content and145 is **personal data**; many receivers do not send it and publishing it without a legal basis and without146 minimisation is a privacy problem, not a security improvement.147148## 5. Inbound defence, BEC and people149150- **Modern phishing rarely carries a malicious attachment.** It carries a link to a credential151 harvesting page or to an OAuth consent flow, or simply **text**152 asking for an action. A programme that only measures blocked attachments is measuring the153 easy part. The controls that do matter: URL rewriting and **detonation at click154 time** (not only at delivery), attachment isolation, blocking by the file's **real155 type** and not by extension, and a **visible external-origin header** in the client.156- **Lookalike impersonation**: DMARC protects **your** domain, it does not protect against `exarnple.com`.157 You need lookalike-domain monitoring and a quarantine rule for a *display name* that158 imitates an internal executive when the `From` is external.159- **BEC: no technical control stops it on its own.** The fraud carries no malware and no link, and160 frequently comes from a **legitimate and compromised** mailbox, so it passes SPF, DKIM and DMARC. The161 only control that works is a process one: **mandatory out-of-band verification** —162 a call to a number from the supplier master, never to the one in the email — for every onboarding or163 **bank account change** and for every payment above a threshold, with **dual164 approval** and no exception for urgency or hierarchy. The exception "the CEO is asking and it is165 urgent" **is** the attack.166- **Magnitude, with a primary source and its declared bias**: the FBI IC3's *Internet Crime Report 2025*167 records **24,768 BEC complaints and 3,046,598,558 USD** in reported168 losses, second by amount after investment fraud, against **32,320,105 USD** in169 *ransomware*. Methodology and limits, verbatim from the report: they are **voluntary170 complaints**, mostly from the US, with possible duplicates, and the *ransomware*171 figure **"does not include estimates from lost business, time, wages, files, or equipment"**172 — which is why they cannot be compared as if they were the same type of data. What the data does173 support: **BEC moves money by direct transfer** (the report itself puts174 wire/ACH transfer at 86 % as the BEC route) and that is why its direct loss is175 disproportionate to its case volume.176- **Training and simulations**: a simulation measures **the reporting rate**, which is the actionable177 metric; the click rate only measures which lure you used. Rules: never lures involving salary,178 dismissal, bonus or health; **zero individual consequences** for falling for it; aggregate results,179 never a named *ranking*; and the declared objective is **reducing the time to the first180 report**. A programme that punishes produces the worst possible outcome: people who fall for it and181 do not tell anyone.182- **The reporting mailbox is a first-order detection source** — a "report" button in the183 client, with acknowledgement and a response — because a user who reports detects campaigns the184 filter let through. Here the channel and the response commitment are defined; **the rule185 written from that signal belongs to `detection-engineering-standards`** and the retroactive search186 and purge of the same message across all mailboxes is incident containment.187188## 6. Outbound, third parties and operability189190- **A live inventory of authorised senders**, with a business owner, assigned subdomain,191 authentication method and review date. **Onboarding a provider = an entry in the inventory192 + a subdomain + its own DKIM**; if it does not fit in the SPF, it fits in a delegated subdomain.193- **Chained SPF breaks by itself**: every SaaS `include:` drags in its own and the194 budget of 10 lookups runs out without warning. Faced with the limit: flattening **no** (it breaks195 when the provider changes IPs), delegating by subdomain **yes**, and prioritising **DKIM**, which196 does not consume the DNS budget and survives forwarding.197- **Requirements of the large mailbox providers** (verified in Google's source): since198 **1-Feb-2024**, every sender to Gmail needs **SPF or DKIM**, valid forward and reverse DNS (PTR),199 a **TLS** connection, RFC 5322 format and a **spam rate <0.3 %** in Postmaster Tools;200 anyone sending **>5000 messages/day** needs **SPF and DKIM**, **DMARC** (the policy may be201 `p=none`), **alignment** of the `From` with SPF or DKIM and **one-click unsubscribe** plus a visible link.202 Additional Google guidance: stay **below 0.10 %** and never reach 0.30 %.203- **Lists and forwarding always break SPF, and DKIM when the intermediary modifies the message**204 (a prefixed subject, an added footer). Mitigation in order: do not modify the body, rewrite205 the `From` to a list domain (`From` rewriting), and **ARC** so the final receiver206 can evaluate the previous authentication — remembering that ARC is **Experimental** and only helps207 if the receiver trusts that sealer.208- **Operability**: alert on **a drop in aggregate report volume** (it indicates a broken record209 or a badly published zone), on the appearance of an unknown sender with volume, on210 a change to the MTA-STS policy and on TLS validation failures in TLS-RPT. Rehearse DKIM key211 rotation before you need it.212213## 7. Long-term sustainability and prohibitions214215Quarterly review of the sender inventory and of the DNS record; DKIM key rotation216at least annually with a new selector; review of the status of the drafts (BIMI, DKIM2) every217cycle. Every record change versioned in the zone repository.218219- ❌ **Leaving DMARC at `p=none` indefinitely.** `p=none` protects against nothing: it is only the220 measuring instrument. Without an agreed exit date, the project is dead and published.221- ❌ **`+all` in SPF** — it authorises the whole internet to send on your behalf. Equally vetoed are222 `?all` in production and a second `v=spf1` record on the same name (`permerror`).223- ❌ Publishing **DKIM with a key <2048 bits**. RFC 8301 requires ≥1024 and **forbids**224 verifiers from treating a signature with less as valid; 1024 is the legal minimum, not the criteria.225- ❌ **`rsa-sha1`**: RFC 8301 explicitly forbids it for signing and for verifying.226- ❌ **Adding a sending provider without inventorying it.** It is the number one cause of a227 DMARC rollout cutting legitimate mail months later.228- ❌ **Flattening the SPF** by expanding a third party's IPs to dodge the limit of 10.229 It breaks silently the day the provider changes range.230- ❌ Measuring training by **click rate** and nothing else, publishing named *rankings* or231 applying disciplinary consequences for falling for a simulation.232- ❌ Using **salary, dismissal, bonus, health or family emergency** lures in a simulation.233- ❌ Authorising a **payment or bank account change** with verification through the same email234 thread, or with the phone number that appears in that email.235- ❌ Publishing `ruf` with an external destination **without a legal basis, without minimisation and without236 `_report._dmarc` authorisation** from the receiving domain.237- ❌ **DANE without DNSSEC** in your zone and in the MXs': without signing, validation adds nothing.238- ❌ Putting **MTA-STS in `enforce` without having gone through `testing` with TLS-RPT active**, or239 publishing a `max_age` of hours "just in case" — it nullifies the protection against the240 downgrade attack.241- ❌ Treating **BIMI as a security control**: it is branding. And buying a VMC before being at242 `p=reject` is money paid up front for work not done.243- ❌ Trusting `Authentication-Results` headers or **externally originated ARC** seals without an explicit244 list of trusted intermediaries: they are text anybody can write.245- ❌ Launching a **simulated phishing campaign without written scope and authorisation**246 (see `offensive-security-standards`) or without notifying the SOC (*deconfliction*).247248## 8. Mandatory web verification2492501. **Every RFC, one by one, at `rfc-editor.org`**, checking `obsoleted-by` and not just the251 number: SPF **7208**, DKIM **6376** (+8301, +8463), DMARC **9989/9990/9991** (which252 **obsolete 7489 and 9091** — almost all the literature still cites 7489), ARC **8617**,253 MTA-STS **8461**, TLS-RPT **8460**, DANE-SMTP **7672** (TLSA **6698**), Auth-Results254 **8601**, one-click unsubscribe **8058**.2552. **BIMI status**: it is still an individual *Internet-Draft*, not an RFC. Check the revision and256 its expiry at `datatracker.ietf.org` before citing it as a standard.2573. **Declared discrepancy**: the BIMI draft rev. 14 (May 2026) normatively references258 **RFC 7489 and the `pct` tag**, which **RFC 9989 (May 2026) declares historic**. Until it is259 updated, the condition "quarantine with `pct=100`" has no literal equivalent in DMARCbis;260 interpret it as "quarantine without test mode (`t=n`)" and **confirm with the receiver**.2614. **DKIM2 work at the IETF** (`dkim` working group, `draft-ietf-dkim-dkim2-*` drafts): it is262 work in progress, **there is no RFC**. Do not design against it yet.2635. **Requirements of the large mailbox providers**, which change without notice: Google (verified),264 Yahoo and Microsoft. **Declared gap**: it has not been possible to confirm against an accessible265 primary source the threshold and the exact enforcement date of Microsoft's requirements for266 high-volume senders to consumer domains (Microsoft's page does not serve content267 without JavaScript). **Verify before citing it**; do not take a blog's figure on faith.2686. **Figures discarded for lack of public methodology**: "90 % of cyberattacks269 start with email", "95 % of breaches are human error", the average cost of a270 breach and the detection rates of any secure email vendor. If the source is271 a provider selling the control the figure justifies and it publishes neither method nor sample,272 **it is not used**. Sources with a declared methodology: IC3/FBI (voluntary complaints, US273 bias), ENISA, CISA, and the mailbox operators' reports on their own traffic.2747. The status of the validators and aggregators being recommended (licence and maintenance) before275 pinning a tool.276277If the web contradicts this document, **the web wins** — flag the discrepancy.