<?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-07" 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="October" day="18"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 84?>

<t>DomainKeys Identified Mail v2 (DKIM2) permits a person, role, or
organization that owns a signing domain to document that it has
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 104?>

<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
email was considered to be spam) that the eventual recipient of
the message wishes to share.</t>

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

<t>Readers are advised to be familiar with the material in TBA, TBA and TBA
which provide the background for the development of DKIM2, an overview
of the service, and deployment and operations guidance and advice.</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 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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>

<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. 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 MUST 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, their organization, a
company hired to deliver the email, a mailing list operator, or
some other entity that handles email. What they have in common is
that at some point they had access to the entire contents of the
email and were in a position to add their signature to the email.</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>Validly Signed DKIM2 Message</dt>
  <dd>
    <t>A Validly Signed 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. This is a precondition for the message
being a Validly Signed 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 following tokens are imported from other RFCs as noted.  Those
RFCs are definitive.</t>

<t>The following tokens are imported from <xref target="RFC5321"></xref>:</t>

<t><list style="symbols">
  <t>"Domain"</t>
  <t>"Forward-path"</t>
  <t>"reverse-path"</t>
</list></t>

<t>The following tokens are imported from <xref target="RFC5322"></xref>:</t>

<t><list style="symbols">
  <t>"field-name" (name of a header field)</t>
</list></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 =  (FWS / ALPHA / DIGIT / "+" / "/")

base64string =  ALPHADIGITPS *(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 MUST 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 MLDSA44-Ed25519-SHA512) are defined in
this specification. Signers MAY implement either or both of the two
hashing algorithms and any or all of the signing algorithms. Verifiers
MUST 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 MUST NOT be truncated or converted into any
form other than the native binary form before being signed.  The
signing algorithm MUST use a public exponent of 65537.</t>

<t>Signers MUST use RSA keys of at least 1024 bits.  Verifiers MUST be able
to validate signatures with keys ranging from 1024 bits to 2048 bits, and
they MAY 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-mldsa44-ed25519-sha512-signing-algorithm"><name>The MLDSA44-Ed25519-SHA512 signing algorithm</name>

<t>The MLDSA44-Ed25519-SHA512 signing algorithm computes a hash over all the
Message-Instance and DKIM2-Signature fields as described in
<xref target="calculate-signature"/> using SHA-512 <xref target="FIPS-180-4"/> as the hash-alg.
It signs the hash with both the "post-quantum" MLDSA-44 algorithm
<xref target="FIPS-204"/> and the PureEdDSA variant Ed25519 (see <xref target="RFC8032"></xref>). The signature
value is the MLDSA-44 value immediately followed by the Ed25519 value.</t>

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

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

<t>Other algorithms MAY be defined in the future. A hash or signature
that a Verifier does not implement will of necessity be disregarded.
Signers will need to keep this in mind when choosing the algorithms
that they will use.</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 email servers.
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>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>
<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 "Auto-Submitted", "DL-Expansion-History",
"Original-Recipient", "SIO-Label-History", "VBR-Info" 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:
Auto-Submitted:
Delivered-To:
DKIM-Signature:
DL-Expansion-History:
Original-Recipient:
Received:
Received-*:
Return-Path:
SIO-Label-History:
VBR-Info:
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) MUST be in lower case and they MUST
be unique within any JSON object.</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 SHOULD NOT 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 MUST 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 MUST NOT be specified for header
fields that will not be signed (see <xref target="ignoreheaders"/>). A header
field name MUST NOT 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 MUST 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 MUST be in ascending order and
MUST be greater than the end value of all preceding "c" steps
for this header field name. The end value MUST NOT 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 MUST NOT
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 MUST be valid UTF-8, a "u" step
MUST be used if that is not the case.</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 MUST be in ascending order and MUST be greater than the
end value of all preceding "c" steps. The end value MUST NOT 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 MUST NOT
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 MUST be valid UTF-8, a "u" step
MUST be used if that is not the case.</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 MUST 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 MUST 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>Ignore some header fields  <vspace blankLines='1'/>
When calculating the header field hash some header fields
are entirely ignored. See <xref target="ignoreheaders"/> for the list of header
field names that MUST be ignored.  <vspace blankLines='1'/>
When calculating the header field hash any "Message-Instance" or
"DKIM2-Signature" header fields MUST 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 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) MUST be interpreted without the CRLF.  Implementations MUST
NOT remove the CRLF at the end of the header field value.</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 MUST be retained.</t>
  <t>Place the header fields in alphabetical order by the header field
name.</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 were
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 an email. 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 sub-domains. As well as simplifying key handling
for organizations that use sub-domains, this also allows existing
"bounce-handling" mechanisms that utilize sub-domains to continue
to work alongside DKIM2.</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>It is necessary to check all the DKIM2-Signature header fields for a match
between the Signing Domain (specified in the d= tag) and the MAIL FROM
domain (mf=).  <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>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.</t>
  <t>When checking that a DSN (see <xref target="bounce"/>) has not been forged, a
domain from the rt= value of the highest numbered DKIM2-Signature
in the original message returned in the
DSN needs to match with the Signing Domain (d=) used by the sender
of the DSN (which will be found in the DKIM2-Signature field with i=1).  <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.</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, as well as in domain signature records
(see <xref target="DKIMKEYS"></xref>).</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      =  %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 MUST NOT 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 MUST 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. Tags with duplicate names MUST NOT 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 MAY 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 Tag=Value list (see
<xref target="tagvaluelists"/>). No tags have default values and all tag-names
MUST be in lower case.</t>

<t>The m= and h= tags MUST 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 in the
numbering is not a Validly Signed 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 contains the hash name, header hash value and body
hash value. Calculating the hash values is explained in <xref target="messagehashes"/>.</t>

<t>To provide for algorithmic dexterity more than one pair of hash values,
using a different algorithm MAY be supplied in the same Message-Instance
header field. An algorithm MUST NOT 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>ABNF:</t>

<figure><artwork><![CDATA[
mi-h-tag    = %s"h" [FWS] "=" hash-set *("," hash-set)
hash-set    = [FWS] 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 of the email is stored in a DKIM2-Signature header
field. This header field is a Tag=Value list (see
<xref target="tagvaluelists"/>). No tags have default values and all tag-names
MUST be in lower case.</t>

<t>The i=, m=, t=, d= and s= tags MUST be present. There MUST 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 in the
numbering is not a Validly Signed 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 MUST be simple ASCII and MUST NOT 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 MUST be included, but any "Mail-parameters"
that were present after the reverse-path MUST NOT 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 MUST be included, but any "Rcpt-parameters"
that were present after the Forward-path MUST NOT be included.</t>

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

<t>However, an address given in a "Bcc:" header field MUST NOT 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 MUST be a valid DNS name under which a
DKIM2 key record is published.</t>

<t>The domain name in the nd= tag MUST 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= MUST 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) MUST 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
MUST be a valid DNS name under which the DKIM2 key record is published.</t>

<t>The domain name in the d= tag MUST exactly match the rightmost labels of
the domain name of the mf= tag. That is to say, the domain name of the
mf= tag MUST either match the d= domain exactly or be a sub-domain
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 contains the Selector, signature algorithm name and
signature value. Calculating the 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>To provide for algorithmic dexterity more than one signature,
using different algorithms, MAY be supplied. One additional signature
using the same algorithm (perhaps with a different key length) MAY be
present provided that a different Selector is used.</t>

<t>A Selector MUST NOT be present more than once in a single DKIM2-Signature
header field; if the signature values were the same this would be
pointless and if they differ then the Signer is presumably attempting
to confuse a Verifier.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-s-tag   = %s"s" [FWS] "=" [FWS] sig-set *( "," sig-set )
sig-set     = selector [FWS] ":" [FWS] sig-name [FWS] ":" message-sig
sig-name    = %s"rsa-sha256" / %s"ed25519-sha256" /
              %s"mldsa44-ed25519-sha512" / 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 it 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 altered 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 replaces 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.</t>

</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 MUST NOT sign the message unless it is
a Validly Signed 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 MUST 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
MUST 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 MUST be added.</t>

<t>Such a Message-Instance header field MUST 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>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 MAY
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 MUST 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 @).</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 MUST 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 MUST
ensure that the message has a valid Chain of Custody. That is,
a relaxed domain match (see <xref target="relaxed-domain-match"/>) is present between the
mf= value used and at least one of the
rt= values on the highest numbered DKIM2-Signature header field of the
existing message. 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) MUST 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 email might have been addressed to
example.com, but the outgoing email 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 email 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 MUST 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 DKIM2 private key associated with a domain that is a relaxed domain
match for the domain in the RCPT TO entry of the message as it arrived.</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 Validly Signed DKIM2 Message; whether it is acceptable will depend
on out-of-band arrangements. The system MUST 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 MUST be chosen so
that the From header field in the message will be Authentic
(see <xref target="authentic-from"/>).</t>

<t>In simple terms, the Signing Domain will be equal to, or a parent
of, both the MAIL FROM domain and the From header field domain
for the original message and whenever the From header field is
modified by an intermediary.</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 MUST be set in the DKIM2-Signature header
field that is being created to sign the outgoing messages. The flag
MUST be set even if the outgoing messages differ.</t>

<t>The flag MUST NOT 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 Validly Signed 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 MUST 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 MUST 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) MUST be interpreted without the CRLF.  Implementations MUST
NOT 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 MUST 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 incomplete header field MUST be
unfolded, MUST have a trailing CRLF and MUST 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 Validly
Signed 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. Further, when a Validly Signed 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>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>

<t>It is entirely a matter for local policy whether a message being
a Validly Signed 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 Validly Signed
DKIM2 Message then it MUST NOT 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 Validly Signed 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" an invalid message to make it valid, 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 anchor="provisionally-verified-messages"><name>Provisionally Verified messages</name>

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

<t>If the receiver then determines, upon closer inspection that the
message is not a Validly Signed 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 MAY
generate a Delivery Status Notification (DSN) and send that
back to the system that delivered the message to them.
The details of this procedure appear in <xref target="bounce"/>.</t>

<t>This initial assessment is achieved by a Verifier ascertaining
that the signature in the highest numbered (i=) DKIM2-Signature
header field is correct and that the hashes in the highest
numbered (m=) Message-Instance header field match
the message to hand. If so, then the message is said to be
Provisionally Verified.</t>

<t>If the checks fail and the message cannot be Provisionally
Verified but, nevertheless, the message is accepted and delivered
then a DSN for the email MUST NOT be generated thereafter.
Hence, the best strategy for email 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>If a Verifier gives a TEMPERROR result (it is not possible with
the information to hand to determine whether or not the email
is a Validly Signed DKIM2 Message, see <xref target="output-states"/>) a 4xx
error code SHOULD be used in the SMTP conversation to allow
the sending MTA to understand the situation. If the email passed
Provisional Verification then further attempts to obtain the
missing information SHOULD be made. If these fail 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 Validly Signed 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 an email 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 SHOULD 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 SHOULD 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 Validly Signed 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 valid is only
one part of determining whether the message being delivered is a
Validly Signed DKIM2 Message; other checks will need to be made.</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 Validly Signed
DKIM2 Message.</t>

<t>The hash values for the header fields and the body are recalculated
and compared with those in the Message-Instance header field. The
hash of the Message-Instance and DKIM2-Signature header fields is
then calculated (with signature values removed) and the signature
is checked using the Signer's public key.</t>

<t>The details of doing the hash calculations involve repeating all
the actions taken by a Signer and to avoid a lot of repetition
those actions are not spelled out in any detail.</t>

<t>In order for a Verifier to determine whether a particular DKIM2-Signature
header field is valid it will have to reconstruct the state of the
message when that header field was added. That will require
considering all the Recipes that were recorded in the message after
the signature was calculated.</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 four states.</t>

<t>The states report whether or not the message has traveled to the
destination without being modified or sent along a delivery path
other than one 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 made are or
are not benign.</t>

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

<t>PASS:  The message was successfully verified.</t>

<t>FAIL:  The message could be verified but a hash or signature was not
       correct.</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 public key. A later attempt may
      produce a different result.</t>

<t>A Verifier MAY cease verifying once a single failure is detected.</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 failure
to verify (any state except PASS) then in order to provide the
maximum possible assistance to senders they SHOULD 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> MUST 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> MUST 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> MUST be replaced by appropriate Selector
names.</t>

<t>If the verification is being performed during an SMTP protocol
conversation the human-readable string SHOULD 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 SHOULD 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 SHOULD
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 Validly Signed 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 or providing the same signing algorithm more than twice.</t>

<t>To assist debugging, errors in a JSON object specifying Recipes
SHOULD be called out specifically. If the JSON is valid but the
Verifier is not prepared to handle the complexity of the Recipes
then a failure MAY be returned but the error message SHOULD NOT
confuse this situation with invalid JSON. What "unacceptably
complex" might mean is a local policy decision.</t>

<t>Clearly, a message with no DKIM2 header fields at all will be
reported as PERMERROR.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
PERMERROR: Message-Instance m=<x> missing
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> JSON is unacceptably complex
PERMERROR: DKIM2-Signature i=<x> missing
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=<x> has a duplicate selector
PERMERROR: DKIM2-Signature i=<x> has more selectors than allowed
PERMERROR: No DKIM2 header fields found
]]></artwork></figure>

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

<t>A message is not a Validly Signed DKIM2 Message if any of its
DKIM2-Signature header fields was created more than 14 days
before the message was delivered.</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 Validly Signed DKIM2 Message if any timestamp is from
more than one day ahead of when the message was delivered.</t>

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

<t>Possible errors:</t>

<figure><artwork><![CDATA[
PERMERROR: DKIM2-Signature i=<x> signature expired
PERMERROR: 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 Validly Signed 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[
PERMERROR: DKIM2-Signature i=<x> MAIL FROM <value> did not match
PERMERROR: DKIM2-Signature i=<x> RCPT TO <value> did not match
PERMERROR: DKIM2-Signature i=<x> MAIL FROM and d= do not match
PERMERROR: DKIM2-Signature i=<x> nd= does not match
PERMERROR: DKIM2-Signature i=<x> unexpected nd= tag
PERMERROR: DKIM2-Signature i=<x> mf= does not match the rt= of i=<y>
PERMERROR: 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 MUST be reported as TEMPERROR but a DNS
result that indicates the key is absent MUST be reported as a
PERMERROR. Additionally, as <xref target="DKIMKEYS"></xref> makes clear, if more than
one record is returned this is an error. The human-readable error
message SHOULD provide the Selector value so that it is clear which
key has caused a problem.</t>

<t>Note that <xref target="DKIMKEYS"></xref> has retired the h= field and DKIM2 takes no
notice of it should it be 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
]]></artwork></figure>

</section>
<section anchor="perform-the-signature-verification-calculation"><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"/>. The signature value(s)
themselves will need to be removed to correspond with what was actually
signed. Note that this canonicalized version does not actually replace
the original content.</t>
  <t>Use the relevant public key value(s) to check the signature(s).</t>
  <t>If there is more than one signature provided then they MUST all be
checked if the Verifier is able to do so. If any signature fails then
an error SHOULD be reported. If all signatures that can be checked fail
then FAIL MUST be reported.</t>
  <t>If some signatures fail and others pass then any error that is
reported SHOULD provide that information by specifying the relevant
Selector values.</t>
</list></t>

<t>The reasoning for reporting an error if any signature fails is that if a signature
scheme has recently become deprecated because it is known to be cryptographically
flawed then Signers will use a second (unbroken) signature scheme. However, such
a Signer may still provide the other signature for the benefit of Verifiers
that have yet to upgrade -- reasoning perhaps that attacks are too expensive
to be a very significant security issue. A Verifier that determines that
one signature passes while the other fails may well be in a position to
prevent an attack.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
FAIL: DKIM2-Signature i=<x> selector <s1> incorrect signature
FAIL: DKIM2-Signature i=<x> signature <s1> signature <s2> failed
]]></artwork></figure>

</section>
<section anchor="validating-body-and-header-hashes"><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 values can then be directly compared.</t>

<t>Since there may be more than one hash algorithm given, the human-readable
error message SHOULD indicate which algorithm's result failed to match.</t>

<t>If one hash value passes and another does not then this SHOULD be
treated as a failure.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
FAIL: Message-Instance m=<x> header hash <value> mismatch
FAIL: Message-Instance m=<x> body hash <value> mismatch
]]></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 Validly Signed 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. To determine if the 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[
PERMERROR: DKIM2-Signature i=<x> matching From is not authentic
]]></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 body hash
value of the original email (Message-Instance m=1) matches.</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 emails 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 MUST NOT be sent.</t>

<t>DKIM2 requires that there is relaxed domain match between the
Signing Domain and the mf= value in the same DKIM2-Signature header
field. Hence, since a DSN will only be
sent when a message has been Provisionally Verified, there can be
no "backscatter" to the forged addresses of third parties that
have not been 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 MUST 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>

<t>The message being reported upon MUST have been Provisionally
Verified.</t>

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

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

<t>A Forwarder which receives a DSN MAY 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 MUST 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 MUST 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 MUST be undone and the Message-Instance
header field documenting those changes MUST be removed.</t>

<t>All DKIM2-Signature header fields added by this Forwarder
(including any with an nd= tag) MUST be removed. A good faith
effort SHOULD 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 MUST be removed from the third
part of the DSN and a <spanx style="verb">text/rfc822-headers</spanx> MIME part MUST
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
MUST 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 SHOULD 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="relaxed-domain-match"/>)
between the Signing Domain 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. If the message
body is present then that can be verified by inspecting the body
hash value in the highest numbered Message-Instance header field.</t>
</list></t>

<t>If the verification fails then the DSN MUST NOT be propagated
any further. If verification has been performed prior to
accepting the DSN from the sender the DSN SHOULD 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 SHOULD be used.</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 MUST 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 MUST compute the hash
after the encoding, and Verifiers will check the hash of the encoded
form of text. However, the hash MUST 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 MUST be done before signing.
In particular, bare CR or LF characters (used by some systems as a local line
separator convention) MUST be converted to the SMTP-standard CRLF
sequence before the message is signed.  Any conversion of this sort
MUST 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 MUST 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) MUST 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. 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>TBA -- we will need to document the two new header fields
There is limited value in registering tags, flags, hash and
signature algorithms, extensions will need new RFCs (and considerable
justification) not changes to a registry</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,
systems may make decisions about what type of message is being handled by
looking for an Auto-Submitted header field, but this is a trace header
field and thus it is not signed. Additionally, conclusions may be drawn about
whether email is authentic based on Authentication-Results header fields
which are also unsigned. In the latter case, of course, a Validly Signed
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
should pay attention to community advice as to whether cryptographic
primitives are appropriate to use, regardless of what this specification
might say.</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="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="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="RFC" value="7405"/>
  <seriesInfo name="DOI" value="10.17487/RFC7405"/>
</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>
<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="18" month="March" 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’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-chuang-dkim2-dns-04"/>
   
</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>


    </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="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="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="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="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="5" month="September" 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-00"/>
   
</reference>

<reference anchor="CONCLUDEARC">
   <front>
      <title>Concluding the ARC Experiment</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="4" month="December" year="2025"/>
      <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 (DKIM).  To avoid any future confusion, it is
   therefore requested that ARC (RFC8617) be marked “Obsolete” by the
   publication of this Internet-Draft.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-adams-arc-experiment-conclusion-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>



    </references>

</references>


<?line 2346?>

<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-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 dexterity.</t>
  <t>Removed SHOULD NOT 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
MUST 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+y9+3YbyXU3+n89RS9MskxOAEikpJmxxvIyR9JkFOsWkZOJ
z0TxNIEG0RbQTaMbpGB9epfzLOfJzr7Xru4mKE2cnG+t82U5tgg0quuya9/3
b08mk9CW7ap4mD2p13lZ/bHYNdmzeVG15aIs5tmLvFxlp+VFlbfbTdFkV8fZ
wZM/PntxfBjy8/NNcQU/xD/dM2Fez6p8DUPON/minZRFu5jM35Vr+q/jSXNZ
zCZ3vw7N9nxdNk1ZV2e7S3j62dOz70O1XZ8Xm4dhnrfFw3D1MMzgHxf1Zvcw
a9p52F7iF83DUF5uHmbtZtu0x3fv/vbucXhX7K7rzRyGqdpiUxXt5Am+PTRt
Xs3/nK/qCl6xg9ldlg+zn9t6Ns6aetNuikUD/9qt8R9vQ8i37bKG92eTkMH/
lVXzMHszzR6v8l1bV/QZr+1NOVvmm3nyTb25eJj9KV/WNf1ZwIauHmabGT/y
hx1+U1az6axeJy/4CV6w3ObVhRv/p6L0H9LQ/1zXF6vCj31dlMv8+g8X9EVv
3O+m8JNqfp1XuRv5u01dpZ/T4N/nTYuDZq/bXfYc9hq/aWCDivZh9ry4KlbZ
8Tg7Orqf/VSuVmW+zk7pS3puVs9h5Ht3796VP7dVi2d2Age0yeFp+vhySacw
+qevjrL7D77O7h99ld2/99XIr+gcZnfxh4VMpi3yNS0rVPVmnbflFVAFPv3m
+8dHd+/dtz+O795/4P/4Ov5xdPRb++Pe/a/u2R/3v7r/jf3x4NiN9uDe8ZH/
4zj+8c1v7/o/4mNf3fv6q/jH/bvxpV89cAN89eBeHOArP4Ov730dH/v6/t24
nm+Ovo5z++b4QRz6m6/uygzwFv7x6Z9O4QJMnkxnRDly4eZVQ498/+z16eTo
m7uT+w+zl89Oz6b4wZQ+iN/D3vGA+H/CGl7U8+2qmDzP27acFZPv8gY4w5Py
omxzxxyAHuCqwZ2wn9tlsv+bMK29hJOsK/jxs6qBd2zbIqsX9vsmg//NzorZ
sqpX9cXOfk9MITu+e3x/cvcb+7QpNmXRlNWi9m/KaIm0JqA4WNUo+fLJq2cP
s6O706/uHn9zJ24GPBcXn28ukPaXbXvZPLxzZ16XU5j9neFfBZxAn0QdId7/
+p6jowe/dSd/fDf+8c3do6/dH+4333zlvvnt8bH85uTHsx/ePD398fmZHP6F
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
cHMbD73RtRnZ31A6IhduQJHGOQzPPW7umU7c9ZGm6P887ulnN4IWCPDvmd/V
62JQbvS7/pa+/ttQZImZy5CnBKukycm3NerrjDhYPA9DPKcg6II2rhR0MIYa
aW/JADmQSWjirMhlS2tU6/lQvAyMKRkjtIxUxX2OhHIHSnx9l5lGNTfpqtgK
gyEXBaZraS+L0UhwStxahhzr+GMlqjF/KCX/RkN8sRQBjL5FsuKrpz2rCY3I
2C7GZJj1MssYmIDaWSQgm0bJiglyb8PjlouWrHomVrVmrukWKVSvKq6UY3Mq
j31CYsKMbFzgapdEY5IOIjQslZRIO3CRbIJlo/HyTvlpQ2nP/+bScEEDS7Jy
UfUy1dMwBhvzh7FnPo1ZmmkSbjJN2IbtjOE1l3VRtI1uSuoCcqr9QJEJ/Iel
NHD3KDdgKpzyiXqpy+PtFRRUNyY+Sj60QVmOtVJrb6JzmjEVSD9FV+f4Vm+l
TyyPbjFy/t6SZ3Rbr0ZyRMqmiYGYdUP+WGaoOW2UOYRkqE3pJfGBoonviDrX
XCoPFuS2aTRlWHpib/4s+fJodiUZ9dpKtKHyO/d2RGTLrJ99P2VQIN+omwJW
OXurQ5KhajCNdkZheZpxc1t6uq5+Z0Xi7BzXPhmDRE8uYfFIamzbQ/iU3Rzd
G1Py91dpNKRjlw6RJ11LSNfS+rxxc98IDlJaCHMgek1oUBzyRvq0e+aFGi04
VB993tRVNPgkDsKgQ4P+e5dIEkFL7TedYodbTkpLg+jdEi2PwY1IIVq0IwLM
8o2xUDNoagi6EnxiSNxjwwKWrEPvXsQYxOiSAoXbyxF/y25o70KUfiv0BQUi
0OvB1fmBQVYosup2YGxqJhjn+Np4EmNJgsFeVIGas9FNnRPiG0mm1bYhNXSm
+QPzTX5t7QOxMzAjf2J6wgKf2mCKjbiAyOrzTTX7bi1s9rIhXAFyvmQHyNEf
HWWUXswdZopcAZrgv8z9qzsf4LxAiesFTrUueMy2XqQYzHcKvWwJnYYG6Dhi
N81e4l3ilCfrMx8Sl4jrNc/zqhUWdzikEfYWbO7xzWuWbyNJWMrmjD4a8t8b
+BQ7fKIPFMGM1CsLX0u7Pyx2L2cIwQVrDOSbQ7wLojMiQS5OwWSNpqHbKxtN
6cvlsq5jwD4Mye6b7xtzOs/jnhmWGufstlr0zsrCGC4GsvtV3ZD84KI53erO
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
C4eyUMeZAQA=

-->

</rfc>

