<?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-06" 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="January" day="20"/>

    
    
    <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 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 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, 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>
<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>rb= 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.

The startnumber of every "c" instruction MUST be in ascending order
and MUST be greater than the endnumber of all preceding "c"
instructions. 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-rb-tag       = %x72 %x62 [FWS] "=" [FWS] mi-rb-tag-data
mi-rb-tag-data  = mi-rb-recipes / %x7a
mi-rb-recipes   = mi-rb-recipe * ([FWS] "," [FWS] mi-rb-recipe)
mi-rb-recipe    = %x63 "." 1*DIGIT "-" 1*DIGIT /
                  %x62 "." [ base64string ]
]]></artwork></figure>

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

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

<t>A Header Recipe starts with the name of the header field name, then
a colon and then a comma separated list of instructions. Commas can
be followed by optional whitespace. There MUST be only one set of
instructions for any given header field name. If there are further
header field names then a "|" is used to introduce them.</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 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) 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 the 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 %x68 [FWS] "=" [FWS] mi-rh-headers
mi-rh-headers   = mi-rh-header * ([FWS] %x7c [FWS] mi-rh-header)
mi-rh-header    = header-field-name [FWS] ":" [FWS] mi-rh-header-data
mi-rh-item-data =   / ; the no recipes case
                  mi-rh-recipes / %7a
mi-rh-recipes   = mi-rh-recipe * ([FWS] "," [FWS] mi-rh-recipe)
mi-rh-recipe    = %x63 "." 1*DIGIT "-" 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] 1*DIGIT
]]></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
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
"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="key_management"/>
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="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-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="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:
H4sIAFfnb2kAA+19e3PbRpbv/133Q6DomgrpJWlJfiRjr7ZGluXEG7+uJSc7
5fHNgCQoYkQCXACUzHj93e95dzdASc7c7KPqTmpqLJJAv/s8f+ec0WjkmrxZ
Zo+TZ+UqzYsfs22dvJhlRZPP82yWvErzZXKanxdps6myOrk8SPrPfnzx6mDg
0smkyi7hRfwYPONm5bRIV9DkrErnzWi6TLdNWYxmF/nqYFSvs+lo75GrN5NV
Xtd5WZxt1/Dsi5Oz567YrCZZ9djN0iZ77C4fuyn8cV5W28dJ3czcZo0/1I9d
vq4eJ021qZuDvb0/7h24i2x7VVYzaKZosqrImtEz7NvVTVrMfkmXZQFdbGFs
6/xx8qEpp8OkLqumyuY1/LVd4R8fnUs3zaKE/pORS+C/vKgfJ+/GyTHPgL7j
mb3Lp4u0mkW/lNX54+TP6aIs6WMGy7l8nFQy/T9t8Ze8mI6n5Srq4GfoYLFJ
i/Og/Z+zPPySmv6+LM+XWdj2VZYv0qs/ndMPnXafjuGVYnaVFmnQ8tOqLOLv
qfHnad1go8nbZpu8hLXGX2pYoKx5nLzMLrNlcjBM9vcfJD/ny2WerpJT+pGe
m5YzaPn+3t6efNwUDe7ZEWxQlcLT9PV6QbvQ+6dH+8mDh98mD/YfJQ/uP+qF
M5rA6M7/NJfBNFm6omm5oqxWaZNfwqnAp989P97fu//APhzsPXgYfvjWf9jf
/6N9uP/g0b59ePDowXf24eFB0NrD+wf74YcD+/Do/reP/IcHe77pRw/v79mH
7x7tSQN4N348+fMpHMzRs/GUdlQuwqyoncuLeWdmDx/+0Q/su739b4MP9w+C
TvSX4zevj1++f3Zy9O6Y+0ln6aoepdV0lH1aZ1W+gus8mpbFdLnBC+fcaDRK
0gluzrRx7oab7697Ag2t8qZOUvyrLothUpXLbAjHx8EJSov8V5gGnK1mkTZJ
eVXgkzUQhbw4T2bUQ9KU8Nd0g8Phx/ImWaS1W8AlXUKXacHnIFlldZ2eZ8lk
m6R1XU5zaBqaaRZZXmljV3mzwG+cPDxOkrNFXifwv3S6yOHIzvD9dVVe5jN8
O8W+Fsllutxk3D32PcmyIpmmy+lmCbRlltAMsmS6qSocJqxaA//WSTmn73Vk
MGL8XCTper3ccvPTartuyvMqXS/yqauVIHJf0/ISlo3a8MOoqZ0SvoRpZQ1M
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
CaxrWf3l418+uv/l/i+P0Vr/HfIAAA==

-->

</rfc>

