<?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-08" 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="March" day="02"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 61?>

<t>DomainKeys Identified Mail v2 (DKIM2) permits a person, role, or
organization that owns a signing domain to document that it has
handled an email message by associating their domain with the
message.  This is achieved by providing a hash value that has
been calculated on the current contents of the message and then applying a cryptographic
signature that covers the hash values and other details about the
transmission of the message. Verification is performed by querying an entry
within the signing domain's DNS space to retrieve an appropriate public
key. As a message is transferred from author to recipient systems that
alter the body or header fields will provide details of their changes
and calculate new hash values. Further signatures 
will be added to provide a validatable "chain". This permits validators
to identify the nature of changes made by intermediaries and apply a
reputation to the systems that made changed. DKIM2 also allows
recipients to detect when messages have been unexpectedly "replayed"
and will ensure that Delivery Status Notifications are only sent
to entities that were involved in the transmission of a message.</t>



    </abstract>



  </front>

  <middle>


<?line 81?>

<section anchor="introduction"><name>Introduction</name>

<t>DomainKeys Identified Mail v2 (DKIM2) permits a person, role, or
organization to document that they have handled an email message by
associating a domain name <xref target="RFC1034"></xref> with the message <xref target="RFC5322"></xref>. A
public key signature is used to record that they have been able
to read the contents of the message and write to it.</t>

<t>Verification of claims is achieved by fetching a public key stored
in the DNS under the relevant domain and then checking the signature.</t>

<t>Message transit from author to recipient is through
Forwarders that typically make no substantive change to the message
content and thus preserve the DKIM2 signature. Where they do make
a change the changes they have made are documented so that
these can be "undone" and the original signature validated.</t>

<t>When a message is forwarded from one system to another an
additional DKIM2 signature is added on each occasion. This chain
of custody assists validators in distinguishing between messages that
were intended to be sent to a particular email address and those
that are being "replayed" to that address.</t>

<t>The chain of custody can also be used to ensure that delivery status
notifications are only sent to entities that were involved in the
transmission of a message.</t>

<t>Organizations that process a message can add to their signature
a request for feedback as to any opinion (for example, that the
email was considered to be spam) that the eventual recipient of
the message wishes to share.</t>

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

<t>Readers are advised to be familiar with the material in TBA, TBA and TBA
which provide the background for the development of DKIM2, an overview
of the service, and deployment and operations guidance and advice.</t>

</section>
</section>
<section anchor="terminology-and-definitions"><name>Terminology and Definitions</name>

<t>This section defines terms used in the rest of the document.</t>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
<xref target="RFC2119"></xref>.  These words take their normative meanings only when they
are presented in ALL UPPERCASE.</t>

<t>DKIM2 is designed to operate within the Internet Mail service, as
defined in <xref target="RFC5598"></xref>.  Basic email terminology is taken from that
specification.</t>

<t>DKIM2 inherits many ideas from DKIM (<xref target="RFC6376"></xref>) which, for clarity
we refer to in this specification as DKIM1. In addition, some features
were influenced by experience with (see <xref target="CONCLUDEARC"></xref>) the experimental
ARC protocol (<xref target="RFC8617"></xref>).</t>

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

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

<section anchor="signer"><name>Signer</name>

<t>Elements in the mail system that sign messages on behalf of a domain
are referred to as Signers.  These may be MUAs (Mail User Agents),
MSAs (Mail Submission Agents), MTAs (Mail Transfer Agents), or other
agents such as mailing list "exploders".  In general, any Signer will
be involved in the injection of a message into the message system in
some way.  The key point is that a message must be signed before it
leaves the administrative domain of the Signer.</t>

</section>
<section anchor="forwarder"><name>Forwarder</name>

<t><xref target="RFC5598"></xref> defines a Relay as transmitting or retransmitting a message
but states that it will not modify the envelope information or the
message content semantics. It also defines a Gateway as a hybrid of
User and Relay that connects heterogeneous mail services. In this
document we use the concept of a Forwarder which is an MTA that receives
a message and then, as an alternative to delivering it into a
destination mailbox, can forward it on to another system in an
automated, pre-determined, manner.</t>

</section>
<section anchor="reviser"><name>Reviser</name>

<t>As will be seen, a Forwarder may alter the message content or header
fields, in such a way that existing signatures on the message will
no longer validate. If so, then a record will be made of these
changes. We call a Forwarder that makes such changes a Reviser.</t>

</section>
<section anchor="verifier"><name>Verifier</name>

<t>Elements in the mail system that verify signatures are referred to as
Verifiers.  These may be Forwarders, Revisers, MTAs, Mail Delivery
Agents (MDAs), or MUAs.
It is an expectation of DKIM2 that a recipient of a message will
wish to verify some or all signatures before determining whether or
not to accept the message or pass it on to another entity.</t>

</section>
<section anchor="signing-domain"><name>Signing Domain</name>

<t>A domain name associated with a signature. This domain may be
associated with the author of an email, their organization, a
company hired to deliver the email, a mailing list operator, or
some other entity that handles email. What they have in common is
that at some point they had access to the entire contents of the
email and were in a position to add their signature to the email.</t>

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

<t>The resultant values are stored in JSON objects (identified by the
text string "sha256") 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>

<t>The signature value (expressed in base64) is stored in a JSON object (with
the identifying text string "rsa") in a DKIM2-Signature header field.</t>

</section>
<section anchor="the-ed25519-sha256-signing-algorithm"><name>The Ed25519-SHA256 Signing Algorithm</name>

<t>The Ed25519-SHA256 Signing Algorithm computes a hash over all the Message-Instance
and DKIM2-Signature fields as described in <xref target="calculate-signature"/> using
SHA-256 (FIPS-180-4-2015) as the hash-alg. It signs the hash with the PureEdDSA
variant Ed25519, as defined in Section 5.1 of <xref target="RFC8032"></xref>.</t>

<t>The signature value (expressed in base64) is stored in a JSON object (with
the identifying text string "ed25519") in a DKIM2-Signature header field.</t>

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

<t>Other algorithms MAY be defined in the future.  Verifiers MUST ignore
any hashes or signatures using algorithms that they do not implement.</t>

</section>
<section anchor="selectors"><name>Selectors</name>

<t>To support multiple concurrent public keys per signing domain, the
key namespace is subdivided using "selectors".</t>

<t>The number of public keys and corresponding selectors for each domain
is determined by the domain owner. Many domain owners will use just one
selector, whereas administratively distributed organizations can choose
to manage disparate selectors
and key pairs in different regions or on different email servers.
Selectors can also be used to delegate a signing authority, which
can be 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>

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

</section>
<section anchor="key_management"><name>Key Management</name>

<t>Some level of assurance is required that
a public key is associated with the claimed Signer. DKIM2
does this by fetching the key from the DNS for the domain specified
in the d= field of the DKIM2-Signature header field.</t>

<t>DKIM2 keys are stored in a subdomain named "_domainkey".  Given a
DKIM2-Signature field with a "d=" tag of "example.com" and a selector
of "foo.bar", the DNS query will be for "foo.bar._domainkey.example.com".</t>

<t>NOTE: these keys are no different, and are stored in the same locations
as those for DKIM1 (<xref target="RFC6376"></xref>).</t>

<t>Further details can be found in <xref target="DKIMKEYS"></xref>.</t>

</section>
</section>
<section anchor="JSONrecipe"><name>Recipes</name>

<t>A set of "recipes" is used to recreate the previous version of the body
and/or header fields of a message. The recipes are provided
within a JSON object with the schema:</t>

<figure><artwork><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://dkim2.org/schemas/recipe-v1",
  "title": "DKIM2 recipes",
  "description": "see draft-clayton-dkim2-spec",
  "type": "object",
  "properties": {
    "anyOf": [
      {
        "h": {
          "description": "recipes to recreate header fields",
          "oneOf": [
            {
              "description": "no recipe has been provided",
              "type": "object",
              "maxProperties": 0
            },
            {
              "type" : "array",
              "items" : {
                "header-field-name": "string",
                "description": "header fields to copy/discard/add",
                "type": "array",
                "recipes": { "type": "string" }
              }
            }
          ]
        }
      },
      {
        "b": {
          "description": "recipes to recreate the body",
          "oneOf": [
            {
              "description": "no recipe has been provided",
              "type": "object",
              "maxProperties": 0
            },
            {
              "description": "body lines to copy/discard/add",
              "type": "array",
              "recipes": { "type": "string" }
            }
          ]
        }
      }
    ]
  }
}
]]></artwork></figure>

<section anchor="header-recipes"><name>Header Recipes</name>

<t>A Header Recipe is an array of instructions applied to the specified
header fields with the given header field name. These instructions
are applied in order to the message which has been received
so as to recreate the message as it was before modifications were made.</t>

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

<t>If the "h" field value is null (there are no recipes for
any header field) then the previous state of the header fields
cannot be recreated. Verifiers of the message may be able to
determine, by seeing which entity makes this declaration, that
this is acceptable to them because, for example, that entity
is providing a contractually arranged service.</t>

<t>Matching of header field names is always done without regard to case.</t>

<t>If a header field name is not present in the JSON object then all
header fields with that header field name are to be retained.</t>

<t>If there are no "recipes" for a header field name that is present
in the JSON object then all instances of that header field are to
be removed to reinstate the previous state of the message.</t>

<t>Header fields are numbered "bottom up" (the opposite direction to
the body lines). That is to say, when walking the header fields
from the top of the message to end of the header fields then
the last header field instance
encountered with any particular header field name is numbered 1,
the header field (with the same header field name) above that is
numbered 2, and so on.</t>

<t>The header fields should be treated as
being unwrapped (in the normal <xref target="RFC5321"></xref> manner). That is, all
of the physical lines that form a single header field are
processed under the same logical number.</t>

<t>The recipes are processed in order and the resulting header
fields are emitted so that later header field will appear above
earlier header fields in the recreated message.</t>

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

<t>Otherwise the recipe is treated as a text string to which
relevant header field name and a colon is prepended and a CRLF
is appended and the resultant string is then emitted. Note that
the way in which hashes are calculated (see below) means that no
heed needs to be taken of wrapping
or the case of the header field name. The text string MUST NOT
contain CR or LF characters. If the string is empty then the
CRLF will immediately follow the header field name and colon.</t>

</section>
<section anchor="body-recipes"><name>Body Recipes</name>

<t>A Body Recipe is an array of instructions applied to message
body which can recreate the message as it was before modifications
were made.</t>

<t>If there is no "b" field in the JSON object then there was no
modification to the message body. Note that the JSON schema
requires either "h" or "b" to be present.</t>

<t>If the "b" field is null (there are no recipes) then the previous
state of the message body
cannot be recreated. Verifiers of the message may be able to
determine, by seeing which entity makes this declaration, that
this is acceptable to them because, for example, that entity
is providing a contractually arranged service.</t>

<t>Body lines are numbered "top down" (the opposite direction to
the header fields). The first line of the body (immediately after
the blank line that indicates that there are no more header fields)
is numbered 1.</t>

<t>The recipes are processed in order and the resulting body lines
fields are emitted so that later lines will appear below
earlier lines in the recreated message.</t>

<t>If the recipe is of the form "(" start "-" end ")" then this
means that (relevant) message body lines from to start to end,
inclusive, are to be emitted. The start value of each of these
recipes MUST be in ascending order and MUST be greater than the
end value of all preceding Body Recipes.</t>

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

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

<t>A set of cryptographic "hashes" are used to record the current
message body and header fields. The hashes are provided
within a JSON object with the schema:</t>

<figure><artwork><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://dkim2.org/schemas/hashes-v1",
  "title": "DKIM2 message hashes",
  "description": "see draft-clayton-dkim2-spec",
  "type": "object",
  "properties": {
    "h": {
      "description": "header hash name and value",
      "type": "array",
      "items": {"type": "string"},
      "minItems": 2, "maxItems": 2
    },
    "b": {
      "description": "body hash name and value",
      "type": "array",
      "items": {"type": "string"},
      "minItems": 2, "maxItems": 2
    }
  },
  "required": ["h", "b"] 
}
]]></artwork></figure>

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

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

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

<t>The body of messages is treated as merely a string of octets. DKIM2
messages MAY be either in plain-text or in MIME format; no special
treatment is afforded to MIME content. Message attachments in MIME
format MUST be included in the content that is signed.</t>

<t>The DKIM2 body hash is calculated in the same manner as DKIM1's "simple"
scheme:</t>

<t>All empty lines at the end of the message body are ignored. An empty line
is a line of zero length after removal of the line terminator.  If there
is no body or no trailing CRLF on the message body, a CRLF is added. That
is "*CRLF" at the end of the body is converted to "CRLF".</t>

<t>No other changes are made to the body, which is then processed by the
relevant hash algorithm(s). The name of the hash and the hash value
(converted to base64 form) is then inserted into (Signers) or compared
to (Verifiers) a value in the "b" array entry of the "DKIM2 message hashes"
JSON object in the Message-Instance header field that is being created.
If multiple hashes are calculated then multiple entries within
the "b" array will be inserted/compared.</t>

</section>
<section anchor="computing-header-hash"><name>Computing the Header Fields Hash</name>

<t>The header fields hash calculation done by a Signer MUST apply the
following steps in the order given. A Verifier will need to do the
equivalent steps in order to check that the hash they have received
is correct.</t>

<t><list style="symbols">
  <t>Ignore some header fields  <vspace blankLines='1'/>
When calculating the header field hash "Received" or "Return-Path"
header fields MUST be ignored.
These are Trace headers as described in <xref target="RFC5321"></xref>
and serve only to document details of the SMTP transmission process.  <vspace blankLines='1'/>
When calculating the header field hash any header field with
a header field name starting with "X-" MUST be ignored.
Currently deployed email systems use these fields as
proprietary Trace headers which have no defined meaning for
other systems and it considerably simplifies reporting
on changes to header fields to ignore them.  <vspace blankLines='1'/>
When calculating the header field hash any "Message-Instance" or
"DKIM2-Signature" header fields MUST be ignored. These header
fields will be included in the hash value that will be signed
by a DKIM2-Signature header field and it simplifies implementations
if they are not included twice, especially when determining
whether all modifications to a message have been correctly declared.  <vspace blankLines='1'/>
When calculating the header field hash any "DKIM-Signature" header
fields and any header fields whose field name starts with "ARC-"
MUST be ignored. Not including
DKIM1 and ARC signatures means that systems that wish to add other
types of signature as well as a DKIM2 signature are free to do this
in any convenient order.</t>
  <t>Convert all header field names (not the header field values) to
lowercase.  For example, convert "SUBJect: AbC" to "subject: AbC".</t>
  <t>Unfold all header field continuation lines as described in
<xref target="RFC5322"></xref>; in particular, lines with terminators embedded in
continued header field values (that is, CRLF sequences followed by
WSP) MUST be interpreted without the CRLF.  Implementations MUST
NOT remove the CRLF at the end of the header field value.</t>
  <t>Convert all sequences of one or more WSP characters to a single SP
character.  WSP characters here include those before and after a
line folding boundary.</t>
  <t>Delete all WSP characters at the end of each unfolded header field
value.</t>
  <t>Delete any WSP characters remaining before and after the colon
separating the header field name from the header field value.  The
colon separator MUST be retained.</t>
  <t>Place the header fields in alphabetical order by the header field
name.</t>
  <t>If there is more than one header with the same header field name
then the header fields are placed in the order in which they occur
in the message header, from the top downwards.  <vspace blankLines='1'/>
It is sometimes suggested that some MTAs re-order
header fields after they receive an email, if they do then it is their
responsibility to recover the original order of any header fields
with identical header field names (that are part of a signature calculation)
before verifying an existing signature or passing a previously signed
message to another MTA that is going to wish to verify a signature.</t>
  <t>The hash(es) of the concatenated header fields are calculated.</t>
</list></t>

<t>The name of the hash and the hash value (converted to base64 form) is then
inserted into a value in the "h" array entry of the "DKIM2 message hashes"
JSON object in the Message-Instance header field that is being created.
If multiple hashes are calculated then multiple entries within
the "h" array will be inserted.</t>

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

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

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

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

<t>When a message is intended for more than one recipient then the RCPT
TO values provided MAY include all of the recipients so that a single
copy of the email MAY be sent to all of the recipients in a single SMTP
transaction. Alternatively, multiple copies of the email may be
generated so as to not immediately reveal who else received the email.</t>

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

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

<t>A set of cryptographic "hashes" are used to record the current
message body and header fields. The hashes are provided
within a JSON object with the schema:</t>

<figure><artwork><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://dkim2.org/schemas/signature-v1",
  "title": "DKIM2 signatures",
  "description": "see draft-clayton-dkim2-spec",
  "type": "object",
  "properties": {
    "items": {
      "description": "selector, algorithm, value",
      "type": "array",
      "items": {"type": "string"},
      "minItems": 3, "maxItems": 3
    }
  }
}
]]></artwork></figure>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<t>The originator of a message uses the
value 1. Further Message-Instance header fields are added with a value one
more than the current highest numbered Message-Instance header field. Gaps
in the numbering MUST be treated as making the whole message impossible
to verify.</t>

<t>ABNF:</t>

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

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

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

<t>The r= tag value is the base64 encoded version of the JSON object that
contains the recipes that allow the previous instance of the message
to be recreated (see {#JSONrecipe}}.</t>

<t>ABNF:</t>

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

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

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

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

<t>ABNF:</t>

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

</section>
<section anchor="hfDKIM2signature"><name>The DKIM2-Signature Header Field</name>

<t>The signature of the email is stored in a DKIM2-Signature header
field.  This header field contains all of the signature and key-
fetching data.  The DKIM2-Signature value is a tag-list as described
in <xref target="tagvaluelists"/>.</t>

<t>Tags on the DKIM2-Signature header field along with their type,
encoding and requirement status are shown below. It will be noted that we
have not included a version number.  Experience from IMF onwards shows
that it is essentially impossible to change version numbers.
If it becomes necessary to change DKIM2 in the sort of incompatible way that
a v=2 / v=3 version number would support, it is expected that header
fields will be labelled as DKIM3 instead.</t>

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

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

<t>The originator of a message uses the
value 1. Further DKIM2-Signature header fields are added with a value one
more than the current highest numbered DKIM2-Signature header field. Gaps
in the numbering MUST be treated as making the whole message unsigned.</t>

<t>ABNF:</t>

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

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

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

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

<t>ABNF:</t>

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

<t>n=  Nonce value</t>

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

<t>This value, if present, has a meaning to the creator of the signature
but MUST NOT be assumed to have any meaning to any other entity. It
MAY be used as an index into a database to assist in handling Delivery
Status Notifications or for any other purpose.</t>

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

<t>ABNF:</t>

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

<t>t=  Signature Timestamp</t>

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

<t>The time that this header field was created. The format is the number of
seconds since 00:00:00 on January 1, 1970 in the UTC time zone.  The value
is expressed as an unsigned integer in decimal ASCII.  This value
is not constrained to fit into a 31- or 32-bit integer.</t>

<t>Implementations SHOULD be prepared to handle values up to at least
10^12 (until approximately AD 200,000; this fits into 40 bits).</t>

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

<t>ABNF:</t>

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

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

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

<t>This domain is used to form the query for the public key. The domain MUST be a valid DNS
name under which the DKIM2 key record is published.</t>

<t>The domain in the d= tag MUST exactly match the rightmost labels of the domain-name part
of the mf= tag. That is to say, the domain-name of the mf= tag MUST either match the
d= domain exactly or be a sub-domain of d= domain.</t>

<t>ABNF:</t>

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

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

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

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

<t>ABNF:</t>

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

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

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

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

<t>ABNF:</t>

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

<t>f=  Flags</t>

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

<t>Flags serve two purposes; they either report what has been done to
the message by the system creating the DKIM2-Signature or they make
a request to systems that handle the mail thereafter. Flags are
separated by commas, and optional white-space allows systems to
add several flags without creating long lines.</t>

<t>If a flag value is not recognised it MUST be ignored.</t>

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

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

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

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

<t>"donotmodify": this signer requests that the message not be modified from
the form in which it is sent. 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="signer-actions"><name>Signer Actions</name>

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

<section anchor="add-any-necessary-message-instance-header-fields"><name>Add any Necessary Message-Instance Header Fields</name>

<t>If a system is generating the initial form of a message or if
it a Reviser that has made to changes to the message body and/or
header fields then it MUST compute the body hash as described in
<xref target="computing-body-hash"/> and the hash of the header fields
as described in <xref target="computing-header-hash"/>.</t>

<t>If the message does not contain a Message-Instance header field then one
MUST be added.</t>

<t>If hashing the message body or relevant header fields does not
give the same hash values as those recorded in the highest version
(v=) Message-Instance header field then a new Message-Instance
header field MUST be added.
This Message-Instance header field MUST contain "recipes" to be able to
recreate the message corresponding to the hash values in the
currently highest numbered Message-Instance header field, or a
null recipe to indicate that recreating the previous version
of the message will not be possible.</t>

<t>A system may add more than one Message-Instance header field if it
wishes to do so, but the DKIM2 design allows all modifications made by
any single system to be documented
in a single Message-Instance header field.</t>

<t>Note that the first (v=1) Message-Instance header fieldMAY
contain "recipes" if it is wished to record any changes made to a
message as it enters the DKIM2 ecosystem. All other Message-Instance
header fields SHOULD contain at least one "recipe".</t>

</section>
<section anchor="chain-of-custody"><name>Provide a "chain of custody" for the message</name>

<t>To construct the DKIM2-Signature header field contains the MAIL FROM
and RCPT TO values that will be used when the message is transmitted
so these <xref target="RFC5321"></xref> "envelope" values MUST be available to (or
deducible by) a Signer.</t>

<t>The receiver of a message will check for an exact match (including
the local parts of the email addresses) between the MAIL FROM / RCPT TO
<xref target="RFC5321"></xref> protocol values and the values in the highest numbered
(most recent) DKIM2-Signature header field. It is acceptable for
there to be more RCPT TO email addresses recorded in the header
field that are actually used in the SMTP conversation, but any
RCPT TO value which is used MUST be present.</t>

<t>Verifiers will check for a relaxed domain match (see {relaxed-domain-match})
between the signing domain (d=) and the domain in the MAIL FROM value.</t>

<t>When the message being signed already has a DKIM2-Signature header field
(i.e. it has already been transmitted at least once) then a valid
"chain of custody" MUST be apparent when all of the DKIM2-Signature header fields
are considered. This "chain of custody" contributes to the way in
which DKIM2 tackles "DKIM replay" attacks. The "chain of custody"
uses a relaxed domain match (see {relaxed-domain-match}).</t>

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

<t>It will be noted that the
creation of this extra header field will require the Signer to have access
to a DKIM2 private key associated with a domain in the RCPT TO entry. This is
often achieved by the Signer creating the private key and never sharing it.
The Signer gives the public key (and selector value) to the domain owner who
creates an appropriate DNS entry. Alternatively, the Signer creates a public
key DNS entry within a part of the DNS that they control and the domain owner
merely needs to publish a CNAME pointing at this.</t>

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

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

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

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

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

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

<t>This specification does not define the basis by which a Signer should
choose which private key and selector value to use -- this will be a
matter of administrative convenience.  Distribution and management of private
keys is also outside the scope of this document.</t>

</section>
<section anchor="calculate-signature"><name>Calculate a Signature Value</name>

<t>A Signer calculates a hash solely over the Message-Instance and DKIM2-Signature
header fields of the message and then signs this hash value. The hashes of
the body and other header fields are covered by the hashes in the highest
version (v=) Message-Instance header field.</t>

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

<t>The signature algorithm MUST apply the following steps
in the order given.</t>

<t><list style="symbols">
  <t>Convert all relevant header field names (not the header field values) to
lowercase.  For example, convert "DKIM2-signature" to "dkim2-signature".</t>
  <t>Unfold all header field continuation lines as described in
<xref target="RFC5322"></xref>; in particular, lines with terminators embedded in
continued header field values (that is, CRLF sequences followed by
WSP) MUST be interpreted without the CRLF.  Implementations MUST
NOT remove the CRLF at the end of the header field value.</t>
  <t>Convert all sequences of one or more WSP characters to a single SP
character.  WSP characters here include those before and after a
line folding boundary.</t>
  <t>Delete all WSP characters at the end of each unfolded header field
value.</t>
  <t>Delete any WSP characters remaining before and after the colon
separating the header field name from the header field value.  The
colon separator MUST be retained.</t>
  <t>Place the header fields in order. First come the Message-Instance
header fields in ascending version (v=) order. Second are the
DKIM2-Signature header fields in ascending sequence (i=) order.
Last of all is an incomplete DKIM2-Signature header field (the
one that this system is creating) with all tags present except
that the signature value (s=) is null (that is the base64 value
is absent).</t>
  <t>The hash of the concatenated header fields is calculated and this
value is then signed using an the appropriate algorithm and the
selector value, algorithm identifier and the base64 encoded value
of the signature value are placed into the JSON object for the
message signature. Any further signatures are calculated and
added to the array within the JSON object (see <xref target="JSONsignature"/></t>
</list></t>

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

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

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

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

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

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

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

<t>TEMPFAIL:  a temporary, recoverable error such as a DNS query timeout</t>

<t>A verifier MAY cease verifying once a single failure is detected.</t>

<t>Verifiers wishing to communicate the results of verification to other
parts of the mail system may do so in whatever manner they see fit.
For example, implementations might choose to add an email header
field to the message before passing it on.  Any such header field
SHOULD be inserted before any existing DKIM2-Signature or pre-existing
authentication status header fields in the header field block.  The
Authentication-Results: header field (<xref target="RFC8601"></xref>) MAY be used for this
purpose. It should be noted that any "Authentication-Results" header
field will count as a modification to the email if any further
DKIM2-Signature header fields are to be generated.</t>

</section>
<section anchor="validation-of-tag-fields"><name>Validation of Tag Fields</name>

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

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

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

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

<t>The public key of a signature is needed to complete the verification
process. Details of key management and representation are described in
<xref target="key_management"/> and <xref target="DKIMKEYS"></xref>.  The Verifier MUST validate the key record and MUST
ignore any public key records that are malformed.</t>

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

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

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

<t>Given a Signer and a public key, verifying a signature consists of
actions semantically equivalent to the following steps.</t>

<t><list style="numbers" type="1">
  <t>Prepare a canonicalized version of the Message-Instance and DKIM2-Signature
header fields as described in <xref target="calculate-signature"/>. Note that this
canonicalized version does not actually replace the original content.</t>
  <t>Based on the algorithm indicated in the JSON object holding the signatures
compute the signatures of the canonical copy. Then verify that the there is
a match with the hash value from the JSON object. If the
signature does not validate, the Verifier SHOULD ignore the
signature and return PERMFAIL ("signature did not verify").</t>
  <t>Otherwise, the signature has correctly verified.</t>
  <t>If there is more than one signature provided then they MUST all be
checked if the verifier is able to do so.</t>
  <t>If any signature fails then an error SHOULD be reported.</t>
  <t>If some signatures fail and other pass then the error that is
reported should provide that information (e.g. PERMFAIL "RSA signature
passed, elliptic curve signature failed")</t>
</list></t>

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

</section>
<section anchor="verifier_extract"><name>Check Most Recent Signature and Hashes for the Message</name>

<t>A Verifier SHOULD check the validity of the most recently applied
(highest numbered i= value) DKIM2-Signature header field
and the associated (v=)
Message-Instance before accepting an email. If this check
does not pass then a Delivery Status Notification for the email MUST
NOT be generated thereafter -- hence the best strategy, if the email
is not wanted, is to reject it (with a 5xx error code) whilst the
relevant SMTP conversation is still ongoing. If the check gives
a TEMPFAIL result then a 4xx error code SHOULD be used to allow the
sending MTA to understand the situation.</t>

<t>A Verifier SHOULD check that the MAIL FROM value in the most
recent DKIM2-Signature header field is identical to the <xref target="RFC5321"></xref>
MAIL FROM values of the SMTP protocol interaction that
delivered the email to the Verifier. A Verifier SHOULD also
check that all of the <xref target="RFC5321"></xref> RCPT TO values from the SMTP
protocol occur in the most recent DKIM2-Signature header field.
The values MUST BE
put into lower-case before doing these checks. Note that these
check MUST NOT use the relaxed domain match algorithm.</t>

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

<t>A Verifier SHOULD also check the chain of custody for the message
(see {chain-of-custody}) is valid, using a relaxed domain match (see
{#relaxed-domain-match}).</t>

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

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

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

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

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

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

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

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

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

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

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

<t>451 4.7.5 Unable to verify signature - key server unavailable</t>

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

</section>
</section>
<section anchor="bounce"><name>Delivery Status Notifications in the DKIM2 ecosystem</name>

<t>In the DKIM2 ecosystem, when a message cannot be delivered then
this is reported to the sending machine by means of an <xref target="RFC5321"/>
return code or, if the SMTP session has completed, by generating
a Delivery Status Notification (DSN, as defined in <xref target="RFC3461"/>.</t>

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

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

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

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

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

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

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

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

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

<t>When a system receives a DKIM2 signed bounce notification, and the
included original message is also DKIM2 signed, it SHOULD
verify that this message (or just the header fields if the body
is not present) has not been altered.</t>

<t>This means:</t>

<t>1) The DSN's DKIM2-Signature will have a signing domain that is
aligned with the recipient of the message that is being returned.
The recipient's address is located in the rt= tag of the
last (highest i= tag) DKIM2-Signature in the returned message.</t>

<t>1) The last (highest <spanx style="verb">i=</spanx> tag) DKIM2-Signature header field of the
returned message will be one that was generated by the system
receiving the bounce notification, determined by examining the
d= and mf= tags of that DKIM2-Signature header field.</t>

<t>1) The header fields of the embedded message (in the message/rfc822
MIME part) can be verified. If the message body is present then
that can also be verified by inspecting the Message-Instance
header field(s).</t>

<t>If the verification fails then the DSN MUST NOT be propagated
any further. If verification has been performed prior to
accepting the DSN from the sender the DSN SHOULD be rejected
with a 550/5.7.x return code. If the verification cannot be completed
because of a temporary issue (with DNS lookups) then a 4xx
return code should be used.</t>

</section>
</section>
</section>
<section anchor="signer_normalize"><name>Preventing Transport Conversions</name>

<t>DKIM2's design is predicated on valid input.</t>

<t>In order to be signed a message will need to be in "network normal" format
(text is ASCII encoded, lines are separated with CRLF characters, etc.).</t>

<t>A message that is not compliant with <xref target="RFC5322"></xref>, <xref target="RFC2045"></xref>, <xref target="RFC2047"></xref>
and other relevant message format standards can be subject to attempts
by intermediaries to correct or interpret such content.  See Section 8
of <xref target="RFC6409"></xref> for examples of changes that are commonly made.  Such
"corrections" may invalidate DKIM2 signatures or have other undesirable
effects, including some that involve changes to the way a message is
presented to an end user.</t>

<t>When calculating the hash on messages that will be transmitted using
base64 or quoted-printable encoding, Signers MUST compute the hash
after the encoding.  Likewise, the Verifier MUST incorporate the
values into the hash before decoding the base64 or quoted-printable
text.  However, the hash MUST be computed before transport-level
encodings such as SMTP "dot-stuffing" (the modification of lines
beginning with a "." to avoid confusion with the SMTP end-of-message
marker, as specified in <xref target="RFC5321"></xref>).</t>

<t>Further, if the message contains local encoding that will be modified before transmission,
that modification to canonical <xref target="RFC5322"></xref> form MUST be done before signing.
In particular, bare CR or LF characters (used by some systems as a local line
separator convention) MUST be converted to the SMTP-standard CRLF
sequence before the message is signed.  Any conversion of this sort
SHOULD be applied to the message actually sent to the recipient(s),
not just to the version presented to the signing algorithm.</t>

<t>More generally, the Signer MUST sign the message as it is expected to
be received by the Verifier rather than in some local or internal form.</t>

</section>
<section anchor="eai-rfc6530-considerations-for-dkim2"><name>EAI (<xref target="RFC6530"></xref>) considerations for DKIM2</name>

<t>TBA</t>

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

<t>TBA</t>

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

<t>TBA</t>

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

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

<t>No changes that would affect an implementor, but tidied up the
text as a result of the change to JSON and reordered several of
the sections.</t>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<t>Relax the matching algorithm between rt= and mf=</t>

<t>[[This section to be removed by RFC Editor]]</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC1034">
  <front>
    <title>Domain names - concepts and facilities</title>
    <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
    <date month="November" year="1987"/>
    <abstract>
      <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="13"/>
  <seriesInfo name="RFC" value="1034"/>
  <seriesInfo name="DOI" value="10.17487/RFC1034"/>
</reference>
<reference anchor="RFC2045">
  <front>
    <title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
    <author fullname="N. Freed" initials="N." surname="Freed"/>
    <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
    <date month="November" year="1996"/>
    <abstract>
      <t>This initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2045"/>
  <seriesInfo name="DOI" value="10.17487/RFC2045"/>
</reference>
<reference anchor="RFC2047">
  <front>
    <title>MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text</title>
    <author fullname="K. Moore" initials="K." surname="Moore"/>
    <date month="November" year="1996"/>
    <abstract>
      <t>This particular document is the third document in the series. It describes extensions to RFC 822 to allow non-US-ASCII text data in Internet mail header fields. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2047"/>
  <seriesInfo name="DOI" value="10.17487/RFC2047"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC3461">
  <front>
    <title>Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)</title>
    <author fullname="K. Moore" initials="K." surname="Moore"/>
    <date month="January" year="2003"/>
    <abstract>
      <t>This memo defines an extension to the Simple Mail Transfer Protocol (SMTP) service, which allows an SMTP client to specify (a) that Delivery Status Notifications (DSNs) should be generated under certain conditions, (b) whether such notifications should return the contents of the message, and (c) additional information, to be returned with a DSN, that allows the sender to identify both the recipient(s) for which the DSN was issued, and the transaction in which the original message was sent. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3461"/>
  <seriesInfo name="DOI" value="10.17487/RFC3461"/>
</reference>
<reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</reference>
<reference anchor="RFC5234">
  <front>
    <title>Augmented BNF for Syntax Specifications: ABNF</title>
    <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
    <author fullname="P. Overell" initials="P." surname="Overell"/>
    <date month="January" year="2008"/>
    <abstract>
      <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="68"/>
  <seriesInfo name="RFC" value="5234"/>
  <seriesInfo name="DOI" value="10.17487/RFC5234"/>
</reference>
<reference anchor="RFC5321">
  <front>
    <title>Simple Mail Transfer Protocol</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="October" year="2008"/>
    <abstract>
      <t>This document is a specification of the basic protocol for Internet electronic mail transport. It consolidates, updates, and clarifies several previous documents, making all or parts of most of them obsolete. It covers the SMTP extension mechanisms and best practices for the contemporary Internet, but does not provide details about particular extensions. Although SMTP was designed as a mail transport and delivery protocol, this specification also contains information that is important to its use as a "mail submission" protocol for "split-UA" (User Agent) mail reading systems and mobile environments. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5321"/>
  <seriesInfo name="DOI" value="10.17487/RFC5321"/>
</reference>
<reference anchor="RFC5322">
  <front>
    <title>Internet Message Format</title>
    <author fullname="P. Resnick" initials="P." role="editor" surname="Resnick"/>
    <date month="October" year="2008"/>
    <abstract>
      <t>This document specifies the Internet Message Format (IMF), a syntax for text messages that are sent between computer users, within the framework of "electronic mail" messages. This specification is a revision of Request For Comments (RFC) 2822, which itself superseded Request For Comments (RFC) 822, "Standard for the Format of ARPA Internet Text Messages", updating it to reflect current practice and incorporating incremental changes that were specified in other RFCs. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5322"/>
  <seriesInfo name="DOI" value="10.17487/RFC5322"/>
</reference>
<reference anchor="RFC6376">
  <front>
    <title>DomainKeys Identified Mail (DKIM) Signatures</title>
    <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
    <author fullname="T. Hansen" initials="T." role="editor" surname="Hansen"/>
    <author fullname="M. Kucherawy" initials="M." role="editor" surname="Kucherawy"/>
    <date month="September" year="2011"/>
    <abstract>
      <t>DomainKeys Identified Mail (DKIM) permits a person, role, or organization that owns the signing domain to claim some responsibility for a message by associating the domain with the message. This can be an author's organization, an operational relay, or one of their agents. DKIM separates the question of the identity of the Signer of the message from the purported author of the message. Assertion of responsibility is validated through a cryptographic signature and by querying the Signer's domain directly to retrieve the appropriate public key. Message transit from author to recipient is through relays that typically make no substantive change to the message content and thus preserve the DKIM signature.</t>
      <t>This memo obsoletes RFC 4871 and RFC 5672. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="76"/>
  <seriesInfo name="RFC" value="6376"/>
  <seriesInfo name="DOI" value="10.17487/RFC6376"/>
</reference>
<reference anchor="RFC6409">
  <front>
    <title>Message Submission for Mail</title>
    <author fullname="R. Gellens" initials="R." surname="Gellens"/>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="November" year="2011"/>
    <abstract>
      <t>This memo splits message submission from message relay, allowing each service to operate according to its own rules (for security, policy, etc.), and specifies what actions are to be taken by a submission server.</t>
      <t>Message relay is unaffected, and continues to use SMTP over port 25.</t>
      <t>When conforming to this document, message submission uses the protocol specified here, normally over port 587.</t>
      <t>This separation of function offers a number of benefits, including the ability to apply specific security or policy requirements. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="72"/>
  <seriesInfo name="RFC" value="6409"/>
  <seriesInfo name="DOI" value="10.17487/RFC6409"/>
</reference>
<reference anchor="RFC6530">
  <front>
    <title>Overview and Framework for Internationalized Email</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <author fullname="Y. Ko" initials="Y." surname="Ko"/>
    <date month="February" year="2012"/>
    <abstract>
      <t>Full use of electronic mail throughout the world requires that (subject to other constraints) people be able to use close variations on their own names (written correctly in their own languages and scripts) as mailbox names in email addresses. This document introduces a series of specifications that define mechanisms and protocol extensions needed to fully support internationalized email addresses. These changes include an SMTP extension and extension of email header syntax to accommodate UTF-8 data. The document set also includes discussion of key assumptions and issues in deploying fully internationalized email. This document is a replacement for RFC 4952; it reflects additional issues identified since that document was published. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6530"/>
  <seriesInfo name="DOI" value="10.17487/RFC6530"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
<reference anchor="RFC8601">
  <front>
    <title>Message Header Field for Indicating Message Authentication Status</title>
    <author fullname="M. Kucherawy" initials="M." surname="Kucherawy"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This document specifies a message header field called "Authentication-Results" for use with electronic mail messages to indicate the results of message authentication efforts. Any receiver-side software, such as mail filters or Mail User Agents (MUAs), can use this header field to relay that information in a convenient and meaningful way to users or to make sorting and filtering decisions.</t>
      <t>This document obsoletes RFC 7601.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8601"/>
  <seriesInfo name="DOI" value="10.17487/RFC8601"/>
</reference>

<reference anchor="DKIMKEYS">
   <front>
      <title>Domain Name Specification for DKIM2</title>
      <author fullname="Wei Chuang" initials="W." surname="Chuang">
         <organization>Google</organization>
      </author>
      <date day="20" month="October" year="2025"/>
      <abstract>
	 <t>   The updated DomainKeys Identified Mail (DKIM2) permits an
   organization that owns the signing domain to claim some
   responsibility for a message by associating the domain with the
   message through a digital signature.  This is done by publishing to
   Domain Name Service (DNS) of the domain a public key that is then
   associated to the domain and where messages can be signed by the
   corresponding private key.  Assertion of responsibility is validated
   through a cryptographic signature and by querying the Signer’s domain
   directly to retrieve the appropriate public key.  This document
   describes DKIM2 DNS record format and how to find the record.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-chuang-dkim2-dns-03"/>
   
</reference>



    </references>

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



<reference anchor="RFC5598">
  <front>
    <title>Internet Mail Architecture</title>
    <author fullname="D. Crocker" initials="D." surname="Crocker"/>
    <date month="July" year="2009"/>
    <abstract>
      <t>Over its thirty-five-year history, Internet Mail has changed significantly in scale and complexity, as it has become a global infrastructure service. These changes have been evolutionary, rather than revolutionary, reflecting a strong desire to preserve both its installed base and its usefulness. To collaborate productively on this large and complex system, all participants need to work from a common view of it and use a common language to describe its components and the interactions among them. But the many differences in perspective currently make it difficult to know exactly what another participant means. To serve as the necessary common frame of reference, this document describes the enhanced Internet Mail architecture, reflecting the current service. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5598"/>
  <seriesInfo name="DOI" value="10.17487/RFC5598"/>
</reference>
<reference anchor="RFC8017">
  <front>
    <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
    <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
    <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
    <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
    <author fullname="A. Rusch" initials="A." surname="Rusch"/>
    <date month="November" year="2016"/>
    <abstract>
      <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
      <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
      <t>This document also obsoletes RFC 3447.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8017"/>
  <seriesInfo name="DOI" value="10.17487/RFC8017"/>
</reference>
<reference anchor="RFC8032">
  <front>
    <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8032"/>
  <seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>
<reference anchor="RFC8617">
  <front>
    <title>The Authenticated Received Chain (ARC) Protocol</title>
    <author fullname="K. Andersen" initials="K." surname="Andersen"/>
    <author fullname="B. Long" initials="B." role="editor" surname="Long"/>
    <author fullname="S. Blank" initials="S." role="editor" surname="Blank"/>
    <author fullname="M. Kucherawy" initials="M." role="editor" surname="Kucherawy"/>
    <date month="July" year="2019"/>
    <abstract>
      <t>The Authenticated Received Chain (ARC) protocol provides an authenticated "chain of custody" for a message, allowing each entity that handles the message to see what entities handled it before and what the message's authentication assessment was at each step in the handling.</t>
      <t>ARC allows Internet Mail Handlers to attach assertions of message authentication assessment to individual messages. As messages traverse ARC-enabled Internet Mail Handlers, additional ARC assertions can be attached to messages to form ordered sets of ARC assertions that represent the authentication assessment at each step of the message-handling paths.</t>
      <t>ARC-enabled Internet Mail Handlers can process sets of ARC assertions to inform message disposition decisions, identify Internet Mail Handlers that might break existing authentication mechanisms, and convey original authentication assessments across trust boundaries.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8617"/>
  <seriesInfo name="DOI" value="10.17487/RFC8617"/>
</reference>

<reference anchor="CONCLUDEARC">
   <front>
      <title>Concluding the ARC Experiment</title>
      <author fullname="J. Trent Adams" initials="J. T." surname="Adams">
         <organization>Proofpoint</organization>
      </author>
      <author fullname="John R. Levine" initials="J. R." surname="Levine">
         <organization>Taughannock Networks</organization>
      </author>
      <date day="4" month="December" year="2025"/>
      <abstract>
	 <t>   This document calls for a conclusion to the experiment defined by
   “The Authenticated Received Chain (ARC) Protocol,” (RFC8617) and
   recommends that ARC no longer be deployed or relied upon between
   disparate senders and receivers.  The document summarizes what ARC
   set out to do, reports on operational experience, and explains how
   the experience gained during the experiment is being incorporated
   into the proposed DKIM2 work as the successor to DomainKeys
   Identified Mail (DKIM).  To avoid any future confusion, it is
   therefore requested that ARC (RFC8617) be marked “Obsolete” by the
   publication of this Internet-Draft.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-adams-arc-experiment-conclusion-01"/>
   
</reference>



    </references>

</references>



  </back>

<!-- ##markdown-source:
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
6BrJGaxrVf/hwx8+uP/l/h/K861+ivgAAA==

-->

</rfc>

