<?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-05" 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="2025" month="December" day="24"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 60?>

<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 can also ensure that delivery status notifications are only sent
to entities that were involved in the transmission of a message.</t>



    </abstract>



  </front>

  <middle>


<?line 80?>

<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 either delivers it into a destination mailbox or
forwards 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>
<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="hfMessageInstance"><name>The Message-Instance Header Field</name>

<t>The hash values for a message are stored in a Message-Instance header
field. This 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>a1= The algorithm used to generate the body hash.</t>

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

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-a-tag     = %x61 %x31 [FWS] "=" [FWS] mi-a-tag-alg
mi-a-tag-alg = "sha256" / x-mi-a-tag-h
x-mi-a-tag-h = ALPHA *(ALPHA / DIGIT)  ; for later extension
]]></artwork></figure>

<t>b1=  The hash of the canonicalized body part of the message.</t>

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

<t>Whitespace is ignored in this value and MUST be ignored when reassembling the original
hash.  In particular, FWS can be safely inserted
this value in arbitrary places to conform to line-length
limits.  See <xref target="computing-body-hash"/> for how the body hash is computed.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-b-tag      = %x62 %x31 [FWS] "=" [FWS] mi-b-tag-data
mi-b-tag-data = base64string
]]></artwork></figure>

<t>h1=  The hash of the canonicalized headers of the message.</t>

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

<t>Whitespace is ignored in this value and MUST be ignored when reassembling the original
hash.  In particular, FWS can be safely inserted
this value in arbitrary places to conform to line-length
limits.  See <xref target="computing-header-hash"/> for how the header hash is computed.</t>

<t>ABNF:</t>

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

<t>a2=, b2=, h2= Further hashes (equivalent to a1, b1 and h1)</t>

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

<t>To provide for algorithmic dexterity a second pair of hashes, 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>r= A "recipe" to recreate the previous version of the message body.</t>

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

<t>A Body Recipe is a comma separated list of instructions.  Each
instruction starts with a prefix. Commas can be followed by optional
whitespace.</t>

<t>The idea is that you take the message which has been received and
apply the Body Recipes so as to recreate the message as it was before
modifications were made. Hence it is necessary to cope with body
lines being added (c: is used to indicate which lines were original)
or removed/altered (b: is used to indicate what the body
line was before the removal/alteration).</t>

<figure><artwork><![CDATA[
c: startnumber-endnumber

Copy the lines numbered startnumber up to and including the line
numbered endnumber. The first line of the body (immediately after
the blank line that indicates that there are no more header fields)
is numbered 1. If the endnumber is omitted then all lines
(from the startnumber line onwards) are to be copied.

The startnumber of every "c" instruction MUST be in ascending order
and MUST be greater than
the endnumber of all preceding "c" instructions. There MUST NOT
be any further "c" instructions after a "c" instruction with
an omitted endnumber. In other words a recipe is not allowed to
use "c" instructions to duplicate or re-order lines.

b: base64string

Decode the base64string to get the value of a line to be inserted.
The inserted line will have a CRLF appended. The decoded value
MUST NOT contain CR or LF characters. If the base64string is
absent then a blank line is being added. 

z

If a z is present then it MUST be the only "recipe". It indicates
that the changes that have been made to the body cannot be undone.
For example, a malware attachment may have been removed and it is
inappropriate to enable the malicious content to be recreated.
Verifiers of the message may be able to inspect the first signer
of this Message-Instance header field and determine that the
presence of z is acceptable to them because, for example, that
signer is providing a contractually arranged service.
]]></artwork></figure>

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-r-tag       = %x72 [FWS] "=" [FWS] mi-r-tag-data
mi-r-tag-data  = mi-r-recipes / %x7a
mi-r-recipes   = mi-r-recipe * ("," [FWS] mi-r-recipe)
mi-r-recipe    = %x63 ":" 1*DIGIT "-" [ 1*DIGIT ] /
                 %x62 ":" [ base64string ]
]]></artwork></figure>

<t>r_header= A "recipe" to replicate the previous version of a header field.</t>

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

<t>A Header Recipe is a comma separated list of instructions. Commas can
be followed by optional whitespace. Each
set of instructions refers to a particular header field name. There
MUST be only one set of instructions for any given header field name</t>

<t>The idea is that you take the message which has been received and
apply the Header Recipes so as to recreate the relevant
header fields as they were before
modifications were made. Hence it is necessary to cope with header
fields being added (c: is used to indicate how many header fields,
if any, should be kept so that the addition is undone) or
removed/altered (b: is used to provide the contents of the the header
field was before the removal/alteration).</t>

<t>Header fields are numbered "bottom up" (the opposite direction to
the body lines). That is to say, when walking the header from top
to bottom the last header field instance
encountered with any particular header field name is numbered 1,
the header field (with the same header field name) before that is
numbered 2, and so on. 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>If there are no "recipes" for a specified header field name that
means that all instances of that header field should be removed
to reinstate the previous state of the message. If a header field
name is not present at all then all of header fields with that
header field name are to be retained.</t>

<figure><artwork><![CDATA[
c: startnumber-endnumber

Keep the instances of the header fields (with the relevant header
field name) which are at position startnumber to endnumber.

The startnumber of every "c" instruction MUST be in ascending order
and MUST be greater than
the endnumber of all preceding "c" instructions.

b: base64string

Decode the base64string value to get the header field to be inserted.
The inserted header field will start with the field name and a colon
followed by the decoded value and then a CRLF. When the base64string
is decoded it MUST NOT contain CR or LF characters.
If the base64string is absent then the CRLF will immediately
follow the header field name and colon.

Note that the hashing algorithm for processing the header fields will
work on unwrapped lines -- so there is no need to wrap the header
field created by this recipe because it will never appear "on the
wire". 

z

If a z is present then it MUST be the only "recipe". It indicates
that the changes that have been made to the header field
cannot be undone and/or that it is inappropriate to provide
the original value.
Verifiers of the message may be able to inspect the first signer
of this Message-Instance header field and determine that the
presence of z is acceptable to them because, for example, that
signer is providing a contractually arranged service.
]]></artwork></figure>

<t>ABNF:</t>

<figure><artwork><![CDATA[
mi-rh-tag       = %x72 "_" field-name [FWS] "=" [FWS] mi-rh-tag-data
mi-rh-tag-data  = mi-rh-recipes / %07A
mi-rh-recipes   = mi-rh-recipe * ("," [FWS] mi-rh-recipe)
mi-rh-recipe    = %x63 ":" 1*DIGIT /
                  %x62 ":" 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] dat
]]></artwork></figure>

<t>mf= The <xref target="RFC5321"></xref> MAIL FROM value to be used when this message is transmitted
    over an SMTP link from the signing MTA.</t>

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

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

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-mf-tag = %x6d %65 [FWS] "="
             [FWS] "<" [ local-part "@" domain-name ] ">"
]]></artwork></figure>

<t>rt= The <xref target="RFC5321"></xref> RCPT TO value(s) to be used when this message is transmitted
    over an SMTP link from the signing MTA.</t>

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

<t>When a message is intended for more than one recipient then this field 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. Note that if "bcc:" recipients are
involved then in order to meet the requirements of <xref target="RFC5322"></xref> Section 3.6.3 each
bcc recipient MUST be sent a message with just their email address appearing
in this tag.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-rt-tag = %72 %x74 [FWS] "="
             1*( [FWS] "<" local-part "@" domain-name ">" )
]]></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>s1= The selector subdividing the namespace for the "d=" (domain) tag.</t>

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

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-s-tag = %x73 %x31 [FWS] "=" [FWS] selector
]]></artwork></figure>

<t>a1= The algorithm used to generate the signature.</t>

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

<t>Verifiers MUST support "RSA-SHA256" and "Ed25519-SHA256"; See <xref target="algorithms"/> for a
description of these algorithms.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-a-tag     = %x61 %x31 [FWS] "=" [FWS] sig-a-tag-alg
sig-a-tag-alg = sig-a-tag-k "-" sig-a-tag-h
sig-a-tag-k   = "rsa" / "ed25519" / x-sig-a-tag-k
sig-a-tag-h   = "sha256" / x-sig-a-tag-h
x-sig-a-tag-k = ALPHA *(ALPHA / DIGIT)
                         ; for later extension
x-sig-a-tag-h = ALPHA *(ALPHA / DIGIT)
                         ; for later extension
]]></artwork></figure>

<t>b1= The signature data.</t>

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

<t>Whitespace is ignored in this value and MUST be ignored when reassembling the original
signature.  In particular, the signing process can safely insert
FWS in this value in arbitrary places to conform to line-length
limits.  See "Signer Actions" (<xref target="signer-actions"/>) for how the signature is computed.</t>

<t>ABNF:</t>

<figure><artwork><![CDATA[
sig-b-tag      = %x62 %x31 [FWS] "=" [FWS] sig-b-tag-data
sig-b-tag-data = base64string
]]></artwork></figure>

<t>s2=, a2= b2= Second signature (equivalent to s1, a1 and b1)</t>

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

<t>To provide for algorithmic dexterity a second signature, using a
different algorithm 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 MUST necessarily be used
for the second signature.</t>

<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 name starts with "ARC-" MUST be
ignored. Not including
DKIM1 and ARC signatures means that systems that wish to add other
types of 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 email 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 "h1=" 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 "h2=" tag.</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 "mf= value of every DKIM2-Signature header field (except of
course the i=1 instance) can be matched with the rt= 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 (specified in the mf= tag).</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 mf= and rt= and mf= and d=.</t>

<t><list style="symbols">
  <t>Only the domain part of the rt= and mf= 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 mf= 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. This MUST NOT contain any "recipes" (r=, r.header=).</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
heade 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
"recipe" of "z" 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. Note that the v=1 Message-Instance
header field MUST NOT contain any "recipes" and any other Message-Instance
field MUST 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 field contains mf= and rt= values, so the MAIL FROM
and RCPT TO values that will be used when the message is transmitted
(the <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=, rt= values in the highest numbered (most recent) DKIM2-Signature
header field. It is acceptable for there to be more email addresses
in the rt= value than occur in the RCPT TO values, but any address
used in the SMTP conversation MUST be present in the rt= value.</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
(mf=).</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 rt= 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. 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 (b1=) is null (that is the base64 value
is absent. If there will be a second signature then the b2= tag
must be present, again with a null base64 value.</t>
  <t>The hash of the concatenated header fields is calculated and this
value is then signed using the algorithm specified in the
"a1=" tag of the DKIM2- Signature header field and using
the private key corresponding to the selector given in the "s1="
tag of the DKIM2-Signature header field, as
chosen above in <xref target="signer_privatekey"/>}.</t>
  <t>If a second signature is to be generated then the process
if repeated with the a2= and s2= settings.</t>
</list></t>

<t>The signature value(s) are converted to base64 form and inserted into the
"b1=" tag (and "b2=") tags 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="signer_privatekey"/>
using the algorithm in the "a1=" tag, the domain from the "d="
tag, and the selector from the "s1=" tag. If a2= and s2 tags
are present, subsequent steps are repeated for the second signature.</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 "a1=" (or "a2=") tag in the DKIM2-Signature header
field 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 "a1=" tag, compute the
hashes of the canonical copy.  Then verify that the the signature
conveyed in the "b1=" tag is correct for this hash value using the mechanism
appropriate
for the public key algorithm described in the "a1=" tag.  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 the second signature MUST be
checked if the verifier is able to do so, using a2= and b2= as appropriate.</t>
  <t>If either signature fails then an error SHOULD be reported.</t>
  <t>If one signature fails and the other passes 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 both 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 mf= 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="delivery-status-notifications-in-the-dkim2-ecosystem"><name>Delivery Status Notifications in the DKIM2 ecosystem</name>

<t><xref target="BOUNCES"></xref> should be incorporated here.</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>


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

<reference anchor="BOUNCES">
   <front>
      <title>DKIM2 Procedures for bounce processing</title>
      <author fullname="Allen Robinson" initials="A." surname="Robinson">
         <organization>Google Inc.</organization>
      </author>
      <date day="7" month="July" year="2025"/>
      <abstract>
	 <t>   This memo provides a description of the procedures for bounce
   processing that should be performed by any mail system that
   implements DKIM2, as part of the overall DKIM2 protcol definition.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-robinson-dkim2-bounce-processing-01"/>
   
</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>


<?line 1365?>

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

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


  </back>

<!-- ##markdown-source:
H4sIAA+PTGkAA+19e3PbRpbv/133Q6CYmhoxS9KS/EjGXm+NLMsTb/y6lpzs
lMc3BZKgiDUJcAFQMpPNd7/ndx7dDYCSnbnZR9Xd1NRYJIF+nD593o/xeOya
vFllD5On5TrNi++zXZ08n2dFky/ybJ68TPNVcp5fFmmzrbI6uTpODp5+//zl
8dCl02mVXdGL+Bg94+blrEjXNOS8ShfNeLZKd01ZjOcf8/XxuN5ks/HhfVdv
p+u8rvOyuNht6NnnZxfPXLFdT7PqoZunTfbQXT10M/rjsqx2D5O6mbvtBj/U
D12+qR4mTbWtm+PDwz8dHruP2e66rOY0TNFkVZE146eY29VNWsx/SldlQVPs
aG2b/GHyvilno6Quq6bKFjX9tVvjjw/OpdtmWdL8ydgl9F9e1A+Tt5PkVHbA
38nO3uazZVrNW7+U1eXD5K/psiz5Y0bgXD1MKt3+n3f4JS9mk1m5bk3wI02w
3KbFZTT+j1kef8lD/6UsL1dZPPZ1li/T6z9f8g+9cZ9M6JVifp0WaTTyk6os
2t/z4M/SusGgyZtml7wgWOOXmgCUNQ+TF9lVtkqOR8nR0b3kx3y1ytN1cs4/
8nOzck4j3z08PNSP26LBmZ3QAVUpPc1fb5Z8CoN/eHCU3Lv/TXLv6EFy7+6D
QbyjKa3u8s8LXUyTpWvelivKap02+RVhBZ5+++z06PDuPf/h+PDe/fjDN+HD
0dGf/Id7D+596z/cP44GuH/3+Cj+cOw/PLj7zYPw4d5hGO3B/buH/sO3Dw51
AFyH78/+ek64OH46mfEhKu7Pi5ofefL63avTM32iKqd0XP5+TAl4s2y8qcpZ
RteDEMDlxaK3/fv3/xS28u3h0TfRh7vH0bLsl9PXr05fvHt6dvL2VOZN5+m6
HqfVbJx92mRVvqY7P56VxWy1xa10bjweJ+kUJzhrnLuFPASakNBA67ypkxR/
0aZGSVWushHhmCM0S4v8Z9oGIWCzTJukvC7wZE2Ug/aZzHmGpCnpr9kWy5HH
8iZZprVb0k1e0ZRpIciSrAk+6WWWTHdJWtflLKehaZhmmeWVDXadN0t84/Th
SZJcLPM6of+ls2VOeD3H+wTtq3yOt1PMtUyu0tU2k+kx9zTLimSWrmbbFRGg
ecI7yJLZtqqwTIJaQ//WSbng721ltGJ8LpJ0s1ntZPhZtds05WWVbpb5zNVG
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
8d0Twvc/fLp7Ov7mzCV7/3uUnP3L6YuTlyfQl4DUF89fPD0zRD4/e/n89PWL
16/4bd4Yb+sN35wD/oKm4O/o38E/DPD/dwZDff7Vu5dv3r061TX1Hv9pIIuf
pnX24J7giH/QJvr64D1dmw+tL4d7d/M+kScHjwetvz8kH/j5JvvU6CS8HoPZ
18kBrvcd+4Lwxr0qGzWWxYuTE+mYF+CF/TBKpls1rdvJkJybCdKBpYi5eMfH
O0nC8Gl796wr08XdsLnSCcutlD8+DvSbSNEiKbJszlQyDNe0KBfzlWmJMcLe
wcpaczIJd2ZBEq4yy5TqjVQGZx4DsSuwgpb3yrE0ImOxNwmMgGh8cdksJ0w+
1XTThqeKnY5YJ8zuXnnOK/VZ5rWaQXEPWgOl0aacwa2pslT1eUg2xeUqUx6o
I+d1GJiHhDXrjRlCTEB1rvcVH72qKbARggp6V4S3pHjbLZ27tyKxEVUUE9XG
wZE7YmwYIza88LHYSzg5/5aiYrBZJHAIVmZ3I+F2IO+5E/mC6OQvv7BqW41T
+erXX4c86MBGTeJnr/TLn8LTThStyLxnOjN7aVSsZxHqk9r2iCv5NamAmq3o
MxyK7gK+jA3ob5AgAGN1RAe3DHOUjheXhU44Z1mylVPGyrbTeQ4b6ZwOmA3o
tU04oAW8oV2Vc7XHqkACBcueEUsnnzUxhkLUZJZmShyVvQ7Lgn9FKAI7i1bp
NCOMhlFWfJ+MqaIj4hLlsPyLfOiwVZicxWcBVRg+hiCs1+be51vCi00AK73Z
Tuy4sogIBiJCkaSdXapPBURHGYV//nES2DAR2WQwGcTfDIUvSQQTTjI+C/af
lnRGNUGIaUGABRvh4WJRkxQbck1bhugn5l4xm1xDcybdrNi1vtIdAyL/uhUh
0UMbBIkYIS54yxSz2rF7hm7DlkMaWl4HuBdmy5K9K/BvFdCm6HGRUsPqGb/Z
RJTm5vJZkPIJLKiySwF8BeUrfJ95MwfusvPYvdcNY6cSxYmINkW6jZJap44z
kLl5lV5DVgaAmnxNMncYnodmjyCpg6SR1DnIblMSpNI1aUc1QYRdR7NMTq1k
db/cNsBVIsMgrTu/DNUGi+y6Bep8hbezjTk3AZx9OiHxBA9Gl14RSMAF5MJf
pJePf2Ci+4Kdar981aSXTIWh8dW/mn2dgCRkm9WZAT30mJ8ixBSTtNIXdaqO
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
0YjkJ2cE17L624e/fXD/y/1fLwZmk5viAAA=

-->

</rfc>

