Email Fundamentals Module 4

Module 4: Authentication and Sender Identity — Email Security Support Training
Layer 1 — Foundation

Module 4: Authentication and Sender Identity

Audience: New-hire Support Engineers / L1 (required); L2/L3 (must be able to independently explain why a specific message passed or failed, including forwarding and mailing-list edge cases)
Prerequisites: Modules 1–3 — this module assumes you're already comfortable with the envelope-vs-visible-header distinction (Module 1.4) and with reading DNS records (Module 3)
Estimated time: 4–4.5 hours self-paced reading, worked examples, and lab exercises
Reference materials: RFC 7208 (SPF), RFC 6376 (DKIM), RFC 7489 (DMARC), RFC 8617 (ARC)

Learning Objectives

By the end of this module, you will be able to:

  1. Explain SPF evaluation mechanics — mechanisms, qualifiers, includes, redirects, the 10-lookup limit — and explain what "SPF alignment" means as something separate from a plain SPF pass or fail.
  2. Explain DKIM signing and verification mechanics, including selectors, canonicalization, and why an intermediary can break a valid signature without the message ever being altered maliciously.
  3. Explain DMARC as a policy layer built on top of SPF and DKIM alignment, including percentage rollout (pct=) and report types.
  4. Correctly identify and distinguish Header From, envelope From (Return-Path), Sender, Reply-To, and Received headers inside a real message.
  5. Explain why forwarding and mailing lists routinely break SPF and/or DKIM through no fault of the original sender, and what ARC and SRS each do about it.
  6. Recognize display-name spoofing, lookalike-domain spoofing, and true domain spoofing as three distinct techniques that produce three distinct authentication signatures.
  7. Given a message's authentication results, determine and articulate why it passed or failed — not just report that it did.

Key Terminology

SPF
Sender Policy Framework — a DNS-published list of IP addresses/hosts authorized to send as a domain, checked against the envelope sender (MAIL FROM), never the visible From address directly.
DKIM
DomainKeys Identified Mail — a cryptographic signature added by the sending system, verifiable against a public key published in DNS, proving the signed content wasn't altered since signing and originated from a holder of the private key.
DMARC
A policy layer requiring SPF or DKIM to both pass and align with the visible Header From domain, and telling receivers what to do (none/quarantine/reject) when that fails.
Alignment
Whether the domain validated by SPF or DKIM matches the visible Header From domain — exactly, under strict alignment, or as the same organizational domain, under relaxed alignment. Distinct from, and in addition to, a plain SPF/DKIM pass.
Return-Path
A header added by the receiving system recording the envelope sender (MAIL FROM). This is what SPF actually validates.
Sender header
An optional header indicating a message was sent on behalf of the Header From address by a different authenticated party — common with delegate-send scenarios and some mailing lists.
SRS (Sender Rewriting Scheme)
A forwarder-side technique that rewrites the envelope sender to the forwarder's own domain, preserving SPF validity for the forwarding hop even though the original sender's SPF record wouldn't authorize the forwarder's IP.
ARC (Authenticated Received Chain)
Lets an intermediary cryptographically attest to the authentication results it personally observed before forwarding, so a downstream receiver can consider those original results even when its own direct check would fail.
Alignment mode (adkim/aspf)
DMARC's s (strict — exact domain match required) or r (relaxed — same organizational domain suffices) settings, controlling how strictly alignment is judged.

Lesson

By now you can trace a message through the delivery chain (Module 1) and read the DNS records that route mail and describe a domain (Module 3). This module answers the question nearly every one of those messages eventually raises, directly or indirectly: is this message actually from who it claims to be — and when a security product tells you it is, or isn't, what exactly did it check?

Authentication is not one check. It is three layered checks — SPF, DKIM, and DMARC — and each one answers a narrower question than most customers, and more than a few new engineers, assume it does. Each layer can produce a result that looks contradictory until you know precisely what it validated and what it didn't. Get comfortable with that three-layer structure before anything else in this module, because the module's central point — the three distinct spoofing techniques in 4.6 — depends entirely on knowing exactly what each layer proves and, just as important, what it does not prove.

4.1 SPF Mechanics in Depth

SPF answers exactly one question: is this envelope-sender IP authorized to send for this envelope-sender domain? It checks the MAIL FROM domain — or the EHLO domain as a fallback, when MAIL FROM is empty, which happens for bounce messages — and it checks only that domain. It never looks at the visible Header From by itself. Hold onto that fact; it is the reason SPF passing tells you nothing, on its own, about whether the visible From address a recipient sees is legitimate. Tying an authentication result to the visible From address is DMARC's job, covered in 4.3, not SPF's.

SPF evaluation flow from envelope domain to final result
SPF evaluates the mechanisms in a record strictly left to right and stops at the first match — a record's ordering is not cosmetic, it's the evaluation order.

The mechanisms available, and the order in which a record lists them, are:

  • ip4: / ip6: — a literal IP address or CIDR range.
  • a — matches if the sending IP resolves to the domain's own A/AAAA record.
  • mx — matches if the sending IP is one of the domain's own MX hosts.
  • include: — pulls in another domain's SPF record and evaluates its result as a subroutine. Critically, this does not stop evaluation of the outer record if it doesn't match — it's a subroutine call, not a full handoff.
  • redirect= — fully hands off evaluation to another domain's record. Unlike include:, this replaces the rest of the current record rather than supplementing it.
  • exists: — a macro-based existence check, rare in practice.

Each mechanism can carry a qualifier prefix that determines what happens on a match:

Qualifier Result Practical meaning
(none — implicit +) Pass Explicitly authorized
- Fail (hard fail) Explicitly not authorized — receivers are expected to treat this as a strong signal
~ SoftFail Treat with suspicion, but don't hard-reject on this alone. This is the most common outcome during rollout, and it is also one of the most frequently misunderstood results by customers — many expect a SoftFail to behave exactly like a hard Fail, and it deliberately doesn't
? Neutral No assertion either way — functionally similar to having no SPF record at all for that mechanism

The all mechanism always appears last in a well-formed record and sets the default outcome for anything not matched by an earlier mechanism: -all (recommended once a domain's sending sources are fully inventoried), ~all (common during rollout or testing, while the domain owner is still discovering all of its legitimate senders), or +all (passes everything — this effectively disables SPF as a control, and is almost never the correct configuration for a production domain).

The 10-lookup limitRFC 7208 §4.6.4 caps SPF evaluation at 10 DNS lookups total. Every include, a, mx, ptr, exists, and redirect counts toward that ceiling — and critically, the count is cumulative across the entire evaluation, not reset per include:. If an included record itself contains further include:s, those count too. Exceeding the limit produces a PermError, and per RFC 7208 a PermError should be treated by the evaluator as not a pass — in practice, many receiving systems treat a PermError similarly to a fail for filtering purposes. This is an extremely common real-world failure mode on domains that have accumulated many vendor include:s over the years — a marketing platform, a CRM, a ticketing system, a security product, and others — without ever pruning the stale ones. Several individually valid, individually modest SPF records can still collectively blow the budget.

Worked Example: Evaluating an SPF Record by Hand

Suppose vendor.example.com publishes this SPF record:

v=spf1 ip4:203.0.113.10 include:spf.mailprovider.example -all

Now walk two different sending IPs through evaluation exactly as a receiving system would, left to right, stopping at the first match:

  • Sending IP 203.0.113.10. The first mechanism, ip4:203.0.113.10, matches immediately. There is no explicit qualifier on it, which means the implicit qualifier + applies. Result: Pass. Evaluation stops here — the include: and -all are never even consulted for this IP.
  • Sending IP 198.51.100.44, which happens to be one of spf.mailprovider.example's authorized hosts. The first mechanism doesn't match (it's not 203.0.113.10). The second mechanism, include:spf.mailprovider.example, triggers a DNS lookup (mechanism-lookup count: 1) to fetch that domain's own SPF record, and evaluates that record's mechanisms against the IP. It matches inside the included record. Result: Pass — but note the result was determined by a completely different domain's record than the one you started with, which is exactly the kind of detail worth stating explicitly when you explain a result to a customer.
  • Sending IP 192.0.2.99, which is on neither list. Neither the ip4: mechanism nor the include: mechanism matches, so evaluation falls through to the final mechanism, -all. Result: Fail (hard fail) — the domain's own publisher explicitly stated that any IP not covered above is not authorized to send as this domain.

Notice what this exercise does not tell you: it says nothing about whether the visible Header From matches vendor.example.com at all. That question belongs to alignment, not to SPF evaluation itself — keep reading.

4.2 DKIM Mechanics in Depth

DKIM answers a fundamentally different question than SPF: was this specific content signed by a party holding the private key for the domain named in the signature, and has that signed content been altered since signing? Unlike SPF, DKIM has nothing at all to do with the sending IP address — a message can be DKIM-signed and relayed through any number of intermediate systems, and the signature remains checkable regardless of which IP finally delivers it, provided the signed content survives intact.

Every DKIM-signed message carries a DKIM-Signature: header, and being able to read its parameters at sight is a core skill for this module:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com;
  s=selector1; h=from:to:subject:date; bh=<body-hash>; b=<signature>
  • d= — the signing domain. This is the domain DMARC alignment checks the signature against, so it matters just as much as the domain SPF validates.
  • s= — the selector, used to locate the public key in DNS at selector._domainkey.domain (Module 3.6 covers reading this record).
  • h= — the list of headers that were actually included in the signature computation.
  • c= — the canonicalization mode for headers/body, either simple or relaxed. relaxed tolerates minor whitespace and formatting changes without breaking the signature; simple does not, and is far more brittle in the face of ordinary mail-system handling.
  • bh= — the body hash, computed at signing time.
The nuance that separates a surface-level read from real understandingAny header not listed in h= can be modified after signing without invalidating the signature. This is subtle enough that a quick read of DKIM won't catch it, and it carries genuine security relevance: if, for example, Subject is not present in h=, it could in principle be altered after signing without breaking DKIM at all. When you're asked to reason about what DKIM actually protects on a given message, check h= before assuming every visible header was covered — it's the single best test of whether you actually understand DKIM, versus just knowing that it exists.
DKIM signing at origin, DNS public-key lookup, and verification outcomes at the receiver
The receiver never talks to the sender directly — it recomputes the hash itself and compares. Any change to signed content after signing, benign or malicious, produces the same mismatch.

Why an intermediary can break DKIM without any malicious intent whatsoever: any system that modifies the message body, or a header listed in h=, after the original signature was applied — a mailing list appending a footer, a legacy gateway inserting a disclaimer, in some implementations even URL/link rewriting if it changes body content after the original DKIM signature was applied — invalidates that specific signature. This is expected, ordinary behavior, not a defect and not evidence of tampering by a hostile party. It is, in fact, the single most common cause of "legitimate DKIM failure" tickets you'll encounter, and you should treat it as expected, benign behavior by default rather than as a red flag — while still following the process in Module 12 to confirm which hop actually caused it. It's also precisely the gap that ARC (4.5) exists to address.

Worked Example: Watching a Signature Break

Picture a clean, properly DKIM-signed message leaving its origin server. At signing time, the signer computes bh= as a hash of the exact body content — call it, for illustration, a value like bh=X7f.... That hash is baked into the DKIM-Signature: header and travels with the message.

Now suppose an intermediate system — a mailing list expander, say — appends a single line to the bottom of the body: "You are receiving this because you subscribed to...". Nothing else about the message changes. No malicious intent is involved anywhere in this chain.

When the final receiver verifies the signature, it recomputes the body hash from the message as it actually arrived — footer included — and gets a different value, say bh=Q2k.... That no longer matches the bh= value baked into the signature at origin. The comparison fails. DKIM reports fail, full stop, with no distinction in the protocol between "an attacker tampered with this" and "a mailing list added one disclosure line." That distinction is something only you, as the investigating engineer, can supply — by identifying the intermediary hop and confirming what it changed (Module 5 covers exactly how to do that from headers). The lesson to take away: a DKIM fail by itself never tells you whether the change was hostile. It only tells you that something changed after signing.

4.3 DMARC — the Alignment Layer

DMARC does not perform any cryptographic checking or IP-based checking of its own. It is a policy wrapper sitting on top of SPF and DKIM, and it requires:

(SPF passes AND is aligned to Header From) OR (DKIM passes AND is aligned to Header From)

"Aligned" means the domain validated by SPF (the envelope/Return-Path domain) or by DKIM (the d= domain) matches the visible Header From domain — exactly, under strict alignment (s), or as the same organizational/registrable domain, under relaxed alignment (r, DMARC's default when unspecified).

DMARC alignment as an overlap between the SPF-validated domain, the DKIM-validated domain, and the Header From domain
DMARC does not ask "did SPF or DKIM pass" in isolation — it asks whether the domain that passed is the same domain the recipient actually sees. A pass with no overlap into the Header From ellipse is not aligned, and does not satisfy DMARC.

This is the reason SPF or DKIM can each individually "pass" while DMARC still fails — the passing mechanism validated a domain that is real and legitimate, but simply different from the one the recipient sees in their inbox. This gap is precisely what malicious spoofing tries to exploit: an attacker's own domain passes their own SPF/DKIM completely legitimately, while their visible Header From impersonates a victim brand the attacker doesn't control at all. You'll see this pattern formally as Example B in 4.7, and it is worth previewing now: authentication passing is not the same claim as "this message is safe," and the gap between those two claims is alignment.

Worked mini-example — why DMARC can fail even when SPF passes: a mailing list forwards a message. The list rewrites the envelope sender to its own domain (standard practice, for bounce handling) and that new envelope sender legitimately passes SPF — for the list's domain. But the visible Header From still shows the original sender's domain. SPF "passed," but for a domain other than the one the recipient sees, so SPF alignment fails. If DKIM also broke in transit (as in the worked example in 4.2), DMARC fails entirely — even though nothing about this chain was malicious.

A number customers routinely misreadpct= interacts with p= in a way that trips people up constantly: p=reject; pct=50 means roughly half of failing mail is subject to the reject action — it does not mean 50% of all mail sent by the domain, and it provides no guarantee about which specific messages are affected. pct= exists so a domain owner can roll a stricter policy out gradually rather than flipping every failing message to full enforcement at once.

4.4 Full Header Field Reference

A single message carries several fields that all sound like "who sent this," and customers — and more than a few new engineers — use them interchangeably. They are not interchangeable. Each one is set by a different party, represents a different fact, and is authenticated (or not) by a different mechanism. Treat this table as a reference you come back to, not something to memorize in one pass:

Header Set by What it represents Authenticated by
Header From: The message content itself What the recipient's client displays as the sender Nothing directly — DMARC alignment is what ties an authentication result to this field
Envelope From (MAIL FROM) The SMTP transaction The actual routing/bounce-handling address SPF
Return-Path: Added by the receiving MTA, recording the envelope sender A record, inside the delivered message, of what the envelope sender was Reflects SPF's input; not independently authenticated on its own
Sender: Message content, optional "Sent on behalf of" — used when the authenticated sending party differs from the Header From (an assistant sending for an executive, some list software) Nothing directly
Reply-To: Message content, optional Where replies should go — can legitimately differ from From, and is a common social-engineering lever (a spoofed From paired with an attacker-controlled Reply-To) Nothing
Received: Each MTA hop, prepended, newest at top A chain of custody: who received the message from whom, when, over what protocol/TLS state Not cryptographically authenticated, but internally self-consistent and forgeable only by a party actually in the delivery path — fabricated Received: lines are possible but usually detectable by inconsistency (Module 5)

The field that deserves the most suspicion when a customer reports "this looks like phishing but our filter passed it" is almost always Reply-To:. It is entirely unauthenticated, entirely attacker-controlled, and it is exactly where a reply from a fooled recipient will actually go — regardless of what the Header From shows, and regardless of what SPF, DKIM, or DMARC concluded. Get in the habit of checking it independently on every impersonation-flavored ticket.

4.5 Forwarding, Mailing Lists, SRS, and ARC

Forwarding — whether it's a user's own mailbox auto-forwarding, or a customer's downstream relay — resends a message from a new envelope sender (commonly the forwarding system's own address, or sometimes the original one, depending on implementation) while typically preserving the original Header From untouched. This routinely breaks SPF alignment, because the forwarding server's IP simply isn't listed in the original domain's SPF record — even though DKIM, if it survives unmodified in transit, can still pass and align. That's precisely why DMARC's "SPF-or-DKIM" design exists in the first place: forwarding is one of its primary, intended, real-world accommodations, not an edge case it forgot to handle.

This is worth connecting directly back to Module 2's deployment-architecture content: hybrid environments and forwarding-heavy environments will generate a disproportionate share of "legitimate DMARC failure" tickets. Expect that pattern going in, rather than defaulting to treating every DMARC failure as suspicious the moment you see it. Forwarding should be your default first hypothesis for an unexplained DMARC failure, checked and ruled in or out before you escalate it as a security concern.

Three forwarding scenarios: no fix, SRS, and ARC, and their effect on SPF and alignment Plain forwarding, no fix
SRS fixes SPF at the forwarding hop but not alignment to the original Header From. ARC solves a different problem — preserving trust in what an earlier hop actually observed.

SRS (Sender Rewriting Scheme) is a forwarder-side fix: the forwarder rewrites the envelope sender to an address at its own domain, encoding the original address inside it for correct bounce routing, so that its own SPF record — not the original sender's — governs the forwarding hop. This restores SPF-passing at the forwarding hop, but it does nothing at all for alignment to the original Header From domain. In an SRS scenario, DKIM remains the mechanism DMARC actually has to rely on for a pass, since SPF's alignment is unrecoverable through SRS alone.

ARC (Authenticated Received Chain, RFC 8617) solves a genuinely different problem. It lets a trusted intermediary — a mailing list, a corporate relay — cryptographically attest, in effect, "here is exactly what I personally observed for SPF, DKIM, and DMARC when I received this message." A downstream receiver can choose to trust that attestation even though its own direct SPF/DKIM check on the final hop would fail, because it understands that the intermediary's own forwarding legitimately broke those signals in a way that has nothing to do with the message's authenticity. ARC does not replace DMARC evaluation on its own — it supplements it, as an additional trust signal a receiving system may use in its own policy decision. When you describe ARC to a customer, present it as something that may help sophisticated receivers correctly handle known-legitimate forwarding — not as a guarantee that a receiving system will honor it, since ARC support and trust policy both vary by receiver.

Keep these two straightSRS and ARC are not the same fix for the same problem, even though they both show up in forwarding discussions. SRS rewrites the envelope address so SPF can pass at one specific hop. ARC preserves and cryptographically vouches for what an earlier hop already observed, so a later hop has more information to work with. A message can use either, both, or neither.

4.6 Display-Name Spoofing, Lookalike Domains, and True Domain Spoofing

Customers routinely lump all three of these together as "spoofing." You cannot afford to — they are three distinct techniques that produce three distinct authentication signatures, and conflating them is exactly how an engineer ends up giving a customer a dangerously wrong explanation.

Technique What actually happens SPF / DKIM / DMARC signature
Display-name spoofing The visible display name (e.g., "Jane Smith, CEO") is set to impersonate a trusted person, while the actual email address underneath is entirely unrelated — often a free-mail or throwaway domain SPF, DKIM, and DMARC can all pass legitimately, because they're validating the attacker's own domain — which the attacker controls and has configured correctly. Authentication passing here says nothing at all about the display-name deception; it has to be caught by other means (content/impersonation analysis, or simply training users to check the actual address, not the name)
Lookalike / homoglyph domain The domain itself is a close visual variant of the real one — exarnple.com, example-corp.com, or exampIe.com using a capital I in place of a lowercase l Also typically passes SPF/DKIM/DMARC legitimately for the lookalike domain — cryptographically, the message really is "correctly" from that domain. The deception is entirely in the domain's visual similarity to the real one, not in any authentication failure
True domain spoofing The attacker attempts to send as the real victim domain itself, without controlling it This is precisely what SPF/DKIM/DMARC are designed to catch. A correctly configured victim domain publishing p=reject should cause a compliant receiving system to reject or quarantine this outright
The critical teaching point of this entire moduleAn engineer who says "authentication passed, so this isn't spoofing" is wrong for the first two categories above — and those two are also the two most common real-world impersonation techniques, precisely because they don't trip authentication at all. Authentication results are necessary evidence for ruling impersonation in or out, but they are not sufficient evidence on their own. Module 9 (BEC and executive impersonation) builds the full investigative treatment on top of this exact point — but the point itself belongs here, because it is fundamentally an authentication-mechanics fact, not an investigative technique.

4.7 Worked Pass/Fail Examples

Before you read the three examples below, try predicting them yourself. Given only "a mailing list forwarded a legitimate message and appended a footer" — what would you expect SPF, DKIM, and DMARC to each report, and would you call this message safe or suspicious? Hold that prediction in mind, then check it against Example A.

Example A — Legitimate forwarding: DMARC fails, but the message is not malicious

Header From: billing@vendor.example.com. Envelope From, after a user's mailbox auto-forwarded the message: user@customer.example.com.

  • SPF is evaluated against customer.example.com — the forwarding hop's envelope — and passes for that domain. But it does not align to the Header From domain (vendor.example.com). SPF alignment fails.
  • DKIM is broken because the forwarding step appended a disclaimer footer, altering bh= exactly as walked through in the 4.2 worked example. DKIM fails.
  • DMARC fails overall — neither mechanism aligned or passed cleanly. But this is explainable, benign forwarding, not an attack. The correct next step is to confirm the forwarding hop in the headers (Module 5) before treating this as suspicious at all.

Example B — Display-name spoofing: every authentication check passes

Header From: "Nicholas — CFO" <n.finance882@freemailhost.example>. Envelope From: n.finance882@freemailhost.example — the same domain.

  • SPF passes for freemailhost.example — correctly, because the attacker's own domain is properly configured.
  • DKIM passes for freemailhost.example, and aligns, because it's the same domain as the Header From.
  • DMARC passes — because the Header From domain (freemailhost.example) is exactly what was validated. There is no alignment gap here at all.

The conclusion you must reach: authentication passing here is completely real and accurate — but it is irrelevant to the actual deception, which is the display name "Nicholas — CFO," not the domain. This message has to be evaluated on impersonation and content grounds, never on authentication grounds alone. If you find yourself about to write "authentication passed, so this is safe" as a closing note on a ticket like this, stop — that is precisely the wrong conclusion this example exists to prevent.

Example C — True spoofing, correctly blocked

Header From: payroll@customer.example.com — the victim's own real domain. Envelope From: an unrelated, attacker-controlled domain.

  • SPF fails — the attacker's sending IP is not authorized for either domain in any way that aligns.
  • DKIM fails or is absent entirely — the attacker cannot produce a valid signature for customer.example.com without possessing its private key.
  • DMARC fails, and if customer.example.com publishes p=reject, a compliant receiver rejects or quarantines this message. The authentication stack functioned exactly as designed here.

Laid side by side, the three examples make the point of this whole module concrete — the same three-letter verdicts (Pass/Fail) mean entirely different things depending on which domain was validated and whether it aligns with what the recipient actually sees:

Example A — legitimate forwarding Example B — display-name spoofing Example C — true spoofing
Header From vendor.example.com freemailhost.example (display name forged) customer.example.com (victim's real domain)
Envelope From customer.example.com (forwarder) freemailhost.example (same as Header From) unrelated attacker domain
SPF Pass (not aligned) Pass (aligned) Fail
DKIM Fail (footer broke bh=) Pass (aligned) Fail / absent
DMARC Fail Pass Fail
Correct conclusion Benign — confirm forwarding hop Malicious — impersonation, not an authentication failure Malicious — correctly caught by authentication

Notice that Example B is the one with the cleanest, most reassuring-looking authentication result of all three — full pass, straight down the line — and it is also the only genuinely malicious message on this table. That is not a coincidence; it's the whole reason this module spends as much time on alignment and spoofing technique as it does on evaluation mechanics.

Hands-On Lab

Lab 4.1 — Authentication Result Determination

You'll be given eight sanitized message header sets — a mix of legitimate forwarding failures, display-name spoofing with a full authentication pass, true spoofing correctly blocked, and normal clean mail. For each one:

  1. State the SPF result and which domain it was evaluated against.
  2. State the DKIM result and the d= domain.
  3. State the DMARC result and which alignment (SPF, DKIM, both, or neither) it relied on.
  4. Conclude whether the message is (a) legitimate and technically explainable, (b) requires further impersonation-based investigation despite authentication passing, or (c) correctly identified as spoofing by the authentication stack.

Deliverable: a completed findings worksheet for all eight messages, reviewed against the answer key.

Scenario-Based Exercise

Scenario: A customer's DMARC aggregate report shows an external IP sending mail that fails DMARC while claiming their domain in the Header From. The customer asks, "does this mean we've been hacked?"

Task: Draft the customer-facing explanation distinguishing "someone attempted to spoof your domain externally" — which is what a DMARC failure report actually shows — from "your domain or systems were compromised," which is a different claim requiring different evidence entirely. Identify what additional evidence, if any, would actually be needed to assess compromise rather than an external spoofing attempt. Write your answer as you would send it to the customer directly, in plain language, tying it back to 4.3 and 4.6.

Knowledge Check

Answer each question yourself before expanding it.

1. What exactly does SPF validate — the envelope sender or the visible From address?
The envelope sender (MAIL FROM), not the visible Header From — this is the module's foundational point, carried forward directly from Module 1.4's envelope-vs-header distinction.
2. A message shows SPF: pass and DKIM: pass, but DMARC: fail. How is this possible?
SPF and DKIM each validated a domain, but neither validated domain was aligned — matching, per the record's alignment mode — with the visible Header From domain. For example, a forwarding scenario where SPF passed for the forwarder's domain and DKIM passed for a different signing domain, with neither one matching Header From.
3. Why does appending a disclaimer footer to a message body break DKIM, even when nothing malicious occurred?
DKIM's bh= value is a hash of the message body computed at signing time. Any change to the body — even a benign disclaimer appended by an intermediary — produces a different hash on verification, which no longer matches bh=, invalidating the signature regardless of intent.
4. What problem does SRS solve, and what problem does it not solve?
SRS restores SPF-passing at a forwarding hop by rewriting the envelope sender to the forwarder's own domain. It does not restore alignment to the original Header From domain, and it does nothing for DKIM — a separately broken DKIM signature is completely unaffected by SRS.
5. A message has full SPF, DKIM, and DMARC pass. Does this rule out display-name spoofing? Why or why not?
No. Full authentication pass only confirms that the technical sending domain matches what was validated. It does not evaluate whether the display name is impersonating a different, trusted identity — that's a content/presentation-layer deception, not an authentication-layer one. This is exactly Example B in 4.7.
6. What is the difference between strict (s) and relaxed (r) DMARC alignment?
Strict alignment requires the validated domain to exactly match the Header From domain. Relaxed alignment — DMARC's default when unspecified — accepts any subdomain match within the same organizational (registrable) domain.
7. Why can include: mechanisms in an SPF record cause a PermError even if every individual included domain's record is valid on its own?
Each include: triggers its own DNS lookup to retrieve the included record — and if that included record itself contains further include:s, those also count toward the total. The 10-lookup ceiling is cumulative across the entire evaluation, not reset per include, so several individually valid, individually modest records can still collectively exceed the limit.

Common Misconceptions

"SPF checks the From address the user sees."
It checks the envelope sender only — never the visible Header From directly. See 4.1.
"If DMARC fails, the message is malicious."
Legitimate forwarding and mailing lists routinely and benignly fail DMARC (Example A, 4.7). This must be investigated before it's assumed to be an attack, not treated as proof of one.
"If authentication passes, the message is safe."
Directly contradicted by Example B in 4.7 — display-name and lookalike-domain spoofing routinely pass all three checks perfectly. This is the single most consequential misconception this module exists to correct.
"SRS and ARC do the same thing."
SRS is an envelope-rewriting fix at the forwarding hop, aimed specifically at SPF. ARC is a cryptographic attestation of originally observed authentication results, addressing a broader and genuinely different problem. See 4.5.

Key Takeaways

  • Push yourself past the top-line verdict every time. If you can only report that a message "passed" or "failed" DMARC without being able to explain why — which mechanism, which alignment, which domain — you haven't actually internalized this module yet. Go back and re-work 4.3 and 4.7 before moving on.
  • Never let "authentication passed, so this is safe" be your closing statement on an impersonation-flavored ticket without separately addressing display-name and lookalike-domain risk. Treat that sentence as a hard stop-and-check for yourself — it is one of the highest-risk incorrect conclusions you can reach in this job, precisely because it sounds authoritative.
  • Expect legitimate DMARC failures by default in hybrid and forwarding-heavy environments (tie this back to Module 2's architecture patterns). Make forwarding your first hypothesis for an unexplained DMARC failure, and rule it in or out before treating the ticket as a security escalation.
  • Periodically test your own grasp of DKIM's h= header list against a real signature. It's the detail most likely to expose whether you actually understand DKIM or have only memorized that it exists.

Have more questions?

Contact us

Was this article helpful?
0 out of 0 found this helpful

Provide feedback for the Documentation team!

Browse this section