<?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.29 (Ruby 3.3.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-gallagher-email-unobtrusive-signatures-02" category="info" submissionType="IETF" updates="3156" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>Unobtrusive End-to-End Email Signatures</title>

    <author fullname="Andrew Gallagher" role="editor">
      <organization>PGPKeys.EU</organization>
      <address>
        <email>andrewg@andrewg.com</email>
      </address>
    </author>
    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization>ACLU</organization>
      <address>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>
    <author fullname="Kai Engert">
      <organization>Thunderbird</organization>
      <address>
        <email>kaie@thunderbird.net</email>
      </address>
    </author>

    <date year="2025" month="November" day="07"/>

    <area>int</area>
    <workgroup>none</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 41?>

<t>This document deals with end-to-end cryptographically signed email.
It introduces a novel structure for signed email that is designed to avoid creating any disturbance in legacy email clients.
This "unobtrusive" signature structure removes disincentives for signing email.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://andrewgdotcom.gitlab.io/unobtrusive-signatures/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-gallagher-email-unobtrusive-signatures/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://gitlab.com/andrewgdotcom/unobtrusive-signatures/"/>.</t>
    </note>


  </front>

  <middle>


<?line 47?>

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

<t>Several different standard structures for end-to-end cryptographically signed email exist (see Sections <xref target="RFC9787" section="4.1.1.1" sectionFormat="bare"/>, <xref target="RFC9787" section="4.1.1.2" sectionFormat="bare"/> and <xref target="RFC9787" section="4.1.2.1" sectionFormat="bare"/> of <xref target="RFC9787"/>).
But the existing mechanisms have some undesirable properties which can make such mail difficult for the recipient to handle in some instances, particularly when read by legacy email clients that don't understand the signing structure.
This document offers another signed email structure, which is designed to be transparent to legacy email clients.</t>

<t>The goal of this mechanism is to help email clients commit to signing every outbound message, which reduces complexity for the user of the mail client.
The mechanism is capable of working with any signature mechanism, as well as transporting multiple signatures over a single message.
It is specified initially for <xref target="OpenPGP"/>, but can be easily extended to be used with <xref target="CMS"/> or other signature formats.</t>

<t>This mechanism is intended only for signed-only messages.
A message that is encrypted-and-signed <bcp14>MUST NOT</bcp14> use this mechanism, since any existing MUA that can decrypt an encrypted-and-signed message already handles the signatures on such a message correctly.</t>

<t>This document updates <xref target="RFC3156"/> by providing an additional mechanism for producing and consuming OpenPGP-signed MIME email.</t>

</section>
<section anchor="conventions-definitions"><name>Conventions and Definitions</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<t><list style="symbols">
  <t>"Signed Mail" is used to refer to Internet Mail Messages that are cryptographically signed by the sender of the message, and expected to be validated by the recipient of the message.
This document does not consider any cryptographic signature mechanism that is not end-to-end (such as <xref target="DKIM"/>), and should be agnostic to and non-interfering with any such mechanism.</t>
  <t>"OpenPGP Signature" refers to an OpenPGP Detached Signature as described by <xref section="10.4" sectionFormat="of" target="OpenPGP"/>.</t>
  <t>"MUA" refers to a Mail User Agent, which is also known as an email client.
For end-to-end signed mail, the sender's MUA performs message composition and injection into the mail system, and the receiver's MUA performs message ingestion from the mail system and rendering to the user.</t>
  <t>"Legacy MUA" refers to a MUA that does not know about this specification.</t>
  <t>"MTA" refers to a Message Transfer Agent, for example an SMTP server that relays Internet mail messages from one point to another.</t>
  <t>"<spanx style="verb">CRLF</spanx>" refers to "Carriage Return followed by Line Feed", the standard email line-ending sequence of two octets, <spanx style="verb">CR</spanx> (0x0D) and <spanx style="verb">LF</spanx> (0x0A).</t>
</list></t>

</section>
<section anchor="problems-with-existing-signature-schemes"><name>Problems With Existing Signature Schemes</name>

<t>Existing end-to-end signature schemes for mail can trigger a set of annoyances for a recipient who uses a MUA that doesn't understand these structures.
These annoyances can cause the recipient to complain to the sender.
The easiest way for the sender to try to accommodate the recipient in this case is to simply not sign mail.</t>

<t>The Unobtrusive Signature scheme defined in this document is intended to minimize or eliminate all of these problems.</t>

<section anchor="unreadable-signed-mail"><name>Unreadable Signed Mail</name>

<t>A signed mail message that uses the S/MIME PKCS #7 <spanx style="verb">signed-data</spanx> Cryptographic Layer described in <xref section="4.1.1.2" sectionFormat="of" target="RFC9787"/> is unreadable by a receiving MUA that doesn't understand <xref target="CMS"/>.</t>

<t>By contrast, a mail message signed with an Unobtrusive Signature should render normally by any legacy MUA.</t>

</section>
<section anchor="unknown-attachment"><name>Unknown Attachment</name>

<t>A signed mail message that uses the S/MIME Multipart Signed Cryptographic Layer described in <xref section="4.1.1.1" sectionFormat="of" target="RFC9787"/> or the PGP/MIME Signing Cryptographic Layer (multipart/signed) described in <xref section="4.1.2.1" sectionFormat="of" target="RFC9787"/> has a separate MIME part that contains the message signature.</t>

<t>A receiving MUA that doesn't understand these structures will often render the signature as an "attachment".
This can cause confusion and anxiety to the user of the MUA, and they will sometimes respond to the sender with the complaint "I can't open your attachment".</t>

<t>By contrast, a mail message signed with an Unobtrusive Signature is merely encapsulated in a <spanx style="verb">multipart/mixed</spanx> outer layer.
Legacy MUAs do not render such an encapsulation as an attachment.</t>

<section anchor="reducing-confusion-with-name-parameter"><name>Reducing Confusion with name Parameter</name>

<t>For existing end-to-end multipart signature schemes, one partial mitigation to this problem is to mark the signature part with an explicit filename that a legacy MUA is likely to display to the recipient.
Concretely, some signing MUAs that generate <spanx style="verb">multipart/signed</spanx> messages using PGP/MIME (<xref target="RFC3156"/>) will add a <spanx style="verb">name="openpgp-digital-signature.asc"</spanx> parameter to the <spanx style="verb">Content-Type</spanx> header of the <spanx style="verb">application/pgp-signature</spanx> MIME part.</t>

<t>For recipients who understand what an OpenPGP digital signature is (even if their MUA can't interpret it), this might reduce the amount of pushback they provide to the sender.</t>

<t>The Unobtrusive Signature scheme described in this document intends to offer even less friction to the recipient using a Legacy MUA by hiding the signature entirely.</t>

</section>
</section>
<section anchor="broken-signature"><name>Broken Signature</name>

<t>In some cases, mail is tampered with in transit, whether deliberately or maliciously.
In this case, for a MUA that does understand these messages, some MUAs will visibly complain to the recipient that there is a failed signature.</t>

<t>If unsigned mail receives no comparable warning, then the act of adding a signature to a message that might traverse a modifiable path is risky.
An MUA compliant with <xref section="6.4" sectionFormat="of" target="RFC9787"/> will not create such a warning, but many MUAs do not yet comply with that guidance.</t>

<t>By contrast, a legacy MUA won't render anything about the cryptographic status of an Unobtrusively Signed message at all.
And an MUA compatible with this specification that encounters a message with a broken Unobtrusive Signtature will never render an error that it wouldn't have rendered on an unsigned message anyway, which removes this disincentive to sign.</t>

</section>
</section>
<section anchor="unobtrusively-signed-message"><name>Unobtrusively Signed Message</name>

<t>An Unobtrusively Signed Message has a specific MIME structure and uses a specific header field.</t>

<section anchor="mime-structure"><name>MIME structure</name>

<t>The top-level <spanx style="verb">Content-Type</spanx> of an unobtrusively signed message is <spanx style="verb">multipart/mixed</spanx>, and it has a single MIME subpart, which this specification refers to as the "Protected Part".
The Protected Part's header sections' first header field is <spanx style="verb">Sig</spanx>, described in <xref target="sig"/>.</t>

<t>We hereby specify a third PGP/MIME format in addition to the two listed in <xref section="4.1.2" sectionFormat="of" target="RFC9787"/>:</t>

<section anchor="pgpmime-unobtrusive-signing-cryptographic-layer-multipartmixed"><name>PGP/MIME Unobtrusive Signing Cryptographic Layer (multipart/mixed)</name>

<figure><artwork type="ascii-art"><![CDATA[
└┬╴multipart/mixed
 └─╴[protected part]
]]></artwork></figure>

<t>This MIME layer offers authenticity and integrity if and only if the Protected Part contains one or more valid <spanx style="verb">Sig</spanx> headers.</t>

<t>This format is a Simple Cryptographic Envelope as specified in <xref section="4.4.1" sectionFormat="of" target="RFC9787"/>, and the Protected Part (with all leading <spanx style="verb">Sig</spanx> Header Fields removed) is the Cryptographic Payload.</t>

<t>This MIME structure <bcp14>MUST NOT</bcp14> be used as part of a Multilayer Cryptographic Envelope.
If it is found anywhere but the outside of the message it <bcp14>MUST NOT</bcp14> be treated as a Cryptographic Layer.</t>

</section>
</section>
<section anchor="sig"><name>Sig Header Field</name>

<t>This specification defines a new header field, named <spanx style="verb">Sig</spanx>.
<spanx style="verb">Sig</spanx> is only meaningful if it appears in the Protected Part of an Unobtrusively Signed Message, before any non-<spanx style="verb">Sig</spanx> header field.</t>

<t>It contains parameters, only two of which are currently defined.</t>

<t><list style="symbols">
  <t>The <spanx style="verb">t</spanx> parameter indicates the type of the signature with its value, and the only value currently defined is <spanx style="verb">p</spanx>, meaning an OpenPGP signature.
See <xref target="t-param"/>.</t>
  <t>The <spanx style="verb">b</spanx> parameter contains a base64-encoded blob that contains the cryptographic signature object of the type described by <spanx style="verb">t</spanx>.
Whitespace is ignored in this value and <bcp14>MUST</bcp14> be ignored when reassembling the original signature.
In particular, the signing process can safely insert Folding White Space (<xref section="3.2.2" sectionFormat="of" target="RFC5322"/>) in this value in arbitrary places to conform to line-length limits.</t>
</list></t>

<t>Note that if multiple <spanx style="verb">Sig</spanx> header fields appear in a single message, each <spanx style="verb">Sig</spanx> header field represents a signature over the Protected Part (with all leading <spanx style="verb">Sig</spanx> Header Fields removed).
That is, each <spanx style="verb">Sig</spanx> signs the same content, and the order of the <spanx style="verb">Sig</spanx> header fields among themselves doesn't matter as long as every <spanx style="verb">Sig</spanx> header field precedes all non-<spanx style="verb">Sig</spanx> header fields in the Header Section of the Protected Part.
<spanx style="verb">Sig</spanx> header fields <bcp14>MUST NOT</bcp14> appear in a non-leading position.</t>

</section>
<section anchor="line-ending-normalization"><name>Line Ending Normalization</name>

<t>Line endings in the message <bcp14>MUST</bcp14> be converted to <spanx style="verb">CRLF</spanx> format before signing or verification.
This ensures that an OpenPGP signature over the message will be invariant for both binary and text mode signatures.</t>

</section>
</section>
<section anchor="sender-guidance"><name>Sender Guidance</name>

<section anchor="always-use-header-protection"><name>Always Use Header Protection</name>

<t>A message signed with an unobtrusive signature <bcp14>MUST</bcp14> always use <xref target="RFC9788"/>, signing every header field known to the sending MUA at message composition time.</t>

</section>
<section anchor="message-composition"><name>Message Composition</name>

<t>This updates the message composition function found in <xref section="5.1" sectionFormat="of" target="RFC9787"/>, using the same parameters.</t>

<t><list style="symbols">
  <t><spanx style="verb">origbody</spanx>: the traditional unprotected message body as a well-formed MIME tree (possibly just a single MIME leaf part).
As a well-formed MIME tree, <spanx style="verb">origbody</spanx> already has structural header fields present.</t>
  <t><spanx style="verb">origheaders</spanx>: the intended non-structural header fields for the message, represented here as a list of <spanx style="verb">(h,v)</spanx> pairs, where <spanx style="verb">h</spanx> is a header field name and <spanx style="verb">v</spanx> is the associated value.</t>
  <t><spanx style="verb">crypto</spanx>: an indication that the message is to be signed with one or more Unobtrusive Signatures.
This contains a list of one or more secret keys.
Each key will make one signature.</t>
</list></t>

<t>The algorithm returns a MIME object that is ready to be injected into the mail system:</t>

<t><list style="numbers" type="1">
  <t>Create MIME tree <spanx style="verb">inner</spanx> as a copy of <spanx style="verb">origbody</spanx></t>
  <t>Ensure <spanx style="verb">Content-Type</spanx> Header Field of <spanx style="verb">inner</spanx> has parameter <spanx style="verb">hp</spanx> set to <spanx style="verb">"clear"</spanx></t>
  <t>For each header name and value <spanx style="verb">(h,v)</spanx> in <spanx style="verb">origheaders</spanx>:
  <list style="numbers" type="a">
      <t>If <spanx style="verb">h</spanx> is <spanx style="verb">Sig</spanx>, skip that header, otherwise</t>
      <t>Add header <spanx style="verb">h</spanx> to <spanx style="verb">inner</spanx> with value <spanx style="verb">v</spanx></t>
    </list></t>
  <t>Canonicalize <spanx style="verb">inner</spanx> (see <xref target="message-canonicalization"/>)</t>
  <t>Convert <spanx style="verb">inner</spanx> to bytestring <spanx style="verb">innerbytes</spanx></t>
  <t>For each signing key <spanx style="verb">key</spanx> in <spanx style="verb">crypto</spanx>:
  <list style="numbers" type="a">
      <t>The signing system takes <spanx style="verb">innerbytes</spanx> and the signing key <spanx style="verb">key</spanx>, yielding a respective signature payload <spanx style="verb">sig</spanx>.</t>
      <t>Prepend a Header Field named <spanx style="verb">Sig</spanx> to <spanx style="verb">inner</spanx> with two parameters, <spanx style="verb">t</spanx> (set to the literal string <spanx style="verb">p</spanx>) and <spanx style="verb">b</spanx> (set to the base64-encoded value of <spanx style="verb">sig</spanx>).</t>
    </list></t>
  <t>Create new MIME tree <spanx style="verb">output</spanx> with <spanx style="verb">Content-Type</spanx> <spanx style="verb">multipart/mixed</spanx>, with a single subpart, set to <spanx style="verb">inner</spanx></t>
  <t>For each header name and value <spanx style="verb">(h,v)</spanx> in <spanx style="verb">origheaders</spanx>:
  <list style="numbers" type="a">
      <t>Add header <spanx style="verb">h</spanx> to <spanx style="verb">outer</spanx> with value <spanx style="verb">v</spanx></t>
    </list></t>
  <t>Return <spanx style="verb">output</spanx></t>
</list></t>

</section>
<section anchor="do-not-use-unobtrusive-signature-when-encrypting"><name>Do Not Use Unobtrusive Signature When Encrypting</name>

<t>In accordance with <xref section="5.2" sectionFormat="of" target="RFC9787"/>, when sending end-to-end encrypted messages an MUA <bcp14>MUST</bcp14> place end-to-end signatures inside the encrypted data.
This mechanism is therefore not applicable to encrypted messages.</t>

</section>
<section anchor="message-canonicalization"><name>Message Canonicalization</name>

<t>The Protected Part (with all leading <spanx style="verb">Sig</spanx> Header Fields removed) <bcp14>SHOULD</bcp14> be canonicalized following the patterns described in <xref section="3" sectionFormat="of" target="RFC3156"/>:</t>

<t><list style="symbols">
  <t>Content-Encoding is used to make the message 7-bit clean</t>
  <t>End of line trailing whitespace is stripped or encoded to non-whitespace</t>
  <t>If any line begins with the string "From ", either the Quoted-Printable or Base64 MIME encoding <bcp14>MUST</bcp14> be applied, and if Quoted-Printable is used, at least one of the characters in the string "From " <bcp14>MUST</bcp14> be encoded</t>
</list></t>

<t>The canonicalized Protected Part <bcp14>MUST</bcp14> then be line ending normalized as per <xref target="line-ending-normalization"/> before creating the signature.
A signature over a message is more likely to be verifiable if the message is canonicalized into a format robust against MTA modification in transit.</t>

</section>
<section anchor="openpgp-signature-details"><name>OpenPGP Signature Details</name>

<t>The OpenPGP Signature is made over the canonical bytestring, and binary mode (OpenPGP Signature Type 0x00) <bcp14>SHOULD</bcp14> be used.</t>

</section>
</section>
<section anchor="recipient-guidance"><name>Recipient Guidance</name>

<section anchor="detecting-an-unobtrusive-signature"><name>Detecting an Unobtrusive Signature</name>

<t>A receiving MUA detects the presence of an unobtrusive signature on a message by verifying that:</t>

<t><list style="symbols">
  <t>the message <spanx style="verb">Content-Type</spanx> is <spanx style="verb">multipart/mixed</spanx>, and</t>
  <t>there is exactly one top-level subpart (though that subpart itself may be multipart), and</t>
  <t>the <spanx style="verb">Content-Type</spanx> of that top-level subpart has parameter <spanx style="verb">hp="clear"</spanx>, and</t>
  <t>the first header field of the top-level subpart is named <spanx style="verb">Sig</spanx>, and</t>
  <t>the top-level subpart has a <spanx style="verb">From</spanx> header field, and its <spanx style="verb">addr-spec</spanx> matches the <spanx style="verb">addr-spec</spanx> in the message's <spanx style="verb">From</spanx> header field.</t>
</list></t>

<t>This last requirement (matching <spanx style="verb">From</spanx> <spanx style="verb">addr-spec</spanx>s) is an anti-spoofing measure, by analogy with <xref section="4.4" sectionFormat="of" target="RFC9788"/>.</t>

</section>
<section anchor="validating-an-unobtrusive-signature"><name>Validating an Unobtrusive Signature</name>

<t>When validating an unobtrusive signature, the signature data (that is, the value of the <spanx style="verb">b</spanx> field) is converted from Base64 to binary format.
When <spanx style="verb">t=p</spanx>, this decoding yields a binary-format OpenPGP Detached Signature.
The signed object is extracted from the <spanx style="verb">multipart/mixed</spanx> part by selecting every octet that comes after the <spanx style="verb">CRLF</spanx> that terminates the last leading <spanx style="verb">Sig</spanx> header, and before the <spanx style="verb">CRLF</spanx> that immediately precedes the trailing MIME boundary.
The signed object is then normalized as described in <xref target="line-ending-normalization"/>.
The normalized data is then passed to the signature verification routine as a raw bytestream.</t>

</section>
<section anchor="message-rendering-and-the-cryptographic-summary"><name>Message Rendering and the Cryptographic Summary</name>

<t>If the message has at least one Unobtrusive Signature which validates, then the MUA renders the message as though the top-level subpart is the message itself.
The Cryptographic Summary of the message <bcp14>SHOULD</bcp14> indicate that the message is <spanx style="verb">signed-only</spanx>, and that all header fields present in the top-level subpart share that Cryptographic Status.</t>

<section anchor="example-rendering"><name>Example Rendering</name>

<t>For example, consider a message with this structure:</t>

<figure><artwork type="ascii-art"><![CDATA[
A └┬╴multipart/mixed
B  └┬╴multipart/alternative; hp="clear" [Cryptographic Payload]
C   ├─╴text/plain
D   └─╴text/html
]]></artwork></figure>

<t>If at least one Unobtrusive Signature is present as a leading <spanx style="verb">Sig</spanx> header field in <spanx style="verb">B</spanx>, and it validates correctly, the message should be rendered the same way as this message:</t>

<figure><artwork type="ascii-art"><![CDATA[
B └┬╴multipart/alternative
C  ├─╴text/plain
D  └─╴text/html
]]></artwork></figure>

<t>And its Cryptographic Status will be <spanx style="verb">signed-only</spanx>.</t>

</section>
</section>
<section anchor="consistency-with-summary-view-for-tampered-messages"><name>Consistency with Summary View for Tampered Messages</name>

<t>Many MUAs have two different views of a given message:</t>

<t><list style="symbols">
  <t>A summary view, when rendering an overview of the contents of a mailbox, for example showing only <spanx style="verb">From</spanx>, <spanx style="verb">Subject</spanx>, <spanx style="verb">Date</spanx>, and "unread" status information for any given message, and</t>
  <t>A message view, for displaying the message itself, with its header context, cryptographic summary, and full contents.</t>
</list></t>

<t>The user reasonably expects that, for any given message, the information available in the summary view should match the message view.</t>

<t>Some MUAs render the summary view after ingesting the full message, but other MUAs might render the summary view without ever accessing anything other than the Outer Header Section.
If the latter style of MUA gains access to a full message that has a valid unobtrusive signature, it can construct a candidate summary view using the signed header field information.
If the candidate summary view differs from the already displayed summary view, then the Outer Header Section has most likely been tampered with in transit.</t>

<t>The MUA <bcp14>MUST NOT</bcp14> render the message view in such a way that its header information does not match the summary view, as this will lead to user confusion about the message itself.</t>

<t>In such a situation, the MUA has two reasonable choices:</t>

<t><list style="symbols">
  <t>The MUA <bcp14>MAY</bcp14> treat the unobtrusive signature as invalid, and show a message view that aligns with the already displayed summary view by rendering only the Outer Header Section.
Such a message would have a cryptographic summary of <spanx style="verb">unprotected</spanx>.</t>
  <t>The MUA <bcp14>MAY</bcp14> accept the unobtrusive signature (yielding a cryptographic summary of <spanx style="verb">signed-only</spanx>), and update the summary view to use the candidate summary view instead.
Such an updated summary view may surprise a user who is used to the summary view only sustaining minor changes (e.g., from "unread" to "read") upon rendering the message view.</t>
</list></t>

<t>A more complex approach in such a situation would be for the MUA to alert the user that the message may have been tampered with in transit, and allow them to choose to view either form of the message.
This is similar to the approach described in <xref section="6.2.1.1" sectionFormat="of" target="RFC9787"/>.</t>

<t>Note that an MUA that renders the summary view only after evaluating the full message will never encounter this problem, as the summary view will be fully aligned with the message view from the start.</t>

<t>Note also that this concern applies to all forms of signed-only mail with header protection, not just to mail protected with an unobtrusive signature.</t>

<section anchor="unprotected-header-fields-added-in-transit"><name>Unprotected Header Fields Added In Transit</name>

<t>As noted in <xref section="7" sectionFormat="of" target="RFC9788"/>, it's possible that a MUA encounters some Header Fields on the outer message (in the Header Section of <spanx style="verb">A</spanx> in the example above) which could not have been known by the sender.</t>

<t>If any such fields would normally be rendered in some fashion by the MUA on an <spanx style="verb">unsigned</spanx> message, it <bcp14>MAY</bcp14> consider rendering them even on a <spanx style="verb">signed-only</spanx> Unobtrusively Signed message, but it should take care to indicate that they do not share the <spanx style="verb">signed-only</spanx> Cryptographic Status with the rest of the message.</t>

</section>
</section>
<section anchor="signature-failure-handling"><name>Signature Failure Handling</name>

<t>Sometimes a receiving MUA encounters an unobtrusively signed message where all unobtrusive signatures fail to validate.
The receiving MUA <bcp14>MUST NOT</bcp14> present the user with a cryptographic status that is different from a message with no signature at all.
That is, the message's Cryptographic Status <bcp14>SHOULD</bcp14> be <spanx style="verb">unprotected</spanx>.</t>

<t>If a message gets tampered with in such a way that all unobtrusive signatures are broken, the recipient should see the message as though it were a normal unsigned message.</t>

</section>
<section anchor="handling-multiple-signatures"><name>Handling Multiple Signatures</name>

<t>If more than one unobtrusive signature is present in a message, the receiving MUA <bcp14>MUST</bcp14> verify each signature against the known certificates associated with the indicated sender.
As long as one of the signatures validates, the message should be treated as correctly signed, even if all the other signatures are invalid.</t>

<t>Note that when a message is signed by multiple keys, the composer <bcp14>MAY</bcp14> structure the message with each OpenPGP signature packet (see <xref section="5.2" sectionFormat="of" target="OpenPGP"/> in its own <spanx style="verb">Sig: t=p</spanx> header field, or it <bcp14>MAY</bcp14> pack the OpenPGP signature packets together into a single OpenPGP Detached Signature (see <xref section="10.4" sectionFormat="of" target="OpenPGP"/> and place them in a single <spanx style="verb">Sig: t=p</spanx> header field.
The verifying implementation <bcp14>MUST</bcp14> consider all appropriately placed <spanx style="verb">Sig: t=p</spanx> header fields, regardless of how many signature packets are included in each header field.
It <bcp14>MAY</bcp14> coalesce the decoded <spanx style="verb">b=</spanx> data from multiple <spanx style="verb">Sig: t=p</spanx> header fields into a single OpenPGP Detached Signature (by simply concatenating the base64-decoded <spanx style="verb">b</spanx> values) before attempting verification.</t>

<t>Some MIME parsers have a fixed upper bound on the size of any MIME header field.
A composer signing the message with more than one key should consider the size of the OpenPGP signatures when generating the <spanx style="verb">Sig: t=p</spanx> header fields to avoid breaking the message for recipients who use those constrained parsers.
If the total size of the cumulative signature packets are very large, the composer <bcp14>MAY</bcp14> split up the OpenPGP Detached Signature at OpenPGP Signature packet boundaries, and place each disaggregated OpenPGP Detached Signature into a separate header field.</t>

<t>A good rule of thumb is to ensure each <spanx style="verb">Sig: t=p</spanx> header field is no larger than 50 KiB.</t>

</section>
<section anchor="ignore-out-of-place-unobtrusive-signatures"><name>Ignore Out-of-place Unobtrusive Signatures</name>

<t>An unobtrusive signature <spanx style="verb">Sig</spanx> header field <bcp14>MUST NOT</bcp14> be evaluated unless:</t>

<t><list style="symbols">
  <t>it is within the MIME headers of the only subpart of a <spanx style="verb">multipart/mixed</spanx> message, and</t>
  <t>it appears before any non-<spanx style="verb">Sig</spanx> header field</t>
</list></t>

<t>Evaluating a <spanx style="verb">Sig</spanx> header outside of this location might mean that a modified message could still appear to be successfully verified.
For example, an unobtrusively signed message might be included as a sub-part of another multipart message, or be transformed into a non-MIME message with different message headers than the original email.
This could conceivably be used by an attacker to make subtle changes to the meaning of a message without altering the content of the Protected Part.</t>

</section>
</section>
<section anchor="mta-guidance"><name>MTA Guidance</name>

<t>An MTA or any other message relay service that observes a message with Content-Type <spanx style="verb">multipart/mixed</spanx> that is a single part <bcp14>MUST NOT</bcp14> alter the content of this message body in any way, including, but not limited to, changing the content transfer encoding of the body part or any of its encapsulated body parts.
This corresponds to the guidance in <xref section="2.1" sectionFormat="of" target="RFC1847"/> about the first section of <spanx style="verb">multipart/signed</spanx> messages.</t>

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

<t>Based on the principle that "a broken signature is the same as no signature", a receiving MUA <bcp14>MUST NOT</bcp14> display any warnings if an Unobtrusive Signature fails to verify, unless the user has requested debugging output.
This is because if an MITM can modify a message in transit, then they can choose whether or not to also remove the (now invalid) signature.
If the receiving MUA displayed a more severe warning for a broken signature than for a missing one (or vice versa), the MITM could choose to modify the message in such a way that would result in the less-severe warning.
The warning message is thus attacker-controlled.</t>

<t>Otherwise, the security properties are equivalent to those of a multipart/signed message.</t>

</section>
<section anchor="performance-considerations"><name>Performance Considerations</name>

<section anchor="rationale-for-signature-in-mime-part"><name>Rationale for Signature in MIME Part</name>

<t>An alternate design considered for unobtrusive signatures was to simply place the <spanx style="verb">Sig</spanx> header in the Outer Header Section of the message itself, without requiring any additional MIME structure.
This was rejected in favor of the MIME structure described in <xref target="mime-structure"/> for the following reasons:</t>

<t><list style="symbols">
  <t>Unobtrusive signatures always offer Header Protection aligned with <xref target="RFC9788"/>, so the signature needs to be able to cover those Header Fields generated by the sending MUA.
But we know that most received messages contain a mix of Header Fields generated by the sending MUA and Header Fields injected by MTAs that touch the message in transit.</t>
  <t>Placing the signature as a Header Field in the Outer Header Section raises challenges in identifying which Header Fields are covered by the signature.</t>
  <t>An MTA is more likely to modify, reorder, or enforce limits on Header Fields in the message's Outer Header Section than it is to corrupt Header Fields in the subpart.</t>
  <t>Any DKIM signature that includes the body of the message will cover the end-to-end signature if it is part of the message body.
If the end-to-end signature was in the message's Outer Header Section it would not normally be signed by DKIM, and would be vulnerable to inadvertent breakage by naive MTAs.</t>
</list></t>

</section>
<section anchor="no-one-pass-message-generation"><name>No One-pass Message Generation</name>

<t>Because the signature is included first in the message, it is not possible to generate the message in a single pass.</t>

<t>A sending MUA that needs to generate a signed outbound message in a single pass should use another end-to-end signing mechanism, like <spanx style="verb">multipart/signed</spanx>.</t>

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

<section anchor="sig-header"><name>Register the Sig Header Field</name>

<t>IANA is requested to update the Permanent Message Header Field Names registry to add the following entry:</t>

<texttable title="Permanent Message Header Field Names">
      <ttcol align='left'>Header Field Name</ttcol>
      <ttcol align='left'>Protocol</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Trace</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Sig</c>
      <c>MIME</c>
      <c>informational</c>
      <c>no</c>
      <c>This document</c>
</texttable>

<t>The registration template called for in <xref section="4.2.1" sectionFormat="of" target="RFC3864"/> is:</t>

<texttable title="Permanent Message Header Field Registration Template for Sig">
      <ttcol align='left'>Template Field</ttcol>
      <ttcol align='left'>Value</ttcol>
      <c>Header field name</c>
      <c><spanx style="verb">Sig</spanx></c>
      <c>Applicable protocol</c>
      <c>MIME</c>
      <c>Status</c>
      <c>informational</c>
      <c>Author/Change controller</c>
      <c>IETF</c>
      <c>Specification document(s)</c>
      <c>This document</c>
      <c>Related information</c>
      <c>RFC9580 describes OpenPGP detached signatures</c>
</texttable>

</section>
<section anchor="sig-header-parameters"><name>Create Registry for Sig Message Header Parameters</name>

<t>IANA is requested to create a registry titled "Sig Message Header Parameters" in the "Message Headers" group of registries, with the following initial contents:</t>

<texttable title="Sig Message Header Parameters">
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c><spanx style="verb">t</spanx></c>
      <c>Type of Signature (see <xref target="t-param"/>)</c>
      <c>This document</c>
      <c><spanx style="verb">b</spanx></c>
      <c>Base64-encoded Signature Content (whitespace permitted and ignored)</c>
      <c>This document</c>
</texttable>

<t>(( TODO: do we need a registry for this? Are we expecting any new parameters? ))</t>

</section>
<section anchor="t-param"><name>Create Registry For t Parameter</name>

<t>IANA is requested to create a registry titled "Sig Message Header Signature Types" in the "Message Headers" group of registries, with the following initial contents:</t>

<texttable title="Sig Message Header Signature Types">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c><spanx style="verb">p</spanx></c>
      <c>An OpenPGP Detached Signature</c>
      <c>This document</c>
</texttable>

</section>
<section anchor="update-multipartmixed-to-refer-here"><name>Update multipart/mixed to Refer Here</name>

<t>IANA is requested to update the "multipart/mixed" entry in the Media Types registry, to add a reference to this document.</t>

</section>
<section anchor="registration-policies"><name>Registration Policies</name>

<t>IANA is requested to set all registries within this document to use the SPECIFICATION <bcp14>REQUIRED</bcp14> registration policy, see <xref section="4.6" sectionFormat="of" target="RFC8126"/>.
This policy means that review and approval by a designated expert is required, and that the IDs and their meanings must be documented in a permanent and readily available public specification, in sufficient detail so that interoperability between independent implementations is possible.</t>

</section>
</section>


  </middle>

  <back>


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

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



<reference anchor="RFC9787">
  <front>
    <title>Guidance on End-to-End Email Security</title>
    <author fullname="D. K. Gillmor" initials="D. K." role="editor" surname="Gillmor"/>
    <author fullname="A. Melnikov" initials="A." role="editor" surname="Melnikov"/>
    <author fullname="B. Hoeneisen" initials="B." role="editor" surname="Hoeneisen"/>
    <date month="August" year="2025"/>
    <abstract>
      <t>End-to-end cryptographic protections for email messages can provide useful security. However, the standards for providing cryptographic protection are extremely flexible. That flexibility can trap users and cause surprising failures. This document offers guidance for Mail User Agent (MUA) implementers to help mitigate those risks and to make end-to-end email simple and secure for the end user. It provides a useful set of vocabulary as well as recommendations to avoid common failures. It also identifies a number of currently unsolved usability and interoperability problems.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9787"/>
  <seriesInfo name="DOI" value="10.17487/RFC9787"/>
</reference>
<reference anchor="RFC9788">
  <front>
    <title>Header Protection for Cryptographically Protected Email</title>
    <author fullname="D. K. Gillmor" initials="D. K." surname="Gillmor"/>
    <author fullname="B. Hoeneisen" initials="B." surname="Hoeneisen"/>
    <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
    <date month="August" year="2025"/>
    <abstract>
      <t>S/MIME version 3.1 introduced a mechanism to provide end-to-end cryptographic protection of email message headers. However, few implementations generate messages using this mechanism, and several legacy implementations have revealed rendering or security issues when handling such a message.</t>
      <t>This document updates the S/MIME specification (RFC 8551) to offer a different mechanism that provides the same cryptographic protections but with fewer downsides when handled by legacy clients. Furthermore, it offers more explicit usability, privacy, and security guidance for clients when generating or handling email messages with cryptographic protection of message headers.</t>
      <t>The Header Protection scheme defined here is also applicable to messages with PGP/MIME (Pretty Good Privacy with MIME) cryptographic protections.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9788"/>
  <seriesInfo name="DOI" value="10.17487/RFC9788"/>
</reference>
<reference anchor="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>
<reference anchor="OpenPGP">
  <front>
    <title>OpenPGP</title>
    <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
    <author fullname="D. Huigens" initials="D." surname="Huigens"/>
    <author fullname="J. Winter" initials="J." surname="Winter"/>
    <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
    <date month="July" year="2024"/>
    <abstract>
      <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
      <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
      <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9580"/>
  <seriesInfo name="DOI" value="10.17487/RFC9580"/>
</reference>
<reference anchor="RFC3156">
  <front>
    <title>MIME Security with OpenPGP</title>
    <author fullname="M. Elkins" initials="M." surname="Elkins"/>
    <author fullname="D. Del Torto" initials="D." surname="Del Torto"/>
    <author fullname="R. Levien" initials="R." surname="Levien"/>
    <author fullname="T. Roessler" initials="T." surname="Roessler"/>
    <date month="August" year="2001"/>
    <abstract>
      <t>This document describes how the OpenPGP Message Format can be used to provide privacy and authentication using the Multipurpose Internet Mail Extensions (MIME) security content types described in RFC 1847. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3156"/>
  <seriesInfo name="DOI" value="10.17487/RFC3156"/>
</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="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</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>



    </references>

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



<reference anchor="RFC1847">
  <front>
    <title>Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted</title>
    <author fullname="J. Galvin" initials="J." surname="Galvin"/>
    <author fullname="S. Murphy" initials="S." surname="Murphy"/>
    <author fullname="S. Crocker" initials="S." surname="Crocker"/>
    <author fullname="N. Freed" initials="N." surname="Freed"/>
    <date month="October" year="1995"/>
    <abstract>
      <t>This document defines a framework within which security services may be applied to MIME body parts. [STANDARDS-TRACK] This memo defines a new Simple Mail Transfer Protocol (SMTP) [1] reply code, 521, which one may use to indicate that an Internet host does not accept incoming mail. This memo defines an Experimental Protocol for the Internet community. This memo defines an extension to the SMTP service whereby an interrupted SMTP transaction can be restarted at a later time without having to repeat all of the commands and message content sent prior to the interruption. This memo defines an Experimental Protocol for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="1847"/>
  <seriesInfo name="DOI" value="10.17487/RFC1847"/>
</reference>

<reference anchor="I-D.bre-openpgp-samples">
   <front>
      <title>OpenPGP Example Keys and Certificates</title>
      <author fullname="Bjarni Rúnar Einarsson" initials="B. R." surname="Einarsson">
         <organization>Mailpile ehf</organization>
      </author>
      <author fullname="&quot;juga&quot;" initials="" surname="&quot;juga&quot;">
         <organization>Independent</organization>
      </author>
      <author fullname="Daniel Kahn Gillmor" initials="D. K." surname="Gillmor">
         <organization>American Civil Liberties Union</organization>
      </author>
      <date day="8" month="May" year="2025"/>
      <abstract>
	 <t>   The OpenPGP development community benefits from sharing samples of
   signed or encrypted data.  This document facilitates such
   collaboration by defining a small set of OpenPGP certificates and
   keys for use when generating such samples.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-bre-openpgp-samples-03"/>
   
</reference>
<reference anchor="CMS">
  <front>
    <title>Cryptographic Message Syntax (CMS)</title>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <date month="September" year="2009"/>
    <abstract>
      <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="70"/>
  <seriesInfo name="RFC" value="5652"/>
  <seriesInfo name="DOI" value="10.17487/RFC5652"/>
</reference>
<reference anchor="DKIM">
  <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="RFC3864">
  <front>
    <title>Registration Procedures for Message Header Fields</title>
    <author fullname="G. Klyne" initials="G." surname="Klyne"/>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <author fullname="J. Mogul" initials="J." surname="Mogul"/>
    <date month="September" year="2004"/>
    <abstract>
      <t>This specification defines registration procedures for the message header fields used by Internet mail, HTTP, Netnews and other applications. 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="90"/>
  <seriesInfo name="RFC" value="3864"/>
  <seriesInfo name="DOI" value="10.17487/RFC3864"/>
</reference>



    </references>

</references>


<?line 449?>

<section anchor="test-vectors"><name>Test Vectors</name>

<t>These test vectors show different examples of unobtrusive signed messages.</t>

<section anchor="from-alice-to-bob"><name>From Alice to Bob</name>

<t>The message below is a common <spanx style="verb">multipart/alternative</spanx> email, signed with an unobtrusive signature.
The signature should be verifiable using the "Alice" v4 certificate found in <xref section="2.1.1" sectionFormat="of" target="I-D.bre-openpgp-samples"/>.</t>

<figure><sourcecode type="message/rfc822" name="uosig-0.eml"><![CDATA[
Content-Type: multipart/mixed; boundary="5d6"
MIME-Version: 1.0
From: Alice Lovelace <alice@openpgp.example>
To: Bob Babbage <bob@openpgp.example>
Subject: This is a Test
Date: Thu, 01 May 2025 22:16:15 -0400
Message-ID: <uosig-0@openpgp.example>

--5d6
Sig: t=p; b=wnUEABYKAB0WIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCaBQq
 7wAKCRDyMVUMT0fjjr+3AP4nGDsaptk9I6EePoXftyevyH6luB2aSAzrD8o
 xQVNWDQD/VQ/s85C3v6SAxtFDcBsn2H32Hd/yW5BsDx62gmpL7Aw=
MIME-Version: 1.0
From: Alice Lovelace <alice@openpgp.example>
To: Bob Babbage <bob@openpgp.example>
Subject: This is a Test
Date: Thu, 01 May 2025 22:16:15 -0400
Message-ID: <uosig-0@openpgp.example>
Content-Type: multipart/alternative; boundary="913"; hp="clear"

--913
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

Hi Bob,

This is Alice.  I need you to:

- read this message
- reply to it
- delete it promptly.

Thanks,
Alice
--913
Content-Type: text/html; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

<html><head></head><body><p>Hi Bob,</p>
<p>This is Alice.  I need you to:</p>
<ul>
<li>read this message</li>
<li>reply to it</li>
<li>delete it promptly.</li>
</ul>
<p>Thanks,
Alice</p></body></html>
--913--

--5d6--
]]></sourcecode></figure>

</section>
<section anchor="from-david-to-alice"><name>From David to Alice</name>

<t>The message below is a simple <spanx style="verb">text/plain</spanx> email, signed with an unobtrusive signature.
The signature should be verifiable using the "David" certificate found in <xref section="5.1" sectionFormat="of" target="I-D.bre-openpgp-samples"/>.</t>

<figure><sourcecode type="message/rfc822" name="uosig-1.eml"><![CDATA[
Content-Type: multipart/mixed; boundary="a21"
MIME-Version: 1.0
From: David Deluxe <david@openpgp.example>
To: Alice Lovelace <alice@openpgp.example>
Subject: Checking in
Date: Fri, 02 May 2025 13:01:07 -0400
Message-ID: <uosig-1@openpgp.example>

--a21
Sig: t=p; b=wpIGABsIAAAAKSIhBkGZ2eqmaCp41aU09iv3YiKlTk3rx4Xb
 5qbFs0WGAm/iBQJoFPpTAAAACgkQQZnZ6qZoKnhDIRA9tgkt50eA1ckzilm
 9KndQt3t4iYlab66bvtP+kP9D7zaNzvC1vE+B6jPY1gUBOQMyF5CK3yC/xZ
 Ol2ww+x8Y3PZ7OpZ1dPUlshDL5gA7ZAw==
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
From: David Deluxe <david@openpgp.example>
To: Alice Lovelace <alice@openpgp.example>
Subject: Checking in
Date: Fri, 02 May 2025 13:01:07 -0400
Message-ID: <uosig-1@openpgp.example>
Content-Type: text/plain; charset="us-ascii"; hp="clear"

Alice!

So good to see you earlier.

I hope you will have a chance to check out
our new website: https://openpgp.example/
and tell me what you think.

All the best,

David

--a21--
]]></sourcecode></figure>

</section>
<section anchor="from-alice-to-david"><name>From Alice to David</name>

<t>The message below is a <spanx style="verb">multipart/alternative</spanx> email with an image attached, signed with an unobtrusive signature.
The signature should be verifiable using the "Alice" v4 certificate found in <xref section="2.1.1" sectionFormat="of" target="I-D.bre-openpgp-samples"/>.</t>

<figure><sourcecode type="message/rfc822" name="uosig-2.eml"><![CDATA[
Content-Type: multipart/mixed; boundary="3e4"
MIME-Version: 1.0
From: Alice Lovelace <alice@openpgp.example>
To: David Deluxe <david@openpgp.example>
Subject: Re: Checking in
Date: Fri, 02 May 2025 17:03:35 -0400
Message-ID: <uosig-2@openpgp.example>
In-Reply-To: <uosig-1@openpgp.example>
References: <uosig-1@openpgp.example>

--3e4
Sig: t=p; b=wnUEABYKAB0WIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCaBUz
 JwAKCRDyMVUMT0fjjmnRAQDKnIfyPyvE2lVlVOQl+H99TK+VFCvBaTZyTAV
 xnKgJ1gEAjVDQ3idx4Z4wSN+pLhWS1LdpVbWdH7mW58gS0GBz5AM=
MIME-Version: 1.0
From: Alice Lovelace <alice@openpgp.example>
To: David Deluxe <david@openpgp.example>
Subject: Re: Checking in
Date: Fri, 02 May 2025 17:03:35 -0400
Message-ID: <uosig-2@openpgp.example>
In-Reply-To: <uosig-1@openpgp.example>
References: <uosig-1@openpgp.example>
Content-Type: multipart/mixed; boundary="d64"; hp="clear"

--d64
Content-Type: multipart/alternative; boundary="f4f"
MIME-Version: 1.0

--f4f
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

Hi David,

I think the attached logo might look good
on the website.

Thanks,
Alice

--f4f
Content-Type: text/html; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

<html><head></head><body><p>Hi David,</p>
<p>I think the attached logo might look good
on the website.</p>
<p>Thanks,
Alice</p></body></html>
--f4f--

--d64
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="logo.png"

iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAcElEQVR42uVTOxbA
MAgS739nO3TpRw20dqpbfARQEjOywiwYnCtkDKnbcLk66sqlT+zt9cidkE+6KwkZ
sgrzfcqVMpL2jo0447gYDpeArk+OnJHkIhAfTPRicihAf5YJrw7vjv0ZWRWM/uli
vdPf1QZ2kDD9xppd8wAAAABJRU5ErkJggg==

--d64--

--3e4--
]]></sourcecode></figure>

</section>
<section anchor="alice-to-david-followup"><name>Alice to David Followup</name>

<t>The message below is a <spanx style="verb">multipart/alternative</spanx> email that is a self-reply from about a week later.
In the meantime, Alice has gotten a new OpenPGP certificate, so the message is signed with both her old key and her new key.
This message's signatures should be verifiable respectively using either the "Alice" v4 certificate found in <xref section="2.1.1" sectionFormat="of" target="I-D.bre-openpgp-samples"/> or the "Alice" v6 certificate found in <xref section="2.2.1" sectionFormat="of" target="I-D.bre-openpgp-samples"/>.</t>

<figure><sourcecode type="message/rfc822" name="uosig-3.eml"><![CDATA[
Content-Type: multipart/mixed; boundary="0cd"
MIME-Version: 1.0
From: Alice Lovelace <alice@openpgp.example>
To: David Deluxe <david@openpgp.example>
Subject: Re: Checking in
Date: Thu, 08 May 2025 18:41:05 -0400
Message-ID: <uosig-3@openpgp.example>
In-Reply-To: <uosig-2@openpgp.example>
References: <uosig-2@openpgp.example>

--0cd
Sig: t=p; b=wnUEABYKAB0WIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCaB0z
 AQAKCRDyMVUMT0fjjtCJAQCLvEeDH/grJ9szJTEPumRz0lvQm1f3GHNuTnS
 W9+SV/wD/YpPK4oMy2Cbrzo9JagpO4uxXkbCWQIHI9HFlwkz8Hg0=
Sig: t=p; b=wpIGABsIAAAAKSIhBuRqR5oGQqpTb/U1uxxDl7NeiBI/TgFl
 Z9LvdROjBBHyBQJoHTMBAAAACgkQ5GpHmgZCqlOwFhA99dXXagDzmkcTALm
 p1ZYQ0IyBvaqxRgRwNHw7VdYBSZ66F1vAjY44pdc8ynahPGHexB4AdfXFeb
 K1GcqiREQgwF74RoCegJ6ZZkRfWCr3Cw==
MIME-Version: 1.0
From: Alice Lovelace <alice@openpgp.example>
To: David Deluxe <david@openpgp.example>
Subject: Re: Checking in
Date: Thu, 08 May 2025 18:41:05 -0400
Message-ID: <uosig-3@openpgp.example>
In-Reply-To: <uosig-2@openpgp.example>
References: <uosig-2@openpgp.example>
Content-Type: multipart/alternative; boundary="97a"; hp="clear"

--97a
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

Hey David,

Also, please spell my name correctly in the
website's acknowledgements section.

Kind regards,
Alice

--97a
Content-Type: text/html; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

<html><head></head><body><p>Hey David,</p>
<p>Also, please spell my name correctly in the
website's acknowledgements section.</p>
<p>Kind regards,
Alice</p></body></html>
--97a--

--0cd--
]]></sourcecode></figure>

</section>
</section>
<section anchor="document-history"><name>Document History</name>

<t>Note to RFC Editor: this section should be removed before publication.</t>

<section anchor="changes-between-draft-gallagher-email-unobtrusive-signatures-01-and-draft-gallagher-email-unobtrusive-signatures-02"><name>Changes Between draft-gallagher-email-unobtrusive-signatures-01 and draft-gallagher-email-unobtrusive-signatures-02</name>

<t><list style="symbols">
  <t>Align IANA registration section with requests from IANA.</t>
  <t>Update references for drafts which are now RFCs.</t>
  <t>Permit multiple OpenPGP signature packets in each <spanx style="verb">Sig</spanx> header, aligning with OpenPGP "detached signature".</t>
  <t>Clarify signing process.</t>
  <t>Guidance for possible discrepancy between "summary" and "message" views if headers are not aligned.</t>
</list></t>

</section>
<section anchor="changes-between-draft-gallagher-email-unobtrusive-signatures-00-and-draft-gallagher-email-unobtrusive-signatures-01"><name>Changes Between draft-gallagher-email-unobtrusive-signatures-00 and draft-gallagher-email-unobtrusive-signatures-01</name>

<t><list style="symbols">
  <t>Made explicit that <spanx style="verb">Sig</spanx> <bcp14>MUST NOT</bcp14> appear in a non-leading position.</t>
  <t>Expanded design rationale section.</t>
  <t>Clarified use of Quoted-Printable encoding.</t>
  <t>Terminology and reference cleanup.</t>
</list></t>

</section>
<section anchor="changes-between-draft-gallagher-email-invisible-signatures-00-and-draft-gallagher-email-unobtrusive-signatures-00"><name>Changes Between draft-gallagher-email-invisible-signatures-00 and draft-gallagher-email-unobtrusive-signatures-00</name>

<t><list style="symbols">
  <t>Updated sender canonicalization guidance from <bcp14>MUST</bcp14> to <bcp14>SHOULD</bcp14>.</t>
  <t>Registries changed to SPECIFICATION <bcp14>REQUIRED</bcp14>.</t>
  <t>Improved test vectors.</t>
  <t>Renamed to "Unobtrusive Signatures".</t>
  <t>Explicitly allow folding whitespace.</t>
  <t>Document existing convention re attachment filenames.</t>
  <t>Fixed references.</t>
  <t>Various clarifications to wording.</t>
</list></t>

</section>
</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The authors would like to thank the attendees of the 9th OpenPGP Email Summit for feedback and suggestions.
Additionally, Anarcat and Barry Leiba offered useful feedback on the draft.</t>

</section>


  </back>

<!-- ##markdown-source:
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
AAA=

-->

</rfc>

