RFC 7001

Message Header Field for Indicating Message Authentication Status

๐Ÿ“… published September 2013, from ietf

Message Header Field for Indicating Message Authentication Status ๐Ÿ’Œโœจ

  • RFC 7001 ๐ŸŽ€ Request for Comments: 7001
  • Author: M. Kucherawy ๐Ÿซถ
  • Category: Standards Track ๐Ÿ”ฅ
  • Date: September 2013 ๐ŸŒธ
  • Obsoletes: 5451, 6577 ๐Ÿ’€
  • ISSN: 2070-1721 ๐Ÿฆ‹
  • Publisher: Internet Engineering Task Force (IETF) ๐Ÿ‘‘

Abstract ๐ŸŒˆ

okay so this doc defines a header field called Authentication-Results for email messages. it's where you stash the results of message authentication checks, so the info is right there in the message ๐Ÿ’… any receiver-side software, like mail filters or Mail User Agents (MUAs), can read it and show it to people in a handy way, or use it to make sorting and filtering choices. it's giving organized inbox energy ๐Ÿงš

Status of This Memo ๐Ÿ“

this is an Internet Standards Track document ๐Ÿ”ฅ

it's a product of the Internet Engineering Task Force (IETF). it reflects the consensus of the IETF community, got public review, and was approved for publication by the Internet Engineering Steering Group (IESG). if you want more on Internet Standards, check Section 2 of RFC 5741 ๐Ÿ“š

for info about the current status of this doc, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc7001 ๐Ÿฆ‹

Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved. ๐Ÿ’œ

this doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the date of publication. please read these carefully, because they explain your rights and restrictions for this doc ๐Ÿ™ˆ any Code Components pulled out of this doc have to include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, as described in the Simplified BSD License โญ

Table of Contents ๐Ÿ“–

1. Introduction ....................................................3
   1.1. Purpose ....................................................4
   1.2. Trust Boundary .............................................5
   1.3. Processing Scope ...........................................6
   1.4. Requirements ...............................................6
   1.5. Definitions ................................................6
        1.5.1. Key Words ...........................................6
        1.5.2. Security ............................................6
        1.5.3. Email Architecture ..................................7
        1.5.4. Other Terms .........................................8
   1.6. Trust Environment ..........................................8
2. Definition and Format of the Header Field .......................9
   2.1. General Description ........................................9
   2.2. Formal Definition ..........................................9
   2.3. The "policy" ptype ........................................12
   2.4. Authentication Identifier Field ...........................13
   2.5. Version Tokens ............................................14
   2.6. Defined Methods and Result Values .........................14
        2.6.1. DKIM and DomainKeys ................................14
        2.6.2. SPF and Sender ID ..................................15
        2.6.3. "iprev" ............................................17
        2.6.4. SMTP AUTH ..........................................17
        2.6.5. Other Registered Codes .............................18
        2.6.6. Extension Methods ..................................18
        2.6.7. Extension Result Codes .............................19
3. The "iprev" Authentication Method ..............................19
4. Adding the Header Field to a Message ...........................20
   4.1. Header Field Position and Interpretation ..................22
   4.2. Local Policy Enforcement ..................................23
5. Removing Existing Header Fields ................................23
6. IANA Considerations ............................................24
   6.1. The Authentication-Results Header Field ...................25
   6.2. "Email Authentication Methods" Registry ...................25
   6.3. "Email Authentication Result Names" Registry ..............26
7. Security Considerations ........................................26
   7.1. Forged Header Fields ......................................26
   7.2. Misleading Results ........................................28
   7.3. Header Field Position .....................................28
   7.4. Reverse IP Query Denial-of-Service Attacks ................28
   7.5. Mitigation of Backscatter .................................29
   7.6. Internal MTA Lists ........................................29
   7.7. Attacks against Authentication Methods ....................29
   7.8. Intentionally Malformed Header Fields .....................29
   7.9. Compromised Internal Hosts ................................29
   7.10. Encapsulated Instances ...................................30
   7.11. Reverse Mapping ..........................................30

8. References .....................................................30
   8.1. Normative References ......................................30
   8.2. Informative References ....................................31
Appendix A.  Acknowledgements .....................................33
Appendix B.  Legacy MUAs ..........................................33
Appendix C.  Authentication-Results Examples ......................33
  C.1.  Trivial Case; Header Field Not Present ....................34
  C.2.  Nearly Trivial Case; Service Provided, but No
        Authentication Done .......................................34
  C.3.  Service Provided, Authentication Done .....................35
  C.4.  Service Provided, Several Authentications Done, Single
        MTA .......................................................36
  C.5.  Service Provided, Several Authentications Done,
        Different MTAs ............................................37
  C.6.  Service Provided, Multi-Tiered Authentication Done ........38
  C.7.  Comment-Heavy Example .....................................40
Appendix D.  Operational Considerations about Message
             Authentication .......................................40
Appendix E.  Changes since RFC 5451 ...............................42

1. Introduction โœจ

this doc describes a header field called Authentication-Results for email messages. it shows the results of a message authentication effort in a machine-readable format ๐Ÿค– the whole point is to have a place to collect that data whenever message authentication mechanisms are in use, so an MUA and downstream filters can make filtering decisions, and/or give the user a recommendation about how valid the message's origin is and maybe how safe and intact its content is ๐Ÿ’–

this doc revises the original definition found in [RFC5451], based on various authentication protocols in current use. it also picks up errata logged since the original spec came out ๐Ÿงน

end users aren't expected to be the direct consumers of this header field. it's meant for programs that will either use the data or render it in a human-usable form, so you don't have to read it raw ๐Ÿ™ˆ

this doc specifies the format of the header field and talks about what it means when the field is present or absent. it does not cover how the data should be used, like which filtering decisions are right or how an MUA should display results, because those are local policy and/or user interface design questions that don't belong here ๐Ÿ’…

at the time of publication, these are the published, domain-level email authentication methods in common use:

  • Author Domain Signing Practices ([ADSP])
  • SMTP Service Extension for Authentication ([AUTH])
  • DomainKeys Identified Mail Signatures ([DKIM])
  • Sender Policy Framework ([SPF])
  • Vouch By Reference ([VBR])
  • reverse IP address name validation ("iprev", defined in Section 3)

on top of that, this spec recognizes these non-standard methods that aren't common anymore:

  • DomainKeys ([DOMAINKEYS]) (Historic)
  • Sender ID ([SENDERID]) (Experimental)

this spec isn't meant to be limited to domain-based authentication schemes ๐ŸŒธ the existing schemes in that family have been a good starting point for implementations, though. the goal is to give current and future schemes one shared framework to deliver their results to downstream agents, and to discourage making a brand-new header field for every single scheme ๐Ÿฆ‹

SPF defined a header field called "Received-SPF", and the historic DomainKeys defined one called "DomainKey-Status". both were made for this exact purpose, but they only carry their own respective results, so they aren't enough for the requirements listed below. also, lots of SPF implementations have adopted the header field specified here, at least as an option, and DomainKeys has been obsoleted by DKIM ๐Ÿฅน

1.1. Purpose ๐ŸŽฏ

the header field defined in this doc is expected to do a few things:

  1. Convey the results of various message authentication checks. Upstream filters and Mail Transfer Agents (MTAs) apply these checks, then pass them along to MUAs and downstream filters within the same "trust domain". those agents might want to show the results to end users, or use the data to apply stricter or looser content checks based on authentication results ๐Ÿ”ฅ
  2. Provide a common location within a message for this data ๐Ÿ“ฌ
  3. Create an extensible framework for reporting new authentication methods as they come out ๐ŸŒˆ

here's the big catch ๐Ÿšจ the mere presence of this header field does not mean its contents are valid. it's just reporting assertions made by one or more authentication schemes that were (supposedly) applied somewhere upstream. for an MUA or downstream filter to actually treat those assertions as valid, there must be an assessment of the trust relationship among those agents, the validating MTA, and the mechanism used to convey the information. trust, but verify, bestie ๐Ÿซถโœจ

1.2. Trust Boundary ๐Ÿ›ก๏ธ

okay so this doc keeps bringing up the "trust boundary" of an administrative management domain (ADMD), and it's giving vague on purpose ๐Ÿ’… because mail setups are sooo different from each other that one precise definition just isn't possible.

the big idea: info passed from whoever made the header field over to whoever reads it has to happen in a setting where the reader can treat the producer's claims as reliable and accurate (trustworthy) โœจ. how you get that trust is outside this doc. it's entirely a local matter, bestie ๐Ÿซถ

so this doc defines a "trust boundary" as the line between "external" and "internal" entities ๐Ÿงฑ. internal services are the ones the ADMD's infrastructure provides for its users. external stuff is outside the ADMD's authority. hosts inside a trust boundary are under the ADMD's authority and policies, no matter where they physically sit or who physically runs them ๐ŸŒธ. for example, a host inside a trust boundary could be operated by a remote service provider and still be sitting in that provider's data center. wild, right? ๐Ÿ™ˆ

a message can get checked inside a trust boundary and then leave and come back in ๐Ÿ”„. one example is a forwarded message, like a message/rfc822 attachment (see Multipurpose Internet Mail Extensions [MIME]) or something inside a multipart/digest. the details in this field can't be trusted in that situation ๐Ÿ’€. so a field found inside one of those media types is typically ignored.

1.3. Processing Scope ๐ŸŽ€

this header field is basically saying "hey, auth work was already done inside my trust boundary, and here are the results" ๐Ÿ“ฌ. it is NOT meant to hand consumers message parameters so they can run auth protocols on their own. not its job, periodt ๐Ÿ’–

1.4. Requirements ๐Ÿ“‹

this doc doesn't add any new requirements to existing protocols or servers ๐ŸŒˆ

and to be super clear, it does NOT put any requirement on MTAs to reject or filter incoming messages that fail auth checks ๐Ÿ™…โ€โ™€๏ธ. the data in this field is for MUAs and filters to look at, and they get to decide what to do with it at their own discretion ๐Ÿ‘‘

1.5. Definitions ๐Ÿง 

this section defines the terms used all through the doc, so grab a snack and let's go โ˜•

1.5.1. Key Words ๐Ÿ”‘

the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [KEYWORDS]. these are the official vibes-check words for how strict each rule is ๐Ÿ’œ

1.5.2. Security ๐Ÿ”

"Guidelines for Writing RFC Text on Security Considerations" ([SECURITY]) talks about authentication and authorization and how people keep mixing those two up ๐Ÿ˜ญ. message security work has made the definitions a little different lately, and this doc follows those current usages, like so:

  • "Authorization" is the establishment of permission to use a resource or represent an identity. in this context, authorization means a message from a particular ADMD arrived via a route the ADMD has explicitly approved ๐Ÿ›ฃ๏ธ.
  • "Authentication" is the assertion of validity of a piece of data about a message (such as the sender's identity) or the message in its entirety โœ….

as examples: SPF and Sender ID are authorization mechanisms ๐Ÿšช. they give a result showing whether the ADMD that seemingly sent the message has explicitly authorized the connecting Simple Mail Transfer Protocol ([SMTP]) client to relay messages on its behalf. but they don't actually validate any other property of the message itself ๐Ÿคทโ€โ™€๏ธ. DKIM is different ๐Ÿ’…. it doesn't care about how a message was routed, but it uses cryptographic signatures to authenticate agents, assign (some) responsibility for the message (which implies authorization), and ensure the listed parts of the message weren't modified in transit ๐Ÿ”. since the signatures aren't tied to SMTP connections, they can be added by the ADMD of origin, intermediate ADMDs (like a mailing list server), other handling agents, or any combo of those ๐Ÿงฉ.

rather than make a separate header field for each class of solution, this proposal groups them all into one single header field ๐ŸŽ

1.5.3. Email Architecture ๐Ÿ—๏ธ

  • A "border MTA" is an MTA that acts as a gateway between the general Internet and the users inside an organizational boundary ๐Ÿšง. (See also Section 1.2.)
  • A "delivery MTA" (or Mail Delivery Agent or MDA) is an MTA that actually delivers a message to a user's inbox or other final destination ๐Ÿ“ฅ.
  • An "intermediate MTA" is any MTA that is not a delivery MTA and is also not the first MTA to handle the message ๐Ÿ”.

here's how mail flows between these components. for more on general email system architecture, including detailed descriptions of these parts, check Internet Mail Architecture [EMAIL-ARCH]. and see Appendix D of this document for the common aspects of email authentication in current environments ๐Ÿ“š

                      +-----+   +-----+   +------------+
                      | MUA |-->| MSA |-->| Border MTA |
                      +-----+   +-----+   +------------+
                                                |
                                                |
                                                V
                                           +----------+
                                           | Internet |
                                           +----------+
                                                |
                                                |
                                                V
+-----+   +-----+   +------------------+   +------------+
| MUA |<--| MDA |<--| Intermediate MTA |<--| Border MTA |
+-----+   +-----+   +------------------+   +------------+

generally, the message auth schemes are assumed to be applied at a border MTA or a delivery MTA, and this spec is written with that in mind ๐ŸŽฏ. but some sites run their whole mail infrastructure on a single host ๐Ÿ–ฅ๏ธ. in those cases, "border MTA" and "delivery MTA" might totally refer to the same machine, or even the very same agent. it's also possible some message auth tests happen on an intermediate MTA โœจ. this doc doesn't spell out those cases, but they aren't meant to be excluded either ๐Ÿ™Œ

1.5.4. Other Terms ๐Ÿท๏ธ

in this doc, a "producer" is any component that adds this header field to the messages it handles ๐Ÿญ. a "consumer" is any component that identifies, extracts, and parses the header field to use in a handling decision ๐Ÿฝ๏ธ

1.6. Trust Environment ๐ŸŒ

this header field lets one or more message validation mechanisms pass their output along to one or more separate assessment mechanisms ๐Ÿ“จ. all of these work inside a unified trust boundary that defines an Administrative Management Domain (ADMD) ๐Ÿฐ. an ADMD has one or more entities that validate and generate the header field, plus one or more that consume it for some kind of assessment ๐ŸŽ€

the field usually has no integrity or validation mechanism of its own, so its presence has to be trusted implicitly ๐Ÿ˜ฌ. that's why valid use of the header field requires removing any copies of it that are already there when the message enters the ADMD ๐Ÿงน. this makes sure later copies were added inside the ADMD's trust boundary, which is the whole point ๐Ÿ’…

the authserv-id token defined in Section 2.2 can reference an entire ADMD or one specific validation engine inside an ADMD ๐Ÿชช. the labeling scheme is an operational choice, but some guidance for picking a token shows up in later sections of this doc ๐Ÿ”–

2. Definition and Format of the Header Field ๐ŸŽ€

this section gives a general overview of the header field's format and then gets into the formal specs ๐Ÿค“

2.1. General Description ๐Ÿ“

the header field here is called Authentication-Results ๐Ÿ’–. it's a Structured Header Field as defined in Internet Message Format ([MAIL]), so all the related definitions in that doc apply too ๐Ÿงš

this field gets added to the top of the message as it moves through MTAs that do auth checks, so you can kind of tell how far away the checks happened ๐Ÿ›ฐ๏ธ. that makes it a trace field as defined in [MAIL], and again, all the related definitions in that doc apply ๐Ÿฆ‹

the value of the field (after comments are removed) has an authentication identifier, an optional version, and then a series of statements and supporting data ๐Ÿงƒ. the statements look like "method=result" and show which auth method(s) got applied and what each one returned ๐Ÿ“Š. for each statement, the supporting data can include a "reason" string and one or more "property=value" statements that say which message properties were checked to reach that conclusion ๐Ÿ”

the header field can show up more than once in a single message, one field can hold more than one result, or you can mix both of those things together ๐ŸŒˆ

2.2. Formal Definition โœจ

okay so, this is the grammar section and it's giving precise ๐Ÿ’…. The header field is written out formally in Augmented Backus-Naur Form ([ABNF]), so here's the whole thing:

authres-header = "Authentication-Results:" [CFWS] authserv-id
         [ CFWS authres-version ]
         ( no-result / 1*resinfo ) [CFWS] CRLF

authserv-id = value
            ; see below for a description of this element

authres-version = 1*DIGIT [CFWS]
        ; indicates which version of this specification is in use;
        ; this specification is version "1", and the absence of a
        ; version implies this version of the specification

no-result = [CFWS] ";" [CFWS] "none"
          ; the special case of "none" is used to indicate that no
          ; message authentication was performed

resinfo = [CFWS] ";" methodspec [ CFWS reasonspec ]
        *( CFWS propspec )

methodspec = [CFWS] method [CFWS] "=" [CFWS] result
           ; indicates which authentication method was evaluated
           ; and what its output was

reasonspec = "reason" [CFWS] "=" [CFWS] value
           ; a free-form comment on the reason the given result
           ; was returned

propspec = ptype [CFWS] "." [CFWS] property [CFWS] "=" pvalue
         ; an indication of which properties of the message
         ; were evaluated by the authentication scheme being
         ; applied to yield the reported result

method = Keyword [ [CFWS] "/" [CFWS] method-version ]
       ; a method indicates which method's result is
       ; represented by "result", and is one of the methods
       ; explicitly defined as valid in this document
       ; or is an extension method as defined below

method-version = 1*DIGIT [CFWS]
       ; indicates which version of the method specification is
       ; in use, corresponding to the matching entry in the IANA
       ; "Email Authentication Methods" registry; a value of "1"
       ; is assumed if this version string is absent

result = Keyword
       ; indicates the results of the attempt to authenticate
       ; the message; see below for details

ptype = "smtp" / "header" / "body" / "policy"
      ; indicates whether the property being evaluated was
      ; a parameter to an [SMTP] command, was a value taken
      ; from a message header field, was some property of
      ; the message body, or was some other property evaluated by
      ; the receiving MTA

property = special-smtp-verb / Keyword
        ; if "ptype" is "smtp", this indicates which [SMTP]
        ; command provided the value that was evaluated by the
        ; authentication scheme being applied; if "ptype" is
        ; "header", this indicates from which header field the
        ; value being evaluated was extracted; if "ptype" is
        ; "body", this indicates where in the message body
        ; a value being evaluated can be found (e.g., a specific
        ; offset into the message or a reference to a MIME part);
        ; if "ptype" is "policy", then this indicates the name
        ; of the policy that caused this header field to be
        ; added (see below)

special-smtp-verb = "mailfrom" / "rcptto"
        ; special cases of [SMTP] commands that are made up
        ; of multiple words

pvalue = [CFWS] ( value / [ [ local-part ] "@" ] domain-name )
         [CFWS]
       ; the value extracted from the message property defined
       ; by the "ptype.property" construction

"local-part" is defined in Section 3.4.1 of [MAIL], and "CFWS" is defined in Section 3.2.2 of [MAIL]. ๐ŸŽ€

"Keyword" is defined in Section 4.1.2 of [SMTP]. ๐Ÿฆ‹

The "value" is as defined in Section 5.1 of [MIME]. ๐ŸŒธ

The "domain-name" is as defined in Section 3.5 of [DKIM]. ๐ŸŒˆ

The "Keyword" used in "result" above is further constrained by the necessity of being enumerated in Section 2.6. ๐Ÿซถ

See Section 2.4 for a description of the authserv-id element. โœจ

If the value portion of a "pvalue" construction identifies something intended to be an e-mail identity, then it MUST use the right hand portion of that ABNF definition. ๐Ÿ’– That one's a must, bestie, no notes. ๐Ÿ˜ญ

The list of commands eligible for use with the "smtp" ptype can be found in Section 4.1 of [SMTP]. ๐Ÿ’…

The "propspec" may be omitted if, for example, the method was unable to extract any properties to do its evaluation yet has a result to report. ๐Ÿ™ˆ

Where an SMTP command name is being reported as a "property", the agent generating the header field represents that command by converting it to lowercase and dropping any spaces (e.g., "MAIL FROM" becomes "mailfrom", "RCPT TO" becomes "rcptto", etc.). ๐Ÿ“

A "ptype" value of "policy" indicates a policy decision about the message not specific to a property of the message that could be extracted. See Section 2.3 for details. ๐Ÿ‘‘

Examples of complete messages using this header field can be found in Appendix C. ๐Ÿงš


2.3. The "policy" ptype ๐Ÿฆ‹

A special ptype value of "policy" is defined. ๐Ÿ’œ This ptype is provided to indicate that some local policy mechanism was applied that augments or even replaces (i.e., overrides) the result returned by the authentication mechanism. The property and value in this case identify the local policy that was applied and the result it returned. โœจ

For example, a DKIM signature is not required to include the Subject header field in the set of fields that are signed. An ADMD receiving such a message might decide that such a signature is unacceptable, even if it passes, because the content of the Subject header field could be altered post-signing without invalidating the signature. ๐Ÿ™ˆ Such an ADMD could replace the DKIM "pass" result with a "policy" result and then also include the following in the corresponding Authentication-Result field:

   ... dkim=fail policy.dkim-rules=unsigned-subject ...

In this case, the property is "dkim-rules", indicating some local check by that name took place and that check returned a result of "unsigned-subject". These are arbitrary names selected by (and presumably used within) the ADMD making use of them, so they are not normally registered with IANA or otherwise specified apart from setting syntax restrictions that allow for easy parsing within the rest of the header field. ๐ŸŒธ

This ptype existed in the original specification for this header field, but without a complete description or example of intended use. As a result, it has not seen any practical use to date that matches its intended purpose. These added details are provided to guide implementers toward proper use. ๐Ÿซถ


2.4. Authentication Identifier Field ๐Ÿ‘‘

Every Authentication-Results header field has an authentication service identifier field (authserv-id above). Specifically, this is any string intended to identify the authentication service within the ADMD that conducted authentication checks on the message. This identifier is intended to be machine-readable and not necessarily meaningful to users. ๐Ÿค–

Since agents consuming this field will use this identifier to determine whether its contents are of interest (and are safe to use), the uniqueness of the identifier MUST be guaranteed by the ADMD that generates it and MUST pertain to that ADMD. ๐Ÿ˜ญ MUAs or downstream filters SHOULD use this identifier to determine whether or not the data contained in an Authentication-Results header field ought to be used or ignored. ๐Ÿ’…

For simplicity and scalability, the authentication service identifier SHOULD be a common token used throughout the ADMD. ๐Ÿ’– Common practice is to use the DNS domain name used by or within that ADMD, sometimes called the "organizational domain", but this is not strictly necessary. ๐ŸŒˆ

For tracing and debugging purposes, the authentication identifier can instead be the specific hostname of the MTA performing the authentication check whose result is being reported. Moreover, some implementations define a substructure to the identifier; these are outside of the scope of this specification. ๐Ÿงš

Note, however, that using a local, relative identifier like a flat hostname, rather than a hierarchical and globally unique ADMD identifier like a DNS domain name, makes configuration more difficult for large sites. ๐Ÿ“ The hierarchical identifier permits aggregating related, trusted systems together under a single, parent identifier, which in turn permits assessing the trust relationship with a single reference. The alternative is a flat namespace requiring individually listing each trusted system. Since consumers will use the identifier to determine whether to use the contents of the header field:

  • Changes to the identifier impose a large, centralized administrative burden. ๐Ÿ˜ฉ
  • Ongoing administrative changes require constantly updating this centralized table, making it difficult to ensure that an MUA or downstream filter will have access to accurate information for assessing the usability of the header field's content. In particular, consumers of the header field will need to know not only the current identifier(s) in use but previous ones as well to account for delivery latency or later re-assessment of the header field's contents. ๐Ÿ•ฐ๏ธ

Examples of valid authentication identifiers are "example.com", "mail.example.org", "ms1.newyork.example.com", and "example-auth". โœจ


2.5. Version Tokens ๐ŸŽ€

The grammar above provides for the optional inclusion of versions on both the header field itself (attached to the authserv-id token) and on each of the methods being reported. The method version refers to the method itself, which is specified in the documents describing those methods, while the authserv-id version refers to this document and thus the syntax of this header field. ๐Ÿ’œ

The purpose of including these is to avoid misinterpretation of the results. That is, if a parser finds a version after an authserv-id that it does not explicitly know, it can immediately discontinue trying to parse since what follows might not be in an expected format. For a method version, the parser SHOULD ignore a method result if the version is not supported in case the semantics of the result have a different meaning than what is expected. ๐Ÿšจ For example, if a hypothetical DKIM version 2 yielded a "pass" result for different reasons than version 1 does, a consumer of this field might not want to use the altered semantics. Allowing versions in the syntax is a way to indicate this and let the consumer of the header field decide. ๐Ÿฆ‹


2.6. Defined Methods and Result Values ๐ŸŒˆ

Each individual authentication method returns one of a set of specific result values. ๐Ÿ“ The subsections below provide references to the documents defining the authentication methods specifically supported by this document, and their corresponding result values. Verifiers SHOULD use these values as described below. ๐Ÿ’… New methods not specified in this document, but intended to be supported by the header field defined here, MUST include a similar result table either in their defining documents or in supplementary ones. ๐Ÿ”ฅ

2.6.1. DKIM and DomainKeys โœจ

okay so DKIM gets the dkim method name and it's defined over in [DKIM] ๐Ÿ’… DomainKeys is defined in [DOMAINKEYS] and goes by domainkeys. both are giving main character energy ๐Ÿฆ‹

a signature counts as "acceptable to the ADMD" if it gets through the local policy checks, or if there aren't any specific local checks to get through ๐Ÿซถ for example, an ADMD policy could insist that the signatures on a message were added using the DNS domain in the From header field. that makes third-party signatures unacceptable, even when they verify ๐Ÿ™ˆ

DKIM and DomainKeys share the same result set, and it goes like this:

  • none: the message wasn't signed ๐Ÿ’ค
  • pass: the message was signed, the signature or signatures were acceptable to the ADMD, and they passed verification โœ…
  • fail: the message was signed and the signatures were acceptable to the ADMD, but they failed the verification test(s) ๐Ÿ’”
  • policy: the message was signed, but some part of the signature or signatures wasn't acceptable to the ADMD ๐Ÿšซ
  • neutral: the message was signed, but the signature or signatures had syntax errors or just couldn't be processed. this one also covers other failures that aren't listed anywhere else in this list ๐ŸŒ€
  • temperror: the message couldn't be verified because of an error that's probably temporary, like not being able to fetch a public key right now. a later attempt might give a final result โณ
  • permerror: the message couldn't be verified because of an error that won't fix itself, like a required header field being missing. a later attempt probably won't give a final result either ๐Ÿ’€

[DKIM] says that if a message fails verification, it should be treated as an unsigned message. a fail report lets the receiver of the report decide what to do about the failure ๐Ÿคทโ€โ™€๏ธ but a neutral or none report takes that choice away, so the message gets treated as if it was never signed ๐Ÿ”’

2.6.2. SPF and Sender ID

spf and sender-id are the method names for SPF and Sender ID, respectively ๐ŸŒธ the result values for SPF are defined in Section 2.5 of [SPF], and we're just pulling those definitions in by reference, bestie ๐Ÿ“š

  +-----------+----------------------------+
  |    Code   | Meaning                    |
  +-----------+----------------------------+
  | none      | [SPF], Section 2.5.1       |
  +-----------+----------------------------+
  | pass      | [SPF], Section 2.5.3       |
  +-----------+----------------------------+
  | fail      | [SPF], Section 2.5.4       |
  +-----------+----------------------------+
  | softfail  | [SPF], Section 2.5.5       |
  +-----------+----------------------------+
  | policy    | [RFC7001], Section 2.6.2   |
  +-----------+----------------------------+
  | neutral   | [SPF], Section 2.5.2       |
  +-----------+----------------------------+
  | temperror | [SPF], Section 2.5.6       |
  +-----------+----------------------------+
  | permerror | [SPF], Section 2.5.7       |
  +-----------+----------------------------+

these result codes are used here to show what the component doing the SPF evaluation returned ๐ŸŽ€

Sender ID's results are listed and described in Section 4.2 of [SENDERID], and that section leans on the SPF definitions too ๐Ÿ”

heads up: both of those docs use mixed case for their result codes, but in this context they're usually written all lowercase โœจ

both methods also get an extra result, policy ๐Ÿ‘‘ it means the client was allowed to inject or relay mail for the sender's DNS domain according to the authentication method's algorithm, but local policy says the result isn't acceptable. for example, policy might show up when SPF returns pass, but a local policy check finds the sending DNS domain on an explicit list of unacceptable DNS domains (like spammers) ๐Ÿšซ

if the sender policies that were retrieved to evaluate SPF and Sender ID don't have any explicit provisions for authenticating the local-part (see Section 3.4.1 of [MAIL]) of an address, then the pvalue reported with these results SHOULD NOT include the local-part. ๐Ÿ™ˆ

2.6.3. "iprev"

the result values for the iprev method, defined in Section 3, go like this:

  • pass: the DNS evaluation worked out, meaning the "reverse" and "forward" lookup results both came back and agreed with each other โœ…
  • fail: the DNS evaluation failed ๐Ÿ’” this happens when the "reverse" and "forward" lookups each returned results but didn't agree, or when the "forward" query finished without producing a result. that includes a DNS RCODE of 3 (commonly known as NXDOMAIN), or an RCODE of 0 (NOERROR) in a reply that has no answers ๐Ÿซ 
  • temperror: the DNS evaluation couldn't be finished because of an error that's probably temporary, like a temporary DNS error (for example, a DNS RCODE of 2, commonly known as SERVFAIL), or some other error condition. a later attempt might give a final result โณ
  • permerror: the DNS evaluation couldn't be finished because no PTR data is published for the connecting IP address. this happens with a DNS RCODE of 3 (commonly known as NXDOMAIN), or an RCODE of 0 (NOERROR) in a reply with no answers, and it stopped the evaluation from finishing. a later attempt probably won't give a final result ๐Ÿ’€

there's no none for this method ๐Ÿ™…โ€โ™€๏ธ every TCP connection that delivers email has an IP address attached, so some kind of evaluation is always possible โœจ

if you want to learn about the format of DNS replies, check out "Domain Names - Implementation and Specification" ([DNS]) ๐Ÿ“–

2.6.4. SMTP AUTH

SMTP AUTH (defined in [AUTH]) goes by the auth method, and its result values are:

  • none: SMTP authentication wasn't attempted ๐Ÿ˜ถ
  • pass: the SMTP client authenticated to the server reporting the result, using the protocol described in [AUTH] ๐Ÿ”
  • fail: the SMTP client tried to authenticate to the server using the protocol described in [AUTH] but didn't succeed. it still kept going and sent the message that the result is being reported on ๐Ÿ˜ฌ
  • temperror: the SMTP client tried to authenticate using the protocol described in [AUTH] but couldn't finish, because of an error that's probably temporary, like a temporary directory service lookup error. a later attempt may give a final result โณ
  • permerror: the SMTP client tried to authenticate using the protocol described in [AUTH] but couldn't finish, because of an error that's probably not temporary, like a permanent directory service lookup error. a later attempt probably won't give a final result ๐Ÿ’€

an agent using the data from this header field SHOULD consider fail and temperror to mean the same thing for message authentication, since the client didn't authenticate in either case ๐Ÿซถ

2.6.5. Other Registered Codes

more result codes were registered in other RFCs too ๐ŸŒˆ there's Vouch By Reference (in [AR-VBR], represented by vbr), Authorized Third-Party Signatures (in [ATPS], represented by dkim-atps), and the DKIM-related Author Domain Signing Practices (in [ADSP], represented by dkim-adsp) ๐ŸŽ€

2.6.6. Extension Methods

more authentication method identifiers (extension methods) might get defined later, by future revisions or extensions to this spec ๐Ÿ”ฎ these identifiers get registered with the Internet Assigned Numbers Authority (IANA) and, ideally, published in an RFC. see Section 6 for the details ๐Ÿ“š

extension methods can be defined for these reasons:

  1. to let new authentication systems pass extra info along to MUAs or downstream filters ๐Ÿ“ฌ the names should reflect the method being defined, but they ought not be needlessly long ๐Ÿ’…
  2. to make "sub-identifiers" that show different levels of authentication and tell apart how strong they are, like "auth1-weak" and "auth1-strong" ๐Ÿ’ช

authentication method implementers are encouraged to give enough info, using message header field comments if needed, so an MUA developer can understand or pass along the extra details of the authentication results ๐Ÿซถ for example, if it'd be interesting to relay what data got used for an evaluation, that could go in a comment in the header field, like this:

        Authentication-Results: example.com;
                  foo=pass bar.baz=blob (2 of 3 tests OK)
experimental method identifiers MUST only be used within ADMDs that have explicitly consented to use them ๐Ÿšจ these identifiers and their parameters aren't documented in RFCs, so they can change at any time and they're not suitable for production use ๐Ÿ’€ any MTA, MUA, or downstream filter meant for production use SHOULD ignore or delete any Authentication-Results header field that includes an experimental (unknown) method identifier ๐Ÿ—‘๏ธ

2.6.7. Extension Result Codes

extra result codes might get defined later too, by future revisions or extensions to this spec โœจ result codes MUST be registered with the Internet Assigned Numbers Authority (IANA) and preferably published in an RFC. see Section 6 for further details ๐Ÿ“š

extension results MUST only be used within ADMDs that have explicitly consented to use them ๐Ÿšจ these results and their parameters aren't formally documented, so they can change at any time and they're not suitable for production use ๐Ÿ’€ any MTA, MUA, or downstream filter meant for production use SHOULD ignore or delete any Authentication-Results header field that includes an extension result ๐Ÿ—‘๏ธ

3. The "iprev" Authentication Method โœจ

okay so this section is about a method called "iprev" ๐Ÿฆ‹ It's basically checking whether a client's IP address actually matches a domain name that points back to it. Think of it like a double-check, bestie ๐Ÿ’…

Here's how it goes. When a client starts some kind of session with you, you take its IP address and ask DNS what names it maps to. That's the reverse lookup, aka a PTR record query ๐Ÿ” Then you look up every name you got back, using an A or AAAA record query, which goes name to number. If at least one of those comes back to the client's IP address, the vibe checks out ๐ŸŒธ

Here's the algorithm, spelled out. Say the client peer's IP address is I. The list of names I maps to after a PTR query is the set N. The union of IP addresses that each member of N maps to, after the matching A and AAAA queries, is L. The test succeeds if I is an element of L โœจ

The response to a PTR query could contain multiple names, though. So to keep DNS from getting overloaded ๐Ÿ˜ญ, agents doing these queries MUST be implemented so the number of names they turn into A or AAAA queries is limited. The limit shouldn't be unduly taxing on the DNS infrastructure, though it MAY be configurable by an administrator ๐ŸŽ€ As an example, Section 5.5 of [SPF] picked a limit of 10 for its version of this algorithm.

"DNS Extensions to Support IP Version 6" ([DNS-IP6]) covers the query formats for the IPv6 case ๐Ÿงš

Now for the tea โ˜• There's some contention about how wise and reliable this test really is. In some regions it can be super hard for it to ever pass, because matching forward and reverse DNS is rarely done. So the exact details of how a verifier runs an "iprev" test are not specified here ๐Ÿ’€ The verifier MAY report a successful or failed "iprev" test at its own discretion, as long as it did some kind of check on the connection's identity using DNS. It's on any agent using the reported "iprev" result to figure out what that particular verifier is actually trying to say ๐Ÿ‘‘

If you want the full drama on reverse DNS mapping and what it means, check out "Considerations for the use of DNS Reverse Mapping" ([DNSOP-REVERSE]). It specifically recommends that applications avoid using this test as a means of authentication or security ๐Ÿ™ˆ Its presence in this document isn't an endorsement. It's just an acknowledgement that the method is still common and gives a way to relay the results of that test ๐Ÿซถ


4. Adding the Header Field to a Message โœจ

So this spec doesn't even try to rank the strengths of the different message authentication methods that might show up later ๐ŸŒˆ The methods listed are an order-independent set, so their order doesn't tell you anything about which one matters more. Instead, the MUA or downstream filter reading this header field has to interpret each method's result using its own knowledge of what that method checks ๐Ÿ’œ

Each "method" MUST refer to an authentication method declared in the IANA registry, or an extension method as described in Section 2.6.6. Each "result" MUST refer to a result code declared in the IANA registry, or an extension result code as defined in Section 2.6.7. See Section 6 for more info on the registered methods and result codes ๐Ÿ“š

An MTA that follows this spec adds this header field after running one or more message authentication tests ๐Ÿ”ฅ It shows which MTA or ADMD ran the test, which test got applied, and what the result was. If an MTA runs more than one test, it can add this header field once per test, or once with all the results together. An MTA MUST NOT add a result to an existing header field ๐Ÿ™…โ€โ™€๏ธ

An MTA MAY add this header field with only the authentication identifier portion and the "none" token (see Section 2.2). That tells everyone, explicitly, that no message authentication schemes were applied before the message was delivered ๐Ÿฆ‹

An MTA adding this header field has to take steps to prove to the MUAs or downstream filters that will eventually read it that it's legit ๐Ÿ” One way to do that is described in Section 5. Some environments might need extra measures, and some possible solutions are listed in Section 7.1. This document doesn't force any specific solution, since every environment has its own tools and limits ๐ŸŽ€

Most known message authentication methods focus on one particular identifier. SPF and Sender ID are different, though, because they can give a result based on more than one identifier. Specifically, SPF can evaluate the RFC5321.HELO parameter or the RFC5321.MailFrom parameter, and Sender ID can evaluate the RFC5321.MailFrom parameter or the Purported Responsible Address (PRA) identity. When you generate this field to report those results, only the parameter that actually produced the result gets included ๐Ÿ’…

For MTAs that add this header field, adding header fields in order (at the top), per Section 3.6 of [MAIL], is super important โœจ On top of that, this header field SHOULD be inserted above any other trace header fields those MTAs might prepend. That placement makes it easy to spot which header fields can be trusted ๐Ÿงš

Now the warning part ๐Ÿšจ End users who use this header field directly might accidentally trust information that hasn't been properly vetted. For example, if a basic SPF result gets relayed that claims an authenticated addr-spec, the local-part of that addr-spec has actually not been authenticated ๐Ÿ˜ญ So an MTA adding this header field SHOULD NOT include any data that hasn't been authenticated by the method(s) being applied. Also, MUAs SHOULD NOT render that kind of info to users if it's presented by a method that's known not to authenticate it ๐Ÿ™ˆ

4.1. Header Field Position and Interpretation

Okay this part is about keeping results unambiguous and not getting fooled by fake header fields ๐Ÿ•ต๏ธโ€โ™€๏ธ MUAs and downstream filters SHOULD NOT interpret this header field unless the user or administrator specifically configures them to. It should NOT be "on by default" ๐ŸŽ€ Users or administrators ought not turn that feature on unless they're certain the header field will be validly added by an agent inside the ADMD that accepts the mail which the MUA eventually reads. Any header fields that look like they came from inside the ADMD but were actually added by foreign MTAs will be removed before delivery ๐ŸŒธ

Furthermore, MUAs and downstream filters SHOULD NOT interpret this header field unless the authentication service identifier it carries appears to be one used within their own ADMD, as configured by the user or administrator ๐Ÿฆ‹

MUAs and downstream filters MUST ignore any result reported using a "result" that isn't specified in the IANA "Result Code" registry, or a "ptype" that isn't listed in the corresponding registry for those values, as defined in Section 6. On top of that, those agents MUST ignore a result indicated for any "method" they don't specifically support ๐Ÿšซ

An MUA SHOULD NOT reveal these results to end users, unless careful human factors design and testing has gone into presenting trust-related stuff ๐Ÿ’… Why? Because an attacker could register examp1e.com (note the digit "one") and send signed mail to intended victims. A verifier would detect that the signature was valid and report a "pass", even though it's super clear the DNS domain name was meant to mislead ๐Ÿ˜ญ See Section 7.2 for more on that.

As stated in Section 2.1, this header field MUST be treated as though it were a trace header field as defined in Section 3.6.7 of [MAIL]. That means it MUST NOT be reordered and MUST be prepended to the message, so there's usually some sign at delivery of where in the chain of MTAs the message authentication happened ๐Ÿงš

Note that a few message handlers can only append new header fields to a message. Strictly speaking, those handlers aren't compliant with this spec. They can still add the header field to carry authentication details, but any signal about where in the handling chain the work was done might get lost ๐Ÿ’€ Consumers SHOULD be designed so they can tolerate this, especially from a producer known to have this limitation ๐Ÿซถ

MUAs SHOULD ignore instances of this header field found inside message/rfc822 MIME attachments ๐Ÿ™ˆ

For more on all of this, check out Section 7 below ๐Ÿ’œ

4.2. Local Policy Enforcement

Some sites have a local policy that treats any authentication policy's non-recoverable failure results (typically "fail" or something similar) as a reason to reject the message ๐Ÿ”ฅ In those cases, the border MTA SHOULD issue an SMTP rejection response for the message, instead of adding this header field and letting the message keep going toward delivery. That's way more desirable than letting the message reach an internal host's MTA or spam filter, which could end up generating a local rejection like a Delivery Status Notification (DSN) [DSN] to a forged originator ๐Ÿ˜ญ Those generated rejections are colloquially known as "backscatter" ๐ŸŒˆ

The same MAY also be done for local policy decisions that override the results of the authentication methods, like the "policy" result codes described in Section 2.6 โœจ

Rejections at the SMTP protocol level aren't possible if local policy is enforced at the MUA and not the MTA ๐Ÿ’…

5. Removing Existing Header Fields โœจ

okay bestie, this part is lowkey the most important bit ๐Ÿ”’ for security reasons, any MTA conforming to this specification MUST delete any header field it finds that claims, through its authentication service identifier, to have been added inside its trust boundary, but that did not come directly from another trusted MTA. ๐Ÿ’€ For example, an MTA for example.com that receives a message MUST delete or otherwise obscure any instance of this header field whose authentication service identifier says it was added inside example.com before the MTA adds its own header fields. ๐Ÿงš This could mean every MTA has to carry a list of internal MTAs that are known to be compliant (and so trustworthy).

For simplicity and maximum security, a border MTA could nuke every instance of this header field on mail crossing into its trust boundary ๐Ÿ’… but ngl, that might clash with wanting to read authentication results from trusted outside service providers ๐Ÿฅฒ It could also break signed messages whose signatures cover external copies of the header field. A more robust border MTA could allow a specific list of authenticating MTAs whose information is admitted, and remove the header field from everyone else ๐Ÿฆ‹

As stated in Section 1.2, a formal definition of "trust boundary" is deliberately not made here ๐Ÿคทโ€โ™€๏ธ It's totally possible that a border MTA for example.com explicitly trusts authentication results asserted by upstream host example.net, even though they sit in completely separate administrative boundaries ๐Ÿ‘‘ In that case, the border MTA MAY elect not to delete those results. Also, the upstream host doing the authentication work could apply a signing technology such as [DKIM] on its own results to assure downstream hosts of their authenticity ๐Ÿ” An example of this is provided in Appendix C โœจ

Similarly, for messages signed using [DKIM] or other message-signing methods that sign header fields, this removal could invalidate one or more signatures if they covered the header field being removed ๐Ÿ˜ญ This can actually be desirable, since there's little value in validating the signature on a message with forged header fields ๐Ÿ’… However, signing agents MAY therefore elect to omit these header fields from signing to avoid this situation ๐Ÿซถ

An MTA SHOULD remove any instance of this header field bearing a version (express or implied) that it does not support. However, an MTA MUST remove such a header field if the [SMTP] connection relaying the message is not from a trusted internal MTA. ๐Ÿšซ This means the MTA needs to be able to understand versions of this header field at least as late as the ones understood by the MUAs or other consumers within its ADMD ๐ŸŒˆ


6. IANA Considerations ๐ŸŒธ

okay so IANA has registered the defined header field and created two tables ๐Ÿ“‹ These registry actions were originally defined by [RFC5451] and are repeated here so there's one single, current reference ๐Ÿ’œ

6.1. The Authentication-Results Header Field ๐ŸŽ€

[RFC5451] added the Authentication-Results header field to the IANA "Permanent Message Header Field Names" registry, following the procedure found in [IANA-HEADERS]. That entry has been updated to reference this document โœจ Here's the registration template:

     Header field name: Authentication-Results
     Applicable protocol: mail ([MAIL])
     Status: Standard
     Author/Change controller: IETF
     Specification document(s): RFC 7001
     Related information:
       Requesting review of any proposed changes and additions to
       this field is recommended.

6.2. "Email Authentication Methods" Registry ๐Ÿ“š

names of message authentication methods supported by this specification are to be registered with IANA, with the exception of experimental names as described in Section 2.6.6 ๐Ÿงช A registry was created by [RFC5451] for this purpose, and this document changes the rules governing it ๐Ÿ’…

New entries are assigned only for values that have received Expert Review, per [IANA-CONSIDERATIONS]. The designated expert shall be appointed by the IESG. The designated expert has discretion to request that a publication be referenced if a clear, concise definition of the authentication method can't be provided such that interoperability is assured. Registrations should otherwise be permitted. The designated expert can also handle requests to mark any current registration as "deprecated" ๐Ÿ™Œ

Each method must register a name, the specification that defines it, a version number associated with the method being registered (preferably starting at "1"), zero or more "ptype" values appropriate for use with that method, which "property" value(s) should be reported by that method, and a description of the "value" to be used with each ๐Ÿ“

All existing registry entries that reference [RFC5451] have been updated to reference this document, except where entries have already been deprecated.

IANA has also added a "version" field to all existing registry entries. All current methods are recorded as version "1" ๐Ÿ”ข

6.3. "Email Authentication Result Names" Registry ๐Ÿท๏ธ

names of message authentication result codes supported by this specification must be registered with IANA, with the exception of experimental codes as described in Section 2.6.7 ๐Ÿงช A registry was created by [RFC5451] for this purpose, and this document changes the rules governing that registry too.

New entries are assigned only for values that have received Expert Review, per [IANA-CONSIDERATIONS]. The designated expert shall be appointed by the IESG. The designated expert has discretion to request that a publication be referenced if a clear, concise definition of the authentication result can't be provided such that interoperability is assured. Registrations should otherwise be permitted. The designated expert can also handle requests to mark any current registration as "deprecated" ๐Ÿ™Œ

All existing registry entries that reference [RFC5451] have been updated to reference this document.

The definitions for the SPF and Sender ID authentication methods are updated using the references found in Section 2.6.2 ๐Ÿ”„


7. Security Considerations ๐Ÿ”

okay, this part is serious, so read carefully ๐Ÿ‘€ The following security considerations apply when adding or processing the Authentication-Results header field:

7.1. Forged Header Fields ๐Ÿ‘ป

An MUA or filter that accesses a mailbox whose messages are handled by a non-conformant MTA, and that understands Authentication-Results header fields, could potentially make false conclusions based on forged header fields ๐Ÿ˜ฑ A malicious user or agent could forge a header field using the DNS domain of a receiving ADMD as the authserv-id token in the value of the header field and, with the rest of the value, claim that the message was properly authenticated. The non-conformant MTA would fail to strip the forged header field, and the MUA could inappropriately trust it ๐Ÿ’€

For this reason, it is best not to have processing of the Authentication-Results header field enabled by default. Instead, it should be ignored, at least for the purposes of enacting filtering decisions, unless specifically enabled by the user or administrator after verifying that the border MTA is compliant. It is acceptable to have an MUA aware of this specification but have an explicit list of hostnames whose Authentication-Results header fields are trustworthy; however, this list should initially be empty. ๐Ÿ™…โ€โ™€๏ธ

Proposed alternative solutions to this problem were made some time ago and are listed below. To date, they have not been developed due to lack of demand, but they are documented here in case the information is useful at some point in the future ๐Ÿ—‚๏ธ

  1. Possibly the simplest is a digital signature protecting the header field, such as using [DKIM], that can be verified by an MUA using a posted public key. Although one of the main purposes of this document is to relieve the burden of doing message authentication work at the MUA, this only requires that the MUA learn a single authentication scheme even if a number of them are in use at the border MTA. Note that [DKIM] requires that the From header field be signed, although in this application the signing agent (a trusted MTA) likely cannot authenticate that value, so the fact that it is signed should be ignored. Where the authserv-id is the ADMD's domain name, the authserv-id matching this valid internal signature's d= DKIM value is sufficient. ๐Ÿ”
  2. Another would be a means to interrogate the MTA that added the header field to see if it is actually providing any message authentication services and saw the message in question, but this isn't especially palatable given the work required to craft and implement such a scheme. ๐Ÿ˜ฌ
  3. Yet another might be a method to interrogate the internal MTAs that apparently handled the message (based on Received header fields) to determine whether any of them conform to Section 5 of this memo. This, too, has potentially high barriers to entry. ๐Ÿšง
  4. Extensions to [IMAP], [SMTP], and [POP3] could be defined to allow an MUA or filtering agent to acquire the authserv-id in use within an ADMD, thus allowing it to identify which Authentication-Results header fields it can trust. ๐Ÿ“ฌ
  5. On the presumption that internal MTAs are fully compliant with Section 3.6 of [MAIL] and the compliant internal MTAs are using their own hostnames or the ADMD's DNS domain name as the authserv-id token, the header field proposed here should always appear above a Received header added by a trusted MTA. This can be used as a test for header field validity. โœ…

Support for some of these is being considered for future work. โญ

In any case, a mechanism needs to exist for an MUA or filter to verify that the host that appears to have added the header field (a) actually did so and (b) is legitimately adding that header field for this delivery. Given the variety of messaging environments deployed today, consensus appears to be that specifying a particular mechanism for doing so is not appropriate for this document ๐Ÿค

Mitigation of the forged header field attack can also be accomplished by moving the authentication results data into metadata associated with the message. In particular, an [SMTP] extension could be established to communicate authentication results from the border MTA to intermediate and delivery MTAs. The latter of these could arrange to store the authentication results as metadata, retrieved and rendered along with the message by an [IMAP] client aware of a similar extension in that protocol. The delivery MTA would be told to trust data via this extension only from MTAs it trusts, and border MTAs would not accept data via this extension from any source. There is no vector in such an arrangement for forgery of authentication data by an outside agent ๐Ÿ›ก๏ธ๐Ÿ’œ

7.2. Misleading Results ๐Ÿ’…

Okay bestie, real talk: until some kind of reputation lookup for sending agents is widely deployed, seeing a "pass" in this header does NOT make the message trustworthy ๐Ÿ™…โ€โ™€๏ธ. A piece of spam can totally pass several of the methods listed above, like spam signed with [DKIM] by the spammer themselves or by a compromised system ๐Ÿ’€. Removing forged header fields, as discussed above, doesn't fix this part either ๐Ÿ˜ญ.

So MUAs and downstream filters need to stay careful with this header even after any sketchy headers have been scrubbed ๐Ÿซถ.

7.3. Header Field Position ๐Ÿฆ‹

Despite what [MAIL] says, intermediate MTAs can sometimes reorder header fields on the way through, which is lowkey annoying ๐Ÿ™„. The rule that this header field only gets added at the top of a message is basically an acknowledgement that some MTAs reorder things, but most don't โœจ. So in the general case, there will be some indication of which MTAs (if any) handled the message after this header field was added ๐Ÿ”.

7.4. Reverse IP Query Denial-of-Service Attacks ๐ŸŒช๏ธ

Section 5.5 of [SPF] describes a DNS-based denial-of-service attack aimed at verifiers that do DNS-based identity checks on arriving client connections ๐Ÿ˜ฌ. A verifier that wants to do this check and report it needs to be careful not to go to unbounded lengths resolving "A" and "PTR" queries ๐Ÿ™…. MUAs or other filters using an "iprev" result from this document need to know which algorithm the reporting verifier used and, especially, its limitations ๐Ÿง.

7.5. Mitigation of Backscatter ๐ŸŒ™

If you don't follow the instructions in Section 4.2, you can end up with a denial-of-service attack caused by generating [DSN] messages (or equivalent) sent to addresses that never sent the messages being rejected ๐Ÿ˜ฑ.

7.6. Internal MTA Lists ๐Ÿ“‹

Section 5 describes a procedure for scrubbing header fields that may contain forged authentication results about a message ๐Ÿงผ. A compliant installation has to include, at each MTA, a list of other MTAs known to be compliant and trustworthy ๐Ÿค. If you don't keep that list current as your internal infrastructure changes, an ADMD may be exposed to attack ๐Ÿšจ.

7.7. Attacks against Authentication Methods โš”๏ธ

If an attack becomes known against an authentication method, then the agent verifying that method can be fooled into thinking an inauthentic message is authentic ๐Ÿ˜ต. That means the value of this header field can be misleading ๐Ÿ™ƒ. So any attack against the authentication methods supported by this document is also a security consideration here ๐Ÿ”.

7.8. Intentionally Malformed Header Fields ๐Ÿงจ

An attacker can add an Authentication-Results header field that is extraordinarily large or otherwise malformed, trying to discover or exploit weaknesses in header field parsing code ๐Ÿ‘€. Implementers must thoroughly verify all such header fields received from MTAs and be robust against intentionally as well as unintentionally malformed header fields ๐Ÿ’ช.

7.9. Compromised Internal Hosts ๐Ÿš๏ธ

An internal MUA or MTA that has been compromised could generate mail with a forged From header field and a forged Authentication-Results header field that endorses it ๐Ÿ˜ˆ. Honestly, it's clearly a bigger concern to have compromised internal machines than it is to prove the value of this header field ๐Ÿฅฒ. This risk can be mitigated by arranging for internal MTAs to remove this header field if it claims to have been added by a trusted border MTA (as described above), yet the [SMTP] connection isn't coming from an internal machine known to be running an authorized MTA โœ…. The catch is that, in such a configuration, legitimate MTAs will have to add this header field when legitimate internal-only messages are generated ๐Ÿ™ƒ. This is also covered in Section 5 ๐Ÿซถ.

7.10. Encapsulated Instances ๐Ÿ“ฆ

MIME messages can contain attachments of type "message/rfc822", which contain other messages ๐Ÿ“Ž. Such an encapsulated message can also contain an Authentication-Results header field ๐Ÿ™ˆ. The processing of these is outside the intended scope of this document (see Section 1.3), but some early guidance for MUA developers is still appropriate here ๐Ÿ’œ.

Since MTAs are unlikely to strip Authentication-Results header fields after mailbox delivery, MUAs are advised in Section 4.1 to ignore such instances within MIME attachments ๐Ÿ™…. Also, when you extract a message digest to separate mail store messages or other media, those header fields should be removed so they will never be interpreted improperly by MUAs that might later consume them ๐Ÿงน.

7.11. Reverse Mapping ๐Ÿ”„

Although Section 3 of this memo includes explicit support for the "iprev" method, its value as an authentication mechanism is limited ๐Ÿ˜ฌ. Implementers of this proposal, and agents that use the data it relays, are encouraged to become familiar with the issues raised by [DNSOP-REVERSE] when deciding whether or not to include support for "iprev" ๐Ÿ“š.

8. References ๐Ÿ“š

8.1. Normative References

  • [ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, January 2008.
  • [IANA-HEADERS] Klyne, G., Nottingham, M., and J. Mogul, "Registration Procedures for Message Header Fields", BCP 90, RFC 3864, September 2004.
  • [KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [MAIL] Resnick, P., Ed., "Internet Message Format", RFC 5322, October 2008.
  • [MIME] Freed, N. and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, November 1996.
  • [SMTP] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321, October 2008.

8.2. Informative References

  • [ADSP] Allman, E., Fenton, J., Delany, M., and J. Levine, "DomainKeys Identified Mail (DKIM) Author Domain Signing Practices (ADSP)", RFC 5617, August 2009.
  • [AR-VBR] Kucherawy, M., "Authentication-Results Registration for Vouch by Reference Results", RFC 6212, April 2011.
  • [ATPS] Kucherawy, M., "DomainKeys Identified Mail (DKIM) Authorized Third-Party Signatures", RFC 6541, February 2012.
  • [AUTH] Siemborski, R. and A. Melnikov, "SMTP Service Extension for Authentication", RFC 4954, July 2007.
  • [DKIM] Crocker, D., Hansen, T., and M. Kucherawy, "DomainKeys Identified Mail (DKIM) Signatures", STD 76, RFC 6376, September 2011.
  • [DNS] Mockapetris, P., "Domain names - implementation and specification", STD 13, RFC 1035, November 1987.
  • [DNS-IP6] Thomson, S., Huitema, C., Ksinant, V., and M. Souissi, "DNS Extensions to Support IP Version 6", RFC 3596, October 2003.
  • [DNSOP-REVERSE] Senie, D. and A. Sullivan, "Considerations for the use of DNS Reverse Mapping", Work in Progress, March 2008.
  • [DOMAINKEYS] Delany, M., "Domain-Based Email Authentication Using Public Keys Advertised in the DNS (DomainKeys)", RFC 4870, May 2007.
  • [DSN] Moore, K. and G. Vaudreuil, "An Extensible Message Format for Delivery Status Notifications", RFC 3464, January 2003.
  • [EMAIL-ARCH] Crocker, D., "Internet Mail Architecture", RFC 5598, July 2009.
  • [IANA-CONSIDERATIONS] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008.
  • [IMAP] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1", RFC 3501, March 2003.
  • [POP3] Myers, J. and M. Rose, "Post Office Protocol - Version 3", STD 53, RFC 1939, May 1996.
  • [RFC5451] Kucherawy, M., "Message Header Field for Indicating Message Authentication Status", RFC 5451, April 2009.
  • [SECURITY] Rescorla, E. and B. Korver, "Guidelines for Writing RFC Text on Security Considerations", BCP 72, RFC 3552, July 2003.
  • [SENDERID] Lyon, J. and M. Wong, "Sender ID: Authenticating E-Mail", RFC 4406, April 2006.
  • [SPF] Wong, M. and W. Schlitt, "Sender Policy Framework (SPF) for Authorizing Use of Domains in E-Mail, Version 1", RFC 4408, April 2006.
  • [VBR] Hoffman, P., Levine, J., and A. Hathcock, "Vouch By Reference", RFC 5518, April 2009.

Appendix A. Acknowledgements ๐ŸŽ€

The author wants to shout out the following individuals for their review and constructive criticism of this document ๐Ÿซถ: Dave Cridland, Dave Crocker, Bjoern Hoehrmann, Scott Kitterman, John Levine, Alexey Melnikov, S. Moonesamy, and Alessandro Vesely ๐Ÿ‘‘.

Appendix B. Legacy MUAs ๐Ÿ•ฐ๏ธ

Implementers of this protocol should be aware that many MUAs are unlikely to be retrofitted to support the new header field and its semantics ๐Ÿ˜ญ. For convenience and quicker adoption, a delivery MTA might want to consider adding things that existing MUAs already process, in addition to the Authentication-Results header field ๐Ÿง . One suggestion is to include a Priority header field, on messages that don't already have one, containing a value that reflects the strength of the authentication that was accomplished. For example, "low" for weak or no authentication, and "normal" or "high" for good or strong authentication ๐Ÿ’–.

Some modern MUAs can already filter based on the content of this header field ๐Ÿ”. However, there is keen interest in having MUAs make some kind of graphical representation of this header field's meaning visible to end users ๐ŸŒˆ. Until that capability is added, other interim means of conveying authentication results may be necessary while this proposal and its successors are adopted โœจ.

Appendix C. Authentication-Results Examples ๐Ÿ“

This section shows some examples of using this header field to indicate authentication results ๐Ÿงš.

C.1. Trivial Case; Header Field Not Present ๐ŸŒธ

The trivial case:

     Received: from mail-router.example.com
                   (mail-router.example.com [192.0.2.1])
               by server.example.org (8.11.6/8.11.6)
                   with ESMTP id g1G0r1kA003489;
               Fri, Feb 15 2002 17:19:07 -0800
     From: sender@example.com
     Date: Fri, Feb 15 2002 16:54:30 -0800
     To: receiver@example.org
     Message-Id: <12345.abc@example.com>
     Subject: here's a sample

     Hello!  Goodbye!

                       Example 1: Trivial Case

The Authentication-Results header field is completely absent ๐Ÿ‘ป. The MUA may make no conclusion about the validity of the message ๐Ÿคทโ€โ™€๏ธ. This could be the case because the message authentication services weren't available at the time of delivery, or no service is provided, or the MTA isn't in compliance with this specification ๐Ÿ™ˆ.

C.2. Nearly Trivial Case; Service Provided, but No Authentication Done ๐Ÿ’…

Okay so this one is a message delivered by an MTA that follows this spec but doesn't actually do any message authentication. Lowkey the most chill example ever ๐ŸŒธ

Authentication-Results: example.org 1; none
Received: from mail-router.example.com
              (mail-router.example.com [192.0.2.1])
          by server.example.org (8.11.6/8.11.6)
              with ESMTP id g1G0r1kA003489;
          Fri, Feb 15 2002 17:19:07 -0800
From: sender@example.com
Date: Fri, Feb 15 2002 16:54:30 -0800
To: receiver@example.org
Message-Id: <12345.abc@example.com>
Subject: here's a sample

Hello!  Goodbye!

Example 2: Header Present but No Authentication Done ๐ŸŽ€

The Authentication-Results header field is there, which shows the delivering MTA follows this spec ๐Ÿ’– It used its DNS domain name as the authserv-id. The none token (and the fact that there are no method and result tokens after it) means no message authentication happened at all ๐Ÿ™ˆ The spec version the field's content follows is spelled out right there too, so nobody has to guess โœจ

C.3. Service Provided, Authentication Done ๐Ÿฆ‹

This message was delivered by an MTA that follows this spec and actually applied some message authentication. Main character energy ๐Ÿ‘‘

Authentication-Results: example.com;
          spf=pass smtp.mailfrom=example.net
Received: from dialup-1-2-3-4.example.net
              (dialup-1-2-3-4.example.net [192.0.2.200])
          by mail-router.example.com (8.11.6/8.11.6)
              with ESMTP id g1G0r1kA003489;
          Fri, Feb 15 2002 17:19:07 -0800
From: sender@example.net
Date: Fri, Feb 15 2002 16:54:30 -0800
To: receiver@example.com
Message-Id: <12345.abc@example.net>
Subject: here's a sample

Hello!  Goodbye!

Example 3: Header Reporting Results ๐Ÿงš

The Authentication-Results header field is present, which says the border MTA follows this spec ๐Ÿซถ The authserv-id is the DNS domain name again. The message got checked by that MTA using the method from [SPF], and ngl, that method can't authenticate the local-part, so it's left out of the result's value ๐Ÿ’€ An MUA could pull that extra info out and pass it along if it wants to ๐Ÿ’œ

C.4. Service Provided, Several Authentications Done, Single MTA ๐Ÿ“

Okay this one is so iconic ๐Ÿ˜ญ A message came in through one MTA that follows this spec, and that MTA ran three different message authentication checks at once.

Authentication-Results: example.com;
          auth=pass (cram-md5) smtp.auth=sender@example.net;
          spf=pass smtp.mailfrom=example.net
Authentication-Results: example.com;
          sender-id=pass header.from=example.net
Received: from dialup-1-2-3-4.example.net (8.11.6/8.11.6)
              (dialup-1-2-3-4.example.net [192.0.2.200])
          by mail-router.example.com (8.11.6/8.11.6)
              with ESMTP id g1G0r1kA003489;
          Fri, Feb 15 2002 17:19:07 -0800
Date: Fri, Feb 15 2002 16:54:30 -0800
To: receiver@example.com
From: sender@example.net
Message-Id: <12345.abc@example.net>
Subject: here's a sample

Hello!  Goodbye!

Example 4: Headers Reporting Results from One MTA ๐ŸŒˆ

The Authentication-Results header field is present, which says the delivering MTA follows this spec ๐Ÿ”ฅ The receiving DNS domain name is the authserv-id, once again. The sender proved who they are to the MTA using a method from [AUTH], and both the SPF and Sender ID checks ran and passed โœ… An MUA can grab that extra info and relay it if it wants ๐Ÿฆ‹

Two Authentication-Results header fields aren't required here, since the same host did all of the checking. The authenticating agent could've mashed all the results into one header field instead ๐Ÿง 

This is a scenario where a remote user on a dialup connection (example.net) sends mail to a border MTA (example.com) and uses SMTP authentication to prove who they are ๐Ÿ” The dialup provider has been explicitly authorized to relay mail as example.com, so the SPF and Sender ID checks both pass. Iykyk ๐Ÿ˜Œ

C.5. Service Provided, Several Authentications Done, Different MTAs ๐Ÿ’œ

Okay this is the most real one of all ๐Ÿ˜ญ A message got relayed inbound by two different MTAs that both follow this spec, and they ran multiple message authentication checks between them.

Authentication-Results: example.com;
          sender-id=fail header.from=example.com;
          dkim=pass (good signature) header.d=example.com
Received: from mail-router.example.com
              (mail-router.example.com [192.0.2.1])
          by auth-checker.example.com (8.11.6/8.11.6)
              with ESMTP id i7PK0sH7021929;
          Fri, Feb 15 2002 17:19:22 -0800
DKIM-Signature:  v=1; a=rsa-sha256; s=gatsby; d=example.com;
          t=1188964191; c=simple/simple; h=From:Date:To:Subject:
          Message-Id:Authentication-Results;
          bh=sEuZGD/pSr7ANysbY3jtdaQ3Xv9xPQtS0m70;
          b=EToRSuvUfQVP3Bkz ... rTB0t0gYnBVCM=
Authentication-Results: example.com;
          auth=pass (cram-md5) smtp.auth=sender@example.com;
          spf=fail smtp.mailfrom=example.com
Received: from dialup-1-2-3-4.example.net
              (dialup-1-2-3-4.example.net [192.0.2.200])
          by mail-router.example.com (8.11.6/8.11.6)
              with ESMTP id g1G0r1kA003489;
          Fri, Feb 15 2002 17:19:07 -0800
From: sender@example.com
Date: Fri, Feb 15 2002 16:54:30 -0800
To: receiver@example.com
Message-Id: <12345.abc@example.com>
Subject: here's a sample

Hello!  Goodbye!

Example 5: Headers Reporting Results from Multiple MTAs ๐ŸŽ€

The Authentication-Results header field is present, showing it follows this spec โœจ The authserv-id is the recipient's DNS domain name, once again. The header field shows up twice because two different MTAs in the delivery chain did authentication tests ๐Ÿ‘ฏ The first one, mail-router.example.com, says SMTP AUTH and SPF were both used. SMTP AUTH passed and SPF failed. For SMTP AUTH, there's extra info in the comment field, which the MUA can show if it wants ๐Ÿ’…

The second MTA, auth-checker.example.com, says it ran a Sender ID test (which failed) and a DKIM test (which passed) ๐Ÿ”‘ Again, there's extra data about one of the tests in a comment, and the MUA may choose to render it. Also, highkey important: example.com added a DKIM signature that vouches for the integrity of the lower Authentication-Results field ๐Ÿ›ก๏ธ

Since different hosts ran the two sets of checks, the header fields can't be combined in this example ๐Ÿ™…โ€โ™€๏ธ

This one is a more typical case of mail coming into example.com from a user on a dialup connection at example.net ๐Ÿ“ฌ The user seems legit, since they had a valid password and authenticated at the border MTA with SMTP AUTH. The SPF and Sender ID tests failed because example.com hasn't given example.net permission to relay mail for it. But the DKIM test passed, because the sending user had a private key that matched one of example.com's published public keys and used it to sign the message. Bestie, that's how you do it ๐Ÿซถ๐Ÿ’–

C.6. Service Provided, Multi-Tiered Authentication Done ๐Ÿฆ‹

okay so this one is giving layers ๐Ÿง… A message got authenticated at a bunch of different stages, and one of those stages happened outside the receiving ADMD (the organization's own mail domain) ๐Ÿ‘€

    Authentication-Results: example.com;
          dkim=pass reason="good signature"
            header.i=@mail-router.example.net;
          dkim=fail reason="bad signature"
            header.i=@newyork.example.com
    Received: from mail-router.example.net
              (mail-router.example.net [192.0.2.250])
          by chicago.example.com (8.11.6/8.11.6)
              for <recipient@chicago.example.com>
              with ESMTP id i7PK0sH7021929;
          Fri, Feb 15 2002 17:19:22 -0800
    DKIM-Signature: v=1; a=rsa-sha256; s=furble;
          d=mail-router.example.net; t=1188964198; c=relaxed/simple;
          h=From:Date:To:Message-Id:Subject:Authentication-Results;
          bh=ftA9J6GtX8OpwUECzHnCkRzKw1uk6FNiLfJl5Nmv49E=;
          b=oINEO8hgn/gnunsg ... 9n9ODSNFSDij3=
    Authentication-Results: example.net;
          dkim=pass (good signature) header.i=@newyork.example.com
    Received: from smtp.newyork.example.com
              (smtp.newyork.example.com [192.0.2.220])
          by mail-router.example.net (8.11.6/8.11.6)
              with ESMTP id g1G0r1kA003489;
          Fri, Feb 15 2002 17:19:07 -0800
    DKIM-Signature: v=1; a=rsa-sha256; s=gatsby;

          d=newyork.example.com;
          t=1188964191; c=simple/simple;
          h=From:Date:To:Message-Id:Subject;
          bh=sEu28nfs9fuZGD/pSr7ANysbY3jtdaQ3Xv9xPQtS0m7=;
          b=EToRSuvUfQVP3Bkz ... rTB0t0gYnBVCM=
    From: sender@newyork.example.com
    Date: Fri, Feb 15 2002 16:54:30 -0800
    To: meetings@example.net
    Message-Id: <12345.abc@newyork.example.com>
    Subject: here's a sample

Example 6: Headers Reporting Results from Multiple MTAs in Different ADMDs ๐ŸŽ€

In this example, we get to see multi-tiered authentication with an extended trust boundary, and it's honestly so cool โœจ

The message was sent by someone at example.com's New York office (newyork.example.com) to a mailing list managed at an intermediary. It was signed at the origin using DKIM ๐Ÿ”

The message then went to a mailing list service provider called example.net, which example.com uses. Over there, meetings@example.net gets expanded into a long list of recipients, and one of them is at the Chicago office. For this example, we'll assume the trust boundary for chicago.example.com includes the mailing list server at example.net ๐Ÿงš

The mailing list server there authenticated the message first and added an Authentication-Results header field saying so. It used its DNS domain name for the authserv-id. Then it altered the message by adding some footer text to the body, including administrivia like unsubscription instructions ๐Ÿ“ Finally, the mailing list server adds a second DKIM signature and starts distributing the message.

The border MTA for chicago.example.com explicitly trusts results from mail-router.example.net, so that header field is not removed. It evaluates both signatures and finds that the first (most recent) one is a "pass". The second one is a "fail", but that's because of the modifications we just talked about ๐Ÿ™ˆ Here's the plot twist though: the first signature covered the Authentication-Results header that mail-router.example.net added, and that header validated the second signature. So, indirectly, you can tell that the authentications claimed by both signatures are actually valid. Iconic ๐Ÿ’…

Two styles of presenting metadata about the result are in use here, and I'm obsessed with the contrast. In one case there's a "reason=" clause, which is meant for easy extraction by parsers. In the other case, the CFWS production of the ABNF is used to include that data as a header field comment. The latter can be harder for parsers to pull out, since mail header fields support a bunch of different syntaxes ๐Ÿค“

C.7. Comment-Heavy Example ๐Ÿ’ฌ

The formal syntax lets comments show up inside the content in a bunch of places. Just to show it off, this example is also legal:

    Authentication-Results: foo.example.net (foobar) 1 (baz);
        dkim (Because I like it) / 1 (One yay) = (wait for it) fail
          policy (A dot can go here) . (like that) expired
          (this surprised me) = (as I wasn't expecting it) 1362471462

Example 7: A Very Comment-Heavy but Perfectly Legal Example ๐ŸŒˆ

Appendix D. Operational Considerations about Message Authentication ๐Ÿง 

Okay, bestie, this part is about the why ๐Ÿซถ The whole protocol is built on the idea that authentication (and presumably, in the future, reputation) work is usually done by border MTAs, not MUAs or intermediate MTAs. The latter just use the results the border MTAs figured out. Is this mandatory for taking part in electronic mail or message authentication? Nope, not at all. But this protocol and how it's been deployed so far are based on that model. The assumption covers several common ADMD requirements:

  1. Service operators want to handle problem messages as close to the border of the ADMD as they can. That lets them do things like rejecting messages at the SMTP level instead of generating a DSN internally. So if you do any of the authentication or reputation work only at the MUA or intermediate MTA, that goal just isn't reachable ๐Ÿšช
  2. Border MTAs are more likely to have direct access to external sources of authentication or reputation information, since modern MUAs tend to be heavily firewalled ๐Ÿงฑ So some MUAs might not even be able to finish authentication or reputation evaluations without complicated proxy configurations or similar hassle.
  3. MUAs rely on the upstream MTAs inside their trust boundaries to make correct (as much as is possible) evaluations about the message's envelope, header, and content. So MUAs don't need to know how to do the work the upstream MTAs do. They only need the results ๐Ÿ’โ€โ™€๏ธ
  4. Evaluations about the quality of a message are a little bit expensive, anywhere from simple token matching (like a list of preferred DNS domains) to cryptanalysis (like public/private key work). So they need to be minimized ๐Ÿ’ธ Doing those tests at the border MTA is way better than doing them at every MUA that handles a message. If an ADMD's environment sticks to common messaging protocols, a reputation query or authentication check done by a border MTA would return the same result as the same query done by an MUA. But if the MUA does the work, a message arriving for multiple recipients would cause authentication or reputation evaluation to happen more than once for the same message (once at each MUA). That's needless amplification of resource use, and it creates a possible denial-of-service attack vector ๐Ÿ˜ฌ
  5. Minimizing change is good ๐ŸŒธ As new authentication and reputation methods show up, the list of methods supported by this header field would presumably get extended. If MUAs just consume the contents of this header field instead of trying to do authentication and/or reputation work themselves, then MUAs only have to learn to parse this header field once. A new method then only needs a configuration change at the MUAs and software changes at the MTAs, which are presumably fewer in number. When you're deciding whether to put these functions in MTAs or MUAs, you have to consider individual flexibility, infrastructure inertia, and scale of effort. It's typically easier to change a single MUA than an MTA, because the modification affects fewer users and can be pursued with less care. However, changing many MUAs is more effort than changing a smaller number of MTAs.
  6. For decisions that affect message delivery and display, assessment based on authentication and reputation works best close to the time of message transit, as a message makes its journey toward a user's inbox, not afterwards โณ DKIM keys and IP address reputations, etc., can change over time or even become invalid, and users can take a long time to read a message once it's delivered. So the value of this work degrades, maybe quickly, once delivery has completed. This seriously diminishes the value of the work when it's done anywhere other than at MTAs ๐Ÿ“‰

Many operational choices are possible within an ADMD, including where authentication and/or reputation assessment happens. The current specification doesn't dictate any of those choices. What it does do is support the cases where information produced by one stage of analysis needs to be carried along with the message to the next stage ๐Ÿ“ฆ

Appendix E. Changes since RFC 5451 ๐Ÿ“œ

  • Erratum #2617 was addressed in RFC 6577 and was incorporated here.
  • Requested Internet Standard status.
  • Changed IANA rules from "IETF Review" to "designated expert".
  • Updated existing IANA registries from the old RFC to this one.
  • Added references to ADSP, ATPS, and VBR.
  • Removed all the "X-" stuff, per BCP 178.
  • Adjusted language to indicate that this header field was already defined and that we're just refreshing and revising.
  • In a few places, RFC 2119 language had been used in lowercase terms; fixed here.
  • Erratum #2818 addressed.
  • Erratum #3195 addressed.
  • Performed some minor wordsmithing and removed odd prose.
  • ABNF: changed "dot-atom" to "Keyword" since "dot-atom" allows "=", which leads to ambiguous productions.
  • ABNF: the authserv-id can be a "value", not a "dot-atom".
  • ABNF: separated the spec version from the method version; they're syntactically the same but semantically different. Added a section discussing them.
  • Called out the SMTP verb exceptions ("mailfrom" and "rcptto"); the previous RFC didn't do this, leading to interoperability problems.
  • Rather than deleting suspect header fields, they could also be renamed to something harmless; there is at least one implementation of this.
  • Updated IANA "Email Authentication Methods" registry to include version numbers.
  • Rather than repeating what RFC 4408 says the SPF results are, just referred to those documents.
  • To avoid confusing consumers, constrained inclusion of unnecessary properties.
  • Reviewed usage of "should" vs. "SHOULD".
  • Updated prose around authserv-id (Section 2.4).

Author's Address ๐Ÿ’Œ

   Murray S. Kucherawy
   270 Upland Drive
   San Francisco, CA  94127
   US

   EMail: superuser@gmail.com

That's the whole spec, bestie ๐ŸŽ€โœจ Go forth and authenticate responsibly ๐Ÿ’…๐Ÿ’–

๐Ÿ“ฆ where this page comes from