<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-brotman-dkim-fbl-01" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true" consensus="true">

<front>
<title abbrev="DKIM-FBL">Email Feedback Reports for DKIM Signers</title><seriesInfo value="draft-brotman-dkim-fbl-01" stream="IETF" status="standard" name="RFC"></seriesInfo>
<author initials="A." surname="Brotman" fullname="Alex Brotman"><organization>Comcast, Inc</organization><address><postal><street></street>
</postal><email>alex_brotman@comcast.com</email>
</address></author><date year="2023" month="October" day="23"></date>
<area>Applications</area>
<workgroup></workgroup>

<abstract>
<t>Mechanism to discover a destination used to deliver user-supplied FBL reports
to an original DKIM signer or other responsible parties.  This should allow the
reporting entity to deliver reports via email for each party which has affixed
a validating DKIM signature.  The discovery is made via DNS and the record is
constructed using items within the DKIM signature in the message.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>Historically, Feedback Loops (FBL), typically comprised of False Positive (FP)
and False Negative (FN) reports, have allowed users the ability to inform
their Mailbox Provider (MBP) that they disagree with a message's placement
in the Inbox or Spam folder. In some situations, a MBP may then forward that
complaint directly, or via an intermediary, to the original source system of
that message.  Additionally, these complaints reach the source system via a
registration system, typically tying a set of IPs or DKIM-based domains to
a specific reporting address.</t>
<t>By allowing reporters to discover the destination on their own, this should
make getting FBLs to the original DKIM signer(s) easier.</t>
</section>

<section anchor="discovery-using-dns"><name>Discovery using DNS</name>
<t>There are alternative approaches for discovering the feedback information proposed. Particularly, by adding a new header to every outbound message to define the feedback address.</t>
<t>The advantage of the DNS approach is that it can be changed after messages are delivered, allowing for old reports to be processed after migrating to a new report receiving endpoint. It also avoids common problems with modifying headers of messages that are already signed by another DKIM signature.</t>
<t>Email service providers and intermediaries, which have a shared responsibility with an upstream sender, will commonly add their own DKIM signatures to the messages; thus resulting in the message having two signatures in different DKIM d= domains. Dual-signed messages will result in feedback going to the location specified in the DNS for both domains. Thus there is no reason to modify any message headers and potentially breaking the original DKIM signature.</t>
</section>

<section anchor="dns-record-location"><name>DNS Record Location</name>
<t>The record will combine a label with the &quot;d&quot; value from the DKIM signature
in the message being sent, optionally using a DNS wildcard (* character). Such as the case where &quot;d=example.org&quot;, the record would be located at:</t>
<t>_feedback._domainkey.example.org</t>
<t>or</t>
<t>*._feedback._domainkey.example.org</t>
<t>If the reporting destination needs to be different for individual DKIM selectors, each selector will need a DNS record with a value combined with a label with the &quot;s=&quot; value from the DKIM signature in the message being sent. Such as the case where
&quot;d=example.org&quot;, and &quot;s=contact&quot;:</t>
<t>contact._feedback._domainkey.example.org</t>
<t>By including the selector, this allows a domain to be able to segment the
feedback to various report processing providers, but a wildcard can no longer be used as a catch-all and an individual record must be created for each selector in use. DKIM selectors are not supposed to be used for identification purposes, and they should change frequently to facilitate key rotation. The need for selector level feedback still needs to be assessed.</t>
<t>All domain owners that want to ensure they receive all feedback should, at a mimimum, publish a record at the following location as a catch-all:</t>
<t>_feedback._domainkey.example.org</t>
<t>The DNS entry will contain a TXT record described below.</t>
</section>

<section anchor="dns-record-format"><name>DNS Record Format</name>
<t>The DNS record should contain the information necessary for a report generator
to send the feedback to the proper location.</t>
<t>v: A string identifying the record.  The value must be &quot;DKIMRFBLv1&quot;</t>
<t>ra: An email address destination for reports.  The address should
match the format defined in <xref target="RFC5321"></xref>. If there is a &quot;rfr&quot; entry,
the &quot;ra&quot; may be omitted. If there is more than one target address,
the entries must be separated by a comma (&quot;,&quot;).</t>
<t>rfr: An optional field to refer the report generator(s) to another DNS entry.</t>
<t>c: Content flag. If set to 'n', the reporting entity SHOULD remove all
content beyond the headers of the original message that is being
reported.</t>
<t>h: The header by which the signer can identify the recipient, sender,
and campaign.  If a report generator is trying to create a minimalistic report,
this would be the minimum amount of information to properly act to the
report.  This field is OPTIONAL, and may contain only one attribute.</t>
<t>f: Format requested by report receiver.  Options are &quot;arf&quot; and &quot;xarf&quot;.
Default is &quot;arf&quot;, and multiple values may be separated by a comma (,).
If a report sender is unable to generate a report in a requested
format, they SHOULD NOT send a report.</t>

<section anchor="samples"><name>Samples</name>
<t>_feedback._domainkey.example.org TXT <br />
  &quot;v=DKIMRFBLv1;ra=reporting@feedback.example.org&quot;</t>
<t>contact._feedback._domainkey.example.org TXT <br />
  &quot;v=DKIMRFBLv1;rfr=_feedback._domainkey.example.org&quot;</t>
<t>contact._feedback._domainkey.example.org TXT <br />
  &quot;v=DKIMRFBLv1;ra=fbl@example.org;rfr=_feedback._domainkey.example.org&quot;</t>
<t>*._feedback._domainkey.example.org TXT <br />
  &quot;v=DKIMRFBLv1;ra=other_fbl@example.org&quot;</t>
</section>
</section>

<section anchor="report-contents"><name>Report Contents</name>
<t>When the report format is specified as &quot;arf&quot;, the report contents should
adhere to <xref target="RFC5965"></xref>.</t>
<t>When the report format is chosen as &quot;xarf&quot; [XARF], the report generator should
reference the materials below as to the format.  XARF follows a JSON format
and the format may change over time to match that specification.</t>
<t>The current format can be referenced:</t>
<t><eref target="https://github.com/abusix/xarf/blob/master/schemas/3/spam.schema.json">https://github.com/abusix/xarf/blob/master/schemas/3/spam.schema.json</eref></t>
</section>

<section anchor="verifying-external-destinations"><name>Verifying External Destinations</name>
<t>In order to limit the possibility of misdirected reports, if the receiving
entity domain does not match the d= of the DKIM signature, there must be a
DNS record to verify the external destination.</t>
<t>Consider the record:</t>
<t>foo._feedback._domainkey.example.org TXT <br />
  &quot;v=DKIMRFBLv1 ; ra=reporting@othersite.com&quot;</t>
<t>In order for &quot;othersite.com&quot; to receive reports for this DKIM signature, a
record must exist at specified location, and contain a specified value.</t>

<ol spacing="compact">
<li>Using the domain of the destination</li>
<li>Prepend &quot;_report._feedback&quot;</li>
<li>Prepend the values from <tt>d=</tt> and <tt>s=</tt> from the original signature.</li>
<li>Ensure the value is set to &quot;v=DKIMRFBLv1&quot;</li>
</ol>
<t>foo.example.org._report._feedback.othersite.com TXT &quot;v=DKIMRFBLv1&quot;</t>
<t>If the feedback receiver is comfortable with receiving feedback for all selectors
within a domain, then they may omit the <tt>s=</tt> value from the DNS record location. The record would be named:</t>
<t>example.org._report._feedback.othersite.com TXT &quot;v=DKIMRFBLv1&quot;</t>
</section>

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

<section anchor="feedback-to-malicious-senders"><name>Feedback to Malicious Senders</name>
<t>There is some concern that a MBP may provide some advantage or useful
information to a malicious entity by providing them with FBL data.  Each
MBP should use their own judgement when deciding where to send reports. It is
possible that an attacker could use this information to attempt to bypass
anti-spam filters, or to validate a recipient at a given site.</t>
</section>

<section anchor="report-contents-for-arf"><name>Report Contents for ARF</name>
<t>Noting in <xref target="RFC5965"></xref> section 2.g, there should be enough information for most
senders to process a complaint without the content of the message.  While the
<tt>c</tt> flag allows the report receiver to state that they do not wish to receive
content, the report generator, as per <xref target="RFC5965"></xref> does not need to include that
information, regardless of the flag settings.</t>
</section>
</section>

<section anchor="other-considerations"><name>Other Considerations</name>

<section anchor="supplying-fp-reports"><name>Supplying FP Reports</name>
<t>It is at the discretion of the report generator as to whether they supply False
Positive reports to the report requester.</t>
</section>

<section anchor="site-requirements"><name>Site Requirements</name>
<t>A report generator may place some requirements on the sender in order to be
eligible to receive reports. This could include something such as a DMARC
policy requirements, TLS usage, or some level of reputation.</t>
</section>

<section anchor="report-delivery"><name>Report Delivery</name>
<t>In this document, only delivery via SMTP is specified.  However, a separate
document could be created to allow for feedback via HTTPS, UDP, or something
yet to be defined.</t>
</section>
</section>

<section anchor="contributors"><name>Contributors</name>
</section>

<section anchor="notes"><name>Notes</name>
</section>

<section anchor="references"><name>References</name>
</section>

</middle>

<back>
<references><name>Normative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5321.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5965.xml"/>
</references>

</back>

</rfc>
