ARC (Authenticated Received Chain) Explained: RFC 8617, ARC-Seal, AMS, AAR, Chain Validation, and the Forwarding Survival Story
The complete reference for ARC (Authenticated Received Chain, RFC 8617): the email-authentication standard that preserves SPF / DKIM / DMARC results across forwarding hops. Covers the three ARC headers (ARC-Authentication-Results, ARC-Message-Signature, ARC-Seal), the chain-validation algorithm with cv= states, receiver support across Google Workspace, Microsoft 365, Yahoo, Fastmail, and major mailing-list platforms, the trust model that gates local-policy override, and worked multi-hop examples. The standard that makes DMARC at p=reject operationally feasible without silently dropping legitimate mailing-list mail.
This reference is provided in English. ARC is specified in English-language RFCs and the canonical syntax (ARC-Seal:, ARC-Message-Signature:, ARC-Authentication-Results:, cv=pass, i=N, c=relaxed/relaxed, AAR, AMS, AS) does not translate. We keep the body in the source language so technical terms remain consistent with the specifications.
TL;DR
- ARC (Authenticated Received Chain) is the email-authentication standard that preserves the original SPF / DKIM / DMARC results across forwarding hops. Defined in RFC 8617.
- The problem ARC solves: forwarding (mailing lists, .forward redirects, security gateways) typically rewrites the envelope MAIL FROM and may modify headers — both of which break SPF and DKIM at the downstream receiver. Without ARC, DMARC enforcement would reject legitimate forwarded mail.
- ARC is the only email-authentication
standard with NO DNS record — the
protocol consists entirely of three per-
message header fields plus a chain-validation
algorithm at the receiver. The signing key
IS published in DNS (DKIM-style at
<selector>._domainkey.<domain>), but no_arc.<domain>record exists. - The three ARC headers:
AAR
(
ARC-Authentication-Results) — snapshot of the receiving hop's verdict, AMS (ARC-Message-Signature) — DKIM-style signature over the message as it leaves this hop, AS (ARC-Seal) — DKIM-style signature over AAR + AMS + every prior ARC-Seal, cryptographically chaining the hops. - The chain-validation state
lives in the
cv=tag of the most recent ARC-Seal:cv=pass(every hop validated cleanly),cv=fail(at least one hop broke), orcv=none(this is the first hop). Onlycv=passchains are usable for local-policy override. - ARC is added by forwarders, not by sending domains. As a domain owner publishing SPF + DKIM + DMARC, you do NOT configure ARC on your domain. You only configure ARC when you OPERATE a forwarder (mailing list, security gateway, transactional relay).
- Receiver support is broad:
Google (Gmail / Workspace) since 2017,
Microsoft (Outlook / Office 365) since 2021,
Yahoo, Fastmail, and many smaller providers.
ARC has reached the deployment threshold
where DMARC at
p=rejectis operationally feasible without silently dropping legitimate mailing-list mail. - DMARC Analyzer's
includes/EmailHeaderParser.phprecognises every Authentication-Results family header (includingARC-Authentication-Results) so operators can inspect a forwarded message's chain via the Email Header Analyzer.
1. What is ARC?
ARC (Authenticated Received Chain)
is an email-authentication protocol defined in
RFC 8617
that preserves the original SPF / DKIM / DMARC
authentication results across forwarding hops.
When a message is forwarded — by a mailing list,
a .forward redirect, a security
gateway, or any other intermediate handler —
the forwarder adds three header fields that
cryptographically attest to the authentication
state the forwarder observed at its hop. A
downstream receiver validates the chain and
may grant local-policy override based on a
trusted upstream pass, even when SPF and DKIM
break at the current hop.
ARC is unique in the email-authentication ecosystem in three ways:
- No DNS record at the protected domain. Every other standard (SPF / DKIM / DMARC / BIMI / MTA-STS / TLS-RPT / CAA) requires a DNS record at a well-known location. ARC requires only per-message headers; the signing key is published as a DKIM-style record under the forwarder's own domain, not the protected sender's.
- Added by intermediaries, not senders. The original sender never adds ARC headers. ARC is the responsibility of every party in the FORWARDING path. The sender's job ends with SPF + DKIM + DMARC; the forwarder's job begins with adding ARC.
- Cumulative across hops. Unlike DKIM (one signature, anchored to the sender) or SPF (one evaluation per hop with no history), ARC builds a CHAIN — every hop appends a new ARC-Seal that cryptographically commits to every prior hop's verdict, so the chain itself cannot be silently rewritten by a malicious intermediate.
ARC's place in the email-authentication
ecosystem is auxiliary but operationally
critical: without ARC, DMARC enforcement at
p=quarantine or p=reject
would silently break every mailing list,
every .forward redirect, and
every security-gateway pipeline. ARC is the
standard that makes DMARC enforcement
coexistent with the realities of how email
actually flows.
2. Why ARC exists: the forwarding problem
A message that traverses a forwarder typically breaks two of the three core authentication-trio results:
- SPF breaks because the
forwarder typically rewrites the envelope
MAIL FROM. A message originally sent from
alice@university.examplevia MAIL FROMalice@university.examplearriving atlist@mailman.examplegets forwarded out with MAIL FROMbounces@mailman.example. The downstream receiver's SPF check evaluates the new envelope (mailman.example) — the original university.example SPF record is no longer relevant. - DKIM may break if the
forwarder modifies headers or body. A
mailing list adding a
List-Idheader, prepending[list-name]to the Subject, or appending an unsubscribe footer all invalidate the original DKIM signature. Strict canonicalization (c=simple/simple) breaks on any whitespace change; relaxed (c=relaxed/relaxed) tolerates more but still breaks on body modification. - DMARC fails because DMARC
requires at least one of SPF or DKIM to
pass AND align with the From: header. With
SPF on the new envelope and DKIM broken,
DMARC at the receiver returns fail —
triggering the policy
(
p=quarantine→ spam folder,p=reject→ SMTP bounce).
Pre-ARC, three workarounds existed:
- From: rewriting. The
forwarder replaces the From: header with
its own domain
(
From: alice via list <list@mailman.example>). DMARC now evaluates againstmailman.examplewhich the forwarder controls. But From: rewriting breaks user trust signals (the recipient sees the forwarder, not the original sender) and breaks reply-by-name in many mail clients. - DMARC at
p=noneforever. The domain owner never advances past reporting-only, leaving spoofing wide open in exchange for forwarding survival. Operationally unacceptable for security-conscious senders. - Special-case allowlisting. Downstream receivers maintain manual lists of trusted forwarders and skip DMARC evaluation for those entities. Doesn't scale and is brittle.
ARC is the standardised fourth option: the forwarder cryptographically attests to the authentication state IT observed, the downstream receiver validates the chain, and legitimate forwarded mail flows even under strict DMARC enforcement at the original sender.
3. How ARC works: the chain mechanism
- The original sender publishes SPF + DKIM + DMARC and sends the message normally. The sender does NOT add any ARC headers.
- The first forwarder
receives the message and validates SPF /
DKIM / DMARC normally. The forwarder then
adds three new headers stamped with
i=1:ARC-Authentication-Results: i=1; ...— captures the forwarder's verdict (the same content the forwarder would put in itsAuthentication-Resultsheader per RFC 8601).ARC-Message-Signature: i=1; ...— DKIM-style signature over the message headers and body as the forwarder passes them on, anchored to the forwarder's DKIM key.ARC-Seal: i=1; cv=none; ...— DKIM-style signature over the AAR + AMS at this hop. Thecv=noneindicates this is the first hop and no prior chain exists.
- The second forwarder
(if any) receives the message including the
first hop's ARC headers. It validates the
existing chain (the prior ARC-Seal +
ARC-Message-Signature), adds its own three
headers stamped with
i=2, and thecv=tag in its ARC-Seal becomescv=passif the prior chain validated cleanly, orcv=failif it did not. The ARC-Seal ati=2signs over ALL prior ARC headers (i=1 AAR + i=1 AMS + i=1 AS) PLUS the new AAR + AMS ati=2. - Each subsequent forwarder (
i=3,i=4, ...) repeats step 3, building an ever-longer chain. RFC 8617 §4.2.1 caps the chain at 50 hops; practical chains rarely exceed 3. - The final receiver
validates the entire chain by starting at
the highest
i=value and walking backwards. Each ARC-Seal must validate against its signer's DKIM key; the most recent ARC-Message-Signature must validate against the message as received (older ones usually stop matching after a later modification, and that does not invalidate the chain). If every link in the chain validates AND every priorcv=waspassornone, the chain has integrity. The receiver may then apply a local policy granting delivery override based on the trusted upstream DMARC pass.
The crucial property: an intermediate forwarder that wanted to lie about an earlier hop's verdict cannot — the prior ARC-Seal is cryptographically bound to its own AAR + AMS content. Any tampering with prior hops breaks the chain at validation time. The chain is only as trustworthy as its signers, but the chain itself cannot be silently rewritten.
4. The three ARC headers
The keystone reference for this page. Every ARC-aware forwarder adds exactly three header fields per hop.
| Header | Role | Signed by | Content |
|---|---|---|---|
ARC-Authentication-Results(AAR) |
Snapshot of the receiving party's SPF / DKIM / DMARC verdict at this hop. | Plain header — NOT a signed cryptographic field on its own. Protected indirectly via the AS (ARC-Seal) signature. | The same content the receiver would
put in a normal
Authentication-Results:
header per
RFC 8601,
prefixed with the hop instance
identifier (i=N). |
ARC-Message-Signature(AMS) |
DKIM-style signature over the message headers and body as they leave this hop. | The hop's DKIM key
(d= + s=
tags identify the domain + selector;
the key is published as a
DKIM-style TXT record at
<selector>._domainkey.<domain>). |
Tags identical to DKIM-Signature:
i=N,
a=rsa-sha256,
b=<sig>,
bh=<body-hash>,
c=relaxed/relaxed,
d=<domain>,
s=<selector>,
h=<header-list>. |
ARC-Seal(AS) |
DKIM-style signature over the AAR + AMS at this hop PLUS every prior ARC-Seal. The cryptographic chain-binding mechanism. | The hop's DKIM key (same as AMS, typically the same selector). | Tags: i=N (hop number),
cv=pass|fail|none
(chain validation result observed
by THIS hop),
a=rsa-sha256,
b=<sig>,
d=, s=,
t=<timestamp>.
NO bh= tag — Seal does
not sign body, only header chain. |
The three headers together form one ARC-Set per hop. RFC 8617 §4 defines the exact serialisation. A 3-hop chain has 9 ARC headers (3 sets × 3 fields).
5. ARC chain validation — the cv= states
The chain-validation state lives in the
cv= tag of each ARC-Seal. Three
values are defined by RFC 8617 §4.4:
cv=none— This is the first hop in the chain (i=1). No prior chain exists, nothing to validate.cv=noneonly appears ati=1; any non-first ARC-Seal withcv=noneis malformed and treated ascv=fail.cv=pass— The sealer validated the chain it found on the message: the structure is correct, the most recent ARC-Message-Signature matches the message, every ARC-Seal validated cleanly against its signer's DKIM key, AND the prior chain's owncv=was eitherpass(intermediate hops) ornone(first hop). The chain has integrity fromi=1through the current hop.cv=fail— Validation of the chain found on the message failed. Oncecv=failappears in the chain, it cannot be continued or repaired (RFC 8617 §5.1.3): a sealer that finds the most recent seal atcv=failadds no further ARC Set. Receivers MUST treat a message with such a chain like a message with no ARC at all, socv=failnever supports a local policy override.
The validation algorithm at the final receiver (RFC 8617 §5.2):
- Locate the most recent ARC-Seal (highest
i=value). - If
cv=fail, abort. The chain is unusable. - Check the structure: every ARC Set holds exactly
one AAR, one AMS and one AS, and the
i=values run fromi=1upwards without gaps or repeats. Then validate the most recent ARC-Message-Signature against the message as received; older AMS signatures are optional and their failure does not invalidate the chain. Any failure → mark chain as fail. - For each ARC-Seal from highest
i=down toi=1: validate the AS signature against the signer's DKIM key. Any failure → mark chain as fail. - If every link validated, the chain has integrity. The receiver MAY apply a local policy that grants delivery override based on the trusted upstream DMARC pass recorded in the AAR at the appropriate hop.
Note: ARC chain validation alone does NOT deliver the message. It produces a verdict that the receiver MAY use, weighted against the trust the receiver places in the signers of the chain. A cryptographically-clean chain signed only by untrusted intermediaries is not a delivery green light.
6. A worked multi-hop chain example
Scenario: alice@university.example
posts to list@discuss.mailman.example,
which fans out to subscribers including
bob@gmail.com. The path is
sender → mailman forwarder → Gmail receiver.
At the Gmail receiver, the message headers relevant to ARC look approximately like this (whitespace folding omitted for clarity):
Authentication-Results: mx.google.com;
dkim=fail header.d=university.example
spf=fail (sender IP is 198.51.100.5) smtp.mailfrom=bounces@mailman.example
dmarc=fail header.from=university.example;
arc=pass (i=1 spf=pass dkim=pass dmarc=pass)
ARC-Seal: i=2; a=rsa-sha256; cv=pass; d=google.com; s=arc-20160816;
t=1715900000; b=<base64-signature-2>
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed;
d=google.com; s=arc-20160816; t=1715900000;
h=From:To:Subject:Date:Message-ID:List-Id;
bh=<body-hash-as-gmail-received-it>;
b=<base64-signature-2>
ARC-Authentication-Results: i=2; mx.google.com;
dkim=fail header.d=university.example
spf=fail smtp.mailfrom=bounces@mailman.example
dmarc=fail header.from=university.example
ARC-Seal: i=1; a=rsa-sha256; cv=none; d=mailman.example; s=arc1;
t=1715899000; b=<base64-signature-1>
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed;
d=mailman.example; s=arc1; t=1715899000;
h=From:To:Subject:Date:Message-ID;
bh=<body-hash-as-mailman-sent-it>;
b=<base64-signature-1>
ARC-Authentication-Results: i=1; mailman.example;
dkim=pass header.d=university.example
spf=pass smtp.mailfrom=alice@university.example
dmarc=pass header.from=university.example
DKIM-Signature: ... d=university.example ... (BROKEN — body modified by mailman)
From: Alice <alice@university.example>
List-Id: <discuss.mailman.example>
Subject: [discuss] Re: meeting notes
Walking through the chain at Gmail:
- Current-hop verdict
(top Authentication-Results):
dkim=fail,spf=fail,dmarc=fail. Without ARC, Gmail would reject under DMARCp=reject. - Chain walk from highest
i=downward:- ARC-Seal i=2 (Gmail's own seal):
cv=pass— Gmail asserts the prior chain validated. Gmail's signature on the i=2 Seal + AMS validates against Gmail's own DKIM key. - ARC-Seal i=1 (mailman's seal):
cv=none— first hop, no prior chain. Mailman's signature validates againstarc1._domainkey.mailman.example. - ARC-Message-Signature i=1 (mailman): covers the message as mailman sent it out, with the List-Id header and the Subject prefix already added, which is why Gmail can validate it although the original DKIM signature is broken.
- ARC-Authentication-Results i=1
(mailman): records
spf=pass,dkim=pass,dmarc=passat university.example.
- ARC-Seal i=2 (Gmail's own seal):
- Chain verdict:
arc=pass. The university's original DMARC pass is cryptographically attested by mailman, attested in turn by the chain integrity through Gmail's own validation. - Local policy at Gmail: because mailman.example is a trusted ARC signer and the chain validated, Gmail's policy may override the current-hop DMARC fail and deliver the message to bob's inbox.
7. ARC trust model: who you trust to sign and why
ARC chain validation produces a cryptographically-
sound chain, but cryptographic soundness alone
is not sufficient for local policy override.
The receiver must also trust the signers of
the chain. A bad-actor forwarder that signs an
ARC chain claiming spf=pass dmarc=pass
for a message they fabricated would produce a
valid chain — but the receiver should not
trust that chain.
The trust model rests on three pillars:
- Signer reputation. Receivers maintain implicit or explicit reputation signals for ARC signers. Established mailbox providers (Google, Microsoft, Yahoo, Fastmail) carry high reputation; unknown one-off signers carry low. A chain signed only by low-reputation signers is rarely sufficient for local-policy override.
- Chain coverage. The
receiver evaluates which hop in the chain
originally observed the DMARC pass. A
chain where the FIRST hop is a high-
reputation signer that observed
dmarc=passagainst the original sender's record is the strongest signal. A chain where the first hop is unknown and only later hops are trusted is weaker — the trusted signers have no first-hand observation of the original DMARC state. - Consistency with declared
forwarder identity. The
d=in the ARC-Seal should match the receiving entity's identity at that hop (e.g.d=mailman.examplefor a message that traversed mailman.example). Mismatchedd=values are a chain-integrity signal worth flagging.
Practical implication for receivers: ARC is one input to a local policy, not a delivery decision on its own. Most operators implement ARC override only when the chain is signed by a known high-reputation forwarder AND the upstream verdict in the AAR shows a DMARC pass.
8. Receiver support and the local-policy-override expectation
- Google (Gmail / Workspace)
— implemented ARC validation on inbound
mail in 2017 and outbound signing on
every forwarded message. Gmail's
Authentication-Results header includes an
arc=field summarising the chain. Operators inspecting forwarded mailing-list mail in their Gmail account see the chain state in the message's "Show original" view. - Microsoft (Outlook.com /
Office 365) — implemented ARC
validation on inbound mail in 2021 and
outbound signing on Office 365 transport-
rules forwarding. Microsoft's
Authentication-Results header similarly
carries an
arc=field. The "Trusted ARC sealers" feature in Defender for Office 365 lets administrators explicitly allowlist ARC signers whose chains should be honoured for local- policy override. - Yahoo (Verizon Media) — ARC signing on outbound forwarded mail since shortly after the RFC was finalised.
- Fastmail, Zoho, ProtonMail — ARC support has been added to most major IMAP-based providers in the years since RFC 8617 was published.
- Mailing-list software — Mailman 3 supports ARC natively; Mailman 2.x deployments typically lack ARC and rely on From: rewriting for DMARC survival instead. Sympa, GNU Mailman 3, mlmmj, and most commercial mailing-list platforms added ARC over 2019-2023.
- Security gateways (Proofpoint, Mimecast, Barracuda) — most added ARC support over 2020-2023 so gateway-relayed mail can survive downstream DMARC enforcement.
Deployment threshold: receiver support is now
broad enough that DMARC at
p=reject on a sending domain is
operationally feasible without ARC-aware
forwarders silently dropping legitimate
mailing-list mail. Specific exceptions remain
(legacy Mailman 2.x deployments, smaller
corporate gateways) but they no longer
block enforcement strategy at scale.
9. Ten best practices
- If you SEND mail, do not configure ARC on your domain. ARC is added by forwarders, not senders. Your job ends with SPF + DKIM + DMARC properly configured. RFC 8617 §5.1.4 lets any mail handler seal, but a seal from the original sender tells receivers nothing.
- If you FORWARD mail (mailing list, security gateway, relay), implement ARC signing. Without it, your forwarded mail will be rejected by downstream receivers enforcing DMARC on the original sender's domain.
- Use a dedicated ARC selector
separate from your DKIM selector. Convention:
arc1._domainkey.<domain>for the ARC signing key. This keeps key rotation independent and lets you publish an explicit "ARC signer" identity. - Use RSA-2048 minimum for ARC keys (the same RFC 8301 guidance as for DKIM: signers MUST use at least 1024 bits and SHOULD use 2048). RSA-1024 ARC keys produce chains that receivers progressively downgrade.
- Always sign with
c=relaxed/relaxedcanonicalization. Simple canonicalization on body content breaks on any whitespace change downstream. - Cover the full standard header
set in the AMS
h=tag: From, To, Subject, Date, Message-ID, Reply-To, Cc, and any List-* headers. Missing headers leave attack surface for downstream modification. - Validate inbound ARC before you
forward. If you forward a message
with an existing ARC chain that fails
validation, your outgoing ARC-Seal MUST
carry
cv=fail. Don't paper over upstream chain breakage. - Monitor your outbound ARC chains for receiver acceptance. Google Postmaster and similar feedback channels surface receiver-side ARC validation outcomes — anomalies indicate a signing misconfiguration.
- Rotate ARC keys on the same schedule as DKIM — at least annually for high-value forwarding infrastructure. Use dual-key publication during rotation.
- Document your ARC trust decisions. If you operate a receiver applying ARC-based local-policy override, keep an auditable list of which signers are trusted and why. Trust decisions accumulate silently and become invisible legacy without explicit documentation.
10. Nine common mistakes
- Configuring ARC on a SENDING domain. ARC is added by forwarders. Senders do not need ARC; senders need SPF + DKIM + DMARC. A seal added by the sender does not violate RFC 8617 (§5.1.4 lets any mail handler seal), but it fixes nothing and replaces none of the three.
- Using
c=simple/simplecanonicalization on AMS. Simple body canonicalization breaks on any whitespace change. Usec=relaxed/relaxed. - Missing the AS Seal entirely. A forwarder that adds AAR + AMS but no AS produces an incomplete ARC-Set. Receivers discard incomplete sets.
- Out-of-order
i=numbering. Hops must be numbered consecutively starting fromi=1. Gaps (i=1, i=3) or duplicates (i=1, i=1) break chain validation. - Including a
bh=tag in the ARC-Seal. AS signs only the header chain, not the body — there is no body hash on AS. Some early implementations got this wrong. - Forwarding a
cv=failchain with acv=passseal. If the chain you received fails validation, your seal MUST carrycv=failand cover only your own ARC Set (RFC 8617 §5.1.2). Lying about chain integrity is the canonical ARC violation; receivers detect it immediately on validation. - Sharing the ARC selector with
DKIM. Same key works
cryptographically but mixes operational
concerns. Use
arc1._domainkey.<domain>for ARC,<dkim-selector>._domainkey.<domain>for DKIM. - Relying on ARC to fix a broken DMARC deployment. ARC handles the forwarding edge case; it does NOT fix misaligned SaaS senders or missing DKIM. The sending domain must still publish working SPF + DKIM + DMARC; ARC is the chain-preservation layer on top.
- Assuming every receiver honours
ARC. Receiver support is broad
but not universal. Smaller corporate
gateways may still ignore ARC entirely
and apply DMARC at
p=rejectto forwarded mail. From: rewriting remains an option for mailing lists that cannot rely on universal ARC support.
11. Troubleshooting
- "My mailing-list mail is being
rejected by Gmail / Microsoft".
Inspect the rejection bounce — if it
mentions DMARC, the cause is almost
certainly that the forwarder is not
ARC-signing AND the sending domain is at
p=reject. Fix: upgrade the forwarder (Mailman 3+, Sympa with ARC plugin) or enable From: rewriting as a fallback. - "My ARC chain shows
cv=failat receivers". Run your forwarder's outbound mail through the email header analyzer and inspect the AS validation. Common causes: key mismatch (the published DKIM-style record at the ARC selector does not match the private key used to sign), missing prior-Seal coverage in the AS header list, body modification between AMS computation and message dispatch. - "The receiver reports
arc=noneon my forwarded mail". The forwarder is not adding ARC headers at all. Check your forwarding software's ARC configuration — some platforms require explicit per-domain enablement (Mailman 3, Postfix with milter, OpenARC). - "My ARC signature validates but the receiver still rejects". Cryptographic chain validation is one input; signer reputation is the other. Receivers may decline local-policy override for low-reputation signers even on a clean chain. Build delivery reputation via Google Postmaster / Microsoft SNDS / Outlook smart-network.
- "Where do I publish the ARC
public key?" Same place as a
DKIM key: as a TXT record at
<arc-selector>._domainkey.<your-forwarder-domain>. ARC reuses the DKIM key-publication mechanism — there is no separate ARC DNS record format. - "My
Authentication-Results shows
arc=passbut DMARC still fails — what now?" ARC pass does not auto-override DMARC fail; it is an INPUT to the receiver's local policy. Whether the receiver applies override is their decision. Most do for trusted forwarders. - "Where can I debug a multi-hop chain end-to-end?" Use the Email Header Analyzer in DMARC Analyzer and paste the full message headers. The analyser surfaces every Authentication-Results-family header including the ARC chain so you can walk each hop.
12. Frequently asked questions
- What is ARC in email authentication?
- ARC (Authenticated Received Chain, RFC 8617) is an email-authentication standard that preserves the original SPF / DKIM / DMARC results across forwarding hops. The forwarder cryptographically attests to the original results in three per-message headers (ARC-Authentication-Results, ARC-Message-Signature, ARC-Seal), letting a downstream receiver grant local-policy override based on the trusted chain.
- Why does email forwarding break SPF and DMARC?
-
Forwarding typically rewrites the envelope
MAIL FROM (breaking SPF) and may modify
headers or body (breaking DKIM). With both
SPF and DKIM failing, DMARC at
p=quarantineorp=rejectrejects the forwarded message — even though it is legitimate. ARC solves this by letting the forwarder vouch for the original authentication state. - What are the three ARC headers?
-
ARC-Authentication-Results(AAR) captures the receiving party's SPF / DKIM / DMARC verdict at this hop.ARC-Message-Signature(AMS) is a DKIM-style signature over the message headers and body as they leave this hop.ARC-Seal(AS) is a DKIM-style signature over the AAR + AMS + every prior ARC-Seal, cryptographically chaining the hops. - How does ARC chain validation work?
-
A receiver checks the structure of the chain and
validates the most recent ARC-Message-Signature
(highest
i=) against the message as received, then every ARC-Seal, from the most recent back to the first, against its signer's key. Thecv=tag of a seal records the result:pass(chain has integrity),fail(at least one link broke), ornone(this is the first hop). - Does ARC replace DMARC?
- No — ARC complements DMARC by handling the forwarding edge case. DMARC remains the policy + alignment standard the original domain owner publishes; ARC is the chain-preservation mechanism that lets DMARC enforcement coexist with legitimate forwarding.
- Which mailbox providers support ARC?
- Google (Gmail, Workspace) since 2017, Microsoft (Outlook, Office 365) since 2021, Yahoo, Fastmail, Zoho, and most commercial mailing-list platforms (Mailman 3, Sympa) and security gateways (Proofpoint, Mimecast, Barracuda) added ARC support between 2019 and 2023.
- Do I need to configure ARC on my domain?
- No — only if you OPERATE a forwarder. As a sending domain owner publishing SPF + DKIM + DMARC, you do not configure ARC. ARC is added by the entities that FORWARD your mail (mailing lists, security gateways, transactional relays).
- What is the difference between ARC and DKIM?
- Both use DKIM-style signatures, but DKIM signs ONCE at the original sender, while ARC signs at EVERY forwarding hop. DKIM does not survive header / body modification; ARC explicitly tracks modifications across the chain. They use the same cryptographic primitives (RSA-2048 or Ed25519 with relaxed canonicalization) but solve different problems.
Inspect an ARC chain now
DMARC Analyzer's
includes/EmailHeaderParser.php
recognises every Authentication-Results
family header including
ARC-Authentication-Results,
ARC-Message-Signature, and
ARC-Seal. Paste any forwarded
message's raw headers into the
Email Header
Analyzer and walk the chain hop-by-hop —
every AAR shows the receiving entity's
verdict, every AMS / AS records the signer
and selector, and the chain validation state
surfaces in the top-level Authentication-
Results.