<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.36 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wussler-openpgp-forwarding-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="OpenPGP Forwarding">Automatic Forwarding for ECDH Curve25519 OpenPGP messages</title>
    <seriesInfo name="Internet-Draft" value="draft-wussler-openpgp-forwarding-00"/>
    <author fullname="Aron Wussler">
      <organization>Proton AG</organization>
      <address>
        <postal>
          <country>Switzerland</country>
        </postal>
        <email>aron@wussler.it</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>Security</area>
    <workgroup>Open Specification for Pretty Good Privacy</workgroup>
    <keyword>Forwarding</keyword>
    <keyword>OpenPGP</keyword>
    <abstract>
      <?line 56?>

<t>An OpenPGP user may want to request their email provider to automatically forward
some or all of the messages they receive to a third party.
Given that messages are encrypted, this requires transforming them into
ciphertexts decryptable by the intended forwarded parties, while maintaining
confidentiality and authentication.
This can be achieved using Proxy transformations on the Curve25519 elliptic
curve field with minimal changes to the OpenPGP protocol, in particular no
change is required on the sender side.
In this document we implement the forwarding scheme described in <xref target="FORWARDING"/>.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wussler-openpgp-forwarding/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Open Specification for Pretty Good Privacy Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/wussler/draft-forwarding"/>.</t>
    </note>
  </front>
  <middle>
    <?line 68?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>An OpenPGP user might be interested in forwarding their email to
another user without delegating decryption or interacting beyond
protocol setup.
In this document we outline the changes necessary to the OpenPGP protocol to safely allow:</t>
      <ul spacing="normal">
        <li>Recipients to delegate trust to third parties to read their messages;</li>
        <li>MTAs to act as cryptographic Proxies and transform select messages;</li>
        <li>Forwardees to read the transformed email.</li>
      </ul>
      <t>This is achieved by diverting the ECDH key exchange of messages
encrypted using Curve25519, as described in <xref target="FORWARDING"/>.
It requires a proxy to multiply the ephemeral ECDH value by a known factor on
the elliptic curve field, and the forwardee to alter the Key Derivation Function
(KDF) when computing the Key Encryption Key (KEK) in a Public Key Encrypted
Session Key Packet (PKESK).</t>
      <t>Security is provided as long as there is no collusion involving the Proxy,
i.e. we consider that the MTA that takes care of the forwarding is a semi-trusted
proxy that is not able to decrypt.</t>
    </section>
    <section anchor="conventions-and-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?>

</section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t><strong>Sender</strong>: The person who originally sends the email. They are no active part in
this protocol as this forwarding scheme is transparent to them and they are
unaware such transformation is being done.</t>
      <t><strong>Forwarder</strong>: The intended recipient of the email, as specified by the sender.
They delegate the trust by setting up the protocol.</t>
      <t><strong>Forwardee</strong>: The person who receives the forwarded email.</t>
      <t><strong>Forwardee subkey</strong>: An OpenPGP encryption subkey generated by the forwarder for
the forwardee that allows them to read the transformed messages.</t>
      <t><strong>Proxy</strong>: An OpenPGP-aware Mail Transfer Agent (MTA) with the task of forwarding
(some or all) emails intended for the forwarder to the forwardee.</t>
      <t><strong>Proxy parameter</strong>: A value that enables the proxy to transform a message from
being decryptable with one key, to being decryptable with another key.</t>
    </section>
    <section anchor="description-of-the-protocol">
      <name>Description of the protocol</name>
      <t>In this section we'll provide an illustration of the overall protocol.</t>
      <ul empty="true">
        <li>
          <t>NON-NORMATIVE EXPLANATION</t>
          <t>The scenario we address is the following: Bob (the recipient) wants to allow Charles (the forwardee) to decrypt email that was originally encrypted to Bob’s public key without having access to Bob’s private key or any online interaction. Naturally, MTAs (the Proxies) should not have the ability to read the contents of such messages. To achieve this, the protocol requires to be set up: First, Bob generates two  secret elements, a regular secret key, and a proxy factor <tt>K</tt>; second, Bob securely transfers the key to Charles and the proxy factor to the trusted MTA.
  With the proxy factor, the MTA gains the ability to transform any PGP message encrypted to Bob’s public key into another PGP message that can be decrypted with the newly generated private key, which is now held by Charles. At the same time, the MTA cannot decrypt the message, nor transform it to another public key. Upon participating in ECDH key exchanges, proxies need to store one random field element and two OpenPGP Key IDs per forwarding, and compute a single scalar multiplication on the elliptic curve per forwarded ciphertext.
  In the following illustration, we show an example with a sender (Alice), a recipient (Bob), multiple direct forwardees (Charles and Daniel), and one indirect forwardee (Frank).
  The proxy transformations are done by the two MTAs using the proxy transformation parameters <tt>K_BC</tt>, <tt>K_BD</tt>, and <tt>K_DF</tt>. This transforms the Public Key Encrypted Session Key Packet <tt>P_B</tt> into <tt>P_C</tt>, <tt>P_D</tt>, and <tt>P_F</tt>, while the Symmetrically Encrypted Data <tt>c</tt> is not transformed.</t>
        </li>
      </ul>
      <artwork><![CDATA[
                           MTA 1
┌─────────┐          ┌──────────────┐           ┌─────────┐
│         │ (P_B, c) │              │ (P_B, c)  │         │
│  Alice  ├──────────┼─┬────────────┼──────────►│   Bob   │
│         │          │ │            │           │         │
└─────────┘          │ │            │           └─────────┘
                     │ │            │
                     │ │  ┌──────┐  │           ┌─────────┐
                     │ │  │      │  │ (P_C, c)  │         │
                     │ ├─►│ K_BC ├──┼──────────►│ Charles │
                     │ │  │      │  │           │         │
                     │ │  └──────┘  │           └─────────┘
                     │ │            │
                     │ │  ┌──────┐  │           ┌─────────┐
                     │ │  │      │  │ (P_D, c)  │         │
                     │ └─►│ K_BD ├──┼────────┬─►│ Daniel  │
                     │    │      │  │        │  │         │
                     │    └──────┘  │        │  └─────────┘
                     │              │        │
                     └──────────────┘        │
                                             │
                       ┌─────────────────────┘
                       │
                       │
                     ┌─┼────────────┐
                     │ │            │
                     │ │  ┌──────┐  │           ┌─────────┐
                     │ │  │      │  │ (P_F, c)  │         │
                     │ └─►│ K_DF ├──┼──────────►│  Frank  │
                     │    │      │  │           │         │
                     │    └──────┘  │           └─────────┘
                     │              │
                     └──────────────┘
                           MTA 2
]]></artwork>
      <t>In this document we define the protocol for a single instance, but the same
procedure can be applied to multiple recipients independently.
Each instance <bcp14>MUST</bcp14> have an independent instantiation, generating fresh
keys and computing separate proxy transformation parameters.</t>
      <section anchor="flag-forwarding">
        <name>Key Flag 0x40</name>
        <t>The key flag 0x40 is added to the first octet of the key flags (Table 9 of <xref target="I-D.ietf-openpgp-crypto-refresh"/>).
It indicates that the key may be used to decrypt forwarded communications.</t>
        <t>This is intended to prevent implementations unaware of forwarding keys from
using this key for direct encryption, and thus generating unreadable messages.</t>
        <t>An implementation <bcp14>SHOULD NOT</bcp14> export public subkeys with key flag 0x40.
A public key directory <bcp14>SHOULD NOT</bcp14> accept subkeys with key flag 0x40.</t>
        <t>Keys with this flag <bcp14>MUST</bcp14> have the forwarding KDF parameters version 0xFF
defined in <xref target="generating-forwarding-key"/>.</t>
        <t>Subkeys flagged as 0x40 <bcp14>MUST NOT</bcp14> be unflagged or reused as the private key
material is generated from a third party and therefore is not secret.</t>
      </section>
    </section>
    <section anchor="setting-up-a-forwarding-instance">
      <name>Setting up a forwarding instance</name>
      <t>This section describes how to compute a proxy transformation parameter and a forwardee subkey
for a v4 OpenPGP certificate with a Curve25519 encryption-only subkey.</t>
      <t>The subkeys used for forwarding <bcp14>MUST</bcp14> be ECDH keys (algorithm ID 18, as defined in Section 9.1 of
<xref target="I-D.ietf-openpgp-crypto-refresh"/>) with only the 0x04 (encrypt communications)
and/or 0x08 (encrypt storage) key flags set (as defined in Section 5.2.3.29 of
<xref target="I-D.ietf-openpgp-crypto-refresh"/>).
The original key <bcp14>MUST</bcp14> contain at least one subkey suitable for forwarding.
An implementation <bcp14>SHOULD</bcp14> generate a proxy parameter for all the valid subkeys
suitable for forwarding.</t>
      <section anchor="generating-forwarding-key">
        <name>Generating the forwardee key</name>
        <t>The implementation <bcp14>MUST</bcp14> generate a fresh OpenPGP certificate with only Curve25519
encryption subkeys. There <bcp14>MUST</bcp14> be the same amount of subkeys as the number of
forwarder subkeys being transformed.
This key <bcp14>SHOULD</bcp14> have the identity of the forwardee in the user ID.</t>
        <t>The forwardee subkeys <bcp14>MUST</bcp14> have the following Key Flags,
defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.29, in the subkey binding signature:</t>
        <ul spacing="normal">
          <li>0x10 - The private component of this key may have been split by a secret-sharing mechanism.</li>
          <li>0x40 - This key may be used for forwarded communications.</li>
        </ul>
        <t>Furthermore the flag 0x10 <bcp14>MAY</bcp14> be added to the existing recipient encryption subkey, if the
implementation desires to make the forwarding known to other parties.</t>
        <t>The forwardee encryption subkey <bcp14>MUST</bcp14> contain the following variable-length field
containing KDF parameters, which is formatted as follows, differing from
<xref target="I-D.ietf-openpgp-crypto-refresh"/>, Section 11.5:</t>
        <ul spacing="normal">
          <li>A one-octet size of the following fields; values 0 and 0xFF are reserved for future extensions,</li>
          <li>A one-octet value 0xFF, indicating a fingerprint replacement.</li>
          <li>A one-octet hash function ID used with a KDF.</li>
          <li>A one-octet algorithm ID for the symmetric algorithm used to wrap the
  symmetric key used for the message encryption; see <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 11.5
  for details.</li>
          <li>A 20-octet version 4 key fingerprint to be used in the KDF.</li>
        </ul>
        <t>The forwardee key <bcp14>MUST</bcp14> be communicated securely to the forwardee.</t>
      </section>
      <section anchor="computing-the-proxy-parameter">
        <name>Computing the proxy parameter</name>
        <t>Given the the recipient and forwardee encryption subkeys, the recipient's
implementation <bcp14>MUST</bcp14> compute the proxy transformation parameter as specified.</t>
        <artwork><![CDATA[
//   Implements ComputeProxyPameter( dB, dC );
//   Input:
//   dB - the recipient's private key integer
//   dC - the forwardee's private key integer
//   n - the size of the field of Curve25519

k = dB/dC mod n
return k
]]></artwork>
        <t>The value n is defined in <xref target="RFC7748"/> as:</t>
        <artwork><![CDATA[
2^252 + 0x14def9dea2f79cd65812631a5cf5d3ed
]]></artwork>
        <t>Converted to hex:</t>
        <artwork><![CDATA[
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
14 de f9 de a2 f7 9c d6 58 12 63 1a 5c f5 d3 ed
]]></artwork>
        <t>The value k is then encoded as little-endian in a 32-byte octet string, and
referred as proxy transformation parameter.</t>
        <t>The proxy transformation parameter <bcp14>MUST</bcp14> be communicated securely to the MTA
acting as proxy.
The proxy <bcp14>MUST</bcp14> safely store it in a way that is not accessible by other parties.
The proxy <bcp14>MUST</bcp14> delete the parameter when the forwarding is revoked.</t>
      </section>
    </section>
    <section anchor="forwarding-messages">
      <name>Forwarding messages</name>
      <t>When forwarding a message, the proxy <bcp14>MUST</bcp14> parse the PKESK and check whether
the key ID embedded in the PKESK, as specified in <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.1.1,
matches the recipient's subkey key ID designated for forwarding.
If the value differs, the proxy <bcp14>SHOULD NOT</bcp14> transform the message.
If the key ID is set to version 0 for "anonymous recipient", see <xref target="I-D.ietf-openpgp-crypto-refresh"/>
Section 5.1.8, the proxy <bcp14>MAY</bcp14> transform all PKESKs in a message that it is
supposed to forward. In this case it <bcp14>SHOULD</bcp14> leave all key IDs unaltered to 0.</t>
      <t>The proxy <bcp14>MUST</bcp14> then check that the ephemeral public key does not belong to a small subgroup
of the curve.
This is done by parsing the MPI of an EC point as specified in <xref target="I-D.ietf-openpgp-crypto-refresh"/>
Section 5.1.5, multiplying by the integer 0x08.
If this multiplication returns 0 the proxy <bcp14>MUST</bcp14> abort the forwarding and it <bcp14>MAY</bcp14>
notify the sender, for instance by bouncing the message.
If this multiplication returns any non-zero value the proxy can proceed with
the transformation.</t>
      <artwork><![CDATA[
//   Implements TransformMessage( eB, k );
//   Input:
//   eB - the ECDH ephemeral public key decoded from the PKESK
//   k - the proxy transformation parameter retrieved from storage

if 0x08 * eB == 0 then abort

eC = k * eB
return eC
]]></artwork>
      <t>The proxy <bcp14>MUST</bcp14> change the value of a non-null fingerprint in the PKESK
to the forwardee's key fingerprint.
The proxy <bcp14>MUST</bcp14> change the value of the EC ephemeral public key in the algorithm
specific data of the PKESK to the the encoding of eC, using the encoding
described in <xref target="I-D.ietf-openpgp-crypto-refresh"/>, Section 9.2.1.</t>
    </section>
    <section anchor="decrypting-forwarded-messages">
      <name>Decrypting forwarded messages</name>
      <t>Upon receiving the forwardee key, the forwardee <bcp14>MAY</bcp14> re-generate a fresh primary key
and attach the received forwardee subkey.
This enhances security by preventing the forwardee from storing a signature-capable key
of which the forwarder knows the secret material.
An implementation <bcp14>SHOULD</bcp14> keep the forwardee key separate from the generic keyring,
and associated to a specific forwarding instance instead.</t>
      <t>Upon receiving a message encrypted to a subkey flagged as 0x40, the implementation
<bcp14>MUST</bcp14> replace the fingerprint in the ECDH KDF with the fingerprint specified in
the subkey KDF parameters.</t>
      <t>The implementation <bcp14>SHOULD</bcp14> inform the user that the message was originally sent
to a different recipient and forwarded to them.
If the implementation does so it <bcp14>MAY</bcp14> ignore the intended recipient fingerprint
signature subpacket, as described in <xref target="I-D.ietf-openpgp-crypto-refresh"/>,
Section 5.2.3.36.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="collusion-between-proxy-and-forwardee">
        <name>Collusion between Proxy and Forwardee</name>
        <t>It is important to note that any forwardee that colludes with the proxy
can recover the forwarder's encryption subkey's secret key material.
This allows the colluding parties to decrypt all messages encrypted using
that subkey, even ones that weren't forwarded (for example because they
were encrypted and received before the forwarding started, or because
only a subset of received messages were forwarded).</t>
        <t>To minimize this risk, the forwarder may want to generate a key specifically
for the duration of the forwarding.</t>
        <t>Given that the signing-capable primary key is independently generated, forging
signatures is out of scope of this attack.</t>
        <t>A complete security analysis can be found in <xref target="FORWARDING"/>, Section 4 and
a simulation-based security proof in appendix A.</t>
      </section>
      <section anchor="key-flags">
        <name>Key Flags</name>
        <t>Suitable subkeys for proxy forwarding are limited to flags 0x04 (encrypt
communications) and 0x08 (encrypt storage) as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.29 to limit the scope of the
attack in case of compromise.</t>
        <t>Forwardee encryption subkeys have flags 0x40 and 0x10 only, in order to prevent
forwarding-capable implementation from exporting the public key and stop
other implementations from encrypting messages directly to this key.</t>
      </section>
      <section anchor="proxy-transformation-factors-management">
        <name>Proxy transformation factors management</name>
        <t>When a forwarding is stopped or revoked, by deleting the stored proxy factor,
the proxy ensures that a future compromise does not retroactively endanger
older messages.</t>
      </section>
      <section anchor="proxy-transformation">
        <name>Proxy transformation</name>
        <t>By checking that 8P is not 0 and aborting otherwise, where P is the ephemeral
public key included in the PKESK before performing the transformation,
the proxy ensures no information about the proxy parameter is leaked to an
adversary that is able to submit messages and observe the applied transformation.</t>
        <t>A proxy <bcp14>SHOULD</bcp14> also perform the multiplication on the elliptic curve with the
proxy parameter in constant time.
This prevents an adversary from timing the transformation and derive information
about the proxy parameter.
Alternatively, a proxy <bcp14>MAY</bcp14> decide to pad all the forwarded messages to a
constant delay, thus preventing such an attack from an external submitter.</t>
      </section>
      <section anchor="message-forwarding-selection">
        <name>Message forwarding selection</name>
        <t>The criteria to choose which message to forward the messages is left up to the
implementation, and may be based on reception time, sender, or any policy
that can be determined from the message metadata.
Filtering message has a security implication in case of compromise: the
messages that were not forwarded may be decrypted by an adversary that can
compute the recipient's key.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>The 0x40 value is to be added to the OpenPGP IANA Key Flags Extensions registry,
representing "This key may be used for forwarded communication".
The flag is defined in <xref target="flag-forwarding"/>.</t>
      <t>A new registry "ECDH KDF type" is to be created the OpenPGP IANA registry:</t>
      <ul spacing="normal">
        <li>0x01: "Native fingerprint KDF"</li>
        <li>0xFF: "Replaced fingerprint KDF"</li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="I-D.ietf-openpgp-crypto-refresh">
          <front>
            <title>OpenPGP</title>
            <author fullname="Paul Wouters" initials="P." surname="Wouters">
              <organization>Aiven</organization>
            </author>
            <author fullname="Daniel Huigens" initials="D." surname="Huigens">
              <organization>Proton AG</organization>
            </author>
            <author fullname="Justus Winter" initials="J." surname="Winter">
              <organization>Sequoia-PGP</organization>
            </author>
            <author fullname="Niibe Yutaka" initials="N." surname="Yutaka">
              <organization>FSIJ</organization>
            </author>
            <date day="21" month="June" year="2023"/>
            <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.

   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.

   This document obsoletes: RFC 4880 (OpenPGP), RFC 5581 (Camellia in
   OpenPGP) and RFC 6637 (Elliptic Curves in OpenPGP).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-crypto-refresh-10"/>
        </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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="FORWARDING" target="http://dx.doi.org/10.1007/978-981-16-6890-6_12">
          <front>
            <title>OpenPGP Email Forwarding Via Diverted Elliptic Curve Diffie-Hellman Key Exchanges</title>
            <author initials="F." surname="Vial-Prado" fullname="Francisco Vial-Prado">
              <organization/>
            </author>
            <author initials="A." surname="Wussler" fullname="Aron Wussler">
              <organization/>
            </author>
            <date year="2021" month="March"/>
          </front>
        </reference>
        <reference anchor="EUROCRYPT" target="http://dx.doi.org/10.1007/BFb0054122">
          <front>
            <title>Divertible Protocols and Atomic Proxy Cryptography</title>
            <author initials="M." surname="Blaze" fullname="Matt Blaze">
              <organization/>
            </author>
            <author initials="G." surname="Bleumer" fullname="Gerrit Bleumer">
              <organization/>
            </author>
            <author initials="M." surname="Strauss" fullname="Martin Strauss">
              <organization/>
            </author>
            <date year="1998"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 409?>

<section anchor="test-vectors">
      <name>Test vectors</name>
      <t>The following test vectors are independent instances, and do not share the key
material.</t>
      <section anchor="proxy-parameter">
        <name>Proxy parameter</name>
        <t>Recipient secret integer, clamped and big endian, OpenPGP wire format</t>
        <artwork><![CDATA[
59 89 21 63 65 05 3d cf 9e 35 a0 4b 2a 1f c1 9b
83 32 84 26 be 6b b7 d0 a2 ae 78 10 5e 2e 31 88
]]></artwork>
        <t>Forwardee secret integer, clamped and big endian, OpenPGP wire format</t>
        <artwork><![CDATA[
68 4d a6 22 5b cd 44 d8 80 16 8f c5 be c7 d2 f7
46 21 7f 01 4c 80 19 00 5f 14 4c c1 48 f1 6a 00
]]></artwork>
        <t>Derived proxy parameter, little-endian</t>
        <artwork><![CDATA[
e8 97 86 98 7c 3a 3e c7 61 a6 79 bc 37 2c d1 1a
42 5e da 72 bd 52 65 d7 8a d0 f5 f3 2e e6 4f 02
]]></artwork>
      </section>
      <section anchor="message-transformation">
        <name>Message transformation</name>
        <t>Proxy parameter, little-endian</t>
        <artwork><![CDATA[
83 c5 7c be 64 5a 13 24 77 af 55 d5 02 02 81 30
58 60 20 16 08 e8 1a 1d e4 3f f8 3f 24 5f b3 02
]]></artwork>
        <t>Ephemeral point P, 0x40 prefixed, OpenPGP wire format</t>
        <artwork><![CDATA[
40 aa ea 7b 3b b9 2f 5f 54 5d 02 3c cb 15 b5 0f 84
ba 1b dd 53 be 7f 5c fa dc fb 01 06 85 9b f7 7e
]]></artwork>
        <t>Transformed point kP, 0x40 prefixed, OpenPGP wire format</t>
        <artwork><![CDATA[
40 ec 31 bb 93 7d 7e f0 8c 45 1d 51 6b e1 d7 97 61
79 aa 71 71 ee a5 98 37 06 61 d1 15 2b 85 00 5a
]]></artwork>
        <t>A point of order 4 on the twist of Curve25519 to test small subgroup point
detection, 0x40 prefixed, OpenPGP wire format</t>
        <artwork><![CDATA[
40 ec ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 7f
]]></artwork>
      </section>
      <section anchor="end-to-end-tests">
        <name>End-to-end tests</name>
        <t>Armored recipient key</t>
        <artwork><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

xVgEZAdtGBYJKwYBBAHaRw8BAQdAGzrOpvCFCxQ6hmpP52fBtbYmqkPM+TF9oBei
x9QWcnEAAQDa54PERHLvDqIMo0f03+mJXMTR3Dwq+qi5LTaflQFDGxEdzRNib2Ig
PGJvYkBwcm90b24ubWU+wooEExYIADwFAmQHbRgJkCLL+xMJ+Hy4FiEEm77zV6Zb
syLVIzOyIsv7Ewn4fLgCGwMCHgECGQECCwcCFQgCFgACIgEAAAnFAPwPoXgScgPr
KQFzu1ltPuHodEaDTtb+/wRQ1oAbuSdDgQD7B82NJgyEZInC/4Bwuc+ysFgaxW2W
gtypuW5vZm44FAzHXQRkB20YEgorBgEEAZdVAQUBAQdAeUTOhlO2RBUGH6B7127u
a82Mmjv62/GKZMpbNFJgqAcDAQoJAAD/Sd14Xkjfy1l8r0vQ5Rm+jBG4EXh2G8XC
PZgMz5RLa6gQ4MJ4BBgWCAAqBQJkB20YCZAiy/sTCfh8uBYhBJu+81emW7Mi1SMz
siLL+xMJ+Hy4AhsMAAAKagEA4Knj6S6nG24nuXfqkkytPlFTHwzurjv3+qqXwWL6
3RgA/Rvy/NcpCizSOL3tLLznwSag7/m6JVy9g6unU2mZ5QoI
=un5O
-----END PGP PRIVATE KEY BLOCK-----
]]></artwork>
        <t>Armored forwardee key</t>
        <artwork><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

xVgEZAdtGBYJKwYBBAHaRw8BAQdAcNgHyRGEaqGmzEqEwCobfUkyrJnY8faBvsf9
R2c5ZzYAAP9bFL4nPBdo04ei0C2IAh5RXOpmuejGC3GAIn/UmL5cYQ+XzRtjaGFy
bGVzIDxjaGFybGVzQHByb3Rvbi5tZT7CigQTFggAPAUCZAdtGAmQFXJtmBzDhdcW
IQRl2gNflypl1XjRUV8Vcm2YHMOF1wIbAwIeAQIZAQILBwIVCAIWAAIiAQAAJKYA
/2qY16Ozyo5erNz51UrKViEoWbEpwY3XaFVNzrw+b54YAQC7zXkf/t5ieylvjmA/
LJz3/qgH5GxZRYAH9NTpWyW1AsdxBGQHbRgSCisGAQQBl1UBBQEBB0CxmxoJsHTW
TiETWh47ot+kwNA1hCk1IYB9WwKxkXYyIBf/CgmKXzV1ODP/mRmtiBYVV+VQk5MF
EAAA/1NW8D8nMc2ky140sPhQrwkeR7rVLKP2fe5n4BEtAnVQEB3CeAQYFggAKgUC
ZAdtGAmQFXJtmBzDhdcWIQRl2gNflypl1XjRUV8Vcm2YHMOF1wIbUAAAl/8A/iIS
zWBsBR8VnoOVfEE+VQk6YAi7cTSjcMjfsIez9FYtAQDKo9aCMhUohYyqvhZjn8aS
3t9mIZPc+zRJtCHzQYmhDg==
=lESj
-----END PGP PRIVATE KEY BLOCK-----
]]></artwork>
        <t>Proxy parameter K</t>
        <artwork><![CDATA[
04 b6 57 04 5f c9 c0 75 9c 5f d1 1d 8c a7 5a 2b
1a a1 01 c9 c8 96 49 0b ce c1 00 f9 41 e9 7e 0e
]]></artwork>
        <t>Plaintext</t>
        <artwork><![CDATA[
Message for Bob
]]></artwork>
        <t>Encrypted message</t>
        <artwork><![CDATA[
-----BEGIN PGP MESSAGE-----

wV4DFVflUJOTBRASAQdAdvFLPtXcvwSkEwbwmnjOrL6eZLh5ysnVpbPlgZbZwjgw
yGZuVVMAK/ypFfebDf4D/rlEw3cysv213m8aoK8nAUO8xQX3XQq3Sg+EGm0BNV8E
0kABEPyCWARoo5klT1rHPEhelnz8+RQXiOIX3G685XCWdCmaV+tzW082D0xGXSlC
7lM8r1DumNnO8srssko2qIja
=uOPV
-----END PGP MESSAGE-----
]]></artwork>
        <t>Transformed message</t>
        <artwork><![CDATA[
-----BEGIN PGP MESSAGE-----

wV4DB27Wn97eACkSAQdA62TlMU2QoGmf5iBLnIm4dlFRkLIg+6MbaatghwxK+Ccw
yGZuVVMAK/ypFfebDf4D/rlEw3cysv213m8aoK8nAUO8xQX3XQq3Sg+EGm0BNV8E
0kABEPyCWARoo5klT1rHPEhelnz8+RQXiOIX3G685XCWdCmaV+tzW082D0xGXSlC
7lM8r1DumNnO8srssko2qIja
=pVRa
-----END PGP MESSAGE-----
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>Daniel Huigens (Proton AG)</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>A heartfelt thank you to Francisco Vial-Prado for the work on designing and
proving the forwarding scheme.
We also thank Lara Bruseghini, Ilya Chesnokov, and Eduardo Conde Pena for their
collaboration and help in applying the scheme to OpenPGP.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
ul7GhvRN0x00acuRqiDFP62g3HKZRNtnlgtOsXR8TWfERG5/P8bN0hFuK2wg
sjKVOqvVWbGA5YOjCstXWAlIN2R1zkoVZuRZ2WRFgxWAwwusbtKcWomViqxW
ZsUjpMGRycwqs/NYkzA4q9awuFHhrAhLFFitlnZZ/mZ4j2qsDMOPWLHIKiaz
bFYuM7vGanlWOGI1ALNCfAEAYYWE5pSP8IDVIcsXWNmioXUsq1SGWFKBJ3C0
co0NAQkG1lo0+tGD2D+IEb+frZjItFaN1ausdsTqNVa1WMlgJdr+qIBQVuvM
hIdVVrSYXWAFQwBURPzYBqsWmWmzShFRb8MqBqJxWGHDEmKPH7EyAF3MaOB1
B6L3ARiBYIAWgA6pVWYVoCdsUGbVKjOGrAJ7A+WL+KdWYCVRbKrU2FGeFQmt
4APDMQswzWa8zEpDNqzh37AE4NAsEYztJF9G6eLevlBAoDaGzgt6YW8SFR1V
g3HAh8lKwE3AkENcuQLr2whWCWhksgKQFgAdAuvRNBMAMpkNCCzhyYDAWP0C
HMLfJhI7DxxRAa7FUlkVu8VSd6YFkJMfg5JbyNKmyeolVrVhTTbMs5rFyhVE
TaWAssALSMo6cgBNAxaAw1UL+AckwKggpwBHAHDAI8gUFVY0EVBkSYP8G4IN
rIpw1svKh4nA/Yuy1U1S5ahuspl+sYSGNs8SRvTHTjkcfvyP+OWvH5gAlCKW
bnv2AQRJHLsA4QigRnVqY0lnZ1Ab0gYH+F+jfdK9ogunvX73Xh+02Xn7iTUu
rpvn9F4MfbkftZ91OzppPJ2dL58aDf3U6C9rDf3G1k9eg+vZotlpvtwcjaez
XqU4bETm0/TrpHe5N+jU/QZ3xCL1mwfLa+v6TcuolHvt/unFovW1e+nnh/nS
3vTs8XLQL7WWX/e+OpWLgTF0bzqtk5e2/dq/csxid0SL9E7OFk+TxtKa1vNm
sTw3H+72lr7fbr88dfXWsqNPb07N/uhs0ry42Hu5PNs7XZU7Trs9rVZf74+e
hboNVxf33dfrVTdcVNtLrzy8GDVPlpfN01G7eXLTbjaXVrNzM2p2RnqzOwKI
da+j95Y9/3F0a416omJ+ftN5nRfcqDc/9e220RpE5t7hsn9T8HVzfmu3Rjet
aqNWvDobrdrPXa95WG4s59beKuyMjJeH4gMtMgLrO3+oLJ6n5XJHfz19vOlP
GsX8U3vkB41Ru60/2/f6zR0hmt8NrsfudbHfuDs5PWpUC8XqXPzoV614Of2y
OCoenpw/X87Mq87Z6KtutfQb/0zXW4e3dqH8OPkyXBXcWpBf3FT6070vjZNy
+3FcPKk9NgVin0eXr5X+hXE0uilfnpUbjdFDU9e/Nm7OCKLms+6sDsNBcziu
zRtP48bZfK9W4NOH6qVTuL18FYh1Eqzr4/ASMHduAALL596Xo9sj76RY9uaP
w6+TySrquZ3B6fJ1HnxZlPa+fn1cPlwc0SKl/kg/7C9Wh1fWrOm83l5flKKL
i1dveWuMqofTo7P7VX10NPfuitPnyo3fpUm/zr3KdcLW7avWu0ytxCKTlv4P
FQvranS66p+0ja8n09f21/ay6ZvDu8kqOPOeakOjsQiHdVqkX7Qqz69Put6r
m52Lstdr2H6+zJ18s9jVx5X+4/VsOudfTpqlE73rHd5NLyrW083e42s/+mKc
dMTvvpkn96/d1gs9wM83p42VWeovTKcSPQ+qTWd0M+iMRnpPv2sSxCAnncez
aNp4bY1tSzBj96bvFkdXQ3c1cwuPX/p397V7a1p8Or287hSWXVNfdrl+032G
/y8ay+59U+8+6HrX0W90/ez8SRflr+LXp8LR9evKr/Dg6rVSuAvO7522/2C2
Z8un0qPRub96DZZ7ZqX8pN80q6+Pk+FhVHH4yl18meqHtMjF2Wvp8OvotHLy
8tx/0k/rV4PZw+qhoIf2S+OEJPy26YQn+s1Nwy3cNRo37UYj33yZvvhn4elA
HGfgtAcP43LVj/Ymyyu9MG5OCt2nRv1hef4yeXxadRvDw+Zoev74el+4bvUO
p/1p5DSe7u/37m8mlcsOLYLCf1i4eqi1at6lVZysCuV82BvfBMsJ71eD+4vz
XnHIK1650Y507x7gKDUBSU+I7PPRnZCtbRj/HrLvYGP3sKYfOt1bWuT1oRE2
+rV7z7++H7bbCOTRk+5UrcHtF+vyyzDs8td65ykC9Xru143m5fjOHz+tvi7G
z1+8miEWKUX1afe5Z+299s+i5unrzdN03Br9+quQIbd9++XjMrTmJ7FzIRT5
MjOPWKWKH8DjsOrMyrNqBTtr4CtaZxsNvFFFr6koFDI4QkYB/QscDe4fuGng
T4IzytGTBCs+rLMyGPs6Ogh58Dt6Lv6yHsTWYs9UMI23iMF1ihPWMmzcKtuX
7dtb/aSdkujlfbnVuR+6d2fXg0Zfv0VJthedi170aC2Wt5P20lxOvS/XwcUR
f74YV1ahdz8ze+7o2XxefhktaZHVyfP8/v5SPz9czTpDbraG5dZh4LaXJWsV
LoqF0rRm+Oc1T7+7rr3cPJYeb76Wbkd77ZNpvnF1X2sLNE70Rru3aj7ofd+v
TNxBITjttcfc9V5re/2bR+e6+1g6OapVHpsPdnNq3O9Frw/5WrGVfzl5vHUF
41Xdy1pQaM2nV951LQzCcOIXv3a/GFJlXvfuN8mdRcpg80dxfgCVjWL1watX
ud6cECqPigP38q54459MhxWnceF1p2Xb7fQnF93R3tGlaRjRaLx8Od9rWv9v
oXJ23ze+h0r66bIocMw5Rbi/H4u2cG7/ujM03JDvfIM4SVxvPZ07I+6FbDf+
eddPOF+3sAbrcntEzQ3bl9DZmBtBNOQuZsTwwt3Kn6NTu+0XTuMOUvzNXiY7
kqnoQZUE+mWebBE5+f2qnPbARa5QbHMBmoA1gnnIR2PHc/ZZ110ZrDnmoedP
/IUIztv2HBbxERU2Zz3uGQoEJ9Cw2oXZ2STXB0SayWqF6HERuX36+awo/g2Q
nPa/AegS4bmGWQAA

-->

</rfc>
