<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 4.0.7) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-dkim-dkim2-spec-09" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="DKIM2 Signatures">DomainKeys Identified Mail Signatures v2 (DKIM2)</title>

    <author initials="R." surname="Clayton" fullname="Richard Clayton">
      <organization>Yahoo</organization>
      <address>
        <email>rclayton@yahooinc.com</email>
      </address>
    </author>
    <author initials="W." surname="Chuang" fullname="Wei Chuang">
      <organization>Google</organization>
      <address>
        <email>weihaw@google.com</email>
      </address>
    </author>
    <author initials="B." surname="Gondwana" fullname="Bron Gondwana">
      <organization>Fastmail Pty Ltd</organization>
      <address>
        <postal>
          <street>Level 2, 114 William Street</street>
          <code>3000</code>
          <country>Australia</country>
        </postal>
        <phone>+61 457 416 436</phone>
        <email>brong@fastmailteam.com</email>
      </address>
    </author>

    <date year="2026" month="November" day="01"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 86?>

<t>DomainKeys Identified Mail v2 (DKIM2) permits the owner of a signing
domain to document that they have handled an email message by
associating their domain with the message.
This is achieved by providing a hash value that has been calculated on the
current contents of the message and then applying a cryptographic
signature that covers the hash values and other details about the
transmission of the message. Verification is performed by querying an entry
within the signing domain's DNS space to retrieve an appropriate public
key. As a message is transferred from author to recipient, systems that
alter the body or header fields will provide details of their changes
and calculate new hash values. Further signatures will be added to
provide a "chain" that receivers can validate. This permits verifiers
to identify the nature of changes made by intermediaries and apply a
reputation to the systems that made changes. DKIM2 also allows
recipients to detect when messages have been unexpectedly "replayed"
and will ensure that Delivery Status Notifications are only sent
to entities that were involved in the transmission of a message.</t>



    </abstract>



  </front>

  <middle>


<?line 106?>

<section anchor="introduction"><name>Introduction</name>

<t>DomainKeys Identified Mail v2 (DKIM2) permits a person, role, or
organization to document that they have handled an email message by
associating a domain name <xref target="RFC1034"></xref> with the message <xref target="RFC5322"></xref>. A
public key signature is used to record that they have been able
to read the contents of the message and write to it.</t>

<t>Verification of claims is achieved by fetching a public key stored
in the DNS under the relevant domain and then checking the signature.</t>

<t>Message transit from author to recipient is through
Forwarders that typically make no substantive change to the message
content and thus preserve the DKIM2 signature. Where they do make
a change the changes they have made are documented so that
these can be "undone" and the original signature validated.</t>

<t>When a message is forwarded from one system to another an
additional DKIM2 signature is added on each occasion. This Chain
of Custody assists Verifiers in distinguishing between messages that
were intended to be sent to a particular email address and those
that are being "replayed" to that address.</t>

<t>The Chain of Custody can also be used to ensure that Delivery Status
Notifications are only sent to entities that were involved in the
transmission of a message.</t>

<t>Organizations that process a message can add to their signature
a request for feedback as to any opinion (for example, that the
message was considered to be spam) that the eventual recipient of
the message wishes to share.</t>

<section anchor="other-dkim2-documents"><name>Other DKIM2 documents</name>

<t>Readers are advised to be familiar with the material in <xref target="DKIM2BCP"></xref>
which provides deployment and operations guidance and advice along
with <xref target="DKIMKEYS"></xref> which provides details on how DKIM keys are stored
within the Domain Name System.</t>

</section>
</section>
<section anchor="terminology-and-definitions"><name>Terminology and definitions</name>

<t>This section defines terms used in the rest of the document.</t>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<t>DKIM2 is designed to operate within the Internet Mail service, as
defined in <xref target="RFC5598"></xref>.  Basic email terminology is taken from that
specification.</t>

<t>DKIM2 inherits many ideas from DKIM (<xref target="RFC6376"></xref>) which, for clarity
we refer to in this specification as DKIM1. In addition, some features
were influenced by the experimental ARC protocol (<xref target="RFC8617"></xref>) and
the lessons learned from that experiment (<xref target="CONCLUDEARC"></xref>).</t>

<t>Syntax descriptions use Augmented BNF (ABNF) <xref target="RFC5234"></xref>, together with
the %s"..." notation for case-sensitive strings defined in <xref target="RFC7405"></xref>.</t>

<t>This document uses JSON <xref target="RFC8259"></xref> to encode the Recipes which
record changes made to the message header fields or the message body.
The JSON objects are then base64 encoded. This means that a
standard JSON parser can be used to create what may be quite
complex data structures.</t>

<t>Keys in the top-level JSON object other
than "h" and "b" are reserved for future specifications, which may
define new kinds of Recipe with their own syntax. If present,
unrecognized top-level keys will be ignored. Within "h" and "b" only
the structures defined in this document are permitted; in particular
each Recipe step <bcp14>MUST</bcp14> contain exactly one of the keys "c", "d" or "u".</t>

<section anchor="signer"><name>Signer</name>

<t>Elements in the mail system that sign messages on behalf of a domain
are referred to as Signers.  These may be MUAs (Mail User Agents),
MSAs (Mail Submission Agents), MTAs (Mail Transfer Agents), or other
agents such as mailing list "exploders".  In general, any Signer will
be involved in the injection of a message into the message system in
some way.  The key point is that a message is signed before it
leaves the administrative domain of the Signer.</t>

</section>
<section anchor="forwarder"><name>Forwarder</name>

<t><xref target="RFC5598"></xref> defines a Relay as transmitting or retransmitting a message
but states that it will not modify the envelope information or the
message content semantics. It also defines a Gateway as a hybrid of
User and Relay that connects heterogeneous mail services. In this
document we use the concept of a Forwarder which is an MTA that receives
a message and then, as an alternative to delivering it into a
destination mailbox, can forward it on to another system in an
automated, pre-determined, manner.</t>

</section>
<section anchor="reviser"><name>Reviser</name>

<t>As will be seen, a Forwarder may alter the message content or header
fields, in such a way that existing signatures on the message will
no longer validate. If so, then a record will be made of these
changes. We call a Forwarder that makes such changes a Reviser.</t>

</section>
<section anchor="verifier"><name>Verifier</name>

<t>Elements in the mail system that verify signatures are referred to as
Verifiers.  These may be Forwarders, Revisers, MTAs, Mail Delivery
Agents (MDAs), or MUAs.
It is an expectation of DKIM2 that a recipient of a message will
wish to verify some or all signatures before determining whether or
not to accept the message or pass it on to another entity.</t>

</section>
<section anchor="signing-domain"><name>Signing Domain</name>

<t>A domain name associated with a signature. This domain may be
associated with the author of an email message, their organization, a
company hired to deliver it, a mailing list operator, or some other
entity that handles email messages. What they have in common is
that at some point they had access to the entire contents of the
message and were in a position to add their signature to the message.</t>

</section>
<section anchor="originator"><name>Originator</name>

<t>The entity that creates and sends the initial form of a message.
The Originator adds the first Message-Instance header field (m=1) and
the first DKIM2-Signature header field (i=1) to the message.</t>

</section>
<section anchor="header-field"><name>Header field</name>

<t>As defined in <xref target="RFC5322"></xref>, a header field is a single logical line in
the message header consisting of a field name, a colon, and a field
body (value).  In this document "header field" always refers to a
single field; "header fields" (plural) refers to multiple fields.
The unqualified term "header" is avoided to prevent ambiguity.</t>

</section>
<section anchor="tag"><name>Tag</name>

<t>A named element within a header field (see <xref target="hfMessageInstance"/>
and <xref target="hfDKIM2signature"/>).  A tag
consists of a tag-name and a tag-value separated by an equals sign.
Tags are separated by semicolons within the header field.</t>

</section>
<section anchor="message-body"><name>Message body</name>

<t>The content of an email message that follows the blank line after
the header fields, treated as a sequence of octets.  In this document,
the terms "body" and "message body" are used interchangeably.</t>

</section>
<section anchor="hash"><name>Hash</name>

<t>A fixed-length value produced by applying a cryptographic hash
function (such as SHA-256) to an input.  DKIM2 uses hashes to
create a compact, verifiable representation of message header fields
and the message body.</t>

</section>
<section anchor="glossary"><name>Glossary</name>

<t>The following terms are used throughout this document:</t>

<dl>
  <dt>DKIM1</dt>
  <dd>
    <t>The original DomainKeys Identified Mail protocol as specified in
<xref target="RFC6376"></xref>.</t>
  </dd>
  <dt>DKIM Replay</dt>
  <dd>
    <t>An attack in which messages with valid signatures but with malicious
content are sent from third party systems at scale, with the intent
that the validity of the signature will ensure they are delivered.</t>
  </dd>
  <dt>DKIM2-Signature</dt>
  <dd>
    <t>A header field containing a cryptographic signature over the
Message-Instance and DKIM2-Signature header fields of a message,
along with metadata about the Signing Domain, SMTP envelope, and
timestamp.</t>
  </dd>
  <dt>Message-Instance</dt>
  <dd>
    <t>A header field containing cryptographic hashes of the message
header fields and body, along with optional Recipes that permit
the reversal of changes made at that hop.</t>
  </dd>
  <dt>Recipe</dt>
  <dd>
    <t>A set of instructions encoded as a JSON object within the r= tag
of a Message-Instance header field.  Recipes allow a Verifier to
reconstruct the previous state of a message from its current state,
by specifying which parts of the header fields or body to copy and
which literal values to substitute.</t>
  </dd>
  <dt>Chain of Custody</dt>
  <dd>
    <t>The sequence of DKIM2-Signature header fields on a message, each
recording the SMTP envelope addresses (MAIL FROM and RCPT TO) used
at each hop.  A valid Chain of Custody demonstrates that the message
followed a plausible path from Originator to the current recipient.</t>
  </dd>
  <dt>Selector</dt>
  <dd>
    <t>A subdivision of the key namespace for a Signing Domain, used
to look up the public key in DNS.  The Selector value is combined
with the Signing Domain to form the DNS query name; for example,
Selector "foo.bar" and Signing Domain "example.com" give
"foo.bar._domainkey.example.com".</t>
  </dd>
  <dt>Authentic</dt>
  <dd>
    <t>A From header field is Authentic if, when it is placed into a message
(either at message creation or later modification), the next
DKIM2-Signature header field created for the message uses a Signing
Domain that can be matched to the domain within the email
address in the From.</t>
  </dd>
  <dt>Domain Policy Record</dt>
  <dd>
    <t>The Domain Policy Record holds a flag to indicate whether or not
subdomains can assert that parent domain From header fields are
Authentic. The Domain Policy Record for example.com lives at
_domainkey.example.com.</t>
  </dd>
  <dt>Fully Verified DKIM2 Message</dt>
  <dd>
    <t>A Fully Verified DKIM2 Message is one which meets all the
requirements set out in this specification on Signers, particularly
those for generating DKIM2-Signature and Message-Instance header
fields. Further, when transmitted, the SMTP MAIL FROM and RCPT TO
will match the values recorded in the most recent DKIM2-Signature
header field.</t>
  </dd>
  <dt>Provisionally Verified</dt>
  <dd>
    <t>A message is said to be Provisionally Verified if a cryptographic
check shows that the hash and signature values in the highest numbered
Message-Instance and DKIM2-Signature header fields correspond
with the message to hand, along with some consistency checks on
these header fields. This is a precondition for the message being a Fully
Verified DKIM2 Message but not a guarantee that it is.</t>
  </dd>
</dl>

</section>
<section anchor="whitespace"><name>Whitespace</name>

<t>There are two forms of whitespace used in this specification:</t>

<t><list style="symbols">
  <t>WSP represents simple whitespace, i.e. a space or a tab character
(formal definition in <xref target="RFC5234"></xref>).</t>
  <t>FWS is folding whitespace.  It allows multiple lines separated by
CRLF followed by at least one whitespace, to be joined.</t>
</list></t>

<t>The formal ABNF for these are (WSP given for information only):</t>

<figure><artwork><![CDATA[
WSP =   SP / HTAB
FWS =   [*WSP CRLF] 1*WSP
]]></artwork></figure>

<t>The definition of FWS is identical to that in <xref target="RFC5322"></xref> except for
the exclusion of obs-FWS.</t>

</section>
<section anchor="imported-abnf-tokens"><name>Imported ABNF tokens</name>

<t>The "Domain" token is imported from <xref target="RFC5321"></xref>.</t>

<t>Other tokens not defined herein are imported from <xref target="RFC5234"></xref>.  These
are intuitive primitives such as SP, HTAB, WSP, ALPHA, DIGIT, CRLF,
etc.</t>

</section>
<section anchor="common-ABNF"><name>Common ABNF tokens</name>

<t>The following ABNF tokens are used elsewhere in this document:</t>

<figure><artwork><![CDATA[
ALPHADIGITD  = (ALPHA / DIGIT / "-" / "_")

textstring   = [FWS] ALPHADIGITD *(ALPHADIGITD) [FWS]

ALPHADIGITPS = (ALPHA / DIGIT / "+" / "/")

base64string = ALPHADIGITPS *([FWS] ALPHADIGITPS)
               [[FWS] "=" [[FWS] "="]]
]]></artwork></figure>

<t>Note that base64strings are defined in <xref target="RFC4648"></xref>, but that document
does not contain any ABNF. A base64string <bcp14>MUST</bcp14> be padded with zero
bits and trailing = characters provided if needed. This allows
implementations to compare base64string values without decoding
them.</t>

<t>Note that the definition of base64string allows
for the presence of FWS, which simplifies folding header fields
to an allowable line length. FWS within base64strings will be
ignored when their value is being used.</t>

<t>Values that match textstring, such as the names of hash algorithms,
signature algorithms and flags that may be defined in the future, are
case-sensitive.</t>

</section>
</section>
<section anchor="algorithms"><name>Signing and verification cryptographic algorithms</name>

<t>DKIM2 supports multiple hashing and digital signature algorithms.
Two hashing algorithms (SHA256 and SHA512) and three signing algorithms
(RSA-SHA256, Ed25519-SHA256 and ML-DSA-44) are defined in
this specification. Signers <bcp14>MAY</bcp14> implement either or both of the two
hashing algorithms and any or all of the signing algorithms. Verifiers
<bcp14>MUST</bcp14> implement all five algorithms.</t>

<section anchor="the-sha256-and-sha512-hashing-algorithms"><name>The SHA256 and SHA512 hashing algorithms</name>

<t>The SHA256 hashing algorithm may be used to compute body and header
hashes as defined in <xref target="computing-body-hash"/> and
<xref target="computing-header-hash"/>. As an alternative SHA512 may be used.
Both hash functions are specified in <xref target="FIPS-180-4"/>.</t>

<t>The resultant values are identified by the text string "sha256" or
"sha512" as appropriate and are placed into Message-Instance header
fields.</t>

</section>
<section anchor="the-rsa-sha256-signing-algorithm"><name>The RSA-SHA256 signing algorithm</name>

<t>The RSA-SHA256 signing algorithm computes a hash over all the Message-Instance
and DKIM2-Signature header fields as described in <xref target="calculate-signature"/> using
SHA-256 <xref target="FIPS-180-4"/>. That hash is then signed by the Signer using the RSA
algorithm (defined in PKCS#1 version 1.5 <xref target="RFC8017"></xref>) supplied with the Signer's
private key. The hash <bcp14>MUST NOT</bcp14> be truncated or converted into any
form other than the native binary form before being signed.  The
signing algorithm <bcp14>MUST</bcp14> use a public exponent of 65537.</t>

<t>Signers <bcp14>MUST</bcp14> use RSA keys of at least 1024 bits and <bcp14>SHOULD</bcp14> use keys of
at least 2048 bits (as has been the case for DKIM1 since <xref target="RFC8301"></xref>).
Verifiers <bcp14>MUST</bcp14> be able to validate signatures with keys ranging from 1024 bits
to 4096 bits, and they <bcp14>MAY</bcp14> be able to validate signatures with larger keys.</t>

<t>The signature value (expressed in base64) is placed (with the identifying
text string "rsa-sha256") into DKIM2-Signature header fields.</t>

</section>
<section anchor="the-ed25519-sha256-signing-algorithm"><name>The Ed25519-SHA256 signing algorithm</name>

<t>The Ed25519-SHA256 signing algorithm computes a hash over all the Message-Instance
and DKIM2-Signature fields as described in <xref target="calculate-signature"/> using
SHA-256 <xref target="FIPS-180-4"/> as the hash-alg. It signs the hash with the PureEdDSA
variant Ed25519, as defined in Section 5.1 of <xref target="RFC8032"></xref>.</t>

<t>The signature value (expressed in base64) is placed (with the identifying
text string "ed25519-sha256") into DKIM2-Signature header fields.</t>

</section>
<section anchor="the-ml-dsa-44-signing-algorithm"><name>The ML-DSA-44 signing algorithm</name>

<t>The ML-DSA-44 algorithm computes a signature over all the
Message-Instance and DKIM2-Signature fields as described in
<xref target="calculate-signature"/>. DKIM2 uses "pure" ML-DSA, ML-DSA.Sign and
ML-DSA.Verify (Algorithms 2 and 3 from <xref target="FIPS-204"/>). DKIM2 does
not use HashML-DSA, the field values are input directly into
the signature algorithm without being hashed first.</t>

<t>The five ASCII octets "DKIM2" (0x44 0x4B 0x49 0x4D 0x32, with no terminator)
are used as the context string (ctx), for both signing and verifying.</t>

<t>The signature value (expressed in base64) is placed (with the
identifying text string "mldsa44") into DKIM2-Signature header fields.
Such a signature is 3228 characters long when encoded, so FWS
will need to be inserted into the base64string to allow header fields
to be folded.</t>

<t>Signers <bcp14>SHOULD</bcp14> use the default hedged (randomized) variant of ML-DSA.Sign.
The deterministic variant <bcp14>SHOULD NOT</bcp14> be used on platforms where
side-channel attacks are a concern and they cannot be otherwise
mitigated. Both variants are verified in the same way.</t>

</section>
<section anchor="other-algorithms"><name>Other algorithms</name>

<t>Other algorithms may be defined in the future.</t>

</section>
<section anchor="selectors"><name>Selectors</name>

<t>To support multiple concurrent public keys per Signing Domain, the
key namespace is subdivided using Selectors.</t>

<t>The number of public keys and corresponding Selectors for each domain
is determined by the domain owner. Many domain owners will use just one
Selector, whereas administratively distributed organizations can choose
to manage disparate Selectors
and key pairs in different regions or on different MTAs.
Selectors can also be used to delegate a signing authority, which
can be withdrawn at any time. Selectors also make it possible to
seamlessly replace keys on a routine basis by signing with a new
Selector, while keeping the key associated with the old Selector
available.</t>

<t>Periods are allowed in Selectors and are component separators. Periods in
Selectors define DNS label boundaries in a manner similar to the
conventional use in domain names.  This will allow portions of
the Selector namespace to be delegated.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
selector = Domain
]]></artwork></figure>

</section>
<section anchor="key_management"><name>Key management</name>

<t>Some level of assurance is required that
a public key is associated with the claimed Signer. DKIM2
does this by fetching the key from the DNS for the Signing Domain
specified in the d= field of the DKIM2-Signature header field.</t>

<t>DKIM2 keys are stored in a subdomain named "_domainkey".  Given a
DKIM2-Signature field with a "d=" tag of "example.com" and a Selector
of "foo.bar", the DNS query will be for "foo.bar._domainkey.example.com".</t>

<t>Keys are held in a TXT RR at the selector name. Records that begin with
a "v=" tag with a value other than "DKIM1" are ignored. If more than
one record then remains, this is an error.</t>

<t>NOTE: these keys are no different, and are stored in the same locations
as those for DKIM1 (<xref target="RFC6376"></xref>).</t>

<t>Further details can be found in <xref target="DKIMKEYS"></xref>.</t>

</section>
<section anchor="domain-policy"><name>Domain Policy Record</name>

<t>Many domain owners have delegated a subdomain to intermediaries
that send email on their behalf. This subdomain allows the
intermediary to set up a range of DNS records associated with the
sending of email messages.</t>

<t>It has become commonplace for the use of these subdomains
as DKIM1 Signing Domains to be regarded as equivalent to using
the parent domain. To preserve this behavior, DKIM2 takes account
of the DKIM1 convention when assessing whether or not
From header fields are Authentic.</t>

<t>Authorizing subdomains to be able to make From header fields Authentic
may be entirely inappropriate. Hence, DKIM2 introduces a
Domain Policy Record to hold a flag to record when
subdomains are not authorized to do this.</t>

<t>The Domain Policy Record is stored in the "_domainkey" location
itself (i.e. for "example.com" the record is at "_domainkey.example.com").
This is the location where the original DomainKeys algorithm (<xref target="RFC4870"></xref>)
placed a "Policy Statement".</t>

<t>It is a Tag=Value list (see <xref target="tagvaluelists"/>) held in a TXT RR. It always
begins with the tag v=DKIM1 (for consistency with key records and to avoid
any confusion with <xref target="RFC4870"></xref> material). An optional f= tag holds
a colon-separated list of flags. The flag "strict" indicates that
subdomains are not authorized to make From header fields that use
the domain Authentic. If the strict flag is absent, or there is no f=
tag, they are authorized. Unrecognized flags are ignored.</t>

<t>Purported Domain Policy Records that do not begin with v=DKIM1 are
ignored; if more than one remains the relevant match result is a PERMERROR.</t>

<t>If there is no Domain Policy Record then subdomains are
authorized. If the Domain Policy Record cannot be retrieved
because of a temporary DNS failure the relevant match result is a TEMPERROR.</t>

<t>Note that the Domain Policy Record applies only to the domain that
holds it. There is no inheritance of policy either "up" or "down"
the DNS hierarchy.</t>

<t>Further details can be found in <xref target="DKIMKEYS"></xref>.</t>

</section>
</section>
<section anchor="ignoreheaders"><name>Unsigned header fields</name>

<t>As explained in detail below, DKIM2 will provide a cryptographic
signature for all header fields that are present within a message,
whether they have a standardized meaning or are just placed there
at the whim of a particular sender.</t>

<t>In order to simplify message handling some header fields are not signed
and processing of the message by Signers and Verifiers will be performed
as if they were not present.</t>

<t>The exceptions fall into three classes:</t>

<t><list style="numbers" type="1">
  <t>Trace header fields  <vspace blankLines='1'/>
"Received" or "Return-Path" header fields are ignored. These are
trace header fields as described in <xref target="RFC5321"></xref> and serve only to document
details of the SMTP transmission process.  <vspace blankLines='1'/>
The experimental "Delivered-To:" header field (<xref target="RFC9228"></xref>) is also
ignored.  <vspace blankLines='1'/>
Other specifications designate further header fields as trace
fields. A survey of such specifications, using the methodology of
<xref target="HDRMAINT"></xref>, identifies "DL-Expansion-History",
"Original-Recipient", "SIO-Label-History" and
"X400-Trace", which are also ignored.  <vspace blankLines='1'/>
The same survey records header fields which are added by handling
agents in transit even though no specification designates them as
trace fields: "Apparently-To" and "X400-Received". For DKIM2 it is
that behavior, rather than any formal designation, which matters,
so these are also ignored.  <vspace blankLines='1'/>
Any header field whose field name starts with "Received-", such as
"Received-SPF" (<xref target="RFC7208"></xref>), is ignored. This allows future
specifications to create new trace header fields of this form
without affecting DKIM2 processing.</t>
  <t>Other email authentication mechanisms  <vspace blankLines='1'/>
"DKIM-Signature" header fields and the "ARC-Authentication-Results",
"ARC-Message-Signature" and "ARC-Seal" header fields (<xref target="RFC8617"></xref>)
are ignored.  <vspace blankLines='1'/>
Not including DKIM1 and ARC header fields means that systems that
wish to add other types of signature as well as a DKIM2 signature
are free to do this in any convenient order.</t>
  <t>Header fields with purely local meaning  <vspace blankLines='1'/>
"Authentication-Results" header fields are ignored. These header
fields are defined in <xref target="RFC8601"></xref> where it is made clear that their
contents are only intended for use within the "trust boundary"
of an "Administrative Management Domain". As they can only be used
reliably within that trust boundary there has been no need to
secure them cryptographically and given how they may be added or
removed as messages cross trust boundaries it is inconvenient and
unnecessary for DKIM2 to sign them.  <vspace blankLines='1'/>
Header fields with a header field name starting with "X-" are
ignored. Currently deployed email systems use these fields as
proprietary trace header fields or for other proprietary reasons. They
have no defined meaning for other systems and it considerably
simplifies reporting on changes to header fields to ignore them. Note
that the recommendations in <xref target="RFC6648"></xref> mean that it is most
unlikely that any header field name starting "X-" will be developed
within the IETF.</t>
</list></t>

<section anchor="summary"><name>Summary</name>

<t>These header fields are not signed:</t>

<figure><artwork><![CDATA[
Apparently-To:
ARC-Authentication-Results:
ARC-Message-Signature:
ARC-Seal:
Authentication-Results:
Delivered-To:
DKIM-Signature:
DL-Expansion-History:
Original-Recipient:
Received:
Received-*:
Return-Path:
SIO-Label-History:
X-*:
X400-Received:
X400-Trace:
]]></artwork></figure>

</section>
</section>
<section anchor="JSONrecipe"><name>Recipes</name>

<t>A set of Recipes is used to recreate the previous version of the body
and/or header fields of a message. The Recipes are provided
within a JSON object with the schema:</t>

<figure><artwork><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://dkim2.org/schemas/recipe-v1",
  "title": "DKIM2 Recipes",
  "description": "See draft-ietf-dkim-dkim2-spec",
  "type": "object",
  "properties": {
    "h": {
      "description": "Recipes to recreate specific header fields",
      "type": "object",
      "minProperties": 1,
      "additionalProperties": { "$ref": "#/$defs/recipe-steps" }
    },
    "b": {
      "description": "Recipes to recreate the body",
      "oneOf": [
        {
          "description": "Body Recipes",
          "$ref": "#/$defs/recipe-steps"
        },
        {
          "description": "Previous body state cannot be recreated",
          "type": "null"
        }
      ]
    }
  },
  "anyOf": [
    { "required": ["h"] },
    { "required": ["b"] }
  ],
  "$defs": {
    "recipe-steps": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "description": "Copy lines/fields, start to end",
            "type": "object",
            "properties": {
              "c": { "type": "array",
                "items": { "type": "integer", "minimum": 1 },
                "minItems": 2, "maxItems": 2
              }
            },
            "required": ["c"], "additionalProperties": false
          },
          {
            "description": "Data lines/values to emit",
            "type": "object",
            "properties": {
              "d": { "type": "array",
                "items": { "$ref": "#/$defs/utf8-line" },
                "minItems": 1
              }
            },
            "required": ["d"], "additionalProperties": false
          },
          {
            "description": "Non UTF8 lines/values to emit",
            "type": "object",
            "properties": {
              "u": { "type": "array",
                "items": { "$ref": "#/$defs/base64-line" },
                "minItems": 1
              }
            },
            "required": ["u"], "additionalProperties": false
          }
        ]
      }
    },
    "utf8-line": {
      "description": "One line of text, without CR or LF",
      "type": "string",
      "allOf": [
        { "pattern": "^[^\r\n]*$" }
      ]
    },
    "base64-line": {
      "description": "Canonical base64 of one line",
      "type": "string", "contentEncoding": "base64",
      "allOf": [
        { "pattern": "^[A-Za-z0-9+/]*={0,2}$" },
        { "pattern": "^(.{4})*$" },
        { "pattern": "^([^=]*|.*[AQgw]==|.*[AEIMQUYcgkosw048]=)$" }
      ]
    }
  }
}
]]></artwork></figure>

<t>Note that the specification of JSON schemas is maintained by the JSON Schema
organization, and the relevant specification document is linked to by the
$schema field in each JSON schema.</t>

<t>The JSON keys (property names) <bcp14>MUST</bcp14> be in lower case and they <bcp14>MUST</bcp14>
be unique within any JSON object. These rules cannot be expressed
within the JSON schema, so implementations will need to take other
steps to ensure conformance. Particular care needs to be taken to
ensure uniqueness.</t>

<t>Strings in JSON are always composed of UTF-8 characters. Breaking out
the "utf8-line" into a definition allows the schema to apply a pattern
to it. This pattern ensures that the strings do not contain CR or LF characters.</t>

<t>Since it may be necessary for a Recipe to deal with text that is not valid
UTF-8, the "u" step is provided as an alternative to a "d" step. The pattern
provided in the schema ensures that each string is a valid
"base64string" as set out in <xref target="common-ABNF"/> including the restrictions
on padding.</t>

<t>However, there is one difference from "base64string" in that the schema does
not allow FWS to appear within the string. This does not create any practical
issues because the JSON object will be base64 encoded before being
placed into a header field, and that encoded value can have FWS and
hence can be folded in order to conform to header field length limits.</t>

<t>Note that the restrictions on CR and LF characters apply to "u" step
strings (once they are decoded) just as for "d", but this restriction
cannot be expressed within the schema.</t>

<t>It will be noted that the strings in a "u" step will be encoded twice.
To avoid unnecessary extra processing a "u" step <bcp14>SHOULD NOT</bcp14> be used
when a "d" step would suffice.</t>

<section anchor="header-recipes"><name>Header Recipes</name>

<t>A Header Recipe is an array of instructions applied to the specified
header fields with the given header field name. These Recipes
are applied in order to the message which has been received
so as to recreate the message as it was before modifications were made.
Recipes <bcp14>MUST</bcp14> be provided for any relevant header field (see <xref target="ignoreheaders"/>
for header fields that are not relevant) that is changed; i.e. it is
not possible to indicate that the previous state of the header fields
cannot be recreated.</t>

<t>If there is no "h" field in the JSON object then there was no
modification to the header fields.</t>

<t>Header field names in the JSON keys are matched with the message
without regard to case. Recipes <bcp14>MUST NOT</bcp14> be specified for header
fields that will not be signed (see <xref target="ignoreheaders"/>). A header
field name <bcp14>MUST NOT</bcp14> be present more than once.</t>

<t>If a header field name is not present in the JSON object then all
header fields with that header field name are to be retained.</t>

<t>If the Recipe array for a header field name that is present in the
JSON object is empty then all instances of that header field are to
be removed to reinstate the previous state of the message.</t>

<t>Header fields are numbered "bottom up" (the opposite direction to
the body lines). That is to say, when walking the header fields
from the top of the message to the end of the header fields then
the last header field instance
encountered with any particular header field name is numbered 1,
the header field (with the same header field name) above that is
numbered 2, and so on.</t>

<t>The header fields <bcp14>MUST</bcp14> be counted as if they were unfolded
(in the normal <xref target="RFC5322"></xref> manner). That is, all
of the physical lines that form a single header field are
processed under the same logical number.</t>

<t>The Recipes are processed in order and the resulting header
fields are emitted so that later header fields will appear above
earlier header fields in the recreated message.</t>

<t>Each Recipe step is a JSON object with exactly one key:</t>

<t>A "c" step has the form {"c": [start, end]}. The relevant header field
instances numbered from start to end inclusive, are to be emitted.
The start value of each "c" step <bcp14>MUST</bcp14> be in ascending order and
<bcp14>MUST</bcp14> be greater than the end value of all preceding "c" steps
for this header field name. The end value <bcp14>MUST NOT</bcp14> be less than
the start value. If they are equal, just one header field instance
is to be emitted.</t>

<t>A "d" step has the form {"d": ["value1", "value2", ...]}. Each
string in the array is treated as a value to which the
relevant header field name and a colon is prepended and a CRLF
is appended and the resultant string is then emitted. Note that
the way in which hashes are calculated (see <xref target="computing-header-hash"/>)
means that no heed needs to be taken of wrapping
or the case of the header field name. The text strings <bcp14>MUST NOT</bcp14>
contain CR or LF characters. If a string is empty then the
CRLF will immediately follow the header field name and colon.</t>

<t>A "u" step is semantically identical to a "d" step except that
each string value is in base64 and will be decoded before use.
Since the values in a "d" step <bcp14>MUST</bcp14> be valid UTF-8, a "u" step
<bcp14>MUST</bcp14> be used if that is not the case.</t>

<t>It should be noted that a Header Recipe can conform to the JSON
schema and still break the restrictions in this section.</t>

</section>
<section anchor="body-recipes"><name>Body Recipes</name>

<t>A Body Recipe is an array of instructions applied to the message
body which can recreate the message as it was before modifications
were made.</t>

<t>If there is no "b" field in the JSON object then there was no
modification to the message body. Note that the JSON schema
requires either "h" or "b" to be present.</t>

<t>If the "b" field is null (there are no Recipes) then the previous
state of the message body
cannot be recreated. Verifiers of the message may be able to
determine, by seeing which entity makes this declaration, that
this is acceptable to them because, for example, that entity
is providing a contractually arranged service.</t>

<t>Body lines are numbered "top down" (the opposite direction to
the header fields). The first line of the body (immediately after
the blank line that indicates that there are no more header fields)
is numbered 1.</t>

<t>The Recipes are processed in order and the resulting body lines
are emitted so that later lines will appear below earlier lines
in the recreated message.</t>

<t>Each Recipe step is a JSON object with exactly one key:</t>

<t>A "c" step has the form {"c": [start, end]}. The message body lines
from start to end, inclusive, are to be emitted. The start value of
each "c" step <bcp14>MUST</bcp14> be in ascending order and <bcp14>MUST</bcp14> be greater than the
end value of all preceding "c" steps. The end value <bcp14>MUST NOT</bcp14> be less than
the start value. If they are equal, just one message body line
is to be emitted.</t>

<t>A "d" step has the form {"d": ["line1", "line2", ...]}. Each
string in the array has a CRLF
appended and the resultant string is emitted. The text strings <bcp14>MUST NOT</bcp14>
contain CR or LF characters. If a string is empty then just
a CRLF is emitted.</t>

<t>A "u" step is semantically identical to a "d" step except that
each string value is in base64 and will be decoded before use.
Since the values in a "d" step <bcp14>MUST</bcp14> be valid UTF-8, a "u" step
<bcp14>MUST</bcp14> be used if that is not the case.</t>

<t>It should be noted that a Body Recipe can conform to the JSON
schema and still break the restrictions in this section.</t>

</section>
</section>
<section anchor="messagehashes"><name>Message hash values</name>

<t>A set of cryptographic "hashes" is used to record the current
message body and header fields. The hashes are placed into the
h= tag of a Message-Instance header field.</t>

<t>Since Message-Instance header fields are ignored when calculating the
header hash value, the body hash and header hash may be calculated in
any convenient order.</t>

<section anchor="computing-body-hash"><name>Computing the body hash</name>

<t>The body of messages is treated as merely a string of octets. DKIM2
messages can be either in plain-text or in MIME format; no special
treatment is afforded to MIME content. Message attachments in MIME
format <bcp14>MUST</bcp14> be included in the content that is signed.</t>

<t>The DKIM2 body hash is calculated in the same manner as DKIM1's "simple"
scheme:</t>

<t>All empty lines at the end of the message body are ignored. An empty line
is a line of zero length after removal of the line terminator.  If there
is no body or no trailing CRLF on the message body, a CRLF is added. That
is "*CRLF" at the end of the body is converted to "CRLF".</t>

<t>No other changes are made to the body, which is then processed by the
relevant hash algorithm(s). The name of the hash and the hash value
(converted to base64 form) is then inserted into (Signers) or compared
to (Verifiers) the value of the "h=" tag of the Message-Instance header
field that is being created/verified. If multiple hashes are calculated
then multiple entries within the "h=" value will be inserted/compared.</t>

</section>
<section anchor="computing-header-hash"><name>Computing the header fields hash</name>

<t>The header fields hash calculation done by a Signer <bcp14>MUST</bcp14> apply the
following steps in the order given. A Verifier will need to do the
equivalent steps in order to check that the hash they have received
is correct.</t>

<t><list style="symbols">
  <t>Convert all header field names (not the header field values) to
lowercase.  For example, convert "SUBJect: AbC" to "subject: AbC".</t>
  <t>Unfold all header field continuation lines as described in
<xref target="RFC5322"></xref>; in particular, lines with terminators embedded in
continued header field values (that is, CRLF sequences followed by
WSP) <bcp14>MUST</bcp14> be interpreted without the CRLF.  Implementations <bcp14>MUST
NOT</bcp14> remove the CRLF at the end of the header field value.</t>
  <t>Ignore the header fields listed in <xref target="ignoreheaders"/>.  <vspace blankLines='1'/>
When calculating the header field hash any "Message-Instance" or
"DKIM2-Signature" header fields <bcp14>MUST</bcp14> be ignored. These header
fields will be included in the hash value that will be signed
by a DKIM2-Signature header field and it simplifies implementations
if they are not included twice, especially when determining
whether all modifications to a message have been correctly declared.</t>
  <t>Convert all sequences of one or more WSP characters to a single SP
character.  WSP characters here include those before and after a
line folding boundary.</t>
  <t>Delete all WSP characters at the end of each unfolded header field
value.</t>
  <t>Delete any WSP characters remaining before and after the colon
separating the header field name from the header field value.  The
colon separator <bcp14>MUST</bcp14> be retained.</t>
  <t>Place the header fields in ascending order of the octet
values of their (lower-cased) header field names.</t>
  <t>If there is more than one header field with the same header field name
then the header fields are placed in the order in which they
would have been placed into the message header, that is from
the last within the header upward (the same ordering as is used
in the header Recipes (see <xref target="header-recipes"/>)).  <vspace blankLines='1'/>
It is sometimes suggested that some MTAs re-order
header fields after they receive a message. If an MTA does change the
order of header fields with the same header field name (and those
header fields will be included in the hash calculation) then it is their
responsibility to recover the original order
before verifying an existing signature or passing a previously signed
message to another MTA that may wish to do such verification.</t>
  <t>The hash(es) of the concatenated header fields are calculated.</t>
</list></t>

<t>The name of the hash and the hash value
(converted to base64 form) is then inserted into (Signers) or compared
to (Verifiers) the value of the "h=" tag of the Message-Instance header
field that is being created/verified. If multiple hashes are calculated
then multiple entries within the "h=" value will be inserted/compared.</t>

</section>
</section>
<section anchor="relaxed-domain-match"><name>The relaxed domain match algorithm</name>

<t>The relaxed domain match algorithm is used for several purposes
in the DKIM2 protocol. The match algorithm is asymmetric in that
attention needs to be paid to which value is "first" (Parameter1)
and which is "second" (Parameter2).</t>

<t>The aim is to allow a Signing Domain to be able to sign not only for
itself but also for subdomains. As well as simplifying key handling
for organizations that use subdomains, this also allows existing
"bounce-handling" mechanisms that utilize subdomains to continue
to work alongside DKIM2.</t>

<t>For From header fields the match is also made in the other direction
(see <xref target="subdomain-from"/> and Item <xref format="counter" target="from-rdm"></xref> below).</t>

<t>The algorithm operates in such a way that there is no need to consider
issues such as the different numbers of labels in so-called
"public suffixes". The organization operating the "suffix" can determine
whether they are part of the DKIM2 ecosystem or not. In practice, few if
any "Top Level Domains" will act as a Signing Domain.</t>

<t>Where the algorithm has to match rt= or mf= values from a DKIM2-Signature
header field the values are base64 encoded. The description of the
algorithm assumes that they have been decoded.</t>

<section anchor="rdm-uses"><name>Uses of the relaxed domain match algorithm</name>

<t>The relaxed domain match algorithm is used for four purposes:</t>

<t><list style="numbers" type="1">
  <t anchor="cc-rdm">To assist in addressing the DKIM Replay problem DKIM2 provides a
Chain of Custody for every message. There are several different cases
in checking the Chain of Custody where a relaxed domain match
is required.  <vspace blankLines='1'/>
The i=1 DKIM2-Signature header field is not checked, nor is any
DKIM2-Signature header field that follows one with an nd= tag. The
remaining DKIM2-Signature header fields can be considered in ascending
numeric order.  <list style="symbols">
      <t>If the mf= value recorded in a DKIM2-Signature header field is not
null then a match is sought between the mf= value and a recipient
address in the next lower numbered DKIM2-Signature header field.      <vspace blankLines='1'/>
The mf= value is Parameter1 for the algorithm,
the rt= value is Parameter2.</t>
      <t>If the mf= value is null (&lt;&gt;) then a match is sought between the
Signing Domain (d=) and a recipient address in the next lower
numbered DKIM2-Signature header field.      <vspace blankLines='1'/>
The rt= value is Parameter1 for the algorithm,
the d= value is Parameter2.</t>
      <t>A DKIM2-Signature header field with an nd= tag has no mf= or
rt= tag. A match is sought between the Signing Domain (d=) and
a recipient address in the next lower numbered DKIM2-Signature
header field.      <vspace blankLines='1'/>
The rt= value is Parameter1 for the algorithm,
the d= value is Parameter2.      <vspace blankLines='1'/>
The next numbered DKIM2-Signature header field will not be checked
with this algorithm. Instead its d= value is required to be exactly
the same as the nd= value (see <xref target="imaginary-hops"/>).</t>
    </list></t>
  <t anchor="mf-rdm">It is necessary to check DKIM2-Signature header fields
for a match between the Signing Domain (specified in the d= tag) and
the MAIL FROM domain (mf=). The highest numbered DKIM2-Signature
header field is checked to establish if the message is Provisionally
Verified. All the DKIM2-Signature header fields are checked to establish
if the message is capable of being a Fully Verified DKIM2 Message.  <vspace blankLines='1'/>
The (decoded) mf= value is Parameter1 for the algorithm, the d= value
is Parameter2.  <vspace blankLines='1'/>
When the mf= value is null (mf=&lt;&gt;) or missing (nd= tag present) the matching
algorithm is not used.</t>
  <t anchor="from-rdm">To check that a From header field is Authentic, the domain from the
addr-spec in the From header field will be matched with the Signing
Domain of the relevant DKIM2-Signature header field (see <xref target="authentic-from"/>).  <vspace blankLines='1'/>
The value from the From header field is Parameter1 for the algorithm,
the d= value is Parameter2.  <vspace blankLines='1'/>
If the algorithm finds that there is no match then the algorithm is
re-run with the d= value as Parameter1 and the value from the From header
field as Parameter2.  <vspace blankLines='1'/>
If this second check gives a match but the Domain Policy Record
(see <xref target="domain-policy"/>) for the domain from the From header field
indicates that subdomains are not authorized to make this From
header field Authentic, then there is no match.</t>
  <t anchor="dsn-rdm">To ensure that a DSN (see <xref target="bounce"/>) is not forged, the Signing
Domain used to send the DSN needs to match a recipient address of the
message being reported on. That is, a domain from the rt= value of the
highest numbered DKIM2-Signature in the message being reported on will
have to match with the d= value in the i=1 DKIM2-Signature header field
of the DSN. Signers of DSNs use this match when choosing d=; receivers
of DSNs use it to check that the DSN has not been forged.  <vspace blankLines='1'/>
The (decoded) value from rt= is Parameter1 to the algorithm, the d=
value is Parameter2.</t>
</list></t>

</section>
<section anchor="details-of-the-relaxed-domain-match-algorithm"><name>Details of the relaxed domain match algorithm</name>

<t>The relaxed domain match algorithm proceeds as follows:</t>

<t><list style="numbers" type="1">
  <t>If one of the values being compared is an rt= value then the algorithm
is operated for each email address within the (decoded) rt= value in
turn until one matches or all fail to match.</t>
  <t>If one of the values being compared is an email address then only the
domain part of the value is used for the matches. The local
part, any comments, mail parameters (along with the @ and any angle
brackets) are ignored. A domain literal (e.g. <spanx style="verb">&lt;x@[192.0.2.1]&gt;</spanx>)
never matches. <xref target="RFC5321"></xref> and <xref target="RFC5322"></xref> should be consulted for the exact syntax of
email addresses and the complications that can arise through the
use of comments and source routes.</t>
  <t>If there is an exact (caseless) match between Parameter1 and
Parameter2 then the algorithm exits with a successful match result.</t>
  <t>Otherwise, if Parameter1 contains no dot there is no match.</t>
  <t>Otherwise, remove the leftmost label (the characters up to and
including the first dot) from Parameter1 and return to step 3.</t>
</list></t>

</section>
</section>
<section anchor="tagvaluelists"><name>Tag=Value Lists</name>

<t>DKIM2 uses a simple "tag=value" syntax in the Message-Instance and
DKIM2-Signature header fields. It is also used in the DNS TXT
records for public key values and the Domain Policy Record.</t>

<t>Values are a series of strings containing either text or a
base64string (see <xref target="common-ABNF"/>). The name of the tag will determine
the encoding and structure of each value.</t>

<t>Formally, the ABNF syntax rules are as follows:</t>

<figure><artwork><![CDATA[
tag-list  =  tag-spec *( ";" tag-spec ) [ ";" ]
tag-spec  =  [FWS] tag-name [FWS] "=" [FWS] tag-value [FWS]
tag-name  =  ALPHA *(ALPHA / DIGIT / "_")
tval      =  1*(%x21-3A / %x3C-7E)
                  ; not SEMICOLON
tag-value =  [ tval *( 1*(WSP / FWS) tval ) ]
                  ; Prohibits WSP and FWS at beginning and end
]]></artwork></figure>

<t>Note that WSP is allowed anywhere around tags.  In particular, any
WSP after the "=" and any WSP before the terminating ";" is not part
of the value; however, WSP inside the value is significant.
Semicolon (";") characters <bcp14>MUST NOT</bcp14> occur in the tag value, since
that separates tag-specs. The semicolon at the end of the tag-list
is optional.</t>

<t>Each tag-spec <bcp14>MUST</bcp14> match one of the ABNF rules provided when a
tag-spec is being used in a specification. However, to allow
specifications to be updated, a tag-spec that is not recognized
is ignored.</t>

<t>A specification that uses a Tag=Value list will make it clear whether
tag-names or tag-values are case-sensitive or not. Absent any statement
to the contrary both items are case-sensitive. The specification
may also prescribe that whitespace within a tag-value is to be ignored.</t>

<t>Tags may appear in any order, unless otherwise specified. Tags with
duplicate names <bcp14>MUST NOT</bcp14> occur within a single tag-list; if a tag name
does occur more than once, the entire tag-list is invalid.</t>

<t>Tags that have an empty value are not the same as omitted tags. An
empty value explicitly designates the empty string as the value. An
omitted tag is treated as having the default value, should one be
defined for that particular tag-spec. Tag=value pairs that represent
the default value <bcp14>MAY</bcp14> be included to aid legibility.</t>

</section>
<section anchor="hfMessageInstance"><name>The Message-Instance header field</name>

<t>A Message-Instance header field documents the current contents of
the message and, in the case of a Reviser, records any relevant
changes that have been made to the incoming message.</t>

<t>The Message-Instance header field is a trace header field (see
Section 3.6.7 of <xref target="RFC5322"></xref>).</t>

<t>The Message-Instance header field is a Tag=Value list (see
<xref target="tagvaluelists"/>). No tags have default values and all tag-names
<bcp14>MUST</bcp14> be in lower case.</t>

<t>The m= and h= tags <bcp14>MUST</bcp14> be present. The r= tag is optional.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-field    = "Message-Instance:" tag-list
]]></artwork></figure>

<section anchor="m-the-revision-number-of-the-message-instance-header-field"><name>m= the revision number of the Message-Instance header field</name>

<t>The Originator of a message uses the value 1. Further Message-Instance
header fields are added with a value one more than the current highest
numbered Message-Instance header field. A message with gaps or duplicates
in the numbering is not a Fully Verified DKIM2 Message.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-m-tag    = %s"m" [FWS] "=" [FWS] 1*DIGIT
]]></artwork></figure>

</section>
<section anchor="r-recipes-to-recreate-the-previous-instance-of-the-message"><name>r= Recipes to recreate the previous instance of the message</name>

<t>The r= tag value is the base64 encoded version of the JSON object that
contains the Recipes that allow the previous instance of the message
to be recreated (see <xref target="JSONrecipe"/>).</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-r-tag    = %s"r" [FWS] "=" base64string
]]></artwork></figure>

</section>
<section anchor="h-the-hash-values-for-the-message"><name>h= the hash values for the message</name>

<t>The h= tag value records one or more sets of hashes each made up of
the cryptographic algorithm name, a header hash value and a body
hash value. The hash values are base64strings. Calculating the hash
values is explained in <xref target="messagehashes"/> and the algorithms are described
in <xref target="algorithms"/>.</t>

<t>To provide for algorithmic agility more than one pair of hash values,
using a different algorithm <bcp14>MAY</bcp14> be supplied in the same Message-Instance
header field. An algorithm <bcp14>MUST NOT</bcp14> be present more than once
in a single Message-Instance header field; if the hash values were the
same this would be pointless and if they differ then the Signer is
presumably attempting to confuse a Verifier.</t>

<t>Hash-sets separated by "," form a group which passes if all the
hash-sets in the group pass. Groups are separated by "|" and the
overall result is a pass if any group is a pass. A "," binds more
tightly than "|" (so a,b|c is a pass if both a and b pass or c does).</t>

<t>If a Verifier has not implemented an algorithm then the hash result
is not a pass. Signers using a new hash algorithm can
use the "|" syntax to provide alternatives that the Verifier is
more likely to understand. Signers who prefer "hybrid"
cryptographic algorithms can use the "," to indicate that both
the algorithms they provide are required to pass.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-h-tag    = %s"h" [FWS] "=" [FWS] hash-any
hash-any    = hash-all *( [FWS] "|" [FWS] hash-all )
                               ; pass if any hash-all passes
hash-all    = hash-set *( [FWS] "," [FWS] hash-set )
                               ; pass if all hash-sets pass
hash-set    = hash-name [FWS] ":" header-hash ":" body-hash
hash-name   = %s"sha256" / %s"sha512" / x-hash-name
header-hash = base64string
body-hash   = base64string
x-hash-name = textstring ; for later expansion
]]></artwork></figure>

</section>
</section>
<section anchor="hfDKIM2signature"><name>The DKIM2-Signature header field</name>

<t>The signature information for the message along with information
linking the signed message to its delivery over SMTP is stored in
a DKIM2-Signature header field.</t>

<t>The DKIM2-Signature header field is a trace header field (see
Section 3.6.7 of <xref target="RFC5322"></xref>).</t>

<t>This header field is a Tag=Value list (see
<xref target="tagvaluelists"/>). No tags have default values and all tag-names
<bcp14>MUST</bcp14> be in lower case.</t>

<t>The i=, m=, t=, d= and s= tags <bcp14>MUST</bcp14> be present. There <bcp14>MUST</bcp14> be
either an nd= tag or both mf= and rt= tags. The other tags are optional.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-field    = "DKIM2-Signature:" tag-list
]]></artwork></figure>

<t>It will be noted that we have not included a version number.  Experience
from IMF onward shows that it is essentially impossible to change
version numbers. If it becomes necessary to change DKIM2 in the sort
of incompatible way that a v=2 / v=3 version number would support,
it is expected that header fields will be labeled as DKIM3 instead.</t>

<section anchor="i-the-sequence-number-of-the-dkim2-signature-header-field"><name>i= the sequence number of the DKIM2-Signature header field</name>

<t>The Originator of a message uses the value 1. Further DKIM2-Signature
header fields are added with a value one more than the current highest
numbered DKIM2-Signature header field. A message with gaps
or duplicates in the numbering is not a Fully Verified DKIM2 Message.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-i-tag = %s"i" [FWS] "=" [FWS] 1*DIGIT
]]></artwork></figure>

</section>
<section anchor="m-the-highest-numbered-message-instance-header-field"><name>m= the highest numbered Message-Instance header field</name>

<t>This value allows Verifiers to determine which entity made a particular
revision to the message header fields or body. The value specifies the
highest numbered Message-Instance header field in the message at the
point at which this DKIM2-Signature header field was added.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-m-tag = %s"m" [FWS] "=" [FWS] 1*DIGIT
]]></artwork></figure>

</section>
<section anchor="n-nonce-value"><name>n= nonce value</name>

<t>This text value, if present, is for the creator of the DKIM2-Signature
header field to use for any purpose they wish. For example, it can be
used as an index into a database to assist in handling Delivery Status
Notifications received after delivery failures.</t>

<t>To discourage use of this tag field as an alternative to the use of more
appropriate header fields, the length of the string is restricted
to 64 characters.</t>

<t>Note the value <bcp14>MUST</bcp14> be simple ASCII and <bcp14>MUST NOT</bcp14> contain semicolon.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-n-tag   = %s"n" [FWS] "=" [FWS] nonce-value
nonce-value = *64(%x21-3A / %x3C-7E)
                  ; printable ASCII except semicolon, max 64 chars
]]></artwork></figure>

</section>
<section anchor="t-signature-timestamp"><name>t= signature timestamp</name>

<t>The time that this header field was created. The format is the number of
seconds since 00:00:00 on January 1, 1970 in the UTC time zone.  The value
is expressed as an unsigned integer in decimal ASCII.  This value
is not constrained to fit into a 31- or 32-bit integer.</t>

<t>It is expected that values up to at least 10^12 will occur (this fits
into 40 bits and will cover messages sent until approximately 33,700 AD).</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-t-tag    = %s"t" [FWS] "=" [FWS] 1*DIGIT
]]></artwork></figure>

</section>
<section anchor="mf-the-mail-from-used-when-the-message-was-sent"><name>mf= the MAIL FROM used when the message was sent</name>

<t>DKIM2 records the <xref target="RFC5321"></xref> MAIL FROM value that was used when the message
was transmitted over an SMTP link from the signing MTA. Note that MAIL FROM
may be just "&lt;&gt;", for example for a Delivery Status Notification.</t>

<t>The value is recorded as the base64 encoding of the <xref target="RFC5321"></xref> reverse-path
because of the complex syntax of reverse-path values (which can include
characters which would confuse naive parsers of DKIM2-Signature header
fields). The angle brackets <bcp14>MUST</bcp14> be included, but any "Mail-parameters"
that were present after the reverse-path <bcp14>MUST NOT</bcp14> be included.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-mf-tag  = %s"mf" [FWS] "=" base64string
]]></artwork></figure>

</section>
<section anchor="rt-the-rcpt-to-values-used-when-the-message-was-sent"><name>rt= the RCPT TO value(s) used when the message was sent</name>

<t>DKIM2 records the <xref target="RFC5321"></xref> RCPT TO value(s) that were used when the message
was transmitted over an SMTP link from the signing MTA.</t>

<t>The value is recorded as the base64 encoding of the <xref target="RFC5321"></xref> Forward-path
because of the complex syntax of Forward-path values (which can include
characters which would confuse naive parsers of DKIM2-Signature header
fields). The angle brackets <bcp14>MUST</bcp14> be included, but any "Rcpt-parameters"
that were present after the Forward-path <bcp14>MUST NOT</bcp14> be included.</t>

<t>When a message is intended for more than one recipient then the rt= tag
<bcp14>MAY</bcp14> include all of the recipients so that a single copy of the message
can be sent to all of the recipients in one SMTP transaction.
Alternatively, multiple copies of the message <bcp14>MAY</bcp14> be generated, each
recording only the RCPT TO values used for that copy.</t>

<t>However, a blind carbon copy (bcc) email address <bcp14>MUST NOT</bcp14> appear in
the rt= tag of any copy of the message delivered to a recipient
that is not a bcc recipient (see <xref target="RFC5322"></xref> Section 3.6.3).</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-rt-tag = %s"rt" [FWS] "=" base64string *("," base64string)
]]></artwork></figure>

</section>
<section anchor="nd-the-domain-that-will-appear-in-the-next-dkim2-signature-header-field"><name>nd= the domain that will appear in the next DKIM2-Signature header field</name>

<t>This tag is used in order to provide a valid Chain of Custody when a
message is being forwarded from a different domain than the one to
which it arrived. The domain <bcp14>MUST</bcp14> be a valid DNS name under which a
DKIM2 key record is published.</t>

<t>The domain name in the nd= tag <bcp14>MUST</bcp14> exactly match the domain name of the
d= tag of the next DKIM2-Signature in sequence (i=) order.</t>

<t>Note that when an nd= tag is present both mf= and rt= <bcp14>MUST</bcp14> be omitted.
It is permissible to have a sequence of more than one
DKIM2-Signature header fields with an nd= tag, but this sequence
(in unbroken ascending numeric order of i= tags) <bcp14>MUST</bcp14> end with a
DKIM2-Signature that contains mf= and rt= tags.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-nd-tag   = %s"nd" [FWS] "=" [FWS] Domain
]]></artwork></figure>

</section>
<section anchor="d-the-signing-domain-associated-with-this-signature"><name>d= the Signing Domain associated with this signature</name>

<t>This domain is used to form the query for the public key. The domain
<bcp14>MUST</bcp14> be a valid DNS name under which the DKIM2 key record is published.</t>

<t>The domain name in the d= tag <bcp14>MUST</bcp14> exactly match the rightmost labels of
the domain name of the mf= tag. That is to say, the domain name of the
mf= tag <bcp14>MUST</bcp14> either match the d= domain exactly or be a subdomain
of the d= domain name.</t>

<t>When the mf= domain is empty (it decodes to "&lt;&gt;"), as will be the case
for Delivery Status Notifications (DSNs), then no match is required.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-d-tag   = %s"d" [FWS] "=" [FWS] Domain
]]></artwork></figure>

</section>
<section anchor="s-the-signature-values-for-the-message"><name>s= the signature value(s) for the message</name>

<t>The s= tag value records one or more signatures each made up of a
Selector, the cryptographic algorithm name and the signature value
in base64. Calculating the signature value is explained in
<xref target="calculate-signature"/> and the algorithms are described
in <xref target="algorithms"/>.</t>

<t>The Selector values subdivide the namespace for the domain being
used for signing. Note that the DNS lookup for the public key
will check that the k= algorithm value is a match for the
algorithm supplied in the tag.</t>

<t>A Selector <bcp14>MUST NOT</bcp14> be present more than once in a single DKIM2-Signature
header field; if the signature values differed then the Signer is
presumably attempting to confuse a Verifier.</t>

<t>To provide for algorithmic agility more than one signature,
using different algorithms, <bcp14>MAY</bcp14> be supplied. More than one signature
using the same algorithm (perhaps with a different key length) <bcp14>MAY</bcp14> be
present provided that a different Selector is used for each.</t>

<t>Signatures separated by "," form a group and a group of signatures
passes if all of the signatures in that group pass. Groups of
signatures are separated by "|" and the overall result is a pass
if any group is a pass. A "," binds more tightly than "|" (so a,b|c
is a pass if both a and b pass or c does).</t>

<t>If a Verifier has not implemented an algorithm then the signature
result is not a pass. Signers using a new signature algorithm can
use the "|" syntax to provide alternatives that the Verifier is
more likely to understand. Signers who prefer "hybrid"
cryptographic algorithms can use the "," to indicate that both
the algorithms they provide are required to pass.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-s-tag   = %s"s" [FWS] "=" [FWS] sig-any
sig-any     = sig-all *( [FWS] "|" [FWS] sig-all )
                             ; pass if any sig-all passes
sig-all     = sig-set *( [FWS] "," [FWS] sig-set )
                             ; pass if all sig-sets pass
sig-set     = selector [FWS] ":" [FWS] sig-name [FWS] ":" message-sig
sig-name    = %s"rsa-sha256" / %s"ed25519-sha256" / %s"mldsa44" /
              x-sig-name
x-sig-name  = textstring     ; for later extension
message-sig = base64string
]]></artwork></figure>

</section>
<section anchor="f-flags"><name>f= flags</name>

<t>Flags serve two purposes; they either report what has been done to
the message by the system creating the DKIM2-Signature or they make
a request to systems that handle the mail thereafter. Flags are
separated by commas, and optional white-space allows systems to
add several flags without creating long lines.</t>

<t>If a flag value is not recognized it has no effect.</t>

<t>The flag values that report things are:</t>

<t>"exploded": this message is being sent to more than one email address.
This flag is of importance when detecting DKIM Replay attacks
(see <xref target="DKIM-Replay"/>).</t>

<t>The flag values that make requests are:</t>

<t>"feedback": this Signer requests feedback about how this message is handled
during delivery and thereafter. This document does not describe what such
feedback might be or where it might be delivered. If this flag is absent
then feedback is explicitly not required.</t>

<t>"feedhere": this Signer requests that any feedback about how this message is
handled during delivery and thereafter is relayed via this hop. This flag
will be set by privacy-conscious Forwarders when a message has a "feedback"
flag set and the Forwarder does not wish the identity of systems to which
the message is forwarded to be revealed to the requestor of feedback.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-f-tag        = %s"f" [FWS] "=" [FWS] sig-f-tag-data
                   *( [FWS] "," [FWS] sig-f-tag-data)
sig-f-tag-data   = %s"feedback" / %s"feedhere" / %s"exploded" /
                   x-sig-f-tag-data
x-sig-f-tag-data = textstring ; for later extension
]]></artwork></figure>

</section>
</section>
<section anchor="authentic-from"><name>From header fields are required to be Authentic</name>

<t>Email addresses that appear in From header fields (<xref target="RFC5322"></xref>) will be
displayed by MUAs to users. It needs to be clear that the use of that
email address was authorized -- this specification expresses this as
a requirement that the From header field is "Authentic".</t>

<t>A From header field is Authentic when there is a relaxed domain match
(see <xref target="relaxed-domain-match"/>) between the email address in the
From header field and the Signing Domain found in the d= tag
of the relevant DKIM2-Signature header field. The Authentic
property is demonstrated by the ability to use the domain to sign.</t>

<t>When the From header field has not been modified since the message
was signed for the very first time, i.e. when the i=1
DKIM2-Signature field was created, then that From and that
DKIM2-Signature are the relevant header fields for the comparison.</t>

<t>If another system modifies the From header field, which will be
apparent by inspecting the header Recipes (see <xref target="header-recipes"/>),
then the lowest numbered (i=) DKIM2-Signature header field whose
m= value is greater than or equal to the m= value of the
Message-Instance header field with the Recipe will,
along with the new From header field, be the relevant header
fields for comparison.</t>

<t>A From header field with more than one email address, or one that
uses domain-literals (IP addresses instead of domains), can
never be Authentic. If a message has such a From header field
it will not be possible for a Verifier to conclude that it is
a Fully Verified DKIM2 Message.</t>

<section anchor="subdomain-from"><name>Using subdomains to make From header fields Authentic</name>

<t>As explained in <xref target="domain-policy"/>, custom and practice has been
to permit subdomains to act as a Signing Domain on behalf of a
parent domain. To avoid considerable disruption DKIM2 also allows
this when determining whether or not a From header field is
Authentic.</t>

<t>Hence the relaxed domain match is operated both "downwards" and
"upwards" when comparing the Signing Domain and the domain from
the From header field. When this is not appropriate a parent
domain can publish a Domain Policy Record (see <xref target="domain-policy"/>)
to prevent the "upwards" comparison from occurring.</t>

</section>
</section>
<section anchor="signer-actions"><name>Signer actions</name>

<t>This section gives the actions that need to be undertaken by the Signer
of a message. They may be done in any appropriate order.</t>

<t>If a message is not the initial form of a message (that is, it
already contains DKIM2-Signature or Message-Instance header
fields) then a Signer <bcp14>MUST NOT</bcp14> sign the message unless it is
a Fully Verified DKIM2 Message (see <xref target="verification"/>), or
there is an out-of-band arrangement covering the situation
(see <xref target="imaginary-hops"/>).</t>

<section anchor="add-any-necessary-message-instance-header-fields"><name>Add any necessary Message-Instance header fields</name>

<t>If a system is generating the initial form of a message or if
it is a Reviser that has made changes to the message body and/or
header fields then it <bcp14>MUST</bcp14> compute the body hash as described in
<xref target="computing-body-hash"/> and the hash of the header fields
as described in <xref target="computing-header-hash"/>.</t>

<t>If the message does not contain a Message-Instance header field then one
<bcp14>MUST</bcp14> be added. If hashing the message body or relevant header fields does not
give the same hash values as those recorded in the highest version
(m=) Message-Instance header field then a new Message-Instance
header field <bcp14>MUST</bcp14> be added.</t>

<t>Such a Message-Instance header field <bcp14>MUST</bcp14> contain Recipes to allow
recreation of the message corresponding to the hash values in the
previously highest numbered Message-Instance header field.
Alternatively, it could contain a
null Recipe to indicate that recreating the previous version
of the message body will not be possible. Null Recipes cannot
be used in respect of header field changes.</t>

<t>Using a null Recipe will impact the extent to which a message
can be verified (see <xref target="verification"/>).</t>

<t>A system may add more than one Message-Instance header field if it
wishes to do so, but the DKIM2 design allows all modifications made by
any single system to be documented
in a single Message-Instance header field.</t>

<t>Note that the first (m=1) Message-Instance header field <bcp14>MAY</bcp14>
contain Recipes if it is wished to record any changes made to a
message as it enters the DKIM2 ecosystem.</t>

<t>Adding a Message-Instance field with no Recipes (and thus
the same hash values as the previously highest numbered
Message-Instance field) is not forbidden; however, it is most
likely to be pointless and a waste of time and energy for all concerned.</t>

</section>
<section anchor="chain-of-custody"><name>Provide a Chain of Custody for the message</name>

<t>The DKIM2-Signature header field contains the MAIL FROM
and RCPT TO values that will be used when the message is transmitted,
so these <xref target="RFC5321"></xref> "envelope" values <bcp14>MUST</bcp14> be available to (or
deducible by) a Signer.</t>

<t>The receiver of a message will check for an exact match (including
the local parts of the email addresses) between the MAIL FROM / RCPT TO
<xref target="RFC5321"></xref> protocol values and the mf= and rt= values in the highest numbered
(most recent) DKIM2-Signature header field. The matching will be case
sensitive for the local part (before the @) and case insensitive for
the domain (after the @). A Signer <bcp14>MUST</bcp14> ensure that this Chain of Custody
check will succeed.</t>

<t>It is acceptable for there to
be more RCPT TO email addresses recorded in rt= than are actually used in
the SMTP conversation, but any RCPT TO value which is used <bcp14>MUST</bcp14> be present
in the rt= tag.</t>

<t>Verifiers will check for a relaxed domain match (see <xref target="relaxed-domain-match"/>)
between the Signing Domain (d=) and the domain in the MAIL FROM value.</t>

<t>When the message being signed already has a DKIM2-Signature header field
(i.e. it has already been transmitted at least once) then the Signer <bcp14>MUST</bcp14>
ensure that the message has a valid Chain of Custody, as set out in
<xref target="rdm-uses"/> Item <xref format="counter" target="cc-rdm"></xref>. This Chain of Custody
contributes to the way in which DKIM2 tackles DKIM Replay attacks.</t>

<t>It may be that an MTA does not change anything in the message which would require
a new Message-Instance header field and, additionally, it could forward it in
such a manner that a Verifier would be able to verify the existing message
(that is to say the MAIL FROM and RCPT TO will have appropriate values). In
such a case, the MTA could choose not to add a DKIM2-Signature header field.
To put this another way, an essentially transparent SMTP forwarding system
need not be made "DKIM2 aware".</t>

</section>
<section anchor="imaginary-hops"><name>Chain of Custody for imaginary hops</name>

<t>If a message is being forwarded then the MAIL FROM on the outgoing
message (and the mf= tag which records this value) <bcp14>MUST</bcp14> be set in
such a way that the Chain of Custody is not broken. However, it may
be that the domains used for the delivery of the incoming message
and the domains used for sending the message onward are not the same.</t>

<t>For example, the incoming message might have been addressed to
example.com, but the outgoing message will be sent from example.net.</t>

<t>One way of ensuring that the Chain of Custody remains valid
would be to generate an extra DKIM2-Signature
header field that causes values to match, i.e. a record is fabricated
that documents the mail being passed from one domain to another with
appropriate "mf=" and "rt=" tag values which document the imaginary
transfer of the message from one domain to the next.</t>

<t>Alternatively the "nd=" tag may be used. When present the next higher
sequence numbered DKIM2-Signature header field <bcp14>MUST</bcp14> be signed by the
specified domain. However, since there are no mf= or rt= tag values
there is no need to provide imaginary values for the imaginary "hop"
between the domain used for receiving the message and the domain used to
forward it.</t>

<t>It will be noted that the creation of an extra DKIM2-Signature header field
(whether the nd= scheme is used or not) will require the Signer to have
access to a private key for the domain in the RCPT TO entry of the
message as it arrived, or for a parent of that domain.</t>

<t>Access to this private key is
often achieved by the Signer creating the private key and never sharing it.
One of two approaches is then taken to publishing the public key.
The first is to provide the public key (and Selector value) to the domain owner
who creates an appropriate DNS entry. The alternative is for the Signer
to create a public
key DNS entry within a part of the DNS that they control and the domain owner
publishes a CNAME pointing at this.</t>

<t>The general expectation is that signatures with an nd= tag have been
applied by the same system as the next DKIM2-Signature field
without an nd= tag. However, as a special case (where arrangements
have been put in place to cover the situation) a message with an
nd= tag in the highest numbered DKIM2-Signature header field may
be sent over an SMTP connection. The receiving system will not be able
to validate the MAIL FROM and RCPT TO values, so the message will not
be a Fully Verified DKIM2 Message; whether it is acceptable will depend
on out-of-band arrangements. The system <bcp14>MUST</bcp14> then provide a DKIM2-Signature
header field with a d= tag that exactly matches the nd= tag. Adding
such a header field will signal that the break in the Chain of Custody
is intentional.</t>

</section>
<section anchor="ensure-that-from-header-fields-are-authentic"><name>Ensure that From header fields are Authentic</name>

<t>The Signing Domain to be used has to be consistent with the
requirements already outlined for creating a valid Chain of Custody.</t>

<t>Furthermore, if the original message is being signed, or the From
header field has been modified, the Signing Domain <bcp14>MUST</bcp14> be chosen so
that the From header field in the message will be Authentic
(see <xref target="authentic-from"/>).</t>

<t>If no Signing Domain can make the From header field Authentic, the
message cannot ever be a Fully Verified DKIM2 Message.</t>

<t>In simple terms, the Signing Domain will be equal to, or a
parent of, the MAIL FROM domain. It will also be equal to,
or a parent of, the From header field domain, or a
subdomain of it if the From header field domain permits
that to occur (see <xref target="subdomain-from"/>). A Signer without access to
a suitable private key cannot make the From header field
Authentic, and nor can any Signer when the From header
field has more than one address or a domain-literal.</t>

</section>
<section anchor="determine-if-an-exploded-flag-is-required"><name>Determine if an "exploded" flag is required</name>

<t>An intermediary that receives a message and then sends copies of the
message to more than one email address is said to have "exploded" it.
In such a case the exploded flag <bcp14>MUST</bcp14> be set in the DKIM2-Signature header
field that is being created to sign the outgoing messages. The flag
<bcp14>MUST</bcp14> be set even if the outgoing messages differ.</t>

<t>The flag <bcp14>MUST NOT</bcp14> be set on the very first DKIM2-Signature header
field (i=1).</t>

<t>The purpose of the flag is to give receivers information that
could assist in the detection of DKIM Replay attacks (see <xref target="DKIM-Replay"/>).</t>

</section>
<section anchor="record-an-accurate-timestamp"><name>Record an accurate timestamp</name>

<t>Verifiers check the timestamps in DKIM2-Signature header fields and
if the message is "too old" or "from the future" will classify the
message as not being a Fully Verified DKIM2 Message. These checks
are made to allow systems to safely discard cached information
that they may be using to handle DSNs or to detect DKIM Replay.</t>

<t>Hence, a Signer <bcp14>MUST</bcp14> provide an accurate timestamp (t=) value, albeit
Verifiers only check it against the limits set out in <xref target="check-timestamps"/>.</t>

</section>
<section anchor="signer_privatekey"><name>Determine which Selector value(s) to use</name>

<t>The Signer has to record Selector value(s) in the DKIM2-Signature
header field. Those Selector values allow a Verifier to fetch
public key values. The Signer will need to have access to the
corresponding private key to calculate the signature(s). How
this is achieved is not a matter for this specification.</t>

</section>
<section anchor="calculate-signature"><name>Calculate a signature value</name>

<t>A Signer calculates a signature solely over the Message-Instance and
DKIM2-Signature header fields of the message. The hashes of
the body and other header fields are covered by the hashes in
the highest version (m=) Message-Instance header field and hence
the signature will in practice be signing the message as a whole.</t>

<t>Most cryptographic schemes proceed by first calculating a hash value
and then signing the hash value, but the DKIM2-Signature header field
only provides the final signature value. This means that there
is no difficulty if the hash value is inordinately long, or is
not emitted by the cryptographic routine being used.</t>

<t>The Signer <bcp14>MUST</bcp14> apply the following steps
in the order given (which are not quite the same as the steps
undertaken in calculating header hashes).</t>

<t><list style="symbols">
  <t>Convert all relevant header field names (not the header field values) to
lowercase.  For example, convert "DKIM2-signature" to "dkim2-signature".</t>
  <t>Unfold all header field continuation lines as described in
<xref target="RFC5322"></xref>; in particular, lines with terminators embedded in
continued header field values (that is, CRLF sequences followed by
WSP) <bcp14>MUST</bcp14> be interpreted without the CRLF.  Implementations <bcp14>MUST
NOT</bcp14> remove the CRLF at the end of the header field value.</t>
  <t>Delete all WSP characters. This means all WSP characters before and
after the colon separating the header field name from the header
field value, all WSP characters within the unfolded header field
value and all trailing WSP characters before the CRLF. The colon
separator and the CRLF <bcp14>MUST</bcp14> be retained.</t>
  <t>Place the header fields in order. First come the Message-Instance
header fields in ascending instance (m=) order. Second are the
DKIM2-Signature header fields in ascending sequence (i=) order.
Last of all is an incomplete DKIM2-Signature header field (the
one that this system is creating) with all tags present except
that the signature value(s) within the (s=) value are set to
the null string (""). The selector values, the algorithm name
and the : , | punctuation remain. The incomplete header field
<bcp14>MUST</bcp14> be unfolded, <bcp14>MUST</bcp14> have a trailing CRLF and <bcp14>MUST</bcp14> have WSP
removed in just the same way as the complete header fields
being processed.</t>
  <t>The concatenated header fields are then fed to the signature
algorithm(s). Once all the values are available the null
signature value strings
are replaced by the base64 values of the signatures.</t>
</list></t>

</section>
</section>
<section anchor="verification"><name>Verification</name>

<t>A Verifier determines whether or not a message is a Fully
Verified DKIM2 Message. That is whether or not the message meets all the
requirements set out in this specification on Signers, particularly
those for generating DKIM2-Signature and Message-Instance header
fields.</t>

<t>Further, when a Fully Verified DKIM2 Message is transmitted
over SMTP, the MAIL FROM and RCPT TO values need to be consistent
with values in the highest numbered DKIM2-Signature header field.</t>

<t>However, it is not only the highest numbered header fields that
need to give a PASS. The hashes in each Message-Instance header
field are compared with the message recreated by applying, in
descending order, the Recipes in every Message-Instance header
field numbered higher than it. The signatures in each
DKIM2-Signature header field are checked over the
Message-Instance header fields numbered up to and including its
m= value and the DKIM2-Signature header fields numbered below its
i= value. The message is a Fully Verified DKIM2 Message only when
all of these give a PASS.</t>

<t>The body hashes in Message-Instance header fields numbered below
one with a null Recipe cannot be checked, so such a message is
not a Fully Verified DKIM2 Message. Whether it is nevertheless
acceptable (for example, because there is a contractual
relationship in place) is a matter for local policy.</t>

<t>The specific checks that a Verifier makes and a sensible order in
which to make them are discussed in <xref target="verifier_actions"/>.
This section considers how a Verifier fits into the DKIM2 ecosystem.</t>

<section anchor="messages-that-are-not-fully-verified-dkim2-messages"><name>Messages that are not Fully Verified DKIM2 Messages</name>

<t>It is entirely a matter for local policy whether a message being
a Fully Verified DKIM2 Message makes any difference to whether
or not a message is accepted for delivery.</t>

<t>However, if the message contains DKIM2-Signature or
Message-Instance header fields but it is not a Fully Verified
DKIM2 Message then it <bcp14>MUST NOT</bcp14> be sent to another system (without
some local arrangement being in place). The reason for this is that
the receiving system will be able to determine that
the message is not a Fully Verified DKIM2 Message and that this
would have been entirely apparent at the previous hop.</t>

<t>To put it another way, it is not possible for an intermediary
to "patch up" a message that is not a Fully Verified DKIM2 Message
to make it into one, so an attempt
to forward the message, without prior arrangement, could well
fail and adverse conclusions could be drawn from that failure.</t>

<t>Of course, discarding all the DKIM2 header fields and starting
again (at i=1 m=1) will mean that whatever the previous
history of the message might be, there will be a new
Chain of Custody starting at this point. Naturally, attention
will need to be paid to the provision that From header fields
are required to be Authentic (see <xref target="authentic-from"/>).</t>

</section>
<section anchor="provisionally-verified-messages"><name>Provisionally Verified messages</name>

<t>In order to allow receivers of messages to operate efficiently,
they <bcp14>MAY</bcp14> make an initial assessment of the likelihood that the
message is a Fully Verified DKIM2 Message and accept delivery.</t>

<t>This assessment is made by examining only the highest numbered
DKIM2-Signature header field and the highest numbered
Message-Instance header field and is straightforward to
achieve. If the checks, set out below, all pass then the
message is said to be Provisionally Verified.</t>

<t>If the receiver then determines, upon closer inspection, that the
message is not a Fully Verified DKIM2 Message after all, or they
have some other reason for not wishing to accept the message --
perhaps based on analysis of its contents -- then they <bcp14>MAY</bcp14>
generate a Delivery Status Notification (DSN) and send that
back to the MAIL FROM address used for the delivery.
The details of this procedure appear in <xref target="bounce"/>.</t>

<t>The checks are intended to be made while the SMTP connection is
still open and the message can be rejected and not delivered.</t>

<t>A DSN for a message that has been Provisionally Verified will go
to a system that took part in the delivery, so it cannot become
"backscatter". For a message that has not been Provisionally
Verified there is no such assurance: a DSN generated after the
message has been accepted may go to a third party whose address
was forged, and that can be problematic.</t>

<t>Hence, the best strategy for a message that is not wanted or is
clearly invalidly signed is to reject it (with a 5xx error
code) while the relevant SMTP conversation is still ongoing.
It will then be for the sending system to determine what happens
thereafter.</t>

<t>A Verifier needs to perform the following checks to determine
that a message is Provisionally Verified:</t>

<t><list style="numbers" type="1">
  <t>The m= value in the highest numbered DKIM2-Signature
header field is identical to the m= value of the highest
numbered Message-Instance header field.</t>
  <t>The signatures (s=) in the highest numbered (i=) DKIM2-Signature
header field give a PASS (see <xref target="sigcheck"/>).</t>
  <t>The hashes (h=) in the highest numbered (m=) Message-Instance
header field give a PASS (see <xref target="hashcheck"/>).</t>
  <t>The MAIL FROM and RCPT TO values are consistent
with the mf= and rt= values in the highest numbered
DKIM2-Signature header field.</t>
  <t>Unless the (decoded) mf= value in the highest numbered
DKIM2-Signature header field is null (&lt;&gt;), there is a relaxed
domain match between the d= value and the mf= value
(see <xref target="rdm-uses"/> Item <xref format="counter" target="mf-rdm"></xref>).</t>
</list></t>

<t>If a Verifier gives a TEMPERROR result (it is not possible with
the information to hand to determine whether or not the message
is a Fully Verified DKIM2 Message, see <xref target="output-states"/>) a 4xx
error code <bcp14>SHOULD</bcp14> be used in the SMTP conversation to allow
the sending MTA to understand the situation. If the message passed
Provisional Verification then further attempts to obtain the
missing information could be made before deciding to send
the DSN. If multiple attempts to obtain the information have
all failed the TEMPERROR might usefully be upgraded to a
PERMERROR before being recorded in any DSN that is sent.</t>

<t>The mechanism set out in <xref target="imaginary-hops"/> envisages out-of-band
arrangements to allow the sending of messages with the highest
numbered DKIM2-Signature header field containing an nd= tag. If no
such arrangements are in place then the message is not Provisionally
Verified. If the arrangements are in
place and later analysis shows that the message cannot be
converted into a Fully Verified DKIM2 Message then further
out-of-band arrangements will be needed to deal with reporting
this (using a Delivery Status Notification message or otherwise)
because the provisions in this specification will not be adequate.</t>

</section>
<section anchor="smtp-return-codes"><name>SMTP return codes</name>

<t>Any 4xx or 5xx return code is sufficient to signal
that a message cannot currently be delivered and whether or
not a retry could succeed.</t>

<t>However, if an MTA wishes to specifically signal that it
is rejecting a message where signatures are missing
or do not verify, a 550/5.7.x reply code <bcp14>SHOULD</bcp14> be used.</t>

<t>If an MTA wishes to explicitly signal that it has not been
possible to fetch a public key because of an apparently
temporary DNS issue then a 451/4.7.5 reply code <bcp14>SHOULD</bcp14> be used.</t>

<t>Enhanced status codes are defined in <xref target="RFC3463"></xref>, including
X.7.5 (cryptographic failure). <xref target="RFC7372"></xref> adds codes for email
authentication failures, such as 5.7.20 (no passing DKIM
signature found).</t>

</section>
<section anchor="further-observations-on-verification"><name>Further observations on verification</name>

<t>If the message has been modified since its original creation then
the Message-Instance header fields will usually enable a Verifier to
"undo" those modifications and reconstruct each preceding version
of the message.</t>

<t>In particular, a receiving system may wish to assess the original form
of the message. All Recipes recorded in Message-Instance header
fields could be undone in order (provided
no null Recipe is present) and an assessment then made of whether the
original message was a Fully Verified DKIM2 Message and in particular
whether the From header field is Authentic.</t>

<t>This assessment of the initial form of the message can be done
without considering any other signatures and hash values
except those on the i=1 and m=1 header fields and the simplicity
of this check may be useful to some receivers.</t>

<t>However, determining that the original message was a Fully Verified
DKIM2 Message is only
one part of determining whether the message being delivered is a
Fully Verified DKIM2 Message; other checks will need to be made (see
<xref target="verification"/> and <xref target="verifier_actions"/>).</t>

</section>
</section>
<section anchor="verifier_actions"><name>Verifier actions</name>

<t>This section discusses the detail of the actions taken by a
Verifier to determine whether or not a message is a Fully Verified
DKIM2 Message.</t>

<section anchor="output-states"><name>Output states</name>

<t>For compatibility with the Authentication-Results header field defined
in <xref target="RFC8601"></xref> a verification will result in one of five states.</t>

<t>The states report whether or not the message has traveled to the
destination without undeclared modifications and along a delivery
path consistent with this specification. They do not attest
in any way as to whether the message will be of value to the
recipient or whether any modifications that have been declared are or
are not benign.</t>

<t>The five states are:</t>

<t>NONE:  The message does not contain any DKIM2-Signature or
       Message-Instance header fields.</t>

<t>PASS:  The message is a Fully Verified DKIM2 Message.</t>

<t>FAIL:  Verification of the message was completed but concluded that
       it was not a Fully Verified DKIM2 Message.</t>

<t>PERMERROR:  The message could not be verified due to some error that
      is unrecoverable, such as a required header field being absent
      or malformed.</t>

<t>TEMPERROR:  The message could not be verified due to a temporary
      inability to retrieve a DNS record. A later attempt may
      produce a different result.</t>

<t>A Verifier <bcp14>MAY</bcp14> cease verifying once the outcome of the verification
is known.</t>

<t>Verifiers wishing to communicate the results of verification to other
parts of the mail system may do so in whatever manner they see fit. If
they wish to provide a human-readable string to describe a result
that is not a PASS then, in order to provide the
maximum possible assistance to senders, they <bcp14>SHOULD</bcp14> use the text
strings specified in this document. These human-readable messages
are described with m=<spanx style="verb">&lt;x&gt;</spanx> or tag=<spanx style="verb">&lt;y&gt;</spanx> placeholders;
the <spanx style="verb">&lt;x&gt;</spanx> and <spanx style="verb">&lt;y&gt;</spanx> <bcp14>MUST</bcp14> be replaced with the relevant ordinal
or tag name (without the <spanx style="verb">&lt;</spanx> and <spanx style="verb">&gt;</spanx> characters). Similarly
<spanx style="verb">&lt;value&gt;</spanx> <bcp14>MUST</bcp14> be replaced by a relevant string for the particular
message; and <spanx style="verb">&lt;s1&gt;</spanx> and <spanx style="verb">&lt;s2&gt;</spanx> <bcp14>MUST</bcp14> be replaced by appropriate Selector
names.</t>

<t>If the verification is being performed during an SMTP protocol
conversation the human-readable string <bcp14>SHOULD</bcp14> be part of the
5xx or 4xx response string.</t>

<t>If the results of the verification are being communicated in a
Delivery Status Notification message (<xref target="RFC6522"></xref>) the
human-readable string <bcp14>SHOULD</bcp14> be included.</t>

<t>If a system wishes to record the results returned by a Verifier
into a message then the Authentication-Results header field (<xref target="RFC8601"></xref>)
is available for this purpose. DKIM2 specific values
are defined in <xref target="AUTHRESULTS"></xref>. It should be noted that this header
field is ignored when calculating header hash values.</t>

<t>If verification results are recorded then that record <bcp14>SHOULD</bcp14>
include the human-readable string.</t>

</section>
<section anchor="ensure-that-the-dkim2-header-fields-are-valid"><name>Ensure that the DKIM2 header fields are valid</name>

<t>Verifiers will need to meticulously validate the format and values of all
relevant Message-Instance and DKIM2-Signature header fields. They
will also need to ensure that all required instances of these header
fields are present and that all required tags are present and tags that
cannot appear together do not do so. Unknown tags are to be ignored
as set out in <xref target="tagvaluelists"/>.</t>

<t>No Fully Verified DKIM2 Message will contain a Message-Instance field
with a higher m= value than occurs in any DKIM2-Signature field.</t>

<t>There are also requirements on not repeating hash algorithms or
Selectors.</t>

<t>To assist debugging, errors in a JSON object specifying Recipes
<bcp14>SHOULD</bcp14> be called out specifically and the text of invalid Recipe
steps placed into error messages as appropriate.</t>

<t>If the JSON is valid but the Verifier is not prepared to handle the
complexity of the Recipes then a failure <bcp14>MAY</bcp14> be returned but the
error message <bcp14>SHOULD NOT</bcp14> confuse this situation with other JSON
errors. What "unacceptably complex" might mean is a local
policy decision.</t>

<t>When a message has a null Recipe a Verifier will be unable
to complete all of the checks on the message, and a PERMERROR will
result. Whether such a message is nevertheless acceptable is a
matter for local policy (see <xref target="verification"/>).</t>

<t>A message with no DKIM2 header fields at all will be reported as
NONE. It may of course contain DKIM1 signatures, or it may not
be signed at all.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
PERMERROR: Message-Instance m=<x> missing
PERMERROR: Message-Instance m=<x> is duplicated
PERMERROR: Message-Instance m=<x> syntax error
PERMERROR: Message-Instance m=<x> tag=<y> missing
PERMERROR: Message-Instance m=<x> is not signed
PERMERROR: Message-Instance m=<x> has a duplicate hash algorithm
PERMERROR: Message-Instance m=<x> contains invalid JSON
PERMERROR: Message-Instance m=<x> recipe <value> is invalid
PERMERROR: Message-Instance m=<x> JSON is unacceptably complex
PERMERROR: Message-Instance m=<x> has a null recipe
PERMERROR: DKIM2-Signature i=<x> missing
PERMERROR: DKIM2-Signature i=<x> is duplicated
PERMERROR: DKIM2-Signature i=<x> syntax error
PERMERROR: DKIM2-Signature i=<x> tag=<y> missing
PERMERROR: DKIM2-Signature i=<x> tag=<y> was unexpected
PERMERROR: DKIM2-Signature i=1 has an exploded flag
PERMERROR: DKIM2-Signature i=<x> has a duplicate selector
NONE: No DKIM2 header fields found
]]></artwork></figure>

</section>
<section anchor="check-timestamps"><name>Check the timestamps</name>

<t>A message is not a Fully Verified DKIM2 Message if any of its
DKIM2-Signature header fields was created more than 14 days
before the message was accepted over SMTP.</t>

<t>This limit is intended to assist in the design of schemes
that attempt to detect DKIM Replay without impacting transmission
of messages on today's highly reliable and highly connected Internet.</t>

<t>It might be expected that the timestamps on the DKIM2-Signature
fields were in an ascending order. However, many systems do not
always keep their clocks tightly synchronized with reality, and
interworking will be impacted if sub-second accuracy is required
of MTAs. That said, a timestamp that comes from the far future
may be an attempt to confuse DKIM Replay systems. Hence a message
is not a Fully Verified DKIM2 Message if any timestamp is from
more than one day ahead of when the message was accepted over SMTP.</t>

<t>It should be noted that checking timestamps requires accurate
information about when a message was accepted over SMTP and a
Verifier cannot assess the message otherwise.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
FAIL: DKIM2-Signature i=<x> signature expired
FAIL: DKIM2-Signature i=<x> signature is from the future
]]></artwork></figure>

</section>
<section anchor="check-the-chain-of-custody"><name>Check the Chain of Custody</name>

<t>As explained in <xref target="chain-of-custody"/> to check for a valid Chain
of Custody a Verifier will need to check for an exact
match between the MAIL FROM and RCPT TO parameters used when delivering
a message and the values found in the mf= and rt= tags of the highest
numbered DKIM2-Signature header field. There may be extra values
in the rt= value, but all RCPT TO values actually used for
delivery will need to be present.</t>

<t>When comparing with SMTP protocol values the local part of the email
address is checked as well as the domain. The domains are compared
without regard to case and need to match exactly. As is usual in email
protocols the case of the local part of an email address is assumed
to matter (and see also <xref target="EAI"/>), so the local parts need to match
exactly. Note that the decoded mf= and rt= values used for these
matches include the angle brackets around the email addresses.</t>

<t>A Verifier will also need to check, for every DKIM2-Signature field,
that there is a relaxed domain match (see <xref target="relaxed-domain-match"/>)
between the d= Signing Domain and the mf= value. However, if the
(decoded) mf= value is null (mf=&lt;&gt;) or mf= is absent (there is an
nd= tag present) then no match is performed.</t>

<t>A Verifier then needs to check the Chain of Custody from start
to finish. The steps for this are set out in <xref target="rdm-uses"/>
Item <xref format="counter" target="cc-rdm"></xref> and are not repeated here.</t>

<t>If out-of-band arrangements (as explained in <xref target="imaginary-hops"/>) apply
then there may not be a "next DKIM2-Signature" in the message -- it
is about to be added. Hence, although the message is not presently
a Fully Verified DKIM2 Message, the intention is that the receiving
system will add a DKIM2-Signature header field whose d= matches the
nd= value, to fix this.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
FAIL: DKIM2-Signature i=<x> MAIL FROM <value> did not match
FAIL: DKIM2-Signature i=<x> RCPT TO <value> did not match
FAIL: DKIM2-Signature i=<x> mf= and d= do not match
FAIL: DKIM2-Signature i=<x> nd= does not match
FAIL: DKIM2-Signature i=<x> unexpected nd= tag
FAIL: DKIM2-Signature i=<x> mf= does not match the rt= of i=<y>
FAIL: DKIM2-Signature i=<x> d= does not match the rt= of i=<y>
]]></artwork></figure>

</section>
<section anchor="fetch-the-public-key"><name>Fetch the public key</name>

<t>The public keys of the signatures in DKIM2-Signature fields are
needed to complete the verification process. Details of key management and
representation are described in <xref target="key_management"/> and <xref target="DKIMKEYS"></xref>.
A key record that is malformed cannot be used and the result
is a PERMERROR.</t>

<t>Note that DNS timeouts are considered to be a TEMPERROR but a DNS
result that indicates the key is absent is considered to be a
PERMERROR. Additionally, if more than one record remains from
the processing set out in <xref target="key_management"/>, this is an error.
Any human-readable error
message that results from key fetching errors <bcp14>SHOULD</bcp14> provide the
Selector value so that it is clear which key has a problem.</t>

<t><xref target="FIPS-204"/> notes that an ML-DSA-44 key that is not exactly 1312
octets (1752 characters once encoded as a base64string) is to be
considered malformed. Similarly, Ed25519 keys are exactly 32
octets (44 characters as a base64string), see <xref target="RFC8032"></xref>.</t>

<t>Note that <xref target="DKIMKEYS"></xref> deprecates the h=, n=, s= and t= tags;
DKIM2 ignores them if they are present.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
TEMPERROR: DKIM2-Signature i=<x> public key <s1> could not be fetched
PERMERROR: DKIM2-Signature i=<x> public key <s1> does not exist
PERMERROR: DKIM2-Signature i=<x> public key <s1> has multiple records
PERMERROR: DKIM2-Signature i=<x> public key <s1> has a syntax error
PERMERROR: DKIM2-Signature i=<x> public key <s1> algorithm mismatch
PERMERROR: DKIM2-Signature i=<x> public key <s1> has been revoked
PERMERROR: DKIM2-Signature i=<x> public key <s1> is malformed
]]></artwork></figure>

</section>
<section anchor="sigcheck"><name>Perform the signature verification calculation</name>

<t>Verifying a signature consists of actions semantically equivalent to the
following steps:</t>

<t><list style="numbers" type="1">
  <t>Prepare a canonicalized version of the Message-Instance and DKIM2-Signature
header fields as described in <xref target="calculate-signature"/>. When checking a
DKIM2-Signature header field only the Message-Instance header fields
numbered up to and including its m= value and the DKIM2-Signature header
fields numbered below its i= value are considered.</t>
  <t>The highest numbered DKIM2-Signature header field being checked needs
to be put back to the state it was in when the signature was created.
That is, the signature value(s) themselves are set to a null string
(leaving everything else in the s= tag unchanged) and this "unsigned"
version of the header field is used in the signature calculation.</t>
  <t>Use the relevant public key value(s) to check the signature(s). If the
signature is correct then the intermediate result for that signature
is PASS. If the
signature does not match then the intermediate result is FAIL. If the
value cannot be checked because of an issue with the key then the
intermediate result is either TEMPERROR or PERMERROR.</t>
  <t>An algorithm which a Verifier has not implemented, or which
it regards as insecure, or a public key it regards as too short, is
given a PERMERROR intermediate result.</t>
  <t>Determine whether the signatures specified in the s= tag provide an
overall PASS for the signing of the message. The "sig-all" (comma
separated list) is checked and then the "sig-any" groups (lists
separated by "|" characters). Of course there may be just one
signature and no groups, which means there is no need to combine
results to do the following steps.</t>
  <t>Examine each "sig-all" list of signatures. If every signature is
a PASS then the intermediate result is PASS. If every signature
that is not a PASS is a TEMPERROR then the intermediate result is
TEMPERROR. If any signature is a FAIL then the intermediate result
is FAIL, otherwise the intermediate result is PERMERROR.</t>
  <t>Now examine the "sig-any" groups. If any group is a PASS the result
is PASS. If any group is TEMPERROR the result is TEMPERROR. If
any group is FAIL then the result is FAIL, otherwise the result
is PERMERROR.</t>
  <t>The human-readable text for any error <bcp14>SHOULD</bcp14> provide the relevant
Selector values.</t>
</list></t>

<t>The different "AND/OR" rules for combining signatures are to allow
phased deployment of new algorithms alongside "hybrid" schemes should
algorithms not be fully trusted.</t>

<t>Note that the way in which results are reported means that if a retry
could result in a PASS then TEMPERROR is reported and FAIL is reported
when a signature does not match and no (sig-any) PASS overrides this.</t>

<t>Possible errors (noting that there are many possible ways in
which a complex combination of signatures can fail to give a PASS
result and so this document does not try to provide text for all
of them):</t>

<figure><artwork><![CDATA[
FAIL: DKIM2-Signature i=<x> selector <s1> incorrect signature
FAIL: DKIM2-Signature i=<x> no group of signatures passed
PERMERROR: DKIM2-Signature i=<x> selector <s1> algorithm unknown
PERMERROR: DKIM2-Signature i=<x> selector <s1> algorithm insecure
PERMERROR: DKIM2-Signature i=<x> public key <s1> too short
]]></artwork></figure>

</section>
<section anchor="hashcheck"><name>Validating body and header hashes</name>

<t>Verifying a hash value requires a Verifier to repeat the hash calculation
performed by the Signer as set out in <xref target="computing-header-hash"/>
and <xref target="computing-body-hash"/>. The hash values (for each relevant
hash algorithm) can then be directly compared with the values in a
Message-Instance header field and the PASS/FAIL calculated as follows:</t>

<t><list style="numbers" type="1">
  <t>Compare the header and body hashes with the values in each of the
hash-sets in the h= value in turn. If both match the intermediate
result is PASS, otherwise the intermediate result is FAIL.</t>
  <t>A hash algorithm which a Verifier has not implemented, or which
it regards as insecure, has a PERMERROR intermediate result.</t>
  <t>If there is just one hash-set then the intermediate result is the
result.</t>
  <t>Otherwise examine each "hash-all" list of hash-sets separated by
"," in the h= value. If every hash-set has an intermediate result
of PASS then the intermediate result for that list is PASS. If any
hash-set has an intermediate result of FAIL then the intermediate
result for that list is FAIL, otherwise the intermediate result
is PERMERROR.</t>
  <t>Now examine the "hash-any" groups. If any group has an intermediate
result of PASS the result is PASS. If any group has an intermediate
result of FAIL then the result is FAIL, otherwise the
result is PERMERROR.</t>
  <t>Since there may be more than one hash algorithm present, the
human-readable error message <bcp14>SHOULD</bcp14> indicate which algorithm's
result failed to match and possibly also a fragment of its value.</t>
</list></t>

<t>The different "AND/OR" rules for combining hashes are to allow
phased deployment of new algorithms alongside "hybrid" schemes should
algorithms not be fully trusted.</t>

<t>Note that the way in which results are reported means that FAIL is
reported when a hash-set does not match and no (hash-any) PASS
overrides this.</t>

<t>Possible errors (noting that there are many possible ways in
which a complex combination of hash-sets can fail to give a PASS
result and so this document does not try to provide text for all
of them):</t>

<figure><artwork><![CDATA[
FAIL: Message-Instance m=<x> header hash <value> mismatch
FAIL: Message-Instance m=<x> body hash <value> mismatch
FAIL: Message-Instance m=<x> no group of hashes passed
PERMERROR: Message-Instance m=<x> algorithm <value> unknown
PERMERROR: Message-Instance m=<x> algorithm <value> insecure
]]></artwork></figure>

</section>
<section anchor="check-for-authentic-from-header-fields"><name>Check for Authentic From header fields</name>

<t>The From header fields within a Fully Verified DKIM2 Message are
required to be Authentic.</t>

<t>A Verifier will need to inspect the currently present From header
field and any previous From header fields that Recipes show have
been present since the message was first signed. To determine if
a From header field is Authentic
the relaxed domain match comparison (<xref target="relaxed-domain-match"/>) is used
to compare the domain(s) in the From header field(s) with the
relevant DKIM2-Signature field(s).</t>

<t>Details of how to identify the relevant header fields are given
in <xref target="authentic-from"/>. Note that a From header field with more
than one address, or with a domain-literal, can never be Authentic.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
FAIL: DKIM2-Signature i=<x> matching From is not authentic
FAIL: DKIM2-Signature i=<x> From <value> forbids subdomain signing
FAIL: DKIM2-Signature i=<x> From has more than one address
FAIL: DKIM2-Signature i=<x> From uses a domain literal
TEMPERROR: DKIM2-Signature i=<x> policy for <value> unavailable
PERMERROR: DKIM2-Signature i=<x> multiple records for <value> policy
]]></artwork></figure>

</section>
</section>
<section anchor="DKIM-Replay"><name>DKIM Replay attacks</name>

<t>In a DKIM Replay attack a message with a valid signature but
containing malicious content is sent to large numbers of recipients.
The original Signer may only have signed one message but, without
their knowledge, the malicious message is "replayed" at scale by
a third party. However, since the signature on the message is valid,
reputation systems may allow the messages to be delivered.</t>

<t>Clearly, a Signer that wishes to preserve their good name will want
to avoid signing malicious content, but the reality is that identifying
that an individual message is malicious can be difficult.</t>

<t>Receivers hosting numerous mailboxes can expect to see large
numbers of identical messages sent to them directly from the
originating system. Mechanisms for dealing with DKIM Replay
need to be aware of this and act appropriately.</t>

<t>What distinguishes a DKIM Replay attack, where a third party forwards
signed messages, from an attack by a Signer that sends many malicious
messages itself is that the original Signer may have limited the
number of messages it allows to be sent, and the replay sidesteps
that limit.</t>

<section anchor="preventing-and-detecting-dkim-replay-attacks"><name>Preventing and detecting DKIM Replay attacks</name>

<t>In DKIM2 a number of mechanisms make DKIM Replay much more difficult
to achieve than has been the case with DKIM1. The Chain of Custody
ensures that any system that is replaying will have provided
cryptographic proof that they were an intermediary, and this
information can inform decisions about whether or not to accept
a message.</t>

<t>Systems that provide service for large numbers of mailboxes can
track whether the same message has been received more than once,
having passed via an intermediary, without an "exploded" flag
being added to indicate that multiple copies are
to be expected. A message will have passed via an intermediary
if there is more than one DKIM2-Signature header field present.
A message will be "the same" if the header and body hash values
of the original message (Message-Instance m=1) both match.</t>

<t>Alternatively, if an exploded flag is present this will pin down
where a system is claiming to have sent multiple copies. Assessing
whether the flag was expected can affect decisions about delivery.</t>

<t>If a system only learns the details of a single replayed message
then of course counting is of no value, but if the system
doing bulk replay has added an exploded flag then this can
still affect decisions regarding delivery.</t>

<t>A Receiver can attempt to distinguish a DKIM Replay attack from
bulk sending (if they view this as valuable) by considering whether
the messages arrived via an unexpected route, via a third party.</t>

<t>Receivers need to be aware that they may receive multiple copies
of the same message if different recipients of an original all
choose to forward the message to the receiver. Malicious DKIM
Replay attacks generally happen at such volume that distinguishing
this re-convergence case is unlikely to be especially complex.</t>

<t>It should be noted, as <xref target="RFC1047"></xref> explains, that
duplicated messages can result from a protocol level issue but, with
appropriately set timer values, duplication is rare on today's
Internet.</t>

</section>
</section>
<section anchor="bounce"><name>Delivery Status Notifications in the DKIM2 ecosystem</name>

<t>In the DKIM2 ecosystem, when a message cannot be delivered then
this is reported to the sending machine by means of an <xref target="RFC5321"></xref>
return code or, if the SMTP session has completed, by generating
a Delivery Status Notification (DSN), as defined in <xref target="RFC6522"></xref>.</t>

<t>A DSN is sent to the MAIL FROM address in the usual manner. This
address can be found in the mf= tag value (decoded from base64) of
the highest numbered DKIM2-Signature header field. If this value
has no address ("&lt;&gt;") then a DSN <bcp14>MUST NOT</bcp14> be sent.</t>

<t>DKIM2 requires that there is a relaxed domain match between the
Signing Domain and the mf= value in the same DKIM2-Signature header
field. Hence a DSN for a message that has been Provisionally
Verified will not be "backscatter" to the forged address of a
third party that was not involved in handling the message.</t>

<t>DKIM2 expects failure reports (DSNs) to be passed back in turn to
each previous (validated) hop that was taken on the message's
outward journey until a system is reached that is prepared to
take full responsibility for the failure event. This method of
propagating DSNs gives MTAs that were involved in passing the
message forward the opportunity to adjust their future sending
behavior.</t>

<section anchor="dsn-contents"><name>DSN contents</name>

<t>As set out in <xref target="RFC6522"></xref>, a DSN has a top-level MIME part of
type <spanx style="verb">multipart/report</spanx>.</t>

<t>A valid DSN generated by a DKIM2 system <bcp14>MUST</bcp14> always contain three
sections, the human-readable text, the machine readable status (in a
message/delivery-status MIME part) and either a MIME part of type
<spanx style="verb">message/rfc822</spanx> that holds the original message exactly as it was
submitted by the sending system or <spanx style="verb">text/rfc822-headers</spanx> which has
just the header fields of that message.</t>

</section>
<section anchor="dsn-header-and-smtp-parameters"><name>DSN header and SMTP parameters</name>

<t>The DSN itself <bcp14>MUST</bcp14> have appropriate Message-Instance and
DKIM2-Signature fields, noting that the MAIL FROM to be used
will be null ("&lt;&gt;").</t>

<t>The assurances in this section depend on the message being
reported upon having been Provisionally Verified. It is not
necessary to determine that it is a Fully Verified DKIM2 Message
and of course some DSNs will be sent precisely because that
is not the case.</t>

<t>When creating a DSN there <bcp14>MUST</bcp14> be a relaxed domain match between
the Signing Domain (placed into the d= value of the DKIM2-Signature
header field of the DSN) and a recipient address in the rt= value
of the highest numbered DKIM2-Signature header field of the message
being reported upon
(see <xref target="rdm-uses"/> Item <xref format="counter" target="dsn-rdm"></xref>).</t>

</section>
<section anchor="dsn-propagation"><name>DSN propagation</name>

<t>A Forwarder which receives a DSN <bcp14>MAY</bcp14> propagate this DSN to the
MAIL FROM address used to deliver the message to it
(which can be found in the highest numbered DKIM2-Signature
header field).</t>

<t>When propagating the DSN back along the forwarding chain
the first and second parts of the DSN <bcp14>MUST</bcp14> be rewritten so
as to remove any information about the destination to
which the message was sent.</t>

<t>Additionally, the original message in the third part of the
DSN <bcp14>MUST</bcp14> be converted back to the state the message was in
when it originally arrived -- before it was forwarded.</t>

<t>If the message was modified by the Forwarder on the outward
journey, those modifications <bcp14>MUST</bcp14> be undone and the Message-Instance
header field documenting those changes <bcp14>MUST</bcp14> be removed.</t>

<t>All DKIM2-Signature header fields added by this Forwarder
(including any with an nd= tag) <bcp14>MUST</bcp14> be removed. A good faith
effort <bcp14>SHOULD</bcp14> also be made to remove any header fields that are
not signed by DKIM2, such as Received header fields, that were
not present when the message arrived on its outward journey.</t>

<t>If it is impossible to regenerate the body of the message, because
a "null Recipe" means that the previous version cannot be
reconstructed, then the body <bcp14>MUST</bcp14> be removed from the third
part of the DSN and a <spanx style="verb">text/rfc822-headers</spanx> MIME part <bcp14>MUST</bcp14>
be supplied.</t>

<t>The resultant DSN is sent to the MAIL FROM address from the now
highest numbered DKIM2-Signature header field. The DSN itself
<bcp14>MUST</bcp14> have only one DKIM2-Signature field and only one
Message-Instance header field: i.e. it is a new message.</t>

<t>Following these procedures will ensure that no details
of where the message was forwarded to will be revealed to
the previous hop and the previous hop will be able to
apply the same procedure to return the DSN to its previous
hop, if that is required.</t>

</section>
<section anchor="authentication-of-inbound-dsns"><name>Authentication of inbound DSNs</name>

<t>When a system receives a DKIM2 signed DSN, and the included
original message is also DKIM2 signed, it <bcp14>SHOULD</bcp14> verify that
the returned message (or just the header fields if the body
is not present) has not been altered.</t>

<t>This means:</t>

<t><list style="numbers" type="1">
  <t>There is a relaxed domain match (see <xref target="rdm-uses"/> Item
<xref format="counter" target="dsn-rdm"></xref>)
between the Signing Domain (d=) of the i=1 DKIM2-Signature header field
of the DSN and a recipient address of the returned message.
Recipient addresses are located in the rt= tag of the
last (highest i= tag) DKIM2-Signature in the returned message.</t>
  <t>The last (highest i= tag) DKIM2-Signature header field of the
returned message will be one that was generated by the system
receiving the DSN, determined by examining the
d= and mf= tags of that DKIM2-Signature header field.</t>
  <t>The header fields of the embedded message (in the message/rfc822
MIME part) can be verified by checking the header hash values in
the highest numbered Message-Instance header field. The h= value
is evaluated as in <xref target="hashcheck"/>, except that if the body is
not present a hash-set passes if its header hash matches.</t>
</list></t>

<t>If the verification fails then the DSN <bcp14>MUST NOT</bcp14> be propagated
any further. If verification has been performed prior to
accepting the DSN from the sender the DSN <bcp14>SHOULD</bcp14> be rejected
with a 550/5.7.x return code. If the verification cannot be completed
because of a temporary issue (with DNS lookups) then a 4xx
return code <bcp14>SHOULD</bcp14> be used.</t>

<t>If the returned message does not contain DKIM2-Signature
and Message-Instance header fields then this specification
does not apply and there is no expectation that the DSN
will be sent to any other system.</t>

</section>
</section>
<section anchor="signer_normalize"><name>Preventing transport conversions</name>

<t>DKIM2's design is predicated on valid input.</t>

<t>In order to be signed a message <bcp14>MUST</bcp14> be in "network normal" format,
so that lines are separated with CRLF and any transfer encoding
has been applied.</t>

<t>A message that is not compliant with <xref target="RFC5322"></xref>, <xref target="RFC2045"></xref>, <xref target="RFC2047"></xref>
and other relevant message format standards can be subject to attempts
by intermediaries to correct or interpret such content.  See Section 8
of <xref target="RFC6409"></xref> for examples of changes that are commonly made.  Such
"corrections" may invalidate DKIM2 signatures or have other undesirable
effects, including some that involve changes to the way a message is
presented to an end user.</t>

<t>When calculating the hash on messages that will be transmitted using
base64 or quoted-printable encoding, Signers <bcp14>MUST</bcp14> compute the hash
after the encoding, and Verifiers will check the hash of the encoded
form of text. However, the hash <bcp14>MUST</bcp14> be computed before transport-level
encodings such as SMTP "dot-stuffing" (the modification of lines
beginning with a "." to avoid confusion with the SMTP end-of-message
marker, as specified in <xref target="RFC5321"></xref>).</t>

<t>Further, if the message contains local encoding that will be modified before transmission,
that modification to canonical <xref target="RFC5322"></xref> form <bcp14>MUST</bcp14> be done before signing.
In particular, bare CR or LF characters (used by some systems as a local line
separator convention) <bcp14>MUST</bcp14> be converted to the SMTP-standard CRLF
sequence before the message is signed.  Any conversion of this sort
<bcp14>MUST</bcp14> be applied to the message actually sent to the recipient(s),
not just to the version presented to the signing algorithm.</t>

<t>More generally, the Signer <bcp14>MUST</bcp14> sign the message as it is expected to
be received by the Verifier rather than in some local or internal form.</t>

</section>
<section anchor="EAI"><name>EAI (<xref target="RFC6530"></xref>) considerations for DKIM2</name>

<t>SMTPUTF8 lets MTAs send and receive non-ASCII characters. For the most
part DKIM2 works only in ASCII. Domain values used in the SMTP protocol
(MAIL FROM and RCPT TO) <bcp14>MUST</bcp14> be mapped from U-labels to A-labels before
being recorded in DKIM2-Signature header fields or used in comparisons (see
<xref target="RFC5890"></xref> and <xref target="RFC5891"></xref>). Local parts are recorded unchanged (the base64
encoding means no difficulties will arise).</t>

<t>Non-ASCII characters can also appear in From header fields, which are
recorded and compared when checking if they are Authentic. Again, a
U-label must be mapped to an A-label before comparisons are made or
a lookup for a Domain Policy Record is performed. Local
parts are only ever compared in exact matches.</t>

<t>It should be noted that although email standards generally require
messages to be transported in simple ASCII (and provide numerous
encoding mechanisms to ensure this can be done) nevertheless messages
may contain non-ASCII characters. This is irrelevant for hashing
functions which treat messages as a simple array of bytes, but it
does have an impact on Recipes (see <xref target="JSONrecipe"/>). Accordingly,
Recipes handle header fields and body lines as being in UTF-8 (a
superset of ASCII) and provide "u" steps within Recipes for handling
sequences of byte values that are not valid UTF-8.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>IANA is requested to add two header fields to the
"Permanent Message Header Field Names" table of the "Message
Headers" registry (see <xref target="RFC3864"></xref>).</t>

<dl>
  <dt>Header field name:</dt>
  <dd>
    <t>DKIM2-Signature</t>
  </dd>
  <dt>Applicable protocol:</dt>
  <dd>
    <t>mail</t>
  </dd>
  <dt>Status:</dt>
  <dd>
    <t>standard</t>
  </dd>
  <dt>Trace:</dt>
  <dd>
    <t>yes</t>
  </dd>
  <dt>Author/Change controller:</dt>
  <dd>
    <t>IETF</t>
  </dd>
  <dt>Specification document(s):</dt>
  <dd>
    <t>RFC XXXX (this document)</t>
  </dd>
  <dt>Header field name:</dt>
  <dd>
    <t>Message-Instance</t>
  </dd>
  <dt>Applicable protocol:</dt>
  <dd>
    <t>mail</t>
  </dd>
  <dt>Status:</dt>
  <dd>
    <t>standard</t>
  </dd>
  <dt>Trace:</dt>
  <dd>
    <t>yes</t>
  </dd>
  <dt>Author/Change controller:</dt>
  <dd>
    <t>IETF</t>
  </dd>
  <dt>Specification document(s):</dt>
  <dd>
    <t>RFC XXXX (this document)</t>
  </dd>
</dl>

<t>No other IANA actions are requested.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>Unsigned header fields can be added or removed without detection, and so
they cannot safely be relied upon for security decisions. In particular,
conclusions may be drawn about whether email messages are authentic
based on Authentication-Results header fields which are unsigned. Of
course, a Fully Verified DKIM2 Message provides unambiguous information
about authenticity.</t>

<t>Although a DKIM2 message may only have a single Message-Instance header
field and just one DKIM2-Signature field, this specification allows for
many such header fields, multiple hashes and signatures and places no
limits on the complexity of Recipes. Even if limits were set,
malicious messages could ignore them. <xref target="RFC4732"></xref> surveys denial-of-service
attacks and provides guidance as to how to address them. Implementers
should take notice of this document and much other advice.</t>

<t>If a message has a null Recipe then it will be impossible to verify
the nature of any modifications made to the message when the null Recipe
was added. The expectation is that null Recipes will only
be used when there is a contractual relationship between the operators
doing the modification (perhaps a security gateway of some kind) and
the next recipient of the message. It is unlikely that this contractual
relationship will extend any further, so attempting to forward the
message any further could be unsuccessful.</t>

<t>This specification requires RSA keys to be at least 1024 bits. Longer
keys may be more appropriate in the future, and the algorithms
specified here may, in the course of time, become deprecated. Signers
will need to pay attention to community advice as to whether cryptographic
primitives are appropriate to use, regardless of what this specification
might say.</t>

<t>The default in this specification is that a subdomain is authorized to make
a From header field that uses a parent domain Authentic by reason of the relaxed
domain match (see <xref target="rdm-uses"/> Item <xref format="counter" target="from-rdm"></xref>).
A domain that lets others put DNS records in its
subdomains, whether customers, tenants or users (hosting platforms,
dynamic DNS services, some public-suffix-style registries), needs to
publish a Domain Policy Record with an f=strict setting to prevent
those parties from being able to do that.
Note that sibling domains can never be matched and a Top Level Domain
(TLD) does not need f=strict unless From addresses at the TLD
are in use. It is of course unfortunate to have a security control
that defaults to authorized, but this is the only viable way to avoid
considerable disruption to existing custom and practice.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC1034">
  <front>
    <title>Domain names - concepts and facilities</title>
    <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
    <date month="November" year="1987"/>
    <abstract>
      <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="13"/>
  <seriesInfo name="RFC" value="1034"/>
  <seriesInfo name="DOI" value="10.17487/RFC1034"/>
</reference>
<reference anchor="RFC2045">
  <front>
    <title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
    <author fullname="N. Freed" initials="N." surname="Freed"/>
    <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
    <date month="November" year="1996"/>
    <abstract>
      <t>This initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2045"/>
  <seriesInfo name="DOI" value="10.17487/RFC2045"/>
</reference>
<reference anchor="RFC2047">
  <front>
    <title>MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text</title>
    <author fullname="K. Moore" initials="K." surname="Moore"/>
    <date month="November" year="1996"/>
    <abstract>
      <t>This particular document is the third document in the series. It describes extensions to RFC 822 to allow non-US-ASCII text data in Internet mail header fields. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2047"/>
  <seriesInfo name="DOI" value="10.17487/RFC2047"/>
</reference>
<reference anchor="RFC3463">
  <front>
    <title>Enhanced Mail System Status Codes</title>
    <author fullname="G. Vaudreuil" initials="G." surname="Vaudreuil"/>
    <date month="January" year="2003"/>
    <abstract>
      <t>This document defines a set of extended status codes for use within the mail system for delivery status reports, tracking, and improved diagnostics. In combination with other information provided in the Delivery Status Notification (DSN) delivery report, these codes facilitate media and language independent rendering of message delivery status. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3463"/>
  <seriesInfo name="DOI" value="10.17487/RFC3463"/>
</reference>
<reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</reference>
<reference anchor="RFC5234">
  <front>
    <title>Augmented BNF for Syntax Specifications: ABNF</title>
    <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
    <author fullname="P. Overell" initials="P." surname="Overell"/>
    <date month="January" year="2008"/>
    <abstract>
      <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="68"/>
  <seriesInfo name="RFC" value="5234"/>
  <seriesInfo name="DOI" value="10.17487/RFC5234"/>
</reference>
<reference anchor="RFC5321">
  <front>
    <title>Simple Mail Transfer Protocol</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="October" year="2008"/>
    <abstract>
      <t>This document is a specification of the basic protocol for Internet electronic mail transport. It consolidates, updates, and clarifies several previous documents, making all or parts of most of them obsolete. It covers the SMTP extension mechanisms and best practices for the contemporary Internet, but does not provide details about particular extensions. Although SMTP was designed as a mail transport and delivery protocol, this specification also contains information that is important to its use as a "mail submission" protocol for "split-UA" (User Agent) mail reading systems and mobile environments. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5321"/>
  <seriesInfo name="DOI" value="10.17487/RFC5321"/>
</reference>
<reference anchor="RFC5322">
  <front>
    <title>Internet Message Format</title>
    <author fullname="P. Resnick" initials="P." role="editor" surname="Resnick"/>
    <date month="October" year="2008"/>
    <abstract>
      <t>This document specifies the Internet Message Format (IMF), a syntax for text messages that are sent between computer users, within the framework of "electronic mail" messages. This specification is a revision of Request For Comments (RFC) 2822, which itself superseded Request For Comments (RFC) 822, "Standard for the Format of ARPA Internet Text Messages", updating it to reflect current practice and incorporating incremental changes that were specified in other RFCs. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5322"/>
  <seriesInfo name="DOI" value="10.17487/RFC5322"/>
</reference>
<reference anchor="RFC5890">
  <front>
    <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="August" year="2010"/>
    <abstract>
      <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5890"/>
  <seriesInfo name="DOI" value="10.17487/RFC5890"/>
</reference>
<reference anchor="RFC5891">
  <front>
    <title>Internationalized Domain Names in Applications (IDNA): Protocol</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="August" year="2010"/>
    <abstract>
      <t>This document is the revised protocol definition for Internationalized Domain Names (IDNs). The rationale for changes, the relationship to the older specification, and important terminology are provided in other documents. This document specifies the protocol mechanism, called Internationalized Domain Names in Applications (IDNA), for registering and looking up IDNs in a way that does not require changes to the DNS itself. IDNA is only meant for processing domain names, not free text. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5891"/>
  <seriesInfo name="DOI" value="10.17487/RFC5891"/>
</reference>
<reference anchor="RFC6376">
  <front>
    <title>DomainKeys Identified Mail (DKIM) Signatures</title>
    <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
    <author fullname="T. Hansen" initials="T." role="editor" surname="Hansen"/>
    <author fullname="M. Kucherawy" initials="M." role="editor" surname="Kucherawy"/>
    <date month="September" year="2011"/>
    <abstract>
      <t>DomainKeys Identified Mail (DKIM) permits a person, role, or organization that owns the signing domain to claim some responsibility for a message by associating the domain with the message. This can be an author's organization, an operational relay, or one of their agents. DKIM separates the question of the identity of the Signer of the message from the purported author of the message. Assertion of responsibility is validated through a cryptographic signature and by querying the Signer's domain directly to retrieve the appropriate public key. Message transit from author to recipient is through relays that typically make no substantive change to the message content and thus preserve the DKIM signature.</t>
      <t>This memo obsoletes RFC 4871 and RFC 5672. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="76"/>
  <seriesInfo name="RFC" value="6376"/>
  <seriesInfo name="DOI" value="10.17487/RFC6376"/>
</reference>
<reference anchor="RFC6409">
  <front>
    <title>Message Submission for Mail</title>
    <author fullname="R. Gellens" initials="R." surname="Gellens"/>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="November" year="2011"/>
    <abstract>
      <t>This memo splits message submission from message relay, allowing each service to operate according to its own rules (for security, policy, etc.), and specifies what actions are to be taken by a submission server.</t>
      <t>Message relay is unaffected, and continues to use SMTP over port 25.</t>
      <t>When conforming to this document, message submission uses the protocol specified here, normally over port 587.</t>
      <t>This separation of function offers a number of benefits, including the ability to apply specific security or policy requirements. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="72"/>
  <seriesInfo name="RFC" value="6409"/>
  <seriesInfo name="DOI" value="10.17487/RFC6409"/>
</reference>
<reference anchor="RFC6522">
  <front>
    <title>The Multipart/Report Media Type for the Reporting of Mail System Administrative Messages</title>
    <author fullname="M. Kucherawy" initials="M." role="editor" surname="Kucherawy"/>
    <date month="January" year="2012"/>
    <abstract>
      <t>The multipart/report Multipurpose Internet Mail Extensions (MIME) media type is a general "family" or "container" type for electronic mail reports of any kind. Although this memo defines only the use of the multipart/report media type with respect to delivery status reports, mail processing programs will benefit if a single media type is used for all kinds of reports.</t>
      <t>This memo obsoletes "The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages", RFC 3462, and marks RFC 3462 and its predecessor as "Historic". [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="73"/>
  <seriesInfo name="RFC" value="6522"/>
  <seriesInfo name="DOI" value="10.17487/RFC6522"/>
</reference>
<reference anchor="RFC6530">
  <front>
    <title>Overview and Framework for Internationalized Email</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <author fullname="Y. Ko" initials="Y." surname="Ko"/>
    <date month="February" year="2012"/>
    <abstract>
      <t>Full use of electronic mail throughout the world requires that (subject to other constraints) people be able to use close variations on their own names (written correctly in their own languages and scripts) as mailbox names in email addresses. This document introduces a series of specifications that define mechanisms and protocol extensions needed to fully support internationalized email addresses. These changes include an SMTP extension and extension of email header syntax to accommodate UTF-8 data. The document set also includes discussion of key assumptions and issues in deploying fully internationalized email. This document is a replacement for RFC 4952; it reflects additional issues identified since that document was published. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6530"/>
  <seriesInfo name="DOI" value="10.17487/RFC6530"/>
</reference>
<reference anchor="RFC6648">
  <front>
    <title>Deprecating the "X-" Prefix and Similar Constructs in Application Protocols</title>
    <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
    <author fullname="D. Crocker" initials="D." surname="Crocker"/>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="June" year="2012"/>
    <abstract>
      <t>Historically, designers and implementers of application protocols have often distinguished between standardized and unstandardized parameters by prefixing the names of unstandardized parameters with the string "X-" or similar constructs. In practice, that convention causes more problems than it solves. Therefore, this document deprecates the convention for newly defined parameters with textual (as opposed to numerical) names in application protocols. This memo documents an Internet Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="178"/>
  <seriesInfo name="RFC" value="6648"/>
  <seriesInfo name="DOI" value="10.17487/RFC6648"/>
</reference>
<reference anchor="RFC7372">
  <front>
    <title>Email Authentication Status Codes</title>
    <author fullname="M. Kucherawy" initials="M." surname="Kucherawy"/>
    <date month="September" year="2014"/>
    <abstract>
      <t>This document registers code points to allow status codes to be returned to an email client to indicate that a message is being rejected or deferred specifically because of email authentication failures.</t>
      <t>This document updates RFC 7208, since some of the code points registered replace the ones recommended for use in that document.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7372"/>
  <seriesInfo name="DOI" value="10.17487/RFC7372"/>
</reference>
<reference anchor="RFC7405">
  <front>
    <title>Case-Sensitive String Support in ABNF</title>
    <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
    <date month="December" year="2014"/>
    <abstract>
      <t>This document extends the base definition of ABNF (Augmented
Backus-Naur Form) to include a way to specify US-ASCII string literals
that are matched in a case-sensitive manner.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="68"/>
  <seriesInfo name="RFC" value="7405"/>
  <seriesInfo name="DOI" value="10.17487/RFC7405"/>
</reference>
<reference anchor="RFC8017">
  <front>
    <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
    <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
    <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
    <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
    <author fullname="A. Rusch" initials="A." surname="Rusch"/>
    <date month="November" year="2016"/>
    <abstract>
      <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
      <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
      <t>This document also obsoletes RFC 3447.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8017"/>
  <seriesInfo name="DOI" value="10.17487/RFC8017"/>
</reference>
<reference anchor="RFC8032">
  <front>
    <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8032"/>
  <seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
<reference anchor="RFC8601">
  <front>
    <title>Message Header Field for Indicating Message Authentication Status</title>
    <author fullname="M. Kucherawy" initials="M." surname="Kucherawy"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This document specifies a message header field called "Authentication-Results" for use with electronic mail messages to indicate the results of message authentication efforts. Any receiver-side software, such as mail filters or Mail User Agents (MUAs), can use this header field to relay that information in a convenient and meaningful way to users or to make sorting and filtering decisions.</t>
      <t>This document obsoletes RFC 7601.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8601"/>
  <seriesInfo name="DOI" value="10.17487/RFC8601"/>
</reference>

<reference anchor="DKIMKEYS">
   <front>
      <title>Domain Name Specification for DKIM2</title>
      <author fullname="Wei Chuang" initials="W." surname="Chuang">
         <organization>Google</organization>
      </author>
      <date day="21" month="October" year="2026"/>
      <abstract>
	 <t>   The updated DomainKeys Identified Mail (DKIM2) permits an
   organization that owns the signing domain to claim some
   responsibility for a message by associating the domain with the
   message through a digital signature.  This is done by publishing to
   Domain Name Service (DNS) of the domain a public key that is then
   associated to the domain and where messages can be signed by the
   corresponding private key.  Assertion of responsibility is validated
   through a cryptographic signature and by querying the Signer&#x27;s domain
   directly to retrieve the appropriate public key.  This document
   describes DKIM2 DNS record format and how to find the record.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-dkim-dkim2-dns-02"/>
   
</reference>
<reference anchor="FIPS-180-4" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
  <front>
    <title>Secure Hash Standard</title>
    <author fullname="Quynh H. Dang" surname="Dang">
      <organization>Information Technology Laboratory</organization>
    </author>
    <author>
      <organization abbrev="NIST">National Institute of Standards and Technology</organization>
      <address>
        <postal>
          <country>US</country>
          <city>Gaithersburg</city>
        </postal>
      </address>
    </author>
    <date month="July" year="2015"/>
  </front>
  <seriesInfo name="NIST Federal Information Processing Standards Publications" value="180-4"/>
  <seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4"/>
</reference>

<reference anchor="FIPS-204" target="https://doi.org/10.6028/NIST.FIPS.204">
  <front>
    <title>Module-Lattice-Based Digital Signature Standard</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2024" month="August"/>
  </front>
  <seriesInfo name="NIST FIPS" value="204"/>
  <seriesInfo name="DOI" value="10.6028/NIST.FIPS.204"/>
</reference>


<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC1047">
  <front>
    <title>Duplicate messages and SMTP</title>
    <author fullname="C. Partridge" initials="C." surname="Partridge"/>
    <date month="February" year="1988"/>
    <abstract>
      <t>An examination of a synchronization problem in the Simple Mail Transfer Protocol (SMTP) is presented. This synchronization problem can cause a message to be delivered multiple times. A method for avoiding this problem is suggested. Nodding familiarity with the SMTP specification, RFC-821, is required.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="1047"/>
  <seriesInfo name="DOI" value="10.17487/RFC1047"/>
</reference>
<reference anchor="RFC3864">
  <front>
    <title>Registration Procedures for Message Header Fields</title>
    <author fullname="G. Klyne" initials="G." surname="Klyne"/>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <author fullname="J. Mogul" initials="J." surname="Mogul"/>
    <date month="September" year="2004"/>
    <abstract>
      <t>This specification defines registration procedures for the message header fields used by Internet mail, HTTP, Netnews and other applications. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="90"/>
  <seriesInfo name="RFC" value="3864"/>
  <seriesInfo name="DOI" value="10.17487/RFC3864"/>
</reference>
<reference anchor="RFC4732">
  <front>
    <title>Internet Denial-of-Service Considerations</title>
    <author fullname="M. Handley" initials="M." role="editor" surname="Handley"/>
    <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
    <author>
      <organization abbrev="IAB">Internet Architecture Board</organization>
    </author>
    <date month="December" year="2006"/>
    <abstract>
      <t>This document provides an overview of possible avenues for denial-of-service (DoS) attack on Internet systems. The aim is to encourage protocol designers and network engineers towards designs that are more robust. We discuss partial solutions that reduce the effectiveness of attacks, and how some solutions might inadvertently open up alternative vulnerabilities. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4732"/>
  <seriesInfo name="DOI" value="10.17487/RFC4732"/>
</reference>
<reference anchor="RFC4870">
  <front>
    <title>Domain-Based Email Authentication Using Public Keys Advertised in the DNS (DomainKeys)</title>
    <author fullname="M. Delany" initials="M." surname="Delany"/>
    <date month="May" year="2007"/>
    <abstract>
      <t>"DomainKeys" creates a domain-level authentication framework for email by using public key technology and the DNS to prove the provenance and contents of an email.</t>
      <t>This document defines a framework for digitally signing email on a per-domain basis. The ultimate goal of this framework is to unequivocally prove and protect identity while retaining the semantics of Internet email as it is known today.</t>
      <t>Proof and protection of email identity may assist in the global control of "spam" and "phishing". This memo defines a Historic Document for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4870"/>
  <seriesInfo name="DOI" value="10.17487/RFC4870"/>
</reference>
<reference anchor="RFC5598">
  <front>
    <title>Internet Mail Architecture</title>
    <author fullname="D. Crocker" initials="D." surname="Crocker"/>
    <date month="July" year="2009"/>
    <abstract>
      <t>Over its thirty-five-year history, Internet Mail has changed significantly in scale and complexity, as it has become a global infrastructure service. These changes have been evolutionary, rather than revolutionary, reflecting a strong desire to preserve both its installed base and its usefulness. To collaborate productively on this large and complex system, all participants need to work from a common view of it and use a common language to describe its components and the interactions among them. But the many differences in perspective currently make it difficult to know exactly what another participant means. To serve as the necessary common frame of reference, this document describes the enhanced Internet Mail architecture, reflecting the current service. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5598"/>
  <seriesInfo name="DOI" value="10.17487/RFC5598"/>
</reference>
<reference anchor="RFC7208">
  <front>
    <title>Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1</title>
    <author fullname="S. Kitterman" initials="S." surname="Kitterman"/>
    <date month="April" year="2014"/>
    <abstract>
      <t>Email on the Internet can be forged in a number of ways. In particular, existing protocols place no restriction on what a sending host can use as the "MAIL FROM" of a message or the domain given on the SMTP HELO/EHLO commands. This document describes version 1 of the Sender Policy Framework (SPF) protocol, whereby ADministrative Management Domains (ADMDs) can explicitly authorize the hosts that are allowed to use their domain names, and a receiving host can check such authorization.</t>
      <t>This document obsoletes RFC 4408.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7208"/>
  <seriesInfo name="DOI" value="10.17487/RFC7208"/>
</reference>
<reference anchor="RFC8301">
  <front>
    <title>Cryptographic Algorithm and Key Usage Update to DomainKeys Identified Mail (DKIM)</title>
    <author fullname="S. Kitterman" initials="S." surname="Kitterman"/>
    <date month="January" year="2018"/>
    <abstract>
      <t>The cryptographic algorithm and key size requirements included when DomainKeys Identified Mail (DKIM) was designed a decade ago are functionally obsolete and in need of immediate revision. This document updates DKIM requirements to those minimally suitable for operation with currently specified algorithms.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8301"/>
  <seriesInfo name="DOI" value="10.17487/RFC8301"/>
</reference>
<reference anchor="RFC8617">
  <front>
    <title>The Authenticated Received Chain (ARC) Protocol</title>
    <author fullname="K. Andersen" initials="K." surname="Andersen"/>
    <author fullname="B. Long" initials="B." role="editor" surname="Long"/>
    <author fullname="S. Blank" initials="S." role="editor" surname="Blank"/>
    <author fullname="M. Kucherawy" initials="M." role="editor" surname="Kucherawy"/>
    <date month="July" year="2019"/>
    <abstract>
      <t>The Authenticated Received Chain (ARC) protocol provides an authenticated "chain of custody" for a message, allowing each entity that handles the message to see what entities handled it before and what the message's authentication assessment was at each step in the handling.</t>
      <t>ARC allows Internet Mail Handlers to attach assertions of message authentication assessment to individual messages. As messages traverse ARC-enabled Internet Mail Handlers, additional ARC assertions can be attached to messages to form ordered sets of ARC assertions that represent the authentication assessment at each step of the message-handling paths.</t>
      <t>ARC-enabled Internet Mail Handlers can process sets of ARC assertions to inform message disposition decisions, identify Internet Mail Handlers that might break existing authentication mechanisms, and convey original authentication assessments across trust boundaries.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8617"/>
  <seriesInfo name="DOI" value="10.17487/RFC8617"/>
</reference>
<reference anchor="RFC9228">
  <front>
    <title>Delivered-To Email Header Field</title>
    <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
    <date month="April" year="2022"/>
    <abstract>
      <t>The address to which email is delivered might be different than any of the addresses shown in any of the content header fields that were created by the email's author. For example, the address used by the email transport service is provided separately, such as through SMTP's "RCPT TO" command, and might not match any address in the To: or cc: fields. In addition, before final delivery, handling can entail a sequence of submission/delivery events, using a sequence of different destination addresses that (eventually) lead to the recipient. As well, a receiving system's delivery process can produce local address transformations.</t>
      <t>It can be helpful for a message to have a common way to record each delivery in such a sequence, noting each address used in the sequence to that recipient, such as for (1) analyzing the path a message has taken, (2) loop detection, or (3) formulating the author's address in a reply message. This document defines a header field for this information.</t>
      <t>Email handling information discloses details about the email infrastructure, as well as about a particular recipient; this can raise privacy concerns.</t>
      <t>A header field such as this is not automatically assured of widespread use. Therefore, this document is being published as an Experimental RFC, looking for constituency and for operational utility. This document was produced through the Independent Submission Stream and was not subject to the IETF's approval process.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9228"/>
  <seriesInfo name="DOI" value="10.17487/RFC9228"/>
</reference>

<reference anchor="AUTHRESULTS">
   <front>
      <title>Reporting DKIM2 Verification Results in Authentication-Results</title>
      <author fullname="Bron Gondwana" initials="B." surname="Gondwana">
         <organization>Fastmail Pty Ltd</organization>
      </author>
      <date day="28" month="October" year="2026"/>
      <abstract>
	 <t>   DomainKeys Identified Mail Signatures v2 (DKIM2) produces a
   verification result for an email message.  This document defines how
   that result is reported in the Authentication-Results header field,
   registering the &quot;dkim2&quot; authentication method, the result values it
   can take, and two properties which identify the signing domain and
   the point in the chain at which verification failed.  Diagnostic
   detail about each hop is carried in a human-readable comment.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gondwana-dkim2-authres-01"/>
   
</reference>

<reference anchor="CONCLUDEARC">
   <front>
      <title>Reclassifying ARC as Historic</title>
      <author fullname="J. Trent Adams" initials="J. T." surname="Adams">
         <organization>Proofpoint</organization>
      </author>
      <author fullname="John R. Levine" initials="J. R." surname="Levine">
         <organization>Taughannock Networks</organization>
      </author>
      <date day="21" month="October" year="2026"/>
      <abstract>
	 <t>   This document calls for a conclusion to the experiment defined by
   “The Authenticated Received Chain (ARC) Protocol” [RFC8617], and
   recommends that ARC no longer be deployed or relied upon between
   disparate senders and receivers.  The document summarizes what ARC
   set out to do, reports on operational experience, and explains how
   the experience gained during the experiment is being incorporated
   into the proposed DKIM2 work as the successor to DomainKeys
   Identified Mail [RFC6376].  To avoid any future confusion, it is
   therefore requested that ARC [RFC8617] be reclassified as “Historic”.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-dmarc-arc-to-historic-01"/>
   
</reference>

<reference anchor="HDRMAINT">
   <front>
      <title>Maintenance of the IANA Message Header Field Registries</title>
      <author fullname="Bron Gondwana" initials="B." surname="Gondwana">
         <organization>Fastmail</organization>
      </author>
      <date day="4" month="October" year="2026"/>
      <abstract>
	 <t>   The IANA &quot;Message Headers&quot; registries record, for each registered
   header field, the protocol it belongs to, its status, whether it is a
   trace field, and the documents that specify it.  Many documents have
   added entries over more than two decades, and the metadata in the
   registries is less complete than the metadata those documents
   supplied.  RFC 4021, which performed the largest single bulk
   registration, gave IANA an explicit status and an explicit
   specification document for each of the roughly ninety fields it
   registered.  Neither was recorded.  Those entries carry a blank
   status and cite RFC 4021 itself in place of the specification.  This
   document updates RFC 4021 by directing IANA to record the values its
   registration templates supplied.  The &quot;Trace&quot; column, added to both
   registries by the revision of RFC 5322, was deliberately left empty
   for existing entries so that it could be filled in later.

   This document reviews the definition of each registered header field
   and every subsequent update to it, and gives IANA a single set of
   instructions for completing and correcting each entry.  Each
   recommended change, and each decision to leave a non-obvious entry
   unchanged, is justified from the instructions or the clear intent of
   the documents that defined or modified the field.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gondwana-email-header-maintenance-03"/>
   
</reference>

<reference anchor="DKIM2BCP">
   <front>
      <title>DKIM2 Best Practices</title>
      <author fullname="Todd Herr" initials="T." surname="Herr">
         <organization>GreenArrow Email</organization>
      </author>
      <date day="9" month="September" year="2026"/>
      <abstract>
	 <t>   [DKIM2] and its associated documents describe the DomainKeys
   Identified Mail v2 (DKIM2) email authentication protocol.  DKIM2 is
   designed to address shortcomings in email authentication protocols
   and mechanisms released prior to DKIM2, specifically SPF [RFC7208],
   DKIM [RFC6376], DMARC [RFC9989], and ARC [RFC8617].  This document
   discusses best practices for signing, handling, and validating
   messages that carry DKIM2 signatures, and for interoperating with the
   authentication protocols and mechanisms that preceded DKIM2.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-dkim-dkim2-bcp-01"/>
   
</reference>



    </references>

</references>


<?line 2711?>

<section numbered="false" anchor="changes-from-earlier-versions"><name>Changes from Earlier Versions</name>

<t>RFC Editor: please remove this section before publication.</t>

<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-09"><name>draft-ietf-dkim-dkim2-spec-09</name>

<t><list style="symbols">
  <t>Added Domain Policy Record and up/down algorithm for Authentic From.</t>
  <t>Removed key length <bcp14>MUST</bcp14> from Verifiers.</t>
  <t>Ensured all Verification checks have error text suggestions.</t>
  <t>Clarified that there is only one key record allowed per selector.</t>
  <t>Verifiers may regard algorithms and key lengths as insecure.</t>
  <t>No DKIM2 header fields at all is now NONE rather than PERMERROR.</t>
  <t>Various minor changes and improvements.</t>
</list></t>

</section>
<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-08"><name>draft-ietf-dkim-dkim2-spec-08</name>

<t><list style="symbols">
  <t>Switched to using "pure" ML-DSA-44 and specified it properly.</t>
  <t>Signatures now have AND/OR algebra. Inconsistent text removed.</t>
  <t>Hashes now have AND/OR algebra.</t>
  <t>Clarification on signing non-value parts of a signature.</t>
  <t>"Validly Signed DKIM2 Message" renamed "Fully Verified DKIM2 Message".</t>
  <t>IANA section added.</t>
  <t>Changes to the list of ignored header fields.</t>
  <t>Clarifications to DSN validation and constraints on creation.</t>
  <t>Multiple other improvements and corrections.</t>
</list></t>

</section>
<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-07"><name>draft-ietf-dkim-dkim2-spec-07</name>

<t><list style="symbols">
  <t>Removed donotmodify and donotexplode.</t>
  <t>Added the composite PQ algorithm MLDSA44-Ed25519-SHA512.</t>
  <t>Required From header fields to be Authentic.</t>
  <t>Outlawed duplicate JSON keys.</t>
  <t>Added "u" steps in Recipes to handle non UTF-8 characters. Also
added patterns to the JSON schema to aid validity checking.</t>
  <t>Resurrected tag=value definition.</t>
  <t>Substantial rework of verification text to ensure it only
states how to check for a Validly Signed DKIM2 Message, moving
consideration of what that means into its own section.</t>
  <t>Rework of several Signer requirements, tying down several loose ends.</t>
  <t>Substantial rework of the description of the relaxed domain match.</t>
  <t>Substantial rework of the description of DKIM Replay.</t>
  <t>Chain of Custody checking now deals with null MAIL FROM and nd=.</t>
  <t>New glossary entries.</t>
  <t>An EAI section has been added.</t>
  <t>A security considerations section has been added.</t>
  <t>Multiple other improvements and corrections.</t>
</list></t>

</section>
<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-06"><name>draft-ietf-dkim-dkim2-spec-06</name>

<t><list style="symbols">
  <t>Corrected mentions of non-existent PERMFAIL.</t>
  <t>Clarified that PASS (etc) does not mean a message is valuable or
that modifications are benign.</t>
  <t>Added instructions for Verifiers to check for DKIM Replay.</t>
  <t>Tweaks to text and errors relating to too many algorithms
or selectors; or for when signatures/hashes fail.</t>
</list></t>

</section>
<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-05"><name>draft-ietf-dkim-dkim2-spec-05</name>

<t><list style="symbols">
  <t>Updated list of unsigned header fields to align with <xref target="HDRMAINT"></xref>.</t>
  <t>Added sha512 to allow testing of hash function agility.</t>
  <t>Removed <bcp14>SHOULD NOT</bcp14> for speciously added Message-Instance fields,
we now just point out they are pointless.</t>
  <t>Added text to forbid repetition of the same hash algorithm or
the same Selector in any given header field. Provided messages
for reporting infractions.</t>
  <t>Now specifies that header field names in the JSON Recipes
<bcp14>MUST</bcp14> be lower case; and Verifiers should now report JSON
issues specifically.</t>
  <t>Made Capitalization Consistent.</t>
</list></t>

</section>
<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-04"><name>draft-ietf-dkim-dkim2-spec-04</name>

<t><list style="symbols">
  <t>Provided summary of unsigned header fields.</t>
  <t>Added text for situation when the highest DKIM2-Signature field
of a message has an nd= tag.</t>
  <t>Added text to clarify checking of Message-Instance in a DSN.</t>
</list></t>

</section>
<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-03"><name>draft-ietf-dkim-dkim2-spec-03</name>

<t><list style="symbols">
  <t>Move list of ignored header fields into its own section.</t>
  <t>Added the experimental Delivered-To: header field to the list.</t>
  <t>Remove possibility of a null Recipe for header field changes.</t>
  <t>Add nd= tag as an alternative to mf= rt= for imaginary hops.</t>
  <t>Change DSN propagation rules so that a DSN always contains
the message headers up to the point at which the DSN creator
saw the message on the outward journey.</t>
  <t>"feedhere" flag added.</t>
</list></t>

</section>
<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-02"><name>draft-ietf-dkim-dkim2-spec-02</name>

<t><list style="symbols">
  <t>Made explicit that base64strings must be padded with zero bits.</t>
  <t>Fixed header field description in JSON to be single string and moved
the removed info into the textual discussion. Removed the z body Recipe
since DSNs do not actually need this.</t>
  <t>Added text to emphasize that semi-colons are (easy to parse) separators
in Message-Instance and DKIM2-Signature. Also fixed the syntax for
extension tags.</t>
  <t>Added Authentication-Results to the list of headers that are
excluded from being signed.</t>
  <t>Added text about what donotmodify means and added text to the
verification section about this and the donotexplode flag.</t>
</list></t>

</section>
<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-01"><name>draft-ietf-dkim-dkim2-spec-01</name>

<t><list style="symbols">
  <t>Additions to terminology.</t>
  <t>Improved ABNF.</t>
  <t>Removed definition of tag-list and placed relevant text in the two
header field definitions. Untangled the description of what needs to
be verified from the description of how to verify and provided a
list of human-readable strings to generate for errors.</t>
</list></t>

</section>
<section numbered="false" anchor="draft-ietf-dkim-dkim2-spec-00"><name>draft-ietf-dkim-dkim2-spec-00</name>

<t><list style="symbols">
  <t>Removed JSON for hashes, signatures and SMTP parameters.</t>
  <t>Provided valid JSON for Recipes and added "z" for truncated body.</t>
  <t>Changed algorithm names for signing.</t>
  <t>Simplified the canonicalization performed for the header fields
signed by DKIM2-Signature.</t>
  <t>Changed v= to m= for message instance numbering.</t>
  <t>General tidying up of specifying tag=value specifications and
associated ABNF.</t>
  <t>Various other fixes for issues flagged in WG.</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+y965bbyJUm+j+eAofqXk1Wk5QydakqldPjLEnlyrZurUx1
2adabSNJMAmLBNgAqBQt613mWebJZt8jAgCZqbK7z6x1ppYtiSQQ1x079vXb
k8nENXmzyh4nT8t1mhe/y3Z1cjbPiiZf5Nk8eZHmq+Q8vyrSZltldfLhOBk+
/d3Zi+ORSy8vq+wDvIgfg2fcvJwV6RqanFfpopnkWbOYzN/na/rjeFJvstnk
3reu3l6u87rOy+Jit4Gnz55d/OCK7foyqx67edpkj92Hx24G/7gqq93jpG7m
brvBH+rHLt9Uj5Om2tbN8b173947du+z3XVZzaGZosmqImsmT7F3VzdpMf9j
uioL6GIHo9vkj5Ofm3I2TuqyaqpsUcO/dmv8xzvn0m2zLKH/ZOIS+C8v6sfJ
m2nyZJXumrKg73hub/LZMq3m0S9ldfU4+UO6LEv6mMGCrh4n1Ywf+c0Of8mL
2XRWrqMOfoIOltu0uAra/ynLwy+p6d+W5dUqC9u+zvJlev2bK/qh0+73U3il
mF+nRRq0/H1VFvH31PgPad1go8nrZpc8h7XGX2pYoKx5nDzPPmSr5HicHB09
SH7KV6s8XSfn9CM9Nyvn0PL9e/fuycdt0eCencIGVSk8TV9vlrQLg39+dJQ8
ePh18uDoUfLg/qNBOKNLGN3VbxYymCZL1zQtV5TVOm3yD0AV+PSbH54c3bv/
wD4c33vwMPzwtX24/+DRffvw4NGDb+zDw+OggYf3j4/CD8f+wzff3gs/+Mce
3f/6kf/w4N63/sPDoIFHD+/7Bh6FI/j6/tf+sa8f3PNT+Obe0dfBh/v+sW+O
H/p+vnl0T4aDp/B3z/5wDgdg8nTaPnPzoqanfjh7fT45+ube5MHj5OXZ+cUU
v5jSF/53WD5uE/8T7vCinG9X2eR52jT5LJt8n9bAHJ7mV3mTBvwBSAJOGxwL
e93Ok/03YXJ7CZtZFvDyWVFDH9smS8qFvV8n8Hdykc2WRbkqr3b2PvGF5Pje
8YPJvW/s2zqr8qzOi0UZ9pTQFGlOQHQwq0H049NXZ4+To3vTR/eOv7nrFwOe
85NPqysk/2XTbOrHd+/Oy3wKo7/b/5bDAXSpNKTFbx55invwdbCrD775OiCy
h98GNHJ8z3/45v69o2DzAxr59vhYHjt9e/Hjm2fnb59fCDFcyVkXWsAtQTaN
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
HmO2VNwBAA==

-->

</rfc>

