<?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-clayton-dkim2-spec-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="DKIM2 Signatures">DomainKeys Identified Mail Signatures v2 (DKIM2)</title>

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

    <date year="2026" month="February" day="18"/>

    
    
    <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>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 from (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>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>

<section anchor="signers"><name>Signers</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="verifiers"><name>Verifiers</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="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>"local-part" (implementation warning: this permits quoted strings)</t>
  <t>"sub-domain"</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[
VALCHAR      =  %x21-3A / %x3C-7E
                  ; EXCLAMATION to TILDE except SEMICOLON
ALPHADIGITPS =  (ALPHA / DIGIT / "+" / "/")
ALNUMPUNC    =  ALPHA / DIGIT / "_"

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

<t>Note that base64strings are defined in <xref target="RFC4648"></xref>, but that document
does not contain any ABNF. Note that a base64string MUST be padded
with trailing = characters if needed.</t>

<t>Note that the definitions of both textstring and base64string allow
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. FWS within a textstring
MUST be treated as a single space when this value is used.</t>

</section>
</section>
<section anchor="protocol-elements"><name>Protocol Elements</name>

<t>Protocol Elements are conceptual parts of the protocol that are not
specific to either Signers or Verifiers.  The protocol descriptions
for Signers and Verifiers are described in later sections ("Signer
Actions" (<xref target="signer-actions"/>) and "Verifier Actions" (<xref target="verifier_actions"/>)
and this section must be read in the context of those sections.</t>

<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>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 = sub-domain *( "." sub-domain )
]]></artwork></figure>

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

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

<t>DKIM2 uses a simple "tag=value" syntax in the Message-Instance and
DKIM2-Signature header fields, as well as in domain signature records
(see <xref target="DKIMKEYS"></xref>).</t>

<t>Values are a series of strings containing either plain text or "base64"
text (as defined in <xref target="RFC2045"></xref>, Section 6.8). The name of the tag will
determine the encoding of each value.  Unencoded semicolon (";")
characters MUST NOT occur in the tag value, since that separates tag-specs.</t>

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

<figure><artwork><![CDATA[
tag-list  =  tag-spec *( ";" tag-spec ) [ ";" ]
tag-spec  =  [FWS] tag-name [FWS] "=" [FWS] tag-value [FWS]
tval      =  1*VALCHAR
tag-name  =  ALPHA *ALNUMPUNC
tag-value =  [ tval *( 1*(WSP / FWS) tval ) ]
                  ; Prohibits WSP and FWS at beginning and end
]]></artwork></figure>

<t>Note that WSP is allowed anywhere around tags.  In particular, any
WSP after the "=" and any WSP before the terminating ";" is not part
of the value; however, WSP inside the value is significant.</t>

<t>Tags MUST be interpreted in a case-sensitive manner.  Values MUST be
processed as case sensitive unless the specific tag description of
semantics specifies case insensitivity.</t>

<t>Tags with duplicate names MUST NOT occur within a single tag-list; if
a tag name does occur more than once, the entire tag-list is invalid.</t>

<t>Whitespace within a value MUST be retained unless explicitly excluded
by the specific tag description.</t>

<t>Tag=value pairs that represent the default value MAY be included to
aid legibility.</t>

<t>Unrecognized tags MUST be ignored.</t>

<t>Tags that have an empty value are not the same as omitted tags.  An
omitted tag is treated as having the default value; a tag with an
empty value explicitly designates the empty string as the value.</t>

</section>
<section anchor="json"><name>JSON</name>

<t>This document uses JSON <xref target="RFC8259"></xref> for collections of related information.
The JSON objects are then base64 encoded and placed into Tag=Value
lists. This is done to avoid significant complexities in parsing
Tag=Value lists and to simplify the way in which algorithmic
agility is provided.</t>

<t>Unrecognised fields within JSON objects MUST be ignored.</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) if 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"/>. The resultant
values are stored within 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>

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

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

<t>DKIM2 keys are stored in a subdomain named "_domainkey".  Given a
DKIM2-Signature field with a "d=" tag of "example.com" and an "s1=" tag
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-clayton-dkim2-spec",
  "type": "object",
  "properties": {
    "anyOf": [
      {
        "h": {
          "description": "recipes to recreate header fields",
          "oneOf": [
            {
              "description": "no recipe has been provided",
              "type": "object",
              "maxProperties": 0
            },
            {
              "type" : "array",
              "items" : {
                "header-field-name": "string",
                "description": "header fields to copy/discard/add",
                "type": "array",
                "recipes": { "type": "string" }
              }
            }
          ]
        }
      },
      {
        "b": {
          "description": "recipes to recreate the body",
          "oneOf": [
            {
              "description": "no recipe has been provided",
              "type": "object",
              "maxProperties": 0
            },
            {
              "description": "body lines to copy/discard/add",
              "type": "array",
              "recipes": { "type": "string" }
            }
          ]
        }
      }
    ]
  }
}
]]></artwork></figure>

<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 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.</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 there are no "recipes" for a header field name that is present
in the JSON object 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>If the recipe is of the form "(" start "-" end ")" then this
means that (relevant) header field lines from to start to end,
inclusive, are to be emitted. The start value of each of these
recipes MUST be in ascending order and MUST be greater than the
end value of all preceding recipes for this header field name.</t>

<t>Otherwise the recipe is treated as a text string to which
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 below) means that no
heed needs to be taken of wrapping
or the case of the header field name. The text string MUST NOT
contain CR or LF characters. If the 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 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>If the recipe is of the form "(" start "-" end ")" then this
means that (relevant) message body lines from to start to end,
inclusive, are to be emitted. The start value of each of these
recipes MUST be in ascending order and MUST be greater than the
end value of all preceding Body Recipes.</t>

<t>Otherwise the recipe is treated as a text string and a CRLF is
appended and the resultant string is emitted. The text string MUST NOT
contain CR or LF characters. If the string is empty then just
a CRLF is emitted.</t>

</section>
</section>
<section anchor="JSONhash"><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 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/hashes-v1",
  "title": "DKIM2 message hashes",
  "description": "see draft-clayton-dkim2-spec",
  "type": "object",
  "properties": {
    "h": {
      "description": "header hash name and value",
      "type": "array",
      "items": {"type": "string"},
      "minItems": 2, "maxItems": 2
    },
    "b": {
      "description": "body hash name and value",
      "type": "array",
      "items": {"type": "string"},
      "minItems": 2, "maxItems": 2
    }
  },
  "required": ["h", "b"] 
}
]]></artwork></figure>

<t>To provide for algorithmic dexterity more that one hash value, using a
different algorithm MAY be supplied. A verifier MUST check all
signatures that it understands and SHOULD treat any failure as
invalidating all hashes.</t>

<t>The method for computing the header hash value(s) is given in 
<xref target="computing-header-hash"/> and the method for computing the body hash
value in <xref target="computing-body-hash"/>.</t>

</section>
<section anchor="smtp-parameters"><name>SMTP parameters</name>

<t>DKIM2 records the <xref target="RFC5321"></xref> MAIL FROM and RCPT TO values to be used
when this message is transmitted over an SMTP link from the signing
MTA. These values are provided with a JSON object with the schema:</t>

<figure><artwork><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://dkim2.org/schemas/smtp-v1",
  "title": "DKIM2 SMTP parameters",
  "description": "see draft-clayton-dkim2-spec",
  "type": "object",
  "properties": {
    "description": "MAIL FROM",
    "mf": "string",
    "rt": {
      "description": "RCPT TO",
       "type" : "array",
        "minItems": 1,
        "items" : { "type": "string" }
    }
  },
  "required": ["mf", "rt"] 
}
]]></artwork></figure>

<t>Note that MAIL FROM may be just "&lt;&gt;", for example for a Delivery Status
Notification.</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>

</section>
<section anchor="JSONsignature"><name>Message Signature</name>

<t>A set of cryptographic "hashes" are used to record the current
message body and header fields. The hashes 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/signature-v1",
  "title": "DKIM2 signatures",
  "description": "see draft-clayton-dkim2-spec",
  "type": "object",
  "properties": {
    "items": {
      "description": "selector, algorithm, value",
      "type": "array",
      "items": {"type": "string"},
      "minItems": 3, "maxItems": 3
    }
  }
}
]]></artwork></figure>

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

<t>To provide for algorithmic dexterity more than further signatures,
using different algorithms MAY be supplied. A verifier MUST check all
signatures that it understands and SHOULD treat any failure as
invalidating all signatures.</t>

<t>Since the DNS lookup for the public key will check that the
algorithm is correct a different selector MUST necessarily be used
for the second signature.</t>

<t>The method for computing the signature values is given in 
<xref target="calculate-signature"/></t>

</section>
<section anchor="hfMessageInstance"><name>The Message-Instance Header Field</name>

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

<t>The Message-Instance header field is a tag-list as described in
<xref target="tagvaluelists"/>.</t>

<t>Tags on the Message-Instance header field along with their type,
encoding and requirement status are shown below.</t>

<t>v= The revision number of the Message-Instance header field.</t>

<figure><artwork><![CDATA[
plain-text unsigned decimal integer; REQUIRED
]]></artwork></figure>

<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-v-tag    = %x76 [FWS] "=" [FWS] 1*DIGIT
]]></artwork></figure>

<t>r= The recipes that will allow recreation of the previous instance
of the message.</t>

<figure><artwork><![CDATA[
base64; OPTIONAL
]]></artwork></figure>

<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 {#JSONrecipe}}.</t>

<t>ABNF:</t>

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

<t>h= The hash values for the message</t>

<figure><artwork><![CDATA[
base64; REQUIRED
]]></artwork></figure>

<t>The h= tag value is the base64 encoded version of the JSON object that
contains the hashes for the message (see {#JSONrhash}}.</t>

<t>ABNF:</t>

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

</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 all of the signature and key-
fetching data.  The DKIM2-Signature value is a tag-list as described
in <xref target="tagvaluelists"/>.</t>

<t>Tags on the DKIM2-Signature header field along with their type,
encoding and requirement status are shown below. 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>

<t>i= The sequence number of the DKIM2-Signature header field.</t>

<figure><artwork><![CDATA[
plain-text unsigned decimal integer; REQUIRED
]]></artwork></figure>

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

<t>v= The highest numbered Message-Instance header field</t>

<figure><artwork><![CDATA[
plain-text unsigned decimal integer; REQUIRED
]]></artwork></figure>

<t>This value allows verifiers to determine which entity made a particular
revision to the message body or header fields.</t>

<t>ABNF:</t>

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

<t>n=  Nonce value</t>

<figure><artwork><![CDATA[
textstring; OPTIONAL
]]></artwork></figure>

<t>This 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 the tag field as an alternative to the use of more
appropriate header fields, the length of the textstring MUST NOT
exceed 64 characters and implementations SHOULD reject messages
where this limit has been ignored.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-n-tag    = %x6e [FWS] "=" [FWS] textstring
]]></artwork></figure>

<t>t=  Signature Timestamp</t>

<figure><artwork><![CDATA[
plain-text date-time; REQUIRED
]]></artwork></figure>

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

<t>d=  The domain associated with this signature.</t>

<figure><artwork><![CDATA[
plain-text; REQUIRED
]]></artwork></figure>

<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 in the d= tag MUST exactly match the rightmost labels of the domain-name part
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 d= domain.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-d-tag   = %x64 [FWS] "=" [FWS] domain-name
domain-name = sub-domain 1*("." sub-domain)
                         ; from [RFC5321] Domain,
                         ; excluding address-literal
]]></artwork></figure>

<t>m= The SMTP parameters for the message</t>

<figure><artwork><![CDATA[
base64; REQUIRED
]]></artwork></figure>

<t>The m= (mail) tag value is the base64 encoded version of
the JSON object that contains the MAIL FROM and RCPT TO parameters
that will be used when the message is transmitted over SMTP from
the signing MTA (see {#JSONsmtp}}.</t>

<t>ABNF:</t>

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

<t>s= The signature value(s) for the message</t>

<figure><artwork><![CDATA[
base64; REQUIRED
]]></artwork></figure>

<t>The s= tag value is the base64 encoded version of the JSON object that
contains the signature(s) for the message (see {#JSONsignature}}.</t>

<t>ABNF:</t>

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

<t>f=  Flags</t>

<figure><artwork><![CDATA[
plain text; OPTIONAL
]]></artwork></figure>

<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 b1= and perhaps b2=)) 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. A system that, by local policy, ignores this
request 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] sig-f-tag-data)
sig-f-tag-data   = "donotmodify" | "donotexplode" | "feedback" |
                   "exploded" | x-sig-f-tag-data
x-sig-f-tag-data = ALPHA *(ALPHA / DIGIT)
                         ; for later extension
]]></artwork></figure>

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

<t>Although the body hash value will be incorporated into a Message-Instance header
field, these header fields are ignored when calculating the header hash
value and so the body hash and header hash may be calculated in
any convenient order.</t>

<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 hash value is converted to base64 form and
inserted into (Signers) or compared to (Verifiers) the "bh1=" tag
of the Message-Instance header field that is being created. If a second
hash is calculated then its base64 representation will be included
in the "bh2=" tag.</t>

<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>
<section anchor="computing-header-hash"><name>Computing the Header Fields Hash</name>

<t>The header fields hash calculation 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 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 "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.  <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.</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 occur
in the message header, from the top downwards.  <vspace blankLines='1'/>
It is sometimes suggested that some MTAs re-order
header fields after they receive an email, if they do then it is their
responsibility to recover the original order of any header fields
with identical header field names (that are part of a signature calculation)
before verifying an existing signature or passing a previously signed
message to another MTA that is going to wish to verify a signature.</t>
  <t>The hash(es) of the concatenated header fields are calculated.</t>
</list></t>

<t>The hash value is converted to base64 form and
inserted into (Signers) or compared to (Verifiers) the JSON object
that will be base64 encoded and placed into 
the Message-Instance header field that is being created. If further
hashes are calculated then their base64 representations will be included
in the array structure within the JSON object, see <xref target="JSONhash"/>.</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-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 a Reviser that has made to 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
(v=) Message-Instance header field then a new Message-Instance
header field MUST be added.
This 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 (v=1) Message-Instance header fieldMAY
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>To construct 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 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 the header
field that 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 {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. The "chain of custody"
uses a relaxed domain match (see {relaxed-domain-match}).</t>

<t>In any situation where a messages 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.
The Signer gives the public key (and selector value) to the domain owner who
creates an appropriate DNS entry. Alternatively, the Signer creates a public
key DNS entry within a part of the DNS that they control and the domain owner
merely needs to publish a CNAME pointing at this.</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 hash solely over the Message-Instance and DKIM2-Signature
header fields of the message and then signs this hash value. The hashes of
the body and other header fields are covered by the hashes in the highest
version (v=) Message-Instance header field.</t>

<t>Note that the DKIM2-Signature header field contains a signature but
does not give the hash value that was signed. This permits flexibility
for any future signature schemes where a relevant hash value may not
be readily available (or may be inordinately long).</t>

<t>The signature algorithm MUST apply the following steps
in the order given.</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>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 order. First come the Message-Instance
header fields in ascending version (v=) 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=) is null (that is the base64 value
is absent).</t>
  <t>The hash of the concatenated header fields is calculated and this
value is then signed using an the appropriate algorithm and the
selector value, algorithm identifier and the base64 encoded value
of the signature value are placed into the JSON object for the
message signature. Any further signatures are calculated and
added to the array within the JSON object (see <xref target="JSONsignature"/></t>
</list></t>

<t>The JSON object holding the signature is then converted to base64
and inserted into the s= tag of the DKIM2-Signature header field
which MUST then be placed into the message.</t>

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

<t>This section discusses 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 the signature that has
been provided is correct.</t>

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

<t>A verification ends in one of three states, which this document
refers to as follows:</t>

<t>SUCCESS:   a successful verification</t>

<t>PERMFAIL:  a permanent, non-recoverable error such as a signature
   verification failure or mismatched hash value</t>

<t>TEMPFAIL:  a temporary, recoverable error such as a DNS query timeout</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.
For example, implementations might choose to add an email header
field to the message before passing it on.  Any such header field
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="validation-of-tag-fields"><name>Validation of Tag Fields</name>

<t>Implementers MUST meticulously validate the format and values of
Message-Instance and DKIM2-Signature header fields. Errors SHOULD
be treated as a PERMFAIL (signature syntax error).  Being "liberal in what
you accept" is an inappropriate strategy.</t>

<t>Note, however, that the presence of unknown tags in a DKIM2-Signature
header field (or a Message-Instance header field), MUST NOT cause a
verification to fail.</t>

<t>Verifiers MAY return PERMFAIL ("signature expired") if it is more than
14 days since the timestamp recorded in the "t=" tag of a DKIM2-Signature
header field.</t>

</section>
<section anchor="verifier_publickey"><name>Fetching the Public Key</name>

<t>The public key of a signature is 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
ignore any public key records that are malformed.</t>

<t>When validating a message, a Verifier MUST perform the following
steps in a manner that is semantically the same as performing them in
the order indicated; in some cases, the implementation may
parallelize or reorder these steps, as long as the semantics remain
unchanged:</t>

<t><list style="numbers" type="1">
  <t>The Verifier retrieves the public key as described in <xref target="key_management"/>
using the "d=" tag, and the selector from within the JSON object
in the "s1=" tag. If there is more than one signature within
the JSON object then these steps are repeated for each one.</t>
  <t>If the query for the public key fails to complete, the Verifier
MAY seek a later verification attempt by returning TEMPFAIL ("key
unavailable").</t>
  <t>If the query for the public key fails because the corresponding
key record does not exist, the Verifier MUST return
PERMFAIL ("no key for signature").</t>
  <t>If the query for the public key returns multiple key records, then
the return PERMFAIL ("more than one key returned" since this
is not permitted by <xref target="DKIMKEYS"></xref>).</t>
  <t>If the result returned from the query does not adhere to the
format defined in the DKIM key specification <xref target="DKIMKEYS"></xref>, the Verifier MUST ignore
the key record and return PERMFAIL ("key syntax error").  Verifiers
are urged to validate the syntax of key records carefully to
avoid attacks.  In particular, the Verifier MUST ignore
keys with a version code ("v=" tag) that they do not implement.</t>
  <t>If the public key data (the "p=" tag) is empty, then this key has
been revoked and the Verifier MUST treat this as a failed
signature check and return PERMFAIL ("key revoked").  There is no
defined semantic difference between a key that has been revoked
and a key record that has been removed.</t>
  <t>If the public key data is not suitable for use with the algorithm
specified in the DKIM-Signature header field, the Verifier MAY immediately
return PERMFAIL ("inappropriate key algorithm"). However, the tag fields
in the public key record that would cause this to occur are now deprecated
so DKIM2 implementations MAY ignore these tag fields altogether.</t>
  <t>If the "h=" tag exists in the public key record and the hash
algorithm implied by the type of signature being checked is not
included in the contents of the "h=" tag, the
Verifier MUST ignore the key record and return PERMFAIL
("inappropriate hash algorithm").</t>
</list></t>

</section>
<section anchor="perform-the-signature-verification-calculation"><name>Perform the Signature Verification Calculation</name>

<t>Given a Signer and a public key, 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"/>. Note that this
canonicalized version does not actually replace the original content.</t>
  <t>Based on the algorithm indicated in the JSON object holding the signatures
compute the signatures of the canonical copy. Then verify that the there is
a match with the hash value from the JSON object. If the
signature does not validate, the Verifier SHOULD ignore the
signature and return PERMFAIL ("signature did not verify").</t>
  <t>Otherwise, the signature has correctly verified.</t>
  <t>If there is more than one signature provided then they MUST all be
checked if the verifier is able to do so.</t>
  <t>If any signature fails then an error SHOULD be reported.</t>
  <t>If some signatures fail and other pass then the error that is
reported should provide that information (e.g. PERMFAIL "RSA signature
passed, elliptic curve 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>

</section>
<section anchor="verifier_extract"><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 (v=)
Message-Instance before accepting an email. If this check
does not pass then a Delivery Status Notification 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>A Verifier SHOULD check that the MAIL FROM value in the most
recent DKIM2-Signature header field is identical to the <xref target="RFC5321"></xref>
MAIL FROM values of the SMTP protocol interaction that
delivered the email to the Verifier. A Verifier SHOULD also
check that all of the <xref target="RFC5321"></xref> RCPT TO values from the SMTP
protocol occur in the most recent DKIM2-Signature header field.
The values MUST BE
put into lower-case before doing these checks. Note that these
check 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>A Verifier SHOULD also check the chain of custody for the message
(see {chain-of-custody}) is valid, using a relaxed domain match (see
{#relaxed-domain-match}).</t>

<t>Should checking these signatures (all but the most recently applied)
give the status TEMPFAIL then it may be possible for the Verifier
to determine the validity of the signature at a later time. It the
TEMPFAIL status continues to occur, or if a PERMFAIL is encountered
then this MAY be reported to the sending MTA by means of a Delivery
Status Notification. However the non-validating email MUST NOT be
forwarded to any MTA outside of the current organisation.</t>

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

<t>The highest numbered (v=) Message-Instance header field SHOULD
be checked to determine that the message body has not been
altered since the body hash was calculated.</t>

<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, such as:</t>

<t>451 4.7.5 Unable to verify signature - key server unavailable</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="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 DNS
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 of "z".</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>1) 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>1) 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>1) 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>

<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="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-clayton-dkim2-spec-07</t>

<t>Mapped various fields in Message-Instance and DKIM2-Signature into
JSON. Removed restriction on no recipe for v=1 Message-Instance.
Allowed indefinite number of algorithms rather than just 2.</t>

<t>draft-clayton-dkim2-spec-06</t>

<t>Changed r= to rb= and r.fieldname to rh=fieldname because the tags
in a tag value field may not use "-" characters. Also fixed the
ABNF.</t>

<t>Incorporated Allen Robinson's BOUNCE draft.</t>

<t>Assorted other very minor fixes.</t>

<t>draft-clayton-dkim2-spec-05</t>

<t>Assorted fixes, with particular thanks to Hannah Stern. Clarified that
there are two types of rt/mt matches performed. Specified that recipes
must not contain overlaps. Set out the need for matching mf= and d=
and put the relaxed domain match algorithm into its own section. Set
out that in practice all DKIM2-Signature header fields will need
to be checked.</t>

<t>draft-clayton-dkim2-spec-04</t>

<t>Added a definition of a Reviser. Incorporate the Message-Instance scheme
previously found in ALGEBRA.
Recast the text relating to hashes and signatures accordingly. Changed
t= back to just digits.</t>

<t>draft-clayton-dkim2-spec-03</t>

<t>Removed the pp= proposal, and briefly explained how signers often handle
private keys on behalf of domain owners. Changed t= to be human-readable.
Fixed description of body canonicalisation to match DKIM1/relaxed.</t>

<t>draft-clayton-dkim2-spec-02</t>

<t>Further clarifications and tidying up; alignment of ALGEBRA description with
the new MailVersion header field-name; addition of h= tag field. Also added
the pp= mechanism to address forwarders who do not have private keys to
hand to make the rt/mf/rt chains validate.</t>

<t>draft-clayton-dkim2-spec-01</t>

<t>Significant re-ordering of sections and removal of repetitious material.</t>

<t>Relax the matching algorithm between rt= and mf=</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="20" month="October" year="2025"/>
      <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-03"/>
   
</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:
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
cgZwLas/vv/je/e/3P8D3hrGDgT4AAA=

-->

</rfc>

