<?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.19 (Ruby 2.6.10) -->


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

]>


<rfc ipr="trust200902" docName="draft-ietf-dkim-dkim2-spec-02" 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="May" day="17"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 61?>

<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 validatable "chain". This permits validators
to identify the nature of changes made by intermediaries and apply a
reputation to the systems that made changed. 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 81?>

<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 validators 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
<xref target="RFC2119"></xref>.  These words take their normative meanings only when they
are presented in ALL UPPERCASE.</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 experience with (see <xref target="CONCLUDEARC"></xref>) the experimental
ARC protocol (<xref target="RFC8617"></xref>).</t>

<t>Syntax descriptions use Augmented BNF (ABNF) <xref target="RFC5234"></xref>.</t>

<t>This document uses JSON <xref target="RFC8259"></xref> to encode the "recipes" which
record changes made to a message header fields or 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. Unrecognised fields within JSON objects
MUST be ignored.</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 must be 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>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 allow
undoing 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:
selector._domainkey.domain.</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 should be considered 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-tokens"><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>

</section>
</section>
<section anchor="algorithms"><name>Signing and Verification Cryptographic Algorithms</name>

<t>DKIM2 supports multiple hashing and digital signature algorithms. One
hash function (SHA256) is specified here and two signing algorithms
are defined by this specification: RSA-SHA256 and Ed25519-SHA256.
Signers and Verifiers MUST implement SHA256. Signers SHOULD implement
both RSA-SHA256 and Ed25519-SHA256. Verifiers MUST implement both
RSA-SHA256 and Ed25519-SHA256.</t>

<section anchor="the-sha256-hashing-algorithm"><name>The SHA256 Hashing Algorithm</name>

<t>The SHA256 hashing algorithm is used to compute body and
header hashes as defined in <xref target="computing-body-hash"/> and
<xref target="computing-header-hash"/>.</t>

<t>The resultant values are identified by the text string "sha256" and
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 (FIPS-180-4-2015) as the hash-alg.  That
hash is then signed by the Signer using the RSA algorithm (defined in
PKCS#1 version 1.5 <xref target="RFC8017"></xref>) as the crypt-alg and 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 (FIPS-180-4-2015) 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="other-algorithms"><name>Other Algorithms</name>

<t>Other algorithms MAY be defined in the future.  Verifiers MUST ignore
any hashes or signatures using algorithms that they do not implement.</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 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="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-dkim-dkim2-spec",
  "type": "object",
  "properties": {
    "h": {
      "description": "recipes to recreate header fields",
      "oneOf": [
        {
          "description": "per-field-name recipe arrays",
          "type": "object",
          "minProperties": 1,
          "additionalProperties": { "$ref": "#/$defs/recipe-steps" }
        },
        {
          "description": "previous header state cannot be recreated",
          "type": "null"
        }
      ],
    },
    "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 inclusive",
            "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": { "type": "string" },
                "minItems": 1
              }
            },
            "required": ["d"], "additionalProperties": false
          }
        ]
      }
    }
  }
}
]]></artwork></figure>

<t>Note that the specification of JSON schemas is maintained by the JSON Schema
organisation, and the relevant specification document is linked to by the
$schema field in each JSON schema.</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 instructions
are applied in order to the message which has been received
so as to recreate the message as it was before modifications were made.</t>

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

<t>If the "h" field value is null (there are no recipes for
any header field) then the previous state of the header fields
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>Matching of header field names is always done without regard to case
and there MUST NOT be JSON keys that differ only in case.</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 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 should be treated as
being unwrapped (in the normal <xref target="RFC5321"></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 field 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.</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>

</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
fields 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.</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>

</section>
</section>
<section anchor="messagehashes"><name>Message Hash Values</name>

<t>A set of cryptographic "hashes" are 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>To provide for algorithmic dexterity more that one hash value, using a
different algorithm MAY be supplied in the same 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 MAY 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 "Received" or "Return-Path"
header fields MUST be ignored.
These are Trace headers as described in <xref target="RFC5321"></xref>
and serve only to document details of the SMTP transmission process.  <vspace blankLines='1'/>
When calculating the header field hash any Authentication-Results
header fields MUST be 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 the ""trust boundary" of an
Administrative Management Domain". As they are only used 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'/>
When calculating the header field hash any header field with
a header field name starting with "X-" MUST be ignored.
Currently deployed email systems use these fields as
proprietary Trace headers which have no defined meaning for
other systems and it considerably simplifies reporting
on changes to header fields to ignore them.  <vspace blankLines='1'/>
When calculating the header field hash any "DKIM-Signature" header
fields and any header fields whose field name starts with "ARC-"
MUST be ignored. Not including
DKIM1 and ARC signatures 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.  <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 with the same header field name
then the header fields are placed in the order in which they were
likely to have been placed into the message header, that is from
the last within the header upwards (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="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 list of tag values as described
below. The m= and h= tags MUST be present. The r= tag is optional. Note
that the syntax is such that semi-colons will never occur within
tags or values, they only act as a separators.</t>

<t>The tag identifiers (before the = sign) MUST be treated as case
insignificant, the tag value (after the = sign) is case significant. The
tags may appear in any order, but MUST be only one of each kind. Unknown
tags, for extensions, MUST be ignored.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-field    = "Message-Instance:" mi-tag-list
mi-tag-list = *([FWS] mi-tag [FWS] ";" [FWS])
mi-tag      = mi-m-tag / mi-h-tag / mi-r-tag / x-tag
              ; x-tag is for extension
x-tag       = x-tag-name [FWS] "=" [FWS] [x-tag-value]
x-tag-name  = ALPHA *(ALPHA / DIGIT / "_")
x-tag-char  = %x21-3A / %x3C-7E
x-tag-value = x-tag-char *([FWS] x-tag-char)
]]></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. Gaps
in the numbering MUST be treated as making the whole message impossible
to verify.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-m-tag    = %x6d [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    = %x72 [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>ABNF:</t>

<figure><artwork><![CDATA[
mi-h-tag    = %x68 [FWS] "=" hash-set *("," hash-set)
hash-set    = [FWS] hash-name [FWS] ":" header-hash ":" body-hash
hash-name   = "sha256" / 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 contains tag values that provide the
signature and key-fetching data. The i=, m=, t=, mf=, rt=, d=
and s= tags MUST be present. The other tags are optional. Note
that the syntax is such that semi-colons will never occur within
tags or values, they only act as a separators.</t>

<t>The tag identifiers (before the = sign) MUST be treated as case
insignificant, the tag value (after the = sign) is case significant. The
tags may appear in any order, but MUST be only one of each kind. Unknown
tags, for extensions, MUST be ignored.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-field    = "DKIM2-Signature:" sig-tag-list
sig-tag-list = *([FWS] sig-tag [FWS] ";" [FWS])
sig-tag      = sig-i-tag / sig-m-tag / sig-t-tag / sig-mf-tag /
               sig-rt-tag / sig-d-tag / sig-s-tag / sig-n-tag /
               sig-f-tag / x-tag
]]></artwork></figure>

<t>It will be noted that we have not included a version number.  Experience
from IMF onwards 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 labelled 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. Gaps
in the numbering MUST be treated as making the whole message unsigned.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-i-tag = %x69 [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.</t>

<t>ABNF:</t>

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

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

<t>This text value, if present, has a meaning to the creator of the signature
but MUST NOT be assumed to have any meaning to any other entity. It
MAY be used as an index into a database to assist in handling Delivery
Status Notifications or for any other purpose.</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 MUST NOT
exceed 64 characters and implementations SHOULD reject messages
where this limit has been ignored.</t>

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

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-n-tag   = %x6e [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>Implementations SHOULD be prepared to handle values up to at least
10^12 (until approximately AD 200,000; this fits into 40 bits).</t>

<t>Implementations MAY ignore signatures that have a timestamp in the future.
Implementations MAY ignore signatures that are more than 14 days old.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-t-tag    = %x74 [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  = %x6d %x66 [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 RCPT
TO values provided MAY include all of the recipients so that a single
copy of the email MAY be sent to all of the recipients in a single SMTP
transaction. Alternatively, multiple copies of the email may be
generated so as to not immediately reveal who else received the email.</t>

<t>However, if "bcc:" recipients are involved then in order to
meet the requirements of <xref target="RFC5322"></xref> Section 3.6.3 each and every
bcc recipients MUST NOT revealed to any other message recipient.</t>

<t>ABNF:</t>

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

</section>
<section anchor="d-the-domain-associated-with-this-signature"><name>d=  the 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 ("&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   = %x64 [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"/>.</t>

<t>The selector values subdivides the namespace for the domain being
used for signing.</t>

<t>The algorithm value is the one used to generate
the signature. Verifiers MUST support "RSA-SHA256" for which
the string "rsa-sha256" is used and "Ed25519-SHA256" for which the
string "ed25519-sha256" is used. See <xref target="algorithms"/> for a description
of these algorithms.</t>

<t>To provide for algorithmic dexterity more than one signature,
using different algorithms, MAY be supplied. Since the DNS lookup for
the public key will check that the k= algorithm value matches, a different
selector MUST necessarily be used for each signature.</t>

<t>ABNF:</t>

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

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

<t>"exploded": this message (identified by its unique header hash value (recorded
in the h= JSON object of the relevant Message-Instance) is being sent to more
than one email address. An
MTA which receives a message MAY use this information to help it distinguish
between malicious "DKIM replay" and legitimate activity performed by
mailing list. If this flag is not present in at least one DKIM2-Signature
header field then an MTA MAY assume that only one copy of a particular
message (identified by relevant cryptographic hash values) is intended
to exist;</t>

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

<t>"donotexplode": this Signer requests that the message not be sent to more
than one recipient. A system that, by local policy, ignores this request
MUST NOT allow any of the copies it creates to be forwarded on to any
MTA outside its control.</t>

<t>"donotmodify": this Signer requests that the message not be modified from
the form in which it is sent. If this request is honored then the body
MUST NOT be changed in any way that alters the body hash and header fields
MUST NOT be removed or changed. It is permissible to add header fields
but a subsequent receiver SHOULD consider whether such header fields
have an impact on how the message will be viewed or responded to and
MAY reject the message if it has concerns. A  system that, by local
policy, ignores this request and makes other changes MUST NOT allow
the message to be forwarded on to any MTA outside its control.</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>ABNF:</t>

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

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

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

<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.</t>

<t>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 and if they are the same a new
Message-Instance header field SHOULD NOT be added.</t>

<t>A Message-Instance header field MUST contain "recipes" to be able to
recreate the message corresponding to the hash values in the
currently highest numbered Message-Instance header field, or a
null recipe to indicate that recreating the previous version
of the message will not be possible.</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. All other Message-Instance
header fields SHOULD contain at least one "recipe".</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. 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.</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 a valid
"chain of custody" MUST be apparent when all of the DKIM2-Signature header fields
are considered. This "chain of custody" contributes to the way in
which DKIM2 tackles "DKIM replay" attacks.</t>

<t>In any situation where a message will be forwarded in such a way that the
mf= on the outgoing message is such that the "chain of custody"
would be broken then the Signer MUST generate an extra DKIM2-Signature
header field that causes values to match, i.e. a record must be fabricated
that documents the mail being passed from one domain to another.</t>

<t>It will be noted that the
creation of this extra header field will require the Signer to have access
to a DKIM2 private key associated with a domain in the RCPT TO entry. This is
often achieved by the Signer creating the private key and never sharing it and
then taking one of two approaches 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>If an MTA does not change anything in the message which would require
a new Message-Instance header field and it is going to send it onwards
to a system that be able to verify the existing message (that is no
changes are made to the MAIL FROM and RCPT TO values) and there is no
other reason to add a DKIM2-Signature header field then the MTA MAY
choose not to add one. This means that an essentially transparent
SMTP forwarding system need not be made "DKIM2 aware".</t>

</section>
<section anchor="relaxed-domain-match"><name>The Relaxed Domain Match Algorithm</name>

<t>To assist in addressing the "DKIM replay" problem DKIM2 provides a
"chain of custody" for every message. This is established by checking
that the MAIL FROM value recorded in every DKIM2-Signature header field
(except of course the i=1 instance) can be matched with a RCPT TO value
of the next lower numbered DKIM2-Signature header field.</t>

<t>It is also necessary to check DKIM2-Signature header fields for a match
between the signing domain (specified in the d= tag) and the MAIL FROM
domain.</t>

<t>To allow systems to use existing "bounce-handling" schemes with special
subdomains in their MAIL FROM values a "relaxed" approach is taken
to the matches between these values.</t>

<t><list style="symbols">
  <t>Only the domain part of the MAIL FROM and RCPT TO values is used
for these matches The local part (and the @) are ignored.</t>
  <t>If there is not an exact match between the domain names then labels
are removed, one by one from the left hand side of the MAIL
FROM domain name and the comparison is repeated.</t>
  <t>If no labels remain then there is no match.</t>
</list></t>

</section>
<section anchor="signer_privatekey"><name>Select a Private Key and Corresponding Selector Value</name>

<t>This specification does not define the basis by which a Signer should
choose which private key and selector value to use -- this will be a
matter of administrative convenience.  Distribution and management of private
keys is also outside the scope of this document.</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 signature algorithm 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 WPS 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 spaces 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-requirements"><name>Verification Requirements</name>

<t>The details of verification appear in <xref target="verifier_actions"/> below.
This section considers when verification should be performed and
how thorough it needs to be.</t>

<section anchor="check-most-recent-signature-and-hashes-for-the-message"><name>Check Most Recent Signature and Hashes for the Message</name>

<t>A Verifier SHOULD check the validity of the most recently applied
(highest numbered i= value) DKIM2-Signature header field
and the associated (m=) Message-Instance before accepting an email.</t>

<t>If these checks
do not pass then a Delivery Status Notification (DSN) for the email MUST
NOT be generated thereafter -- hence the best strategy, if the email
is not wanted, is to reject it (with a 5xx error code) whilst the
relevant SMTP conversation is still ongoing. If the check gives
a TEMPFAIL result then a 4xx error code SHOULD be used to allow the
sending MTA to understand the situation.</t>

<t>If the checks do pass and it is later determined that the email
is unacceptable for any reason then a DSN MAY be created and
passed to the system that delivered the email. The details of
this procedure appear in <xref target="bounce"/>.</t>

</section>
<section anchor="checking-the-message-instance-header-fields"><name>Checking the Message-Instance Header Fields</name>

<t>If the message has been modified since its original creation then
the Message-Instance header fields will enable a Verifier to determine
whether or not all the changes made are correctly recorded
by using the "recipes" to construct each preceding version
of the message.</t>

<t>Note that if it is only the first form of the message is of
interest then all the "recipes" can be applied in turn and
only one hash value checked -- the correctness of the
intermediate hash values are not relevant to this assessment.</t>

</section>
<section anchor="checking-the-dkim2-signature-header-fields"><name>Checking the DKIM2-Signature Header Fields</name>

<t>However, in order to check the chain of custody, to assess
whether the message has been exploded, to pick out
"feedback" requests to be honoured or to assign reputation to
Revisers then all of the DKIM2-Signature header fields
will have to checked for validity. The TBA document explores
these issues in more detail.</t>

</section>
<section anchor="verifier_interpret"><name>Interpret Results/Apply Local Policy</name>

<t>It is beyond the scope of this specification to describe what actions
the recipient of an email performs, but mail carrying valid DKIM2
signatures gives the recipient opportunities that unauthenticated
email would not.  Specifically, an authenticated email provides
predictable information by which other decisions can reliably be
managed, such as trust and reputation.  Conversely, it is hard
to assign trust or reputation to unauthenticated email.</t>

<t>If an MTA wishes to reject messages where signatures are missing
or do not verify, the handling MTA
SHOULD use a 550/5.7.x reply code.</t>

<t>Where the Verifier is integrated within the MTA and it is not
possible to fetch the public key, perhaps because the key server is
not available, a temporary failure message MAY be generated using a
451/4.7.5 reply code.</t>

<t>Temporary failures such as inability to access the key server or
other external service are the only conditions that SHOULD use a 4xx
SMTP reply code.  In particular, cryptographic signature verification
failures MUST NOT provoke 4xx SMTP replies.</t>

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

<t>This section discusses the detail of the actions taken by a
Verifier. In essence
this will involve repeating all the actions taken by a Signer to
produce a Message-Instance or DKIM2-Signature header field. To
avoid a lot of repetition these actions will not be spelled out
in detail. Once a hash value has been calculated it is then
compared with the value reported by the Signer, or the Signer's
public key is used to determine whether a signature that has
been provided is correct.</t>

<t>When a Verifier is determining whether a particular DKIM2-Signature
header field it MUST consider the state of the message when that
header field was added to the message. That means it MUST first apply
all relevant recipes to reconstruct the body and header fields and it
MUST ignore any Message-Instance and DKIM2-Signature fields that
were added after that point.</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>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 a temporary
      inability to retrieve a public key. A later attempt may
      produce a different.</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 &lt; and
&gt; characters). Similarly <spanx style="verb">&lt;value&gt;</spanx> MUST be replaced by a relevant
string for the particular message.</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="RFC3461"/>) the
human-readable string should be included.</t>

<t>If, by local policy, a system wishes to accept a message which
has failed authentication it might choose to add an email header
field to the message before passing it on.  Any such header field
SHOULD include the human-readable string and 
SHOULD be inserted before any existing DKIM2-Signature or pre-existing
authentication status header fields in the header field block.  The
Authentication-Results: header field (<xref target="RFC8601"></xref>) MAY be used for this
purpose. It should be noted that any "Authentication-Results" header
field will count as a modification to the email if any further
DKIM2-Signature header fields are to be generated.</t>

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

<t>Verifiers MUST meticulously validate the format and values of all
relevant Message-Instance and DKIM2-Signature header fields. It MUST
also ensure that all required instances of these header fields are
present and that all required tags are present. Recall however
that unknown tags MUST be ignored.</t>

<t>As a special case, there MUST NOT be a Message-Instance field
with a higher m= value than occurs in any DKIM2-Signature field.</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 DKIM2-Signature i=<x> missing
PERMERROR DKIM2-Signature i=<x> syntax error
PERMERROR DKIM2-Signature i=<x> tag=<y> missing
]]></artwork></figure>

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

<t>Verifiers SHOULD return a failure it is more than 14 days since the
timestamp recorded in the "t=" tag of any DKIM2-Signature header field.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
PERMERROR DKIM2-Signature i=<x> signature expired
]]></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"/> a Verifier MUST check 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 MUST be present.</t>

<t>The values of domains MUST BE put into lower-case before doing these
checks. As is usual in email protocols the case of the local part of
an email address is assumed to matter. Note that these checks MUST NOT
use the relaxed domain match algorithm.</t>

<t>A Verifier SHOULD check that there is a relaxed domain match
(see {relaxed-domain-match}) between the signing domain of the
most recently applied DKIM2-Signature header field and the
mf= value in that header field.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
PERMERROR: MAIL FROM <value> did not match
PERMERROR: RCPT TO <value> did not match
PERMERROR: MAIL FROM and d= do not match
]]></artwork></figure>

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

<t>The public keys of all 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>.
The Verifier MUST validate the key record and MUST NOT use any public
key records that are malformed.</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 implementations
MUST ignore this tag if it is present.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
TEMPERROR: DKIM2-Signature i=<x> public key <value> could not be fetched
PERMERROR: DKIM2-Signature i=<x> public key <value> does not exist
PERMERROR: DKIM2-Signature i=<x> public key <value> has multiple records
PERMERROR: DKIM2-Signature i=<x> public key <value> has a syntax error
PERMERROR: DKIM2-Signature i=<x> public key <value> algorithm mismatch
PERMERROR: DKIM2-Signature i=<x> public key <value> 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 PERMFAIL MUST be reported.</t>
  <t>If some signatures fail and other pass then any error that is
reported should provide that information (e.g. PERMFAIL "rsa-sha256
signature passed, ed25519-sha256 signature failed").</t>
</list></t>

<t>The reasoning for requiring that all signatures pass 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 whilst 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> public key <value> incorrect signature
]]></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-body-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>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-if-donotmodify-and-donotexplode-requests-were-honored"><name>Check if donotmodify and donotexplode Requests Were Honored</name>

<t>If a verifier receives a message with a nonotmodify request and a later
hop has altered the message body or removed or altered header fields
then the message SHOULD be rejected.</t>

<t>If a verifier receives a message with a donotexplode request and
a later hop has indicated that it has exploded the message then
the message SHOULD be rejected.</t>

<t>Possible errors:</t>

<figure><artwork><![CDATA[
FAIL: Message has been modified despite a donotmodify request
FAIL: Message has been exploded despite a donotexplode request
]]></artwork></figure>

</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"/>
return code or, if the SMTP session has completed, by generating
a Delivery Status Notification (DSN, as defined in <xref target="RFC3461"/>.</t>

<t>A DSN MUST be addressed to the MTA that sent the message. This
prevents "backscatter" by passing failures back along the chain
of MTAs that were in involved in passing the message forwards. This
is achieved by using the mf= tag from the highest numbered
DKIM2-Signature field. If this field is null ("mf=&lt;&gt;") then a DSN
MUST NOT be sent.</t>

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

<t>As set out in <xref target="RFC3461"/>, the DSN has a top-level MIME part of
type <spanx style="verb">multipart/report</spanx>. Among other things, that MIME part must
contain a MIME part of type <spanx style="verb">message/rfc822</spanx> that holds either
the original message exactly as it was submitted by the sending system
or just the header fields of that message.</t>

<t>All relevant DKIM2-Signature header fields (and Message-Instance
header fields if the message body is supplied) MUST verify. 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>

<t>If the message body has been truncated (rather than omitted
altogether) then in order to allow verification of the DNS
contents a Message-Instance header field MUST be added to the
message with a body recipe containing a {"z": true} step.</t>

<section anchor="bounce-propagation"><name>Bounce Propagation</name>

<t>A Forwarder which receives a DSN MAY decide to propagate this
DSN to the MAIL FROM address used to deliver the message to it
(which can be found in the relevant DKIM2-Signature header field).
The DSN SHOULD be handled in the usual way, with Message-Instance
header fields documenting any changes and a DKIM2-Signature
field with an incremented hop count value added.</t>

<t>The Forwarder MAY alternatively decide to reconstruct the message
(or just the message header fields) as they were when the message
was delivered to the Forwarder and construct a DSN using that
information. The information in Message-Instance header fields
can be used to achieve this. The resultant DSN is sent to the
MAIL FROM address from the now highest numbered DKIM2-Signature
header field. Doing this will ensure that details of where the
message was forwarded to will not be revealed to the previous hop.</t>

</section>
<section anchor="authentication-of-inbound-bounce-notifications"><name>Authentication of Inbound Bounce Notifications</name>

<t>When a system receives a DKIM2 signed bounce notification, and the
included original message is also DKIM2 signed, it SHOULD
verify that this 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>The DSN's DKIM2-Signature will have a signing domain that is
aligned with the recipient of the message that is being returned.
The recipient's address is located in the rt= tag of the
last (highest i= tag) DKIM2-Signature in the returned message.</t>
  <t>The last (highest <spanx style="verb">i=</spanx> tag) DKIM2-Signature header field of the
returned message will be one that was generated by the system
receiving the bounce notification, 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. If the message body is present then
that can also be verified by inspecting the Message-Instance
header field(s).</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>
<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 will need to be in "network normal" format
(text is ASCII encoded, lines are separated with CRLF characters, etc.).</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.  Likewise, the Verifier MUST incorporate the
values into the hash before decoding the base64 or quoted-printable
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
SHOULD 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-rfc6530-considerations-for-dkim2"><name>EAI (<xref target="RFC6530"></xref>) Considerations for DKIM2</name>

<t>TBA</t>

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

<t>TBA</t>

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

<t>TBA</t>

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

<t>draft-ietf-dkim-dkim2-spec-02</t>

<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 emphasise 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>

<t>draft-ietf-dkim-dkim2-spec-01</t>

<t>Additions to terninology. Improved ABNF. Removed definition of tag-list
and placed relevant text in the two header field definitions. Untangled 
he 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>

<t>draft-ietf-dkim-dkim2-spec-00</t>

<t>Removed JSON for hashes, signatures and SMTP parameters. Provided
valid JSON for recipes and added "z" for truncated body.
Changed algorithm names for signing. Simplified the canonicalisation
performed for the header fields signed by DKIM2-Signature.
Changed v= to m= for message instance numbering.</t>

<t>General tidying up of specifying tag=value specifications and
associated ABNF. Various other fixes for issues flagged in WG.</t>

<t>[[This section to be removed by RFC Editor]]</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="RFC3461">
  <front>
    <title>Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)</title>
    <author fullname="K. Moore" initials="K." surname="Moore"/>
    <date month="January" year="2003"/>
    <abstract>
      <t>This memo defines an extension to the Simple Mail Transfer Protocol (SMTP) service, which allows an SMTP client to specify (a) that Delivery Status Notifications (DSNs) should be generated under certain conditions, (b) whether such notifications should return the contents of the message, and (c) additional information, to be returned with a DSN, that allows the sender to identify both the recipient(s) for which the DSN was issued, and the transaction in which the original message was sent. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3461"/>
  <seriesInfo name="DOI" value="10.17487/RFC3461"/>
</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="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="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="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>



    </references>

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



<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="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="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>



    </references>

</references>



  </back>

<!-- ##markdown-source:
H4sIACfcCWoAA+19e3PbRpbv/133Q6CY3YqUJWlJfiTjjLZG8SPxJn5cS5nc
qYzvBCRAEWMS4ACgZMbr737Ps/s0AFH2JFu1VXenpmKRBPrd531+ZzKZuLZo
V/nD5HG1Tovy+3zXJM+yvGyLRZFnyfO0WCXnxWWZtts6b5Krk+Tg8ffPnp8c
unQ2q/MreBE/mmdcVs3LdA1NZnW6aCdF3i4m2dtiTf85mTSbfD45OnHNdrYu
mqaoyovdBp5+9uTiqSu361leP3RZ2uYP3dVDN4c/Lqt69zBp2sxtN/hD89AV
m/ph0tbbpj05OvoDtPY2311XdQbNlG1el3k7eYy9u6ZNy+xv6aoqoYsdjG5T
PEx+bqv5OGmquq3zRQN/7db4xxvn0m27rKD/ZOIS+F9RNg+T19Pk0SrdtVVJ
3/HcXhfzZVpn0S9Vffkw+Uu6rCr6mMOCrh4m9Zwf+dMOfynK+XReraMOfoIO
ltu0vDTt/5QX9ktq+tuqulzltu3rvFim13+6pB967X4zhVfK7DotU9PyN3VV
xt9T40/TpsVGk1ftLvkB1hp/aWCB8vZh8kN+la+Sk3FyfHwv+alYrYp0nZzT
j/TcvMqg5btHR0fycVu2uGdnsEF1Ck/T15sl7cLo3x4cJ/fuf5ncO36Q3Lv7
YGRnNIPRXf5pIYNp83RN03JlVa/TtriCU4FPv3766Pjo7j3/4eTo3n374cvw
4fj4D/7D3XsPjv2Hew/ufeU/3D8xrd2/e3JsP5z4Dw/ufvkgfLh3FJp+cP/u
kf/w1cn98MtXD46kNbwq3z/5yzmc0snj6Zy2V25FVjbOFeWiN8379/8QRvnV
0fGX5sPdE9OJ/vLo5YtHP/z4+MnZ60fcT5ql62aS1vNJ/m6T18UabvdkXpXz
1RZvn3OTySRJZ7hT89a5PYQg3P4EGloXbZOk+FdTleOkrlb5GM6Sg+OUlsWv
MA04aO0ybZPqusQnG6ARRXmZZNRD0lbw13yLw+HHijZZpo1bwo1dQZdpyYci
WedNk17myWyXpE1TzQtoGpppl3lRa2PXRbvEb5w8PE2Si2XRJPD/dL4s4Pxm
+P6mrq6KDN9Osa9lcpWutjl3j33P8rxM5ulqvl0BockSmkGezLd1jcOEVWvh
3yapFvS9jgxGjJ/LJN1sVjtufl7vNm11WaebZTF3jdJH7mteXcGyURthGA21
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
+sb9L/f/AO7js0USCQEA

-->

</rfc>

