<?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-autocrypt-openpgp-v2-cert-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Autocrypt v2 Certificates and TSKs">Autocrypt v2 OpenPGP Certificates and Transferable Secret Keys</title>

    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization abbrev="ACLU">American Civil Liberties Union</organization>
      <address>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>
    <author initials="H." surname="Krekel" fullname="Holger Krekel">
      <organization>merlinux gmbh</organization>
      <address>
        <email>holger@merlinux.eu</email>
      </address>
    </author>
    <author initials="F." surname="Ziegelmayer" fullname="Friedel Ziegelmayer">
      <organization>n0 Inc.</organization>
      <address>
        <email>me@dignifiedquire.com</email>
      </address>
    </author>

    <date year="2026" month="January" day="30"/>

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

    <abstract>


<?line 70?>

<t>This document describes the "Autocrypt v2 Certificate",
a standard structure for an OpenPGP certificate for Internet messaging.
It offers defense against store-now-decrypt-later attacks from quantum computers
through post-quantum hybrid cryptography.
It also enables reliable deletion ("Forward Secrecy") of received messages
even when adversaries capture encrypted messages in transit
and later compromise the user's message archive and secret keys.
The design uses deterministically ratcheted rotating encryption subkeys
with predictable expiration combined with coordinated secret key material destruction.
This document also describes the structure, use, and maintenance of
the OpenPGP Transferable Secret Key that corresponds with the Autocrypt v2 Certificate.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://autocrypt2.codeberg.page/autocrypt-v2-cert/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-autocrypt-openpgp-v2-cert/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OpenPGP 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://codeberg.org/autocrypt2/autocrypt-v2-cert/"/>.</t>
    </note>


  </front>

  <middle>


<?line 84?>

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

<t>An OpenPGP certificate can be structured in a bewildering variety of ways.
The "Autocrypt v2 Certificate" is a modern OpenPGP structure
that aims toward robustness, cryptographic resilience, and straightforward deployment in the Internet messaging context.</t>

<t>An OpenPGP implementation that produces and can handle certificates and secret keys
structured in this way can provide the user with reasonable protection
against a variety of plausible attacks,
while slotting cleanly into existing mechanisms for
end-to-end cryptographically protected email and other messaging systems.</t>

<t>This mechanism also enables an archiving messenger to support
robust deletion of a received message in a way that the deleted message will not be recoverable,
even by an adversary who can capture messages in transit,
and later compromises the user's message archive and secret keys.</t>

<section anchor="requirements-language"><name>Requirements Language</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><list style="symbols">
  <t>"OpenPGP certificate" or just "certificate" refers to an OpenPGP Transferable Public Key (see <xref section="10.1" sectionFormat="of" target="RFC9580"/>).
This specification distinguishes between outgoing certificates
as distributed by the keyholder, with a fixed structure and size,
and incoming certificates as received and stored by a peer.
This specification does not prescribe any particular mechanism for
how certificates are transferred between parties.</t>
  <t>"Transferable Secret Key" or just "TSK" refers to an OpenPGP Transferable Secret Key (see <xref section="10.2" sectionFormat="of" target="RFC9580"/>).</t>
  <t>"Component key" refers to a single cryptographic object found within an OpenPGP certificate.
A certificate's primary key is a "component key", and any subkey in the certificate is also a "component key".</t>
  <t>"Keyholder" is the party that has legitimate access to the secret key material corresponding to the component keys in a certificate.
The keyholder can sign messages that can be verified with the certificate, decrypt messages that were encrypted to the certificate, and update the certificate itself over time.</t>
  <t>"User Messaging Agent" or UMA refers to a program used to compose, send, receive, and render messages.
This term is similar to "Mail User Agent" (MUA),
but the variation in naming emphasizes that
Autocrypt v2 certificates do not prescribe a specific transport mechanism
nor do they prescribe a particular message content format.
A Keyholder may have one or more UMAs
that share access to the same secret key material,
messaging inbox,
and other account details.</t>
  <t>"Peer" means a party who communicates with the keyholder via messages, as well as potentially with other peers.
The peer does not have access to the keyholder's asymmetric secret key material,
but typically has access to a copy of each message exchanged between the peer and keyholder.</t>
  <t>"Reliable Deletion" refers to the property that enables a keyholder
to render a message unrecoverable after deletion,
even if an attacker has archived all messages in transit
and subsequently obtains the keyholder's secret key material and message archive.
Reliable deletion therefore requires the destruction of both
secret key material and message cleartext.
This property is commonly referred to as "Forward Secrecy";
however, this specification uses the term "Reliable Deletion"
to emphasize the keyholder's ability to permanently delete messages.</t>
</list></t>

</section>
<section anchor="goals"><name>Goals</name>

<t>A certificate following this specification has the following goals:</t>

<t><list style="symbols">
  <t>Post-quantum confidentiality.
It should defend against a store-now-decrypt-later attack from a cryptographically relevant quantum computer.</t>
  <t>Size matters.
When network conditions are constrained by limited bandwidth, high latency, or intermittent connectivity,
there often is a heightened need for encryption with reliably deletable messages.
To preserve availability under such conditions, the size of cryptographic material should be minimized
and it should be possible to include transmission of a few dozen certificates in a single message
without impairing common messaging infrastructure.</t>
  <t>Computational resources matter.
It should be possible to promptly encrypt a single message to
up to a few dozen of these certificates with low-powered devices.
The same hardware should be able to quickly and cheaply verify a signature from one of these certificates.
And with access to the corresponding secret keys,
it should be inexpensive to decrypt a message encrypted to one, or to sign a message with one.</t>
  <t>Reliable deletion.
The keyholder should be able to robustly and permanently delete
an encrypted message received some time in the past,
rendering it unrecoverable even to
a powerful attacker in the future (see <xref target="deletable-threat-model"/>).</t>
  <t>No network synchronization needed.
The keyholder should be able to encrypt and decrypt messages with local key material only,
without requiring network synchronization between their own devices or with peers.
To the extent that a keyholder has multiple UMAs of their own,
each UMA should be able to operate independently with no ongoing network synchronization between them
beyond the initial configuration.</t>
  <t>Backward compatibility.
It must be possible for a keyholder with an Autocrypt v1 key
to sign a message that is encrypted to an Autocrypt v2 certificate, and vice versa.
It must also be possible to encrypt a message to a mixed group of Autocrypt v1 and v2 certificates
(though such a message may not meet the "Reliable deletion" goal).</t>
  <t>Drop-in OpenPGP replacement for existing peers.
The keyholder might need to update
their OpenPGP implementation, UMA(s), and regular workflow
to use the secret key material to meet these goals successfully.
But a peer whose UMA supports Autocrypt v1.1 already
only needs to update their OpenPGP implementation in order to interoperate.</t>
</list></t>

</section>
<section anchor="non-goals"><name>Non-Goals</name>

<t>This specification does not attempt to accommodate all possible scenarios
that might occur with OpenPGP, email, or other messaging systems.
The following concerns are explicitly not in-scope for this specification:</t>

<t><list style="symbols">
  <t>No support for legacy OpenPGP clients.
The keyholder needs to use an up-to-date OpenPGP implementation, and expects their peers to do the same.
There is no attempt at backward compatibility for a peer with a legacy OpenPGP implementation.</t>
  <t>No in-cert human-readable identifiers.
There is no attempt to store a “real name" or other human-readable identity information in the certificate.
If human-readable identity information is to be associated with the certificate,
it is expected to be supplied elsewhere,
such as with a local petname system, or some external cryptographic bindings.</t>
  <t>No in-cert transport-layer addressing.
There is no attempt to bind transport-layer routing information (e.g., email addresses) to the certificate.
Information about how to get an encrypted message to the keyholder is presumed
to be transmitted via some other channel, such as the <spanx style="verb">Autocrypt</spanx> header field.</t>
  <t>No defense against quantum impersonation.
While the certificate is designed to defend against store-now-decrypt-later attacks,
it does not defend against an adversary with a cryptographically relevant quantum computer
that breaks the signing key and updates the certificate
in order to compromise future messages encrypted to the certificate.
Such an attacker must expose themselves to the peer at least
(putting the attacker at risk due to visibility),
and these attacks cannot take place retroactively.</t>
  <t>No transitioning from old certs.
There is no specific support for transitioning older or alternative OpenPGP certificate formats
to the structure defined in this specification.
Such a migration path may be defined in future specifications,
but this document is limited to new adopters going forward.</t>
  <t>No certificate discovery and no refresh.
This specification does not define a mechanism
to request a refreshed certificate from a peer.
Reliable message deletion depends on timely updates of each correspondent's certificate,
but imposing a particular mechanism
is unlikely to accommodate the constraints of diverse messaging implementations.
That said, this specification does not preclude
the use of discovery or refresh mechanisms.</t>
  <t>No coordinated deletion of messages.
This specification addresses unilateral deletability,
protecting against a future attacker who compromises the keyholder's UMA or secret key storage.
Messages are typically stored in multiple locations,
across peers, devices, and UMAs.
Guaranteeing deletion of all copies of a message,
including through negotiated “disappearing messages” mechanisms,
is outside the scope of this draft.</t>
  <t>No post-compromise security.
Some messaging schemes attempt to defend against
an attacker who has compromised the user's secret key material
at some point in the past,
typically by regularly mixing new entropy into the secret key material
and coordinating those updates across the user's shared devices.
This specification does not defend against such an attacker.
In the case of past key compromise, the user may need to move to an entirely new certificate.</t>
</list></t>

</section>
</section>
<section anchor="certificate-structure"><name>Certificate Structure</name>

<t>An Autocrypt v2 certificate is composed of a specific sequence of version 6 OpenPGP packets.
The precise requirements for these packets including algorithm IDs, key flags,
and binding signatures are detailed in <xref target="packet-composition"/>.</t>

<figure title="Autocrypt v2 Certificate Structure"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="464" viewBox="0 0 464 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 8,32 L 8,144" fill="none" stroke="black"/>
<path d="M 456,48 L 456,144" fill="none" stroke="black"/>
<path d="M 8,32 L 440,32" fill="none" stroke="black"/>
<path d="M 8,64 L 456,64" fill="none" stroke="black"/>
<path d="M 24,160 L 440,160" fill="none" stroke="black"/>
<path d="M 440,32 C 448.83064,32 456,39.16936 456,48" fill="none" stroke="black"/>
<path d="M 24,160 C 15.16936,160 8,152.83064 8,144" fill="none" stroke="black"/>
<path d="M 440,160 C 448.83064,160 456,152.83064 456,144" fill="none" stroke="black"/>
<g class="text">
<text x="28" y="52">A.</text>
<text x="72" y="52">Primary</text>
<text x="120" y="52">Key</text>
<text x="176" y="52">(Ed25519)</text>
<text x="52" y="84">B.</text>
<text x="92" y="84">Direct</text>
<text x="136" y="84">key</text>
<text x="168" y="84">sig</text>
<text x="232" y="84">(cert+sign,</text>
<text x="292" y="84">no</text>
<text x="336" y="84">expire)</text>
<text x="28" y="100">C.</text>
<text x="76" y="100">Fallback</text>
<text x="140" y="100">Subkey</text>
<text x="248" y="100">(ML-KEM-768+X25519)</text>
<text x="52" y="116">D.</text>
<text x="92" y="116">Subkey</text>
<text x="152" y="116">binding</text>
<text x="200" y="116">sig</text>
<text x="256" y="116">(encrypt,</text>
<text x="308" y="116">no</text>
<text x="352" y="116">expire)</text>
<text x="28" y="132">E.</text>
<text x="76" y="132">Rotating</text>
<text x="140" y="132">Subkey</text>
<text x="248" y="132">(ML-KEM-768+X25519)</text>
<text x="52" y="148">F.</text>
<text x="92" y="148">Subkey</text>
<text x="152" y="148">binding</text>
<text x="200" y="148">sig</text>
<text x="256" y="148">(encrypt,</text>
<text x="328" y="148">expires</text>
<text x="372" y="148">in</text>
<text x="416" y="148">max_rd)</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
.------------------------------------------------------.
| A. Primary Key (Ed25519)                              |
+-------------------------------------------------------+
|    B. Direct key sig (cert+sign, no expire)           |
| C. Fallback Subkey (ML-KEM-768+X25519)                |
|    D. Subkey binding sig (encrypt, no expire)         |
| E. Rotating Subkey (ML-KEM-768+X25519)                |
|    F. Subkey binding sig (encrypt, expires in max_rd) |
 '-----------------------------------------------------'

]]></artwork></artset></figure>

<section anchor="encryption-subkey-rotation"><name>Encryption subkey rotation</name>

<t>The expiring encryption subkey is rotated on a regular schedule.
The window of subkey validity (from creation and binding to expiration) is known as <spanx style="verb">max_rd</spanx>.
When the current subkey has only <spanx style="verb">min_rd</spanx> time left until expiration,
the keyholder adds a new rotating subkey.
A rotating subkey <spanx style="verb">N+1</spanx> is created exactly at <spanx style="verb">min_rd</spanx> away
from the end of the validity window of rotating subkey <spanx style="verb">N</spanx>.
By convention, <spanx style="verb">max_rd</spanx> is 10 days (864000 seconds), and <spanx style="verb">min_rd</spanx> is 5 days (43200 seconds).
See <xref target="determining-minmaxrd"/> for the formal definition and concrete guidance about <spanx style="verb">min_rd</spanx> and <spanx style="verb">max_rd</spanx>.</t>

<t>In order for the keyholder to use the same TSK across multiple UMAs without explicit network coordination,
the values of <spanx style="verb">min_rd</spanx> and <spanx style="verb">max_rd</spanx> <bcp14>MUST</bcp14> be known to the keyholder's UMAs.
See <xref target="custom-ratcheting-schedules"/> for more information.</t>

<t>This arrangement means the validity window of each subsequent rotating subkey overlaps with
the validity window of the prior rotating subkey.
See <xref target="subkey-validity-windows"/> for more discussion about temporal layout of subkey validity windows.</t>

</section>
<section anchor="packet-composition"><name>Packet Composition</name>

<t>An outbound certificate consists of the following six packets:</t>

<t><list style="symbols">
  <t>A. "Primary" Public Key Packet (packet type ID 6), version 6, public key algorithm Ed25519 (algorithm ID 27), creation time T</t>
  <t>B. Direct Key Signature (packet type ID 2), version 6, signature type 0x1f, hashed subpackets include:  <list style="symbols">
      <t>signature creation time (probably T)</t>
      <t>key flags: certify, sign</t>
      <t>issuer fingerprint (fingerprint of A)</t>
      <t>features: SEIPDv2</t>
      <t>preferred AEAD ciphersuites: AES-256+OCB ## TBD: do we need this?</t>
      <t>no expiration subpacket</t>
    </list></t>
  <t>C. "Fallback" Public Subkey Packet (packet type 14), version 6, public key algorithm ML-KEM-768+X25519 (algorithm ID 35) (see <xref section="4.2" sectionFormat="of" target="I-D.ietf-openpgp-pqc-14"/>), creation time T</t>
  <t>D. Subkey binding signature (packet type ID 2), version 6, signature type 0x18, hashed subpackets include:  <list style="symbols">
      <t>signature creation time (probably matching time in B)</t>
      <t>key flags: encrypt to storage, encrypt to comms</t>
      <t>issuer fingerprint (fingerprint of A)</t>
      <t>no expiration subpacket</t>
    </list></t>
  <t>E. "Rotating" Public Subkey Packet (packet type 14), version 6, public key algorithm ML-KEM-768+X25519 (algorithm ID 35) (see <xref section="4.2" sectionFormat="of" target="I-D.ietf-openpgp-pqc-14"/>), creation time T or later</t>
  <t>F. Subkey binding signature (packet type ID 2), version 6, signature type 0x18, hashed subpackets:  <list style="symbols">
      <t>signature creation time (same as creation time of E)</t>
      <t>key expiration time: <spanx style="verb">max_rd</spanx> (by convention, 10 days = 864000 seconds)</t>
      <t>key flags: encrypt to comms</t>
      <t>issuer fingerprint (fingerprint of A)</t>
    </list></t>
</list></t>

</section>
<section anchor="certificate-size"><name>Certificate Size</name>

<t>An outbound certificate is 2938 octets in binary form.</t>

<t>A certificate for a peer should be merged into the locally cached certificate
which may thus contain multiple rotating subkeys and grow accordingly.</t>

</section>
<section anchor="openpgp-format"><name>Use of OpenPGP format</name>

<t>OpenPGP has two different packet framing formats:
the "OpenPGP format" (<xref section="4.2.1" sectionFormat="of" target="RFC9580"/>) and
the "Legacy format" (<xref section="4.2.2" sectionFormat="of" target="RFC9580"/>).
Autocrypt v2 certificates and TSKs use only the OpenPGP format.</t>

<t>This is particularly relevant for the deterministic ratcheting step described in <xref target="ac2-ratchet"/>
because that step needs a canonical octet-string representation of several OpenPGP packets.</t>

</section>
</section>
<section anchor="identifying-an-autocrypt-v2-transferable-secret-key"><name>Identifying an Autocrypt v2 Transferable Secret Key</name>

<t>Peers interacting with an Autocrypt v2 certificate do not need to identify it as
an Autocrypt v2 certificate at all.
They simply need to apply common OpenPGP semantics to the certificate.</t>

<t>However, all UMAs operated by the keyholder
need to identify an Autocrypt v2 Transferable Secret Key (TSK)
in order to perform aligned key ratcheting <xref target="ac2-ratchet"/>
and achieve reliable deletion for the keyholder.</t>

<section anchor="identification-by-tsk-structure"><name>Identification By TSK Structure</name>

<t>A Transferable Secret Key (TSK) is identified as an Autocrypt v2 TSK
if its internal structure corresponds to the packets defined in <xref target="packet-composition"/>.
The keyholder's UMA must recognize this structure to perform the aligned
key ratcheting necessary for reliable deletion.</t>

</section>
<section anchor="determining-minmaxrd"><name>Determining min_rd and max_rd</name>

<t>The subkey rotation cadence is derived from
the Key Expiration Time subpacket (<xref section="5.2.3.13" sectionFormat="of" target="RFC9580"/>)
found in Packet F of <xref target="packet-composition"/>.</t>

<t>By definition, the value of the Key Expiration Time subpacket
(which is measured as an integer number of seconds) is <spanx style="verb">max_rd</spanx>.
The default value for <spanx style="verb">max_rd</spanx> is 864000 seconds.
<spanx style="verb">max_rd</spanx> represents the maximum possible time that
the peer can send a reliably deletable message to the keyholder,
starting from when the peer retrieves a fresh copy of the keyholder's certificate.</t>

<t><spanx style="verb">min_rd</spanx> is derived from <spanx style="verb">max_rd</spanx>.
By convention, <spanx style="verb">min_rd</spanx> is half of <spanx style="verb">max_rd</spanx>.
In particular, when <spanx style="verb">max_rd</spanx> is the default value of 864000 seconds,
<spanx style="verb">min_rd</spanx> is 432000 seconds.
<spanx style="verb">min_rd</spanx> represents the minimum possible time
that the peer will be able to send a reliably deletable message to the keyholder,
starting from when the peer retrieves a fresh copy of the keyholder's certificate.</t>

<t>Anyone designing a similar system with a different ratcheting cadence
where <spanx style="verb">min_rd</spanx> that is anything other than half of <spanx style="verb">max_rd</spanx>
<bcp14>MUST</bcp14> explicitly coordinate <spanx style="verb">min_rd</spanx> somehow with all other UMAs
and <bcp14>MUST</bcp14> set <spanx style="verb">max_rd</spanx> to something other than 864000.</t>

</section>
</section>
<section anchor="reliable-deletion-strategy"><name>Reliable Deletion Strategy</name>

<t>An Autocrypt v2 certificate evolves over time,
as new rotating encryption subkeys are added to it.
It also sees older rotating encryption subkeys expire and potentially be removed.
This requires reasonable behavior by the keyholder and their peers.</t>

<section anchor="keyholder-certificate-and-secret-key-management"><name>Keyholder Certificate and Secret Key Management</name>

<t>The keyholder must update the certificate regularly by
ratcheting its secret key material forward to a new subkey.
Since the ratchet is deterministic, based on time and the old key material,
and the ratcheting schedule is standardized,
each UMA that the keyholder uses will ratchet forward in the same
way, without needing any additional network coordination.</t>

<section anchor="ac2-ratchet"><name>Subkey Ratchet</name>

<t>Each successive encryption-capable subkey is derived deterministically from the subkey before it.</t>

<t>This section describes how to derive
the secret key material and a deterministic subkey binding signature
for the new encryption-capable subkey based on the following values:</t>

<t><list style="symbols">
  <t><spanx style="verb">secret_key</spanx>, the Transferable Secret Key to be ratcheted.</t>
  <t><spanx style="verb">start</spanx>, the creation timestamp for the new subkey, represented as a number of seconds
elapsed since 1970-01-01T00:00:00Z, as a big-endian, 32-bit unsigned integer.</t>
</list></t>

<t>Note that both <spanx style="verb">start</spanx>, and the non-secret parts of <spanx style="verb">secret_key</spanx>
(that is, <spanx style="verb">secret_key</spanx> with <spanx style="verb">get_public()</spanx> applied to all its Secret Key packets)
are publicly visible.</t>

<t>The ratchet function relies on several deterministic subfunctions:</t>

<t><list style="symbols">
  <t><spanx style="verb">get_primary_key(TSK) -&gt; K</spanx>
 takes a Transferable Secret Key and
 returns the Secret Key packet of its primary key.</t>
  <t><spanx style="verb">get_last_rotating_subkey(TSK) -&gt; (K, sbs)</spanx>
 takes a Transferable Secret Key and
 returns the  Secret Subkey packet and corresponding Subkey Binding Signature packet of
 it latest-expiring subkey that is marked with "encrypt to comms"</t>
  <t><spanx style="verb">extract_secret_key_material(K) -&gt; M</spanx> retrieves 96 octets of secret key material <spanx style="verb">M</spanx> from
an OpenPGP ML-KEM-768+X25519 secret key packet <spanx style="verb">K</spanx>.
The octets of <spanx style="verb">M</spanx> are structured exactly as they are on the wire.
(32 octets of X25519 key material + a 64 octet seed of ML-KEM-768).</t>
  <t><spanx style="verb">get_public(K) -&gt; P</spanx> takes an OpenPGP Secret Key (or Subkey) packet and produces
the corresponding OpenPGP Public Key (or Subkey) packet in OpenPGP format.</t>
  <t><spanx style="verb">make_secret_subkey(M,T) -&gt; K</spanx> takes 96 octets of secret key material <spanx style="verb">M</spanx> and
OpenPGP timestamp <spanx style="verb">T</spanx> and produces a ML-KEM-768+X25519 secret subkey packet
with creation time <spanx style="verb">T</spanx>.</t>
  <t><spanx style="verb">normalize_x25519_scalar(M) -&gt; M</spanx>
takes 96 octets of OpenPGP ML-KEM-768+X25519 secret key material, and
normalizes the first 32 octets, which are an X25519 secret key.
The full 96 octets are returned after normalization.
Normalization clears the three least-significant bits of the first octet,
clears the most-significant bit of the 32nd octet, and
sets the second-most-significant bit of the 32nd octet,
as described in <spanx style="verb">decodeScalar25519</spanx> in <xref section="5" sectionFormat="of" target="RFC7748"/>.</t>
  <t><spanx style="verb">get_hashed_subpackets(S) -&gt; subpackets</spanx>
takes a Signature packet and returns the ordered list of hashed subpackets
from that Signature.</t>
  <t><spanx style="verb">get_expiration_duration(S) -&gt; secs</spanx>
takes a Signature packet with a hashed Key Expiration subpacket and
returns the contents of the hashed Key Expiration subpacket,
represented as four octets, interpretable as a big-endian unsigned integer number of seconds.</t>
  <t><spanx style="verb">replace_creation_time(subpackets, T) -&gt; subpackets</spanx>
takes an ordered list of OpenPGP signature subpackets <spanx style="verb">sps</spanx> and
returns the same list but with
the value of the Signature Creation Time subpacket replaced by <spanx style="verb">T</spanx>.</t>
  <t><spanx style="verb">bind_subkey(P,K,T,sps,salt) -&gt; S</spanx>
takes primary Ed25519 secret key <spanx style="verb">P</spanx>, public subkey <spanx style="verb">K</spanx>,
timestamp <spanx style="verb">T</spanx>,
an ordered list of OpenPGP signature subpackets <spanx style="verb">subp</spanx>,
and a 16-octet <spanx style="verb">salt</spanx>, and
produces an OpenPGP v6 Subkey Binding Signature <spanx style="verb">S</spanx> using an Ed25519 signature.
Ed25519 signatures are deterministic as described in <xref section="8.2" sectionFormat="of" target="RFC8032"/>.</t>
</list></t>

<t>The next secret subkey and subkey binding signature are derived via <xref target="HKDF"/> using SHA2-512,
with the following construction,
where <spanx style="verb">||</spanx> represents concatenation:</t>

<figure><artwork><![CDATA[
AC2_Ratchet(secret_key
            start)
            -> (next_secret_subkey, subkey_binding_sig):
  primary_key = get_primary_key(secret_key)
  (base_subkey, oldsbs) = get_last_rotating_subkey(secret_key)
  max_rd = get_expiration_duration(oldsbs)

  salt = start || get_public(base_key)
  info = "Autocrypt_v2_ratchet" || get_public(primary_key) || max_rd
  IKM = extract_secret_key_material(base_key)
  IKM = normalize_x25519_scalar(IKM)
  L = 160
  ks = HKDF_SHA2_512(salt, info, IKM, L)
  bssalt = SHA2_512(ks[0:64])[0:16]
  new_secret = normalize_x25519_scalar(ks[64:160])
  new_subkey = make_secret_subkey(new_secret, start)
  subp = replace_creation_time(get_hashed_subpackets(oldsbs), start)
  binding_sig = bind_subkey(primary_key,
                            get_public(new_subkey),
                            subp, bssalt)
  return (new_subkey, binding_sig)
]]></artwork></figure>

<t>The <spanx style="verb">"Autocrypt_v2_ratchet"</spanx> string is 20 octets as represented in US-ASCII.</t>

<figure><artwork><![CDATA[
000  41 75 74 6f 63 72 79 70 |Autocryp|
008  74 5f 76 32 5f 72 61 74 |t_v2_rat|
010  63 68 65 74             |chet|
014
]]></artwork></figure>

<t>Note that a UMA without access to the secret key material of the primary key
can still use parts of <spanx style="verb">AC2_Ratchet</spanx> to derive the new secret key subkey
without producing the subkey binding signature.
Such a UMA would be able to decrypt incoming new messages.</t>

<section anchor="ac2ratchet-diagram"><name>AC2_Ratchet Diagram</name>

<t>The core of the algorithm above can be visualized as follows:</t>

<figure title="AC2_Ratchet Diagram"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="800" width="512" viewBox="0 0 512 800" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 8,32 L 8,64" fill="none" stroke="black"/>
<path d="M 16,480 L 16,512" fill="none" stroke="black"/>
<path d="M 16,672 L 16,720" fill="none" stroke="black"/>
<path d="M 16,752 L 16,784" fill="none" stroke="black"/>
<path d="M 24,64 L 24,336" fill="none" stroke="black"/>
<path d="M 40,96 L 40,128" fill="none" stroke="black"/>
<path d="M 56,368 L 56,392" fill="none" stroke="black"/>
<path d="M 64,128 L 64,336" fill="none" stroke="black"/>
<path d="M 64,512 L 64,552" fill="none" stroke="black"/>
<path d="M 72,592 L 72,664" fill="none" stroke="black"/>
<path d="M 80,160 L 80,192" fill="none" stroke="black"/>
<path d="M 104,96 L 104,128" fill="none" stroke="black"/>
<path d="M 120,480 L 120,512" fill="none" stroke="black"/>
<path d="M 136,368 L 136,392" fill="none" stroke="black"/>
<path d="M 152,432 L 152,472" fill="none" stroke="black"/>
<path d="M 176,192 L 176,280" fill="none" stroke="black"/>
<path d="M 176,320 L 176,336" fill="none" stroke="black"/>
<path d="M 192,672 L 192,720" fill="none" stroke="black"/>
<path d="M 208,32 L 208,64" fill="none" stroke="black"/>
<path d="M 216,368 L 216,392" fill="none" stroke="black"/>
<path d="M 296,512 L 296,552" fill="none" stroke="black"/>
<path d="M 296,672 L 296,720" fill="none" stroke="black"/>
<path d="M 312,592 L 312,744" fill="none" stroke="black"/>
<path d="M 328,480 L 328,512" fill="none" stroke="black"/>
<path d="M 328,752 L 328,784" fill="none" stroke="black"/>
<path d="M 400,160 L 400,192" fill="none" stroke="black"/>
<path d="M 408,96 L 408,128" fill="none" stroke="black"/>
<path d="M 432,32 L 432,64" fill="none" stroke="black"/>
<path d="M 504,32 L 504,64" fill="none" stroke="black"/>
<path d="M 8,32 L 504,32" fill="none" stroke="black"/>
<path d="M 8,64 L 504,64" fill="none" stroke="black"/>
<path d="M 40,96 L 408,96" fill="none" stroke="black"/>
<path d="M 40,128 L 408,128" fill="none" stroke="black"/>
<path d="M 80,160 L 400,160" fill="none" stroke="black"/>
<path d="M 80,192 L 400,192" fill="none" stroke="black"/>
<path d="M 120,288 L 240,288" fill="none" stroke="black"/>
<path d="M 120,320 L 240,320" fill="none" stroke="black"/>
<path d="M 80,352 L 120,352" fill="none" stroke="black"/>
<path d="M 192,352 L 200,352" fill="none" stroke="black"/>
<path d="M 48,400 L 232,400" fill="none" stroke="black"/>
<path d="M 48,432 L 232,432" fill="none" stroke="black"/>
<path d="M 16,480 L 328,480" fill="none" stroke="black"/>
<path d="M 16,512 L 328,512" fill="none" stroke="black"/>
<path d="M 40,560 L 96,560" fill="none" stroke="black"/>
<path d="M 240,560 L 360,560" fill="none" stroke="black"/>
<path d="M 40,592 L 96,592" fill="none" stroke="black"/>
<path d="M 240,592 L 360,592" fill="none" stroke="black"/>
<path d="M 16,672 L 296,672" fill="none" stroke="black"/>
<path d="M 16,720 L 296,720" fill="none" stroke="black"/>
<path d="M 16,752 L 328,752" fill="none" stroke="black"/>
<path d="M 16,784 L 328,784" fill="none" stroke="black"/>
<path d="M 120,288 C 111.16936,288 104,295.16936 104,304" fill="none" stroke="black"/>
<path d="M 240,288 C 248.83064,288 256,295.16936 256,304" fill="none" stroke="black"/>
<path d="M 120,320 C 111.16936,320 104,312.83064 104,304" fill="none" stroke="black"/>
<path d="M 240,320 C 248.83064,320 256,312.83064 256,304" fill="none" stroke="black"/>
<path d="M 40,352 C 31.16936,352 24,344.83064 24,336" fill="none" stroke="black"/>
<path d="M 40,352 C 48.83064,352 56,359.16936 56,368" fill="none" stroke="black"/>
<path d="M 80,352 C 71.16936,352 64,344.83064 64,336" fill="none" stroke="black"/>
<path d="M 120,352 C 128.83064,352 136,359.16936 136,368" fill="none" stroke="black"/>
<path d="M 192,352 C 183.16936,352 176,344.83064 176,336" fill="none" stroke="black"/>
<path d="M 200,352 C 208.83064,352 216,359.16936 216,368" fill="none" stroke="black"/>
<path d="M 48,400 C 39.16936,400 32,407.16936 32,416" fill="none" stroke="black"/>
<path d="M 232,400 C 240.83064,400 248,407.16936 248,416" fill="none" stroke="black"/>
<path d="M 48,432 C 39.16936,432 32,424.83064 32,416" fill="none" stroke="black"/>
<path d="M 232,432 C 240.83064,432 248,424.83064 248,416" fill="none" stroke="black"/>
<path d="M 40,560 C 31.16936,560 24,567.16936 24,576" fill="none" stroke="black"/>
<path d="M 96,560 C 104.83064,560 112,567.16936 112,576" fill="none" stroke="black"/>
<path d="M 240,560 C 231.16936,560 224,567.16936 224,576" fill="none" stroke="black"/>
<path d="M 360,560 C 368.83064,560 376,567.16936 376,576" fill="none" stroke="black"/>
<path d="M 40,592 C 31.16936,592 24,584.83064 24,576" fill="none" stroke="black"/>
<path d="M 96,592 C 104.83064,592 112,584.83064 112,576" fill="none" stroke="black"/>
<path d="M 240,592 C 231.16936,592 224,584.83064 224,576" fill="none" stroke="black"/>
<path d="M 360,592 C 368.83064,592 376,584.83064 376,576" fill="none" stroke="black"/>
<polygon class="arrowhead" points="320,744 308,738.4 308,749.6" fill="black" transform="rotate(90,312,744)"/>
<polygon class="arrowhead" points="304,552 292,546.4 292,557.6" fill="black" transform="rotate(90,296,552)"/>
<polygon class="arrowhead" points="224,392 212,386.4 212,397.6" fill="black" transform="rotate(90,216,392)"/>
<polygon class="arrowhead" points="184,280 172,274.4 172,285.6" fill="black" transform="rotate(90,176,280)"/>
<polygon class="arrowhead" points="160,472 148,466.4 148,477.6" fill="black" transform="rotate(90,152,472)"/>
<polygon class="arrowhead" points="144,392 132,386.4 132,397.6" fill="black" transform="rotate(90,136,392)"/>
<polygon class="arrowhead" points="80,664 68,658.4 68,669.6" fill="black" transform="rotate(90,72,664)"/>
<polygon class="arrowhead" points="72,552 60,546.4 60,557.6" fill="black" transform="rotate(90,64,552)"/>
<polygon class="arrowhead" points="64,392 52,386.4 52,397.6" fill="black" transform="rotate(90,56,392)"/>
<g class="text">
<text x="108" y="52">&quot;Autocrypt_v2_ratchet&quot;</text>
<text x="244" y="52">public</text>
<text x="304" y="52">primary</text>
<text x="352" y="52">key</text>
<text x="396" y="52">packet</text>
<text x="468" y="52">max_rd</text>
<text x="72" y="116">start</text>
<text x="136" y="116">prior</text>
<text x="196" y="116">rotating</text>
<text x="260" y="116">public</text>
<text x="316" y="116">subkey</text>
<text x="372" y="116">packet</text>
<text x="112" y="180">prior</text>
<text x="172" y="180">rotating</text>
<text x="236" y="180">subkey</text>
<text x="292" y="180">secret</text>
<text x="356" y="180">material</text>
<text x="224" y="228">input</text>
<text x="8" y="244">-</text>
<text x="40" y="244">-</text>
<text x="56" y="244">-</text>
<text x="80" y="244">-</text>
<text x="96" y="244">-</text>
<text x="112" y="244">-</text>
<text x="128" y="244">-</text>
<text x="144" y="244">-</text>
<text x="160" y="244">-</text>
<text x="192" y="244">-</text>
<text x="208" y="244">-</text>
<text x="224" y="244">-</text>
<text x="240" y="244">-</text>
<text x="256" y="244">-</text>
<text x="272" y="244">-</text>
<text x="288" y="244">-</text>
<text x="304" y="244">-</text>
<text x="320" y="244">-</text>
<text x="336" y="244">-</text>
<text x="352" y="244">-</text>
<text x="368" y="244">-</text>
<text x="384" y="244">-</text>
<text x="400" y="244">-</text>
<text x="416" y="244">-</text>
<text x="432" y="244">-</text>
<text x="448" y="244">-</text>
<text x="464" y="244">-</text>
<text x="180" y="308">normalize_x25519</text>
<text x="28" y="372">info</text>
<text x="108" y="372">salt</text>
<text x="192" y="372">IKM</text>
<text x="76" y="420">HKDF</text>
<text x="140" y="420">H=SHA2_512</text>
<text x="208" y="420">L=160</text>
<text x="44" y="500">64</text>
<text x="80" y="500">bytes</text>
<text x="196" y="500">96</text>
<text x="232" y="500">bytes</text>
<text x="68" y="580">SHA2_512</text>
<text x="300" y="580">normalize_x25519</text>
<text x="8" y="628">-</text>
<text x="24" y="628">-</text>
<text x="40" y="628">-</text>
<text x="56" y="628">-</text>
<text x="88" y="628">-</text>
<text x="104" y="628">-</text>
<text x="120" y="628">-</text>
<text x="136" y="628">-</text>
<text x="152" y="628">-</text>
<text x="168" y="628">-</text>
<text x="184" y="628">-</text>
<text x="200" y="628">-</text>
<text x="216" y="628">-</text>
<text x="232" y="628">-</text>
<text x="248" y="628">-</text>
<text x="264" y="628">-</text>
<text x="280" y="628">-</text>
<text x="296" y="628">-</text>
<text x="328" y="628">-</text>
<text x="344" y="628">-</text>
<text x="360" y="628">-</text>
<text x="376" y="628">-</text>
<text x="392" y="628">-</text>
<text x="408" y="628">-</text>
<text x="424" y="628">-</text>
<text x="440" y="628">-</text>
<text x="456" y="628">-</text>
<text x="236" y="644">output</text>
<text x="36" y="692">16</text>
<text x="68" y="692">byte</text>
<text x="108" y="692">salt</text>
<text x="144" y="692">for</text>
<text x="172" y="692">v6</text>
<text x="240" y="692">...</text>
<text x="52" y="708">subkey</text>
<text x="112" y="708">binding</text>
<text x="160" y="708">sig</text>
<text x="240" y="708">(discard)</text>
<text x="44" y="772">next</text>
<text x="100" y="772">rotating</text>
<text x="164" y="772">subkey</text>
<text x="220" y="772">secret</text>
<text x="284" y="772">material</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
+------------------------+---------------------------+--------+
| "Autocrypt_v2_ratchet" | public primary key packet | max_rd |
+-+----------------------+---------------------------+--------+
  |
  | +-------+-------------------------------------+
  | | start | prior rotating public subkey packet |
  | +--+----+-------------------------------------+
  |    |
  |    | +---------------------------------------+
  |    | | prior rotating subkey secret material |
  |    | +-----------+---------------------------+
  |    |             |
  |    |             |   input
- | - -| - - - - - - | - - - - - - - - - - - - - - - - - -
  |    |             |
  |    |             v
  |    |     .----------------.
  |    |    | normalize_x25519 |
  |    |     '-------+--------'
  |    |             |
   '-.  '------.      '--.
 info |    salt |     IKM |
      v         v         v
    .------------------------.
   |   HKDF H=SHA2_512 L=160  |
    '-------------+----------'
                  |
                  v
 +------------+-------------------------+
 |  64 bytes  |        96 bytes         |
 +-----+------+---------------------+---+
       |                            |
       v                            v
   .--------.               .----------------.
  | SHA2_512 |             | normalize_x25519 |
   '----+---'               '---------+------'
        |                             |
- - - - | - - - - - - - - - - - - - - | - - - - - - - - -
        |                 output      |
        v                             |
 +---------------------+------------+ |
 | 16 byte salt for v6 |    ...     | |
 | subkey binding sig  | (discard)  | |
 +---------------------+------------+ |
                                      v
 +--------------------------------------+
 | next rotating subkey secret material |
 +--------------------------------------+
]]></artwork></artset></figure>

</section>
</section>
<section anchor="ratcheting-schedule"><name>Ratcheting Schedule</name>

<t>This section describes a straightforward algorithm for
a keyholder's UMA to decide when to create a new encryption-capable subkey.
A UMA can execute this algorithm at any time,
and <bcp14>SHOULD</bcp14> execute it in at least two specific cases:</t>

<t><list style="symbols">
  <t>When preparing to extract an OpenPGP certificate for publication or transmission to a peer, and</t>
  <t>When receiving an encrypted message that is encrypted to a key that the implementation does not know about.</t>
</list></t>

<t>Note that this algorithm is specifically about new subkey creation.
Please see <xref target="key-destruction-timing"/> for recommendations about subkey destruction.</t>

<t>Knowing when to produce a new secret subkey requires knowledge of four distinct values.
All timestamps referenced here are values computed in the OpenPGP standard,
that is, as an integer number of seconds elapsed since 1970-01-01T00:00:00Z.</t>

<t>Two values are taken from the Autocrypt v2 TSK:</t>

<t><list style="symbols">
  <t><spanx style="verb">base_start</spanx>, the creation timestamp of the most recent rotating subkey.</t>
  <t><spanx style="verb">max_rd</spanx>, the number of seconds that the rotating subkey will expire.</t>
</list></t>

<t>One value is derived from the above:</t>

<t><list style="symbols">
  <t><spanx style="verb">min_rd</spanx> is typically half of <spanx style="verb">max_rd</spanx> (see <xref target="determining-minmaxrd"/>)</t>
</list></t>

<t>And a final value is taken from general consensus:</t>

<t><list style="symbols">
  <t><spanx style="verb">now</spanx>, the current "wall-clock" timestamp.</t>
</list></t>

<t>Add new rotating subkeys with the following routine:</t>

<t><list style="numbers" type="1">
  <t>If <spanx style="verb">now &lt; base_start</spanx>, abort.
(something is probably wrong with the system clock or the secret key material)</t>
  <t>Let <spanx style="verb">next_start</spanx> be <spanx style="verb">base_start + max_rd - min_rd</spanx>.</t>
  <t>If <spanx style="verb">now &lt; next_start</spanx>, terminate successfully (no need to ratchet).</t>
  <t>Generate new secret subkey <spanx style="verb">next_key</spanx>, using key material deterministically derived from
the certificate's primary key, the most recent rotating secret subkey, <spanx style="verb">max_rd</spanx>, and <spanx style="verb">next_start</spanx>.
Bind <spanx style="verb">next_key</spanx> as an encryption-capable subkey,
using a deterministic subkey binding signature packet.
<spanx style="verb">next_key</spanx>'s creation timestamp (and the subkey binding signature) is <spanx style="verb">next_start</spanx>.
See <xref target="ac2-ratchet"/> for how to deterministically derive the new secret key and subkey binding signature.</t>
  <t>Restart this process, using the new subkey.</t>
</list></t>

<t>Note that the recursive nature of the above scheduler may end up generating multiple secret subkeys
if the device has been offline for a long time.</t>

</section>
<section anchor="custom-ratcheting-schedules"><name>Custom Ratcheting Schedules</name>

<t>While this specification defines a 10-day validity window with a 50% overlap as the standard convention,
a system could be designed with a different rotation window
or a different overlap algorithm.
Such a system <bcp14>MUST</bcp14> guarantee
that all the keyholder's own UMAs
follow an identical adjusted rotation schedules and key destruction logic
in order to maintain synchronization.</t>

<t>A peer receiving an incoming certificate produced under a custom schedule
does not need to be aware of the keyholder's specific rotation logic.
Because these certificates adhere to standard OpenPGP structures,
the peer will properly handle them by merging the new subkeys into their local cache
using standard OpenPGP semantics (see <xref target="receiving-and-merging"/>).
As long as the primary key remains constant,
the peer's UMA will simply see a sequence of valid encryption subkeys
and can continue to encrypt messages following the logic described in <xref target="encrypting-to-v2"/>.</t>

</section>
<section anchor="key-destruction-timing"><name>Timing of Secret Key Destruction</name>

<t>To achieve reliable deletion,
a keyholder <bcp14>SHOULD</bcp14> destroy the secret key material for a rotating encryption subkey
as soon as it is no longer required for decryption.
Because message delivery is not instantaneous,
a subkey should be retained for a grace period beyond its validity window.
This document refers to this grace period as <spanx style="verb">max_latency</spanx>.
<spanx style="verb">max_latency</spanx> accounts for the maximum expected transit time of the underlying transport mechanism.
For example, a <spanx style="verb">max_latency</spanx> of 10 days (864000 seconds) is reasonable for Internet mail,
as it is double the maximum delivery timeout (see <xref section="4.5.4.1" sectionFormat="of" target="RFC5321"/>).</t>

<t>The destruction process is tied to the successful retrieval and processing of messages.
A UMA <bcp14>SHOULD</bcp14> follow this routine:</t>

<t><list style="numbers" type="1">
  <t>Track Transport Endpoints: For every transport endpoint associated with a certificate,
the UMA maintains a <spanx style="verb">last_checked</spanx> timestamp and an expected maximum delivery <spanx style="verb">max_latency</spanx>.</t>
  <t>Determine the Safety Horizon: The UMA calculates an <spanx style="verb">oldest_update</spanx> timestamp,
which is the minimum value of <spanx style="verb">(last_checked - max_latency)</spanx> across all associated transport endpoints.</t>
  <t>Destroy Expired Material: Any rotating secret subkey with an expiration time earlier than
the <spanx style="verb">oldest_update</spanx> is destroyed.</t>
</list></t>

<t>In cases of persistent transport unreachability,
a UMA must balance the need for decryption with the goal of reliable deletion.
If a transport endpoint remains inaccessible for a prolonged period,
the UMA <bcp14>SHOULD</bcp14> eventually disassociate that endpoint from the certificate.
Failing to do so would prevent <spanx style="verb">oldest_update</spanx> from advancing,
indefinitely stalling key destruction and widening the window of recoverability (see <xref target="recoverability-window"/>).
Once the UMA gives up on fetching messages from an inaccessible transport,
it can proceed with the standard destruction of the corresponding secret key material.</t>

</section>
<section anchor="autocrypt-v2-tsk-and-certificate-timeline"><name>Autocrypt v2 TSK and Certificate Timeline</name>

<t>The following diagram illustrates the timeline for evolution of an Autocrypt v2 TSK and Cert.</t>

<figure title="Autocrypt V2 TSK and Certificate Timeline"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="528" viewBox="0 0 528 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 32,184 L 32,208" fill="none" stroke="black"/>
<path d="M 40,296 L 40,304" fill="none" stroke="black"/>
<path d="M 48,56 L 48,96" fill="none" stroke="black"/>
<path d="M 88,192 L 88,256" fill="none" stroke="black"/>
<path d="M 104,80 L 104,168" fill="none" stroke="black"/>
<path d="M 104,184 L 104,264" fill="none" stroke="black"/>
<path d="M 104,280 L 104,336" fill="none" stroke="black"/>
<path d="M 136,48 L 136,416" fill="none" stroke="black"/>
<path d="M 160,64 L 160,144" fill="none" stroke="black"/>
<path d="M 160,176 L 160,240" fill="none" stroke="black"/>
<path d="M 160,272 L 160,320" fill="none" stroke="black"/>
<path d="M 160,352 L 160,400" fill="none" stroke="black"/>
<path d="M 480,80 L 480,128" fill="none" stroke="black"/>
<path d="M 504,288 L 504,304" fill="none" stroke="black"/>
<path d="M 512,368 L 512,384" fill="none" stroke="black"/>
<path d="M 520,192 L 520,224" fill="none" stroke="black"/>
<path d="M 136,64 L 464,64" fill="none" stroke="black"/>
<path d="M 64,112 L 104,112" fill="none" stroke="black"/>
<path d="M 160,144 L 464,144" fill="none" stroke="black"/>
<path d="M 104,176 L 120,176" fill="none" stroke="black"/>
<path d="M 136,176 L 504,176" fill="none" stroke="black"/>
<path d="M 48,224 L 88,224" fill="none" stroke="black"/>
<path d="M 160,240 L 504,240" fill="none" stroke="black"/>
<path d="M 104,272 L 120,272" fill="none" stroke="black"/>
<path d="M 136,272 L 488,272" fill="none" stroke="black"/>
<path d="M 56,320 L 104,320" fill="none" stroke="black"/>
<path d="M 160,320 L 488,320" fill="none" stroke="black"/>
<path d="M 136,352 L 496,352" fill="none" stroke="black"/>
<path d="M 160,400 L 496,400" fill="none" stroke="black"/>
<path d="M 120,64 C 111.16936,64 104,71.16936 104,80" fill="none" stroke="black"/>
<path d="M 464,64 C 472.83064,64 480,71.16936 480,80" fill="none" stroke="black"/>
<path d="M 64,112 C 55.16936,112 48,104.83064 48,96" fill="none" stroke="black"/>
<path d="M 464,144 C 472.83064,144 480,136.83064 480,128" fill="none" stroke="black"/>
<path d="M 104,176 C 95.16936,176 88,183.16936 88,192" fill="none" stroke="black"/>
<path d="M 504,176 C 512.83064,176 520,183.16936 520,192" fill="none" stroke="black"/>
<path d="M 48,224 C 39.16936,224 32,216.83064 32,208" fill="none" stroke="black"/>
<path d="M 504,240 C 512.83064,240 520,232.83064 520,224" fill="none" stroke="black"/>
<path d="M 104,272 C 95.16936,272 88,264.83064 88,256" fill="none" stroke="black"/>
<path d="M 120,272 C 111.16936,272 104,279.16936 104,288" fill="none" stroke="black"/>
<path d="M 120,272 C 111.16936,272 104,264.83064 104,256" fill="none" stroke="black"/>
<path d="M 488,272 C 496.83064,272 504,279.16936 504,288" fill="none" stroke="black"/>
<path d="M 56,320 C 47.16936,320 40,312.83064 40,304" fill="none" stroke="black"/>
<path d="M 488,320 C 496.83064,320 504,312.83064 504,304" fill="none" stroke="black"/>
<path d="M 120,352 C 111.16936,352 104,344.83064 104,336" fill="none" stroke="black"/>
<path d="M 496,352 C 504.83064,352 512,359.16936 512,368" fill="none" stroke="black"/>
<path d="M 496,400 C 504.83064,400 512,392.83064 512,384" fill="none" stroke="black"/>
<polygon class="arrowhead" points="144,416 132,410.4 132,421.6" fill="black" transform="rotate(90,136,416)"/>
<g class="text">
<text x="140" y="36">Time</text>
<text x="52" y="52">max_rd</text>
<text x="200" y="84">primary</text>
<text x="248" y="84">key</text>
<text x="272" y="84">+</text>
<text x="316" y="84">fallback</text>
<text x="380" y="84">subkey</text>
<text x="440" y="84">created</text>
<text x="192" y="100">first</text>
<text x="252" y="100">rotating</text>
<text x="316" y="100">subkey</text>
<text x="376" y="100">created</text>
<text x="188" y="116">cert</text>
<text x="248" y="116">generated</text>
<text x="188" y="132">cert</text>
<text x="260" y="132">distribution</text>
<text x="340" y="132">begins</text>
<text x="36" y="180">min_rd</text>
<text x="184" y="196">new</text>
<text x="236" y="196">rotating</text>
<text x="300" y="196">subkey</text>
<text x="360" y="196">derived</text>
<text x="448" y="196">(AC2_Ratchet)</text>
<text x="184" y="212">new</text>
<text x="228" y="212">subkey</text>
<text x="328" y="212">deterministically</text>
<text x="424" y="212">bound</text>
<text x="460" y="212">to</text>
<text x="492" y="212">cert</text>
<text x="188" y="228">cert</text>
<text x="268" y="228">redistribution</text>
<text x="356" y="228">begins</text>
<text x="48" y="292">max_latency</text>
<text x="192" y="292">first</text>
<text x="252" y="292">rotating</text>
<text x="316" y="292">subkey</text>
<text x="376" y="292">expires</text>
<text x="192" y="308">peers</text>
<text x="236" y="308">drop</text>
<text x="280" y="308">first</text>
<text x="332" y="308">subkey</text>
<text x="380" y="308">from</text>
<text x="428" y="308">merged</text>
<text x="476" y="308">cert</text>
<text x="188" y="372">msgs</text>
<text x="276" y="372">recv'd+processed</text>
<text x="364" y="372">from</text>
<text x="400" y="372">all</text>
<text x="460" y="372">transports</text>
<text x="200" y="388">destroy</text>
<text x="256" y="388">first</text>
<text x="316" y="388">rotating</text>
<text x="380" y="388">secret</text>
<text x="436" y="388">subkey</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
                Time
    max_rd       |
      |       .- +--+--------------------------------------.
      |      |   |  | primary key + fallback subkey created |
      |      |   |  | first rotating subkey created         |
       '-----+   |  | cert generated                        |
             |   |  | cert distribution begins              |
             |   |  +--------------------------------------'
             |   |
  min_rd    .--- +--+-------------------------------------------.
    |      | |   |  | new rotating subkey derived (AC2_Ratchet)  |
    |      | |   |  | new subkey deterministically bound to cert |
     '-----+ |   |  | cert redistribution begins                 |
           | |   |  +-------------------------------------------'
           | |   |
            '-+- +--+-----------------------------------------.
 max_latency |   |  | first rotating subkey expires            |
     |       |   |  | peers drop first subkey from merged cert |
      '------+   |  +-----------------------------------------'
             |   |
              '- +--+------------------------------------------.
                 |  | msgs recv'd+processed from all transports |
                 |  | destroy first rotating secret subkey      |
                 |  +------------------------------------------'
                 v

]]></artwork></artset></figure>

</section>
</section>
<section anchor="receiving-and-merging"><name>Receiving and Merging Certificates</name>

<t>An outbound Autocrypt v2 certificate always has the same primary key,
but new encryption-capable subkeys appear on a regular basis.
A peer UMA that encounters a certificate
<bcp14>SHOULD</bcp14> merge the known subkeys into the locally cached certificate,
using a mechanism like <spanx style="verb">sop merge-certs</spanx> (<xref section="5.2.6" sectionFormat="of" target="I-D.dkg-openpgp-stateless-cli"/>).</t>

<t>A peer that replaces but does not merge certificates
may end up encrypting a message to a subkey with a wider window of recoverability than necessary.</t>

<section anchor="minimization-and-pruning-of-autocrypt-v2-certificates"><name>Minimization and pruning of Autocrypt v2 certificates</name>

<t>To ensure good data hygiene and minimize storage use,
implementations should regularly prune Autocrypt v2 certificates,
for example when merging incoming certificates.
According to the ratcheting schedule algorithm (<xref target="ac2-ratchet"/>),
a merged Autocrypt v2 certificate typically can contain
at most two valid rotating subkeys at any given time.</t>

<t>Because expired subkeys can no longer be used for encryption,
it is <bcp14>RECOMMENDED</bcp14> that implementations drop all expired encryption subkeys
(and their corresponding subkey binding signatures) from certificates on a continuous basis.
This maintenance strategy keeps the certificate size minimal
while allowing communication with reliable deletion.</t>

<t>Note that deletion of secret key material
(as opposed to the public key material in certificates)
happens at a different cadence, see <xref target="key-destruction-timing"/>.</t>

</section>
</section>
<section anchor="encrypting-to-v2"><name>Encrypting to an Autocrypt v2 Certificate</name>

<t>When encrypting a message to an Autocrypt v2 certificate,
the peer should encrypt the message to only one of the encryption-capable subkeys.</t>

<t>If any rotating encryption subkey is valid,
the peer <bcp14>MUST NOT</bcp14> encrypt to the fallback encryption subkey.</t>

<t>If no rotating encryption subkey is valid,
and the peer has no way to update the certificate,
the peer <bcp14>MAY</bcp14> encrypt the message to the fallback encryption subkey.</t>

<t>If more than one rotating encryption subkey is currently valid,
the peer <bcp14>SHOULD</bcp14> encrypt to the valid rotating encryption subkey with the nearest revocation date.
This hastens the time when the message becomes reliably deletable.</t>

</section>
<section anchor="message-deletion"><name>Message Deletion</name>

<t>When a message is to be deleted,
the UMA <bcp14>MUST</bcp14> delete all known copies of the message,
as well as any set-aside session keys.
It <bcp14>MUST</bcp14> also remove traces of the message from
any index it may have created, as indexing tends
to create an equivalent copy of the indexed content.
The message will be unrecoverable by the adversary
once the rotating subkey's secret key material
has been destroyed (see <xref target="key-destruction-timing"/>).</t>

<section anchor="message-processing"><name>Keyholder Processing of Encrypted Messages</name>

<t>To facilitate robust deletion of some messages
while retaining the ability to read others from its archive,
a UMA needs to plan how to process a message upon ingestion.</t>

<t>When the keyholder first receives an encrypted message,
their UMA typically places the message in an archive visible to the UMA.
If the archive contains only the original ciphertext as received,
then the message will be useless in the archive when the rotating subkey's secret key material is destroyed
(see <xref target="key-destruction-timing"/>).
The goal is to have the message available in the archive when access is desired,
and to be able to safely remove it from the archive when deletion is desired.</t>

<t>There are at least three sensible ways to handle the message so that it can be deleted safely in the future:</t>

<t><list style="symbols">
  <t>Archiving cleartext</t>
  <t>Stashing session keys</t>
  <t>Re-encrypting</t>
</list></t>

<section anchor="archiving-cleartext"><name>Archiving Cleartext</name>

<t>The simplest model is that the keyholder's UMA retains the cleartext of each message,
entirely discarding the in-transit form.</t>

<t>The UMA can re-visit the content of such a message trivially,
regardless of whether the asymmetric secret key used for decryption has been destroyed or not.</t>

<t>This approach presumes that the message archive is not typically accessible
to the adversary.</t>

</section>
<section anchor="stashing-session-keys"><name>Stashing Session Keys</name>

<t>In this approach, the keyholder's UMA retains the in-transit form of the message,
but associates the OpenPGP session key of the encrypted content with the message.
For example, the UMA could store the session keys in a separate look-aside table, indexed by Message-ID.</t>

<t>In this case, the UMA can access the cleartext of the message
by decrypting it with the set-aside session key, even when the asymmetric secret key has been destroyed.</t>

<t>This approach can be used where the adversary has regular access to the archive,
effectively treating the archive as though it were as at-risk as the message in transit.
But the area where the session keys are stored
<bcp14>MUST NOT</bcp14> be typically accessible to the adversary.
If message cleartext is indexed, the session key storage <bcp14>MUST</bcp14> be
at least as secure from the adversary as the message index.</t>

</section>
<section anchor="re-encrypting"><name>Re-Encrypting</name>

<t>Finally, if the UMA retains some other long-term secret key for archival access,
it can process each message by re-encrypting it to the long-term archival key.
This can be done either by prepending each OpenPGP Encrypted Message
with a new Public Key Encrypted Session Key (PKESK) packet (See <xref section="5.1" sectionFormat="of" target="RFC9580"/>)
that contains the existing message's session key,
or by unwrapping the SEIPD packet entirely,
and re-encrypting it to the long-term archival key.</t>

<t>This approach presumes that the message archive is not typically
accessible to the adversary.
If the archive were regularly accessible to the adversary,
the adversary could store the re-encrypted message before deletion.
Then, during the compromise of the user's long-term key,
the adversary could unlock their copy of the previously deleted message.</t>

</section>
</section>
<section anchor="summary-of-message-processing-strategies"><name>Summary of Message Processing Strategies</name>

<texttable title="Message Archiving Strategies">
      <ttcol align='right'>Archiving Strategy</ttcol>
      <ttcol align='left'>raw message retained?</ttcol>
      <ttcol align='left'>simple indexing</ttcol>
      <ttcol align='left'>OpenPGP packet handling</ttcol>
      <ttcol align='left'>Deletable if adversary can access archive</ttcol>
      <c>Archived Cleartext</c>
      <c>N</c>
      <c>Y</c>
      <c>N</c>
      <c>N</c>
      <c>Stashed Session Key</c>
      <c>Y</c>
      <c>N</c>
      <c>N</c>
      <c>Y</c>
      <c>Re-encrypted Message</c>
      <c>N</c>
      <c>N</c>
      <c>Y</c>
      <c>N</c>
</texttable>

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

<t>See the discussion of quantum impersonation in <xref target="non-goals"/>.</t>

<t>A message encrypted to the long-term fallback encryption subkey can not be reliably deleted,
because an adversary who captures the message
and in the future exfiltrates the keyholder's secret key material will be able to decrypt their stored copy of the message.</t>

<section anchor="deletable-threat-model"><name>Reliable Deletion Threat Model</name>

<t>The threat model for reliable deletion of messages has three core expectations:</t>

<t><list style="symbols">
  <t>The adversary has access to any message in transit,
and can retain the in-transit form of each message indefinitely.</t>
  <t>At some point in the future,
the adversary can compromise the keyholder's UMA to be able to get access to their secret key material.</t>
  <t>The archive maintained by the keyholder's UMA is subject
to the same level of threat as the keyholder's secret key storage.</t>
</list></t>

<t>The goal for the keyholder is that
when the adversary compromises either the keyholder's archive or the keyholder's secret key material (or both),
any message that has been deleted by the keyholder is in fact unrecoverable by the adversary.</t>

</section>
<section anchor="the-cleartext-is-the-targeted-asset"><name>The Cleartext Is The Targeted Asset</name>

<t>Some "Forward Secrecy" schemes emphasize key ephemerality so heavily
that they lose track of the adversary's goal.</t>

<t>This document uses the "Reliable Deletion" framing because
the adversary wants to compromise the confidentiality of the message itself,
which means the key is only an intermediate target.</t>

<t>Many UMAs are effectively systems both for messaging and for archiving.
For archiving UMAs, exfiltration of the archive is often
as easy as (or even easier than) exfiltration of the secret key.
This means that confidentiality protection needs to consider
being able to delete the message cleartext
from the archive as well as the relevant secret key material.</t>

</section>
<section anchor="key-destruction-time-based-vs-message-based"><name>Key Destruction: Time-based vs. Message-based</name>

<t>Automated encryption key destruction is a necessary component to achieving reliable deletion.
There are two main approaches to scheduling key destruction: time-based and message-based.</t>

<t>Some messaging protocols (e.g., <xref target="Double-Ratchet"/>) ratchet keys on every message (or nearly every message).
This message-based key destruction schedule gives
a narrower window of temporal availability for each key, and fewer messages are encrypted to each key.</t>

<t>The time-based approach used in this specification is simpler
and relies primarily on all UMAs controlled by a single keyholder to have a shared sense of the global clock.</t>

<t>While the temporal window of key availability is often wider in the time-based approach,
its simplicity means much less inter-client coordination.
And the narrower temporal window of key validity offered by the message-based approach
is often not the limiting factor in the temporal window of message recoverability (see <xref target="recoverability-window"/>.</t>

</section>
<section anchor="recoverability-window"><name>The Window of Recoverability</name>

<t>Any message system offering reliable deletion has a frame of time during which the message
cannot be robustly deleted because it can be recovered by an attacker.
For example, in a scheme where each message is encrypted to its own unique key,
if one of the recipients of the message has not yet received the message,
a copy of that key must be available on the lagging recipient's device.</t>

<t>An adversary who is capable of:</t>

<t><list style="symbols">
  <t>capturing a copy of the message in transit, and</t>
  <t>preventing its delivery to one of the recipients, and</t>
  <t>compromising the recipient's device</t>
</list></t>

<t>will be able to recover the message cleartext even if
all other parties involved with the message
have deleted it long ago.</t>

<t>Realistically, a message is only deleted
once every cleartext copy of it has been destroyed, and
every system with access to the message's secret key
has destroyed the secret key.
At a minimum, a message that is in flight is not yet deletable,
and for a message sent to a group, message deletion is only
as robust as the slowest, most detached and uncoordinated member of the group.</t>

<t>Automated message deletion policies
(such as "disappearing messages" functionality common in many messenger apps)
can assist in message deletion, but they are similarly bound by
the duration of secret key retention.</t>

<t>Schemes with rapid key rotation tend to need
more complex internal state,
and are more likely to result in unreadable messages.
For initial messages, these schemes might require
all parties to a communication to be online at the same time,
or require any offline participants to distribute
some introductory key material ("prekeys") to a
reliably online third party.
A "prekey" scheme is itself at risk of attacks that can
cause initial messages to lose the desired deletability property,
or can expose additional metadata to an attacker
(see, for example, <xref target="PREKEY-POGO"/>).</t>

<t>This document accepts a wider window of message recovery (at most 20 days, by default)
which lets implementers avoid the need for any network synchronization between the keyholder's UMAs.
This tradeoff provides a decentralized and robust way to achieve reliable deletion.</t>

</section>
<section anchor="system-clock-reliance"><name>System Clock Reliance</name>

<t>A wrong system clock can have three serious impacts on a system interacting with Autocrypt v2 keys and certificates.
A UMA should confirm that its system clock is within a reasonable range of the global consensus on what time it is.</t>

<t>There are at least three possible security-relevant failures that could happen as a result of a broken system clock:</t>

<t><list style="symbols">
  <t>With a system clock set too far in the past,
a UMA might encrypt a message to an actually-expired encryption subkey.
If the recipient has already destroyed their secret key material according to schedule,
such a message would be undecryptable.</t>
  <t>With a system clock set too far in the future,
a UMA might decide that no rotating encryption subkey is available for a peer,
and therefore encrypt a message to the fallback encryption key,
thereby losing the reliable deletion property for that message.</t>
  <t>With a system clock set too far in the future, the UMA of a keyholder with an Autocrypt v2 secret key
might ratchet their secret key very far forward and
destroy secret key material that is still being used to encrypt messages to them.
This would render all incoming messages undecryptable.</t>
</list></t>

<section anchor="avoiding-system-clock-skew"><name>Avoiding System Clock Skew</name>

<t>There are several ways to try to ensure that the local system clock matches
the general consensus about what time it is.
Broadly, the UMA (or the device on which it runs) can glean an understanding about the consensus time
from dedicated time servers,
from servers that it otherwise communicates with directly,
or from the peers that send it messages.</t>

<t>An attacker in control of any of these sources of time consensus might use their influence to try
to defeat reliable deletion (e.g., by forcing a message to be encrypted to the fallback key,
or by delaying secret key deletion),
or to create a denial of service (e.g., by encouraging encryption of messages to an already deleted subkey,
or by encouraging early deletion of a secret key).</t>

<t>One approach to learning about the local clock's skew from consensus time is
to use <xref target="NTP"/> against one or more known-good time servers.</t>

<t>Another approach is to glean a reasonable time bounds from the transport layer the UMA connects with.
For example, when using using <xref target="TLS"/> (or <xref target="QUIC"/> with the <xref target="TLS"/> handshake),
it's possible to infer a range of plausible times the server operator thinks it could be by looking at the
<spanx style="verb">Validity</spanx> member (from <spanx style="verb">notBefore</spanx> to <spanx style="verb">notAfter</spanx>) of the server's <xref target="X.509"/> certificate.
Narrower <spanx style="verb">Validity</spanx> members are more common today than they were in the past
and can help to detect a clock skew that is greater than the bounds of <spanx style="verb">Validity</spanx>.</t>

<t>To the extent that the server participates in <xref target="Certificate-Transparency"/>,
the UMA could also determine reasonable time bounds from timestamp member of the SignedCertificateTimestamp extension.
If the server offers a stapled <xref target="OCSP"/> response via the OCSP Status Request extension,
the various timestamps (e.g. <spanx style="verb">producedAt</spanx> and <spanx style="verb">thisUpdate</spanx> and <spanx style="verb">nextUpdate</spanx>) in a stapled OCSPResponse
can also be used as an estimate of the server's rough sense of the wall clock.
Estimates like these based on information provided from the server in the TLS handshake
are valuable because the UMA has typically not yet authenticated to the server during the handshake,
which makes a targeted attack from the server in this context less likely.</t>

<t>The UMA can also get a rough estimate of their correspondents' view of the wall clock time
by looking, for example, at the <spanx style="verb">Date</spanx> header in recently-received e-mail messages.</t>

<t>These methods can generate estimates of the likelihood of clock skew.
In the event that the keyholder's UMA believes that its clock is substantially advanced beyond the consensus time,
it <bcp14>MAY</bcp14> postpone secret key deletion until it is more confident in its clock alignment.</t>

</section>
</section>
</section>
<section anchor="usability-considerations"><name>Usability Considerations</name>

<t>The keyholder needs to regularly update their certificate,
and re-transmit it to those peers who might want to write them a confidential message.</t>

<t>Refreshing the encryption-capable subkeys might be done
with a suitable invocation of <spanx style="verb">sop update-key</spanx> (see <xref section="5.2.5" sectionFormat="of" target="I-D.dkg-openpgp-stateless-cli"/>).</t>

<t>After subkey rollover, re-transmission to peers might be done with <xref target="Autocrypt"/> or some other in-band communication process.
Alternately, if the keyholder's peers refresh certificates before sending mail,
the updated certificate could be uploaded to keyservers using <xref target="HKP"/> or a comparable protocol.</t>

<t>If a peer is willing to encrypt to an expired encryption key,
they will create a message that the keyholder cannot decrypt,
because the keyholder regularly destroys the secret key material associated with expired subkeys.
The peer <bcp14>MUST NOT</bcp14> encrypt to an expired encryption key.</t>

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

<t>This document does not require any action from IANA.</t>

</section>


  </middle>

  <back>


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

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



<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="RFC9580">
  <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="I-D.ietf-openpgp-pqc-14">
   <front>
      <title>Post-Quantum Cryptography in OpenPGP</title>
      <author fullname="Stavros Kousidis" initials="S." surname="Kousidis">
         <organization>BSI</organization>
      </author>
      <author fullname="Johannes Roth" initials="J." surname="Roth">
         <organization>MTG AG</organization>
      </author>
      <author fullname="Falko Strenzke" initials="F." surname="Strenzke">
         <organization>MTG AG</organization>
      </author>
      <author fullname="Aron Wussler" initials="A." surname="Wussler">
         <organization>Proton AG</organization>
      </author>
      <date day="13" month="November" year="2025"/>
      <abstract>
	 <t>   This document defines a post-quantum public-key algorithm extension
   for the OpenPGP protocol.  Given the generally assumed threat of a
   cryptographically relevant quantum computer, this extension provides
   a basis for long-term secure OpenPGP signatures and ciphertexts.
   Specifically, it defines composite public-key encryption based on ML-
   KEM (formerly CRYSTALS-Kyber), composite public-key signatures based
   on ML-DSA (formerly CRYSTALS-Dilithium), both in combination with
   elliptic curve cryptography, and SLH-DSA (formerly SPHINCS+) as a
   standalone public key signature scheme.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-pqc-14"/>
   
</reference>
<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="RFC8032">
  <front>
    <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8032"/>
  <seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>
<reference anchor="HKDF">
  <front>
    <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
    <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <date month="May" year="2010"/>
    <abstract>
      <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5869"/>
  <seriesInfo name="DOI" value="10.17487/RFC5869"/>
</reference>



    </references>

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

<reference anchor="Autocrypt" target="https://autocrypt.org/">
  <front>
    <title>Autocrypt - Convenient End-to-End Encryption for E-Mail</title>
    <author initials="V." surname="Breitmoser" fullname="Vincent Breitmoser">
      <organization></organization>
    </author>
    <author initials="H." surname="Krekel" fullname="Holger Krekel">
      <organization></organization>
    </author>
    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization></organization>
    </author>
    <date year="2019" month="February" day="10"/>
  </front>
</reference>
<reference anchor="Double-Ratchet" target="https://signal.org/docs/specifications/doubleratchet/">
  <front>
    <title>The Double Ratchet Algorithm</title>
    <author initials="T." surname="Perrin" fullname="Trevor Perrin">
      <organization></organization>
    </author>
    <author initials="M." surname="Marlinspike" fullname="Moxie Marlinspike">
      <organization></organization>
    </author>
    <author initials="R." surname="Schmidt" fullname="Rolfe Schmidt">
      <organization></organization>
    </author>
    <date year="2025" month="November" day="04"/>
  </front>
</reference>


<reference anchor="RFC5321">
  <front>
    <title>Simple Mail Transfer Protocol</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="October" year="2008"/>
    <abstract>
      <t>This document is a specification of the basic protocol for Internet electronic mail transport. It consolidates, updates, and clarifies several previous documents, making all or parts of most of them obsolete. It covers the SMTP extension mechanisms and best practices for the contemporary Internet, but does not provide details about particular extensions. Although SMTP was designed as a mail transport and delivery protocol, this specification also contains information that is important to its use as a "mail submission" protocol for "split-UA" (User Agent) mail reading systems and mobile environments. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5321"/>
  <seriesInfo name="DOI" value="10.17487/RFC5321"/>
</reference>

<reference anchor="I-D.dkg-openpgp-stateless-cli">
   <front>
      <title>Stateless OpenPGP Command Line Interface</title>
      <author fullname="Daniel Kahn Gillmor" initials="D. K." surname="Gillmor">
         <organization>American Civil Liberties Union</organization>
      </author>
      <date day="2" month="January" year="2026"/>
      <abstract>
	 <t>   This document defines a generic stateless command-line interface for
   dealing with OpenPGP messages, certificates, and secret key material,
   known as sop.  It aims for a minimal, well-structured API covering
   OpenPGP object security and maintenance of credentials and secrets.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-dkg-openpgp-stateless-cli-15"/>
   
</reference>
<reference anchor="PREKEY-POGO">
  <front>
    <title>Prekey Pogo: Investigating Security and Privacy Issues in WhatsApp's Handshake Mechanism</title>
    <author fullname="Gabriel K. Gegenhuber" initials="G." surname="Gegenhuber">
      <organization/>
    </author>
    <author fullname="Philipp É. Frenzel" initials="P." surname="Frenzel">
      <organization/>
    </author>
    <author fullname="Maximilian Günther" initials="M." surname="Günther">
      <organization/>
    </author>
    <author fullname="Aljosha Judmayer" initials="A." surname="Judmayer">
      <organization/>
    </author>
    <date year="2025"/>
  </front>
  <seriesInfo name="DOI" value="10.48550/ARXIV.2504.07323"/>
<refcontent>arXiv</refcontent></reference>
<reference anchor="NTP">
  <front>
    <title>Network Time Protocol Version 4: Protocol and Algorithms Specification</title>
    <author fullname="D. Mills" initials="D." surname="Mills"/>
    <author fullname="J. Martin" initials="J." role="editor" surname="Martin"/>
    <author fullname="J. Burbank" initials="J." surname="Burbank"/>
    <author fullname="W. Kasch" initials="W." surname="Kasch"/>
    <date month="June" year="2010"/>
    <abstract>
      <t>The Network Time Protocol (NTP) is widely used to synchronize computer clocks in the Internet. This document describes NTP version 4 (NTPv4), which is backwards compatible with NTP version 3 (NTPv3), described in RFC 1305, as well as previous versions of the protocol. NTPv4 includes a modified protocol header to accommodate the Internet Protocol version 6 address family. NTPv4 includes fundamental improvements in the mitigation and discipline algorithms that extend the potential accuracy to the tens of microseconds with modern workstations and fast LANs. It includes a dynamic server discovery scheme, so that in many cases, specific server configuration is not required. It corrects certain errors in the NTPv3 design and implementation and includes an optional extension mechanism.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5905"/>
  <seriesInfo name="DOI" value="10.17487/RFC5905"/>
</reference>
<reference anchor="TLS">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8446"/>
  <seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>
<reference anchor="QUIC">
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9000"/>
  <seriesInfo name="DOI" value="10.17487/RFC9000"/>
</reference>
<reference anchor="X.509">
  <front>
    <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
    <author fullname="D. Cooper" initials="D." surname="Cooper"/>
    <author fullname="S. Santesson" initials="S." surname="Santesson"/>
    <author fullname="S. Farrell" initials="S." surname="Farrell"/>
    <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <author fullname="W. Polk" initials="W." surname="Polk"/>
    <date month="May" year="2008"/>
    <abstract>
      <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5280"/>
  <seriesInfo name="DOI" value="10.17487/RFC5280"/>
</reference>
<reference anchor="Certificate-Transparency">
  <front>
    <title>Certificate Transparency</title>
    <author fullname="B. Laurie" initials="B." surname="Laurie"/>
    <author fullname="A. Langley" initials="A." surname="Langley"/>
    <author fullname="E. Kasper" initials="E." surname="Kasper"/>
    <date month="June" year="2013"/>
    <abstract>
      <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
      <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6962"/>
  <seriesInfo name="DOI" value="10.17487/RFC6962"/>
</reference>
<reference anchor="OCSP">
  <front>
    <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
    <author fullname="M. Myers" initials="M." surname="Myers"/>
    <author fullname="R. Ankney" initials="R." surname="Ankney"/>
    <author fullname="A. Malpani" initials="A." surname="Malpani"/>
    <author fullname="S. Galperin" initials="S." surname="Galperin"/>
    <author fullname="C. Adams" initials="C." surname="Adams"/>
    <date month="June" year="1999"/>
    <abstract>
      <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring CRLs. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2560"/>
  <seriesInfo name="DOI" value="10.17487/RFC2560"/>
</reference>

<reference anchor="HKP">
   <front>
      <title>OpenPGP HTTP Keyserver Protocol</title>
      <author fullname="Daphne Shaw" initials="D." surname="Shaw">
         <organization>Jabberwocky Tech</organization>
      </author>
      <author fullname="Andrew Gallagher" initials="A." surname="Gallagher">
         <organization>PGPKeys.EU</organization>
      </author>
      <author fullname="Daniel Huigens" initials="D." surname="Huigens">
         <organization>Proton AG</organization>
      </author>
      <date day="3" month="November" year="2025"/>
      <abstract>
	 <t>   This document specifies a series of conventions to implement an
   OpenPGP keyserver using the Hypertext Transfer Protocol (HTTP).  As
   this document is a codification and extension of a protocol that is
   already in wide use, strict attention is paid to backward
   compatibility with these existing implementations.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gallagher-openpgp-hkp-09"/>
   
</reference>

<reference anchor="I-D.brown-pgp-pfs">
   <front>
      <title>Forward Secrecy Extensions for OpenPGP</title>
      <author fullname="Ian Brown" initials="I." surname="Brown">
         </author>
      <author fullname="Ben Laurie" initials="B." surname="Laurie">
         <organization>A.L. Digital Ltd</organization>
      </author>
      <date day="8" month="October" year="2001"/>
      <abstract>
	 <t>The confidentiality of encrypted data depends on the secrecy of the
key needed to decrypt it. If one key is able to decrypt large
quantities of data, its compromise will be disastrous. This memo
describes three methods for limiting this vulnerability for OpenPGP
messages: reducing the lifetime of confidentiality keys; one-time
keys; and the additional use of lower-layer security services.
	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-brown-pgp-pfs-03"/>
   
</reference>



    </references>

</references>


<?line 1045?>

<section anchor="historical-notes"><name>Historical notes</name>

<t>Prior work on "forward secrecy" in OpenPGP dates back decades,
including <xref target="I-D.brown-pgp-pfs"/>.
Much of the guidance in that document is useful, and it is worth reading.
As far as the authors are aware, the mechanisms described there were never widely adopted,
and no tooling is currently available to make certificates compliant with the policies or "single-use" subpackets outlined there.
That specification also never grappled with the complexities of coordinating ephemeral subkeys across multiple UMAs,
or considering how "reply all" would work in a group messaging context for single-use keys.</t>

</section>
<section anchor="design-choices"><name>Design Choices</name>

<section anchor="subkey-validity-windows"><name>Subkey Validity Windows</name>

<t>When designing the subkey rotation mechanism,
it's possible to create back-to-back, overlapping, or superset validity windows.</t>

<section anchor="back-to-back-validity-windows"><name>Back-to-Back Validity Windows</name>

<t>With back-to-back validity windows,
Each subkey is valid for a period that doesn't overlap with any other subkey.</t>

<figure title="Back-to-Back Validity Windows"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="536" viewBox="0 0 536 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 56,32 L 56,64" fill="none" stroke="black"/>
<path d="M 56,192 L 56,224" fill="none" stroke="black"/>
<path d="M 144,32 L 144,96" fill="none" stroke="black"/>
<path d="M 232,64 L 232,128" fill="none" stroke="black"/>
<path d="M 320,96 L 320,160" fill="none" stroke="black"/>
<path d="M 408,128 L 408,192" fill="none" stroke="black"/>
<path d="M 56,48 L 88,48" fill="none" stroke="black"/>
<path d="M 112,48 L 144,48" fill="none" stroke="black"/>
<path d="M 144,80 L 176,80" fill="none" stroke="black"/>
<path d="M 200,80 L 232,80" fill="none" stroke="black"/>
<path d="M 232,112 L 264,112" fill="none" stroke="black"/>
<path d="M 288,112 L 320,112" fill="none" stroke="black"/>
<path d="M 320,144 L 352,144" fill="none" stroke="black"/>
<path d="M 376,144 L 408,144" fill="none" stroke="black"/>
<path d="M 408,176 L 432,176" fill="none" stroke="black"/>
<path d="M 56,208 L 528,208" fill="none" stroke="black"/>
<polygon class="arrowhead" points="536,208 524,202.4 524,213.6" fill="black" transform="rotate(0,528,208)"/>
<g class="text">
<text x="100" y="52">K0</text>
<text x="188" y="84">K1</text>
<text x="276" y="116">K2</text>
<text x="364" y="148">K3</text>
<text x="456" y="180">...</text>
<text x="20" y="212">Time</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
      .          .
      +----K0----+
      '          |          .
                 +----K1----+
                 '          |          .
                            +----K2----+
                            '          |          .
                                       +----K3----+
                                       '          |
                                                  +--- ...
      .                                           '
Time  +---------------------------------------------------------->
      '
]]></artwork></artset></figure>

<t>In this arrangement, it is unambiguous which subkey to encrypt to, and validity windows can be shorter.
But toward the end of one subkey's validity window, the keyholder needs to distribute the next subkey as well as the current subkey,
in case an incoming message is produced after the cutover.
When the keyholder does this, they are distributing two subkeys (which makes the certificate larger).</t>

<t>Also, the upcoming subkey will have a creation time and signature creation time in the future,
and peer implementation support for subkeys with creation times or subkey binding times in the future is dubious.
Some peers may reject the subkey for being "from the future", and strip it before storing the certificate.
Those peers won't have it available when they need it,
and might end up having to encrypt to the fallback subkey.
Other peers may ignore the creation timestamps, and go ahead and encrypt to the subkey before its validity window begins.</t>

<t>Policy needs a decision about when to start distributing the new subkey,
but that decision does not affect the wireformat.</t>

<t>If keyholder's UMA X distributes the new subkey earlier than keyholder's UMA Y,
and a peer encrypts a message to the new subkey before the new subkey is valid,
keyholder's UMA Y may need to trial-ratchet until it finds the right subkey.</t>

</section>
<section anchor="overlapping-validity-windows"><name>Overlapping Validity Windows</name>

<t>With overlapping validity windows, each subsequent rotating subkey's validity starts during the validity
window of the prior rotating subkey.</t>

<figure title="Overlapping Validity Windows"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="536" viewBox="0 0 536 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 56,32 L 56,64" fill="none" stroke="black"/>
<path d="M 56,192 L 56,224" fill="none" stroke="black"/>
<path d="M 144,64 L 144,96" fill="none" stroke="black"/>
<path d="M 184,32 L 184,64" fill="none" stroke="black"/>
<path d="M 232,96 L 232,128" fill="none" stroke="black"/>
<path d="M 272,64 L 272,96" fill="none" stroke="black"/>
<path d="M 320,128 L 320,160" fill="none" stroke="black"/>
<path d="M 360,96 L 360,128" fill="none" stroke="black"/>
<path d="M 408,160 L 408,192" fill="none" stroke="black"/>
<path d="M 448,128 L 448,160" fill="none" stroke="black"/>
<path d="M 56,48 L 112,48" fill="none" stroke="black"/>
<path d="M 136,48 L 184,48" fill="none" stroke="black"/>
<path d="M 144,80 L 192,80" fill="none" stroke="black"/>
<path d="M 216,80 L 272,80" fill="none" stroke="black"/>
<path d="M 232,112 L 280,112" fill="none" stroke="black"/>
<path d="M 304,112 L 360,112" fill="none" stroke="black"/>
<path d="M 320,144 L 368,144" fill="none" stroke="black"/>
<path d="M 392,144 L 448,144" fill="none" stroke="black"/>
<path d="M 408,176 L 472,176" fill="none" stroke="black"/>
<path d="M 56,208 L 528,208" fill="none" stroke="black"/>
<polygon class="arrowhead" points="536,208 524,202.4 524,213.6" fill="black" transform="rotate(0,528,208)"/>
<g class="text">
<text x="124" y="52">K0</text>
<text x="204" y="84">K1</text>
<text x="292" y="116">K2</text>
<text x="380" y="148">K3</text>
<text x="496" y="180">...</text>
<text x="20" y="212">Time</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
      .               .
      +-------K0------+
      '          .    '          .
                 +------K1-------+
                 '          .    '          .
                            +------K2-------+
                            '          .    '          .
                                       +------K3-------+
                                       '          .    '
                                                  +-------- ...
      .                                           '
Time  +---------------------------------------------------------->
      '
]]></artwork></artset></figure>

<t>The validity window for any subkey in this scheme is wider than back-to-back.
Keyholder only needs to distribute a single rotating subkey.</t>

<t>Policy needs a decision about how much the validity windows should overlap, which affects the wireformat.
This document records the convention that the validity windows overlap by 50% (new subkey created halfway through the prior subkey's validity).</t>

<t>The keyholder's UMAs can blindly coordinate subkey distribution by
only distributing subkeys whose validity window is currently active.</t>

</section>
<section anchor="superset-validity-windows"><name>Superset Validity Windows</name>

<t>With superset validity windows, each rotating subkey has an identical creation time,
but each subsequent subkey has a later expiration date.</t>

<figure title="Superset Validity Windows"><artset><artwork  type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="536" viewBox="0 0 536 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
<path d="M 56,32 L 56,224" fill="none" stroke="black"/>
<path d="M 144,32 L 144,64" fill="none" stroke="black"/>
<path d="M 232,64 L 232,96" fill="none" stroke="black"/>
<path d="M 320,96 L 320,128" fill="none" stroke="black"/>
<path d="M 408,128 L 408,160" fill="none" stroke="black"/>
<path d="M 56,48 L 88,48" fill="none" stroke="black"/>
<path d="M 112,48 L 144,48" fill="none" stroke="black"/>
<path d="M 56,80 L 128,80" fill="none" stroke="black"/>
<path d="M 152,80 L 232,80" fill="none" stroke="black"/>
<path d="M 56,112 L 176,112" fill="none" stroke="black"/>
<path d="M 200,112 L 320,112" fill="none" stroke="black"/>
<path d="M 56,144 L 232,144" fill="none" stroke="black"/>
<path d="M 256,144 L 408,144" fill="none" stroke="black"/>
<path d="M 56,176 L 432,176" fill="none" stroke="black"/>
<path d="M 56,208 L 528,208" fill="none" stroke="black"/>
<polygon class="arrowhead" points="536,208 524,202.4 524,213.6" fill="black" transform="rotate(0,528,208)"/>
<g class="text">
<text x="100" y="52">K0</text>
<text x="140" y="84">K1</text>
<text x="188" y="116">K2</text>
<text x="244" y="148">K3</text>
<text x="456" y="180">...</text>
<text x="20" y="212">Time</text>
</g>
</svg>
</artwork><artwork  type="ascii-art"><![CDATA[
      .          .
      +----K0----+
      |          '          .
      +---------K1----------+
      |                     '          .
      +---------------K2---------------+
      |                                '          .
      +----------------------K3-------------------+
      |                                           '
      +----------------------------------------------- ...
      |
Time  +---------------------------------------------------------->
      '
]]></artwork></artset></figure>

<t>This scheme relies on the keyholder's machines delaying generation of each subsequent rotating subkey,
as a prematurely-generated (and distributed) subkey might get used by a peer.</t>

</section>
<section anchor="validity-window-conclusion"><name>Validity Window Conclusion</name>

<t>Decision: better to go with overlapping,
so that the common case is a certificate with only a single rotating subkey.</t>

</section>
</section>
<section anchor="ed25519-for-primary-key"><name>Ed25519 for Primary Key</name>

<t>Why not go with PQ/T primary key?
Because signatures from all PQ/T keys are very large,
and each cert needs at least three signatures in it.</t>

<t>Why not go with Ed448 primary key?
Because Ed25519 implementations have endured significantly more scrutiny than Ed448 implementations.
Also, Ed25519 is already mandatory-to-implement in OpenPGP, and signatures are marginally smaller.</t>

</section>
<section anchor="balancing-rotation-and-reliable-deletion-timing"><name>Balancing Rotation and Reliable Deletion Timing</name>

<t>The default 5-day rotation period, 10-day expiration, and 20-day deletion
schedule balance reliability with security.
The 10-day buffer after expiration accounts for potential message
transmission delays in systems like SMTP.
Deleting the secret key material after 20 days ensures that reliable
message deletion occurs in the near future.
This timeline prevents secret keys from being stored longer than necessary
while remaining compatible with the pace of modern email.</t>

</section>
<section anchor="no-explicit-annotations"><name>No Explicit Annotations</name>

<t>An Autocrypt v2 certificate is identifiable by its structure and parameterization alone.
There is no attempt to mark a certificate explicitly as an attempt at Autocrypt v2.</t>

<t>The design goal of interop with peers with a merely upgraded OpenPGP implementation
suggests that an explicit indicator would be unnecessary.</t>

</section>
<section anchor="seed-free-ratcheting"><name>Seed-free Ratcheting</name>

<t>When ratcheting a secret subkey forward,
this design only uses secret entropy from
the current ratcheting subkey's secret key material.</t>

<t>Introducing additional data in the form of a seed would require special coordination
between cooperating peers for the initial synchronization of that seed,
which complicates the goal of minimizing network synchronization.</t>

<t>For example, a keyholder that adds another UMA to their account currently needs
to transfer an OpenPGP TSK to the new UMA.
How would a distinct seed be transmitted to the other UMA in such a way that it would
not be be accidentally re-transmitted to a peer by legacy tooling that extracts
an OpenPGP certificate from the TSK?</t>

<t>Another choice of additional seed material could be the secret key material of the
primary key itself, or of the fallback's secret key material.
By not including any of that secret key material in the input to the ratchet,
we enable the keyholder to distribute these two long-term keys to their various UMAs
via a tamper-resistant hardware device.</t>

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

<section anchor="key-and-certificate-created"><name>Key and Certificate Created</name>

<t>At
2025-11-01T17:33:45Z,
this Autocrypt v2 secret key was created, with the associated certificate.</t>

<section anchor="initial-certificate"><name>Initial Certificate</name>

<t>This outbound certificate is distributed to peers that the key holder wants to communicate with.</t>

<figure><sourcecode type="application/pgp-keys" name="initial.cert"><![CDATA[
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
K3H73ZjWMHxBCQ==
-----END PGP PUBLIC KEY BLOCK-----

]]></sourcecode></figure>

</section>
<section anchor="initial-tsk"><name>Initial TSK</name>

<t>This secret key is made available only to the keyholder's own devices.</t>

<figure><sourcecode type="application/pgp-keys" name="initial.key"><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

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
-----END PGP PRIVATE KEY BLOCK-----

]]></sourcecode></figure>

</section>
</section>
<section anchor="after-new-subkey-added"><name>After New Subkey Added</name>

<t>After
2025-11-06T17:33:45Z
(<spanx style="verb">min_rd</spanx> after the initial key creation), a new rotating subkey is added.</t>

<t>The new subkey is derived via HKDF as described in <xref target="ac2-ratchet"/>, with the following parameters:</t>

<t>Salt:</t>

<figure><sourcecode type="text/plain" name="salt.hexdump"><![CDATA[
000  69 0c db f9 ce c4 0a 06  69 06 44 79 23 00 00 04
010  c0 98 24 64 8a b5 b9 09  83 5d b9 c1 09 b3 9d 0e
020  7b 05 d3 20 3a 5d fb 50  51 0f cf 37 c7 ae 4a 9a
030  6a 5b 63 c5 40 05 77 65  73 8b a7 20 4e f2 9c c3
040  57 4c 9b d6 91 5f 23 50  4d c7 51 17 a7 e2 4f 54
050  52 5c d1 90 5d ee c0 a8  78 e9 50 a7 f7 84 a1 9b
060  0e eb b3 9c 14 e3 84 17  73 b6 b2 b3 46 29 6b 75
070  c5 56 78 e8 30 4a 3e 0b  c3 79 36 a2 d0 8a 92 07
080  a6 62 63 80 48 d5 1a 1f  3f 13 5d 20 e4 50 93 73
090  6b 31 f1 70 23 77 3c 69  6c b4 5c 94 a6 a0 a4 05
0a0  25 69 b3 e3 60 83 a8 c2  83 88 65 3b 3d 0b 1d 39
0b0  c2 0c b8 f7 5a 44 70 55  2f 58 05 9b 74 b6 f1 56
0c0  1f 6d ab 53 1d 57 61 49  76 25 3c 3a 1b c8 83 62
0d0  c7 74 ad 8a 00 ae e1 f2  00 50 c1 a4 88 cb 49 fe
0e0  9a 1c bf d4 72 77 81 c7  fc 17 14 ca 7c c4 0f 02
0f0  1d 98 9b 45 b9 a1 5a 9c  d4 74 d8 02 51 2e 72 02
100  95 65 99 79 e5 35 f5 6c  39 dd f5 00 eb e7 6a cd
110  11 c7 f9 14 52 32 49 bc  59 6c 37 3f ba 69 84 47
120  c4 fa a0 85 d7 99 b2 ed  51 12 9d 8a 77 78 59 2b
130  56 57 85 c4 04 61 2f a0  1d a0 eb 98 a0 28 8f af
140  97 c6 c7 f3 3d 15 d9 7c  e7 49 c2 1f 28 ce 6a 34
150  49 b5 7b 92 5c ba 01 9a  7b 0f 41 c5 a3 4a ba 8b
160  7a 74 b4 fe f2 7e c8 a1  3a 8e 2c 74 33 83 94 b1
170  71 c0 8d 5a c2 d2 b7 01  db 43 62 36 39 76 0f 40
180  29 5e 44 cc 1b 38 80 eb  50 8b 05 a9 0c d7 77 89
190  d9 37 a4 b4 cb 78 05 39  88 a0 41 c9 a6 96 3c 79
1a0  03 6e 1e 69 a9 b8 a4 9d  08 e0 03 d5 95 89 d1 ca
1b0  90 b2 29 6a cc ca 23 98  ac a4 19 cb 77 18 a1 4a
1c0  72 70 c3 0a c1 74 76 61  2f 6a 41 ac 0f 23 9e d6
1d0  b2 8e bb 2a c4 00 8d 8b  d6 07 7f 7b b7 4b 11 cc
1e0  4d c5 17 a7 91 c2 59 08  66 5c b7 da b2 7c e8 c0
1f0  c9 e0 55 e8 41 69 04 d9  84 c6 26 b8 77 0a 8f 0a
200  d9 c5 96 25 88 f3 3c 37  40 30 9e 8b 92 c1 1b dc
210  b5 d8 70 63 e1 19 3d 66  25 a1 98 eb 05 8b 1b 4f
220  37 a0 9a 48 78 31 4c 5c  13 9e 09 17 ce e6 8b aa
230  45 1f 35 f7 ac 11 c9 2a  1d e6 44 4a 2a 02 a2 ab
240  2e 0f 22 22 f3 21 00 ae  48 b7 27 09 40 70 a9 7e
250  3b 14 b4 01 91 bb c6 d0  cf 9c b0 ae 8d d7 29 05
260  56 30 9e 77 80 83 33 27  f9 01 c8 68 f2 71 fd e9
270  76 dd ba 73 d6 59 7c f2  6a cd 9b a2 22 c3 c7 c1
280  e8 40 37 69 91 77 a9 b9  c5 8d 49 0f ae a0 b5 62
290  64 bc 96 f5 8a 5a fb 69  8c 08 7a e8 c9 19 c9 53
2a0  2c 2e d7 25 0d a4 80 7e  c7 b2 96 e0 5c 74 60 3f
2b0  24 4a 12 6a d5 60 44 b8  41 fc 02 6d 7d 9a 65 24
2c0  93 b9 63 06 c7 4b 1b 9a  39 43 09 31 88 04 81 45
2d0  6b b8 d8 81 fa 85 c1 75  ab 94 f1 66 ac 01 98 3c
2e0  63 e4 02 aa 53 10 e8 c8  12 e5 dc 41 1d 96 7c ff
2f0  f8 cc f0 70 03 f1 65 05  3f f9 57 84 75 b4 c7 7c
300  b5 08 d4 25 ed 24 2a 55  48 c8 c9 f3 7a 68 4b 13
310  ed 7c 7c 74 02 77 38 d7  07 13 f8 84 69 f0 12 59
320  b4 5d 90 0a 06 42 f1 0d  c8 da bb 6c 13 b9 c8 b7
330  8a 59 45 85 74 45 b1 af  c0 cc 73 9c 7d 99 f7 b3
340  f5 70 29 b2 71 c6 09 69  71 96 92 08 70 35 be 9d
350  70 89 cf b5 7a fc d5 64  71 70 80 71 e3 88 20 5a
360  01 70 90 b7 52 86 8e bc  a6 68 3a d1 c5 9c 8a 81
370  0a c4 6c 01 04 87 1a 42  af a9 24 30 e8 a9 50 b6
380  01 4f 1c 01 39 07 75 98  73 ac 8f 1a 45 77 df 59
390  7e 31 b0 9d 3f e1 af f5  34 8d 05 d2 6c 6f 65 17
3a0  ce d5 08 e0 d2 87 d8 a6  43 d2 3a 69 f2 8c 39 58
3b0  28 29 99 44 ab f3 95 89  2f d0 b2 f4 57 a4 61 0b
3c0  0d ae 68 a0 e1 83 7b 22  67 38 1f 05 4a 1c 1b 06
3d0  7c 91 a4 d8 ec af fa d2  a0 b8 c7 9a 2a 22 59 dc
3e0  b4 23 79 f1 c8 4c 38 75  3b 60 63 73 69 40 af 81
3f0  b5 13 51 6b 07 20 6b 7b  c8 b7 fe 02 29 29 99 3a
400  bd 22 39 32 8c b9 2e 6a  4d 1b 54 24 29 13 01 f2
410  05 28 91 56 aa 36 08 59  86 77 35 3a c1 1f 1d 00
420  58 ae b1 07 cb 60 22 c5  f1 7f 39 97 80 e4 11 8a
430  70 b1 88 ad 50 8b 3e 3c  c0 76 52 83 95 bb 56 49
440  85 b0 76 d2 ba e6 4c c4  99 f7 61 06 b8 18 af cb
450  8a c9 a2 ce 6d 23 7b 7b  67 c8 11 90 3f 4d d8 bc
460  a6 47 7c 53 db 18 2f f6  9f 91 37 18 25 48 cd 96
470  97 13 33 10 3f cc a8 3a  b6 d1 aa 42 77 9a 41 41
480  37 44 ab b7 a9 dc 14 c6  b4 0b 4e e5 ad 98 f2 cc
490  6b 99 ca 83 e1 3b 0f 37  b0 a6 31 57 52 51 79 e8
4a0  f5 4d 51 2a 32 a0 38 8f  97 c2 7e cc 5c 0b 0d 27
4b0  47 5f d9 99 e6 a3 35 93  d4 8e ba 71 c3 a8 be 55
4c0  f9 5c c9 60 84 eb 26 b4  f0 43 89 98 89 2c 22 02
4d0  39                                              
4d1
]]></sourcecode></figure>

<t>Info:</t>

<figure><sourcecode type="text/plain" name="info.hexdump"><![CDATA[
000  41 75 74 6f 63 72 79 70  74 5f 76 32 5f 72 61 74
010  63 68 65 74 c6 2a 06 69  06 44 79 1b 00 00 00 20
020  71 12 55 45 47 6a 19 33  4c 9f 0c 13 79 06 6f fa
030  8f 17 89 a0 dd 55 34 e9  5e 78 cf 34 7d 85 47 8c
040  00 0d 2f 00                                     
044
]]></sourcecode></figure>

<t>IKM:</t>

<figure><sourcecode type="text/plain" name="ikm.hexdump"><![CDATA[
000  a0 d7 c7 5b f6 52 19 1a  27 60 2f f2 8c 55 b1 a6
010  90 e4 93 0b 3c 1c a6 dd  9b 89 dc af a8 e1 18 72
020  9c ac 36 0e 74 e2 5c 9c  d6 8d a9 f7 e0 d2 e9 ff
030  97 81 66 f6 7e 09 ca 82  92 15 17 5c de b9 2d 31
040  a4 55 62 46 32 2a cc 50  ac 31 eb b6 66 61 60 c2
050  e8 c7 db 75 76 38 d9 6a  1e 46 bf 11 3f 79 98 2e
060
]]></sourcecode></figure>

<t>The HKDF output is:</t>

<figure><sourcecode type="text/plain" name="ks.hexdump"><![CDATA[
000  46 d0 19 07 17 f2 68 a0  d1 52 26 2e e9 28 48 23
010  f9 db dc a5 99 54 00 b3  77 6c a8 8a c5 e5 6b 01
020  2e b4 11 60 a4 9e f9 f9  d5 e8 6f 41 6b 09 bf d3
030  a1 34 56 52 93 02 d4 c5  d1 f8 28 9b 5e 5a f6 f2
040  04 1f b5 2f c6 4d f7 01  bc 75 3d d4 5d d0 5a 19
050  98 fc 39 9a 13 26 18 c4  d6 f2 79 92 fb be 3f 51
060  89 80 49 b1 cb 63 fc 2a  68 47 5c a3 57 58 96 e8
070  ae a8 36 c1 10 6a 3f 23  ec 4d 1c 06 46 58 6e e8
080  b3 24 97 b3 13 a4 77 fa  1d 23 80 b0 6f 96 d4 ac
090  f3 84 f8 d0 46 ab 27 1a  7f b3 10 15 29 9d bc 22
0a0
]]></sourcecode></figure>

<t>The first 64 octets of this is fed through SHA2_512 to create the salt for the subkey binding signature.</t>

<t>The remaining octets are used to initialize the new subkey's secret key material.</t>

<t>This results in a new TSK and a new cert.</t>

<section anchor="new-subkey"><name>Certificate With New Subkey</name>

<t>This updated outbound certificate should be distributed to the keyholder's peers starting on
2025-11-06T17:33:45Z.</t>

<figure><sourcecode type="application/pgp-keys" name="old-subkey-removed.cert"><![CDATA[
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
aWzDxicPfxBFCw==
-----END PGP PUBLIC KEY BLOCK-----

]]></sourcecode></figure>

</section>
<section anchor="tsk-with-new-subkey"><name>TSK With New Subkey</name>

<t>Every device from the keyholder should be able to derive this exact secret key from the TSK found in <xref target="initial-tsk"/>.</t>

<figure><sourcecode type="application/pgp-keys" name="new-subkey-added.key"><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

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
-----END PGP PRIVATE KEY BLOCK-----

]]></sourcecode></figure>

</section>
<section anchor="merged-certificate"><name>Merged Certificate</name>

<t>A peer that had received the original certificate and then the subsequent certificate
would have merged the two into this object:</t>

<figure><sourcecode type="application/pgp-keys" name="new-subkey-added.cert"><![CDATA[
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
-----END PGP PUBLIC KEY BLOCK-----

]]></sourcecode></figure>

<t>After
2025-11-11T17:33:45Z
(when the first subkey expires and is no longer usable),
the peer can prune the merged certificate,
which should bring it back to the certificate found in <xref target="new-subkey"/>.</t>

</section>
</section>
<section anchor="old-subkey-removed"><name>Old Subkey Removed</name>

<t>When the key and certificate are no longer useful, they can be removed.</t>

<section anchor="tsk-with-old-subkey-removed"><name>TSK With Old Subkey Removed</name>

<t><spanx style="verb">max_latency</spanx> after the old rotating subkey expires (that is, any time after
2025-11-21T17:33:45Z),
the keyholder's device checks for all incoming messages and processes them.</t>

<t>Once they have all been received and processed, the keyholder's device destroys the expired rotating secret subkey, leaving this TSK.</t>

<figure><sourcecode type="application/pgp-keys" name="old-subkey-removed.key"><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

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
-----END PGP PRIVATE KEY BLOCK-----

]]></sourcecode></figure>

</section>
</section>
</section>
<section numbered="false" anchor="acknowledgements"><name>Acknowledgements</name>

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

<section numbered="false" anchor="changes-from-draft-autocrypt-openpgp-cert-v2-00-to-draft-autocrypt-openpgp-cert-v2-01"><name>Changes from draft-autocrypt-openpgp-cert-v2-00 to draft-autocrypt-openpgp-cert-v2-01</name>

<t><list style="symbols">
  <t>rename <spanx style="verb">delay</spanx> to <spanx style="verb">max_latency</spanx></t>
  <t>clean up some lingering terminology that should have been <spanx style="verb">max_rd</spanx></t>
  <t>align timeline diagram with text</t>
  <t>refocus abstract</t>
  <t>test vector descriptions: correct when old secret subkey gets removed</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
L+p491IoJ4xO9rVQs96f8qv7xeBjX8725+Z+uu5px9RIqc/G7st205R68/56
M1lsG6ttIrdTjPd4/anaX+TLpXZ9u1sVPG1uFQnn+Hjypp1uJf2hKodMSbkp
68t8+7mxkJSieZi8D/KVdV5dG0b8qWyWe7X1+KCMFDdbTM7c9mG1cBeZB+3+
Ob6OD/J5o+OsXpqOVixml2up2N5u+kYv954vxm/uvdWkr6fGL0bWLBjtqvny
6qn2c7FTrKbfR0Yr3yrE0+5wmth+3KTKXr6+9KRysVTPrLbHWnVRLBR6rUah
UXt0WsXte31W6+XXk0StusltOmbyKdGeqdrTzH3uPbpTqzHpH41lVspUCq1a
x1Xtm97D63o9Pxz1RWOwKq8P9dm+6M2K2XHNdrda5mlQ6kxaH8WX3otRelb2
/WUm16jVpEFuXOq3N48DR9uMH7fNQ3q+Sabqx91stVRM7aHsTvNKpzHt9trz
rtJf14edh9Fj72lV0YrNdGMpddKLjv0yqZreJtNd2jf3H+OeoS4flo6dWe+6
ZK6XxWFb3t4/1czJqG33H2ed9LBW8yb7Ve1935cy43a89VJ8KB4rZaVwHHSr
i/GkpNXrD9r7TblhqU+eG0+qnYfqqpUbPZe65L40zRdjcr9MxBvvVSljd27e
R63suDBxls1O98Wa1wetQjpVXtdrRX08cJ/U5KbYbmTaLa+5aw+e3J27fdac
+1HJy7eHkjOqJV87+0f7xX3Md9dbo+FUhzedp96wYTVuzMbi2ay3yi/Z2sa7
z757SSK6Nosfc9PNFRIzVX+SsoT0DkrGR/a9Yd0n8l13ULNM1e1tjv1ca28r
5cw84TUOucFTpZk6NFIvu5YzaJVL97l5euo+KdJxVu60HsyG06k5u5xVPL46
tXZHc0aZwXy1WsH597MpM77RjtOKu5nEC5WVORqZw36loS/7NtF7WoVk4jh5
nar3m5fFptYcpBP22HteDA6V90JhWjQbat6s1j4O7bpeV+xZvqlYm+TLtFGe
WoWhtC6ubuLVRTX3ur25zxe9ib7P9Uyj4qh23+22kh/q8d7adPPtdM/d9SvL
49IuGSW1pqXU9/0sn5fKjVGj5i76mff2xB7sBzcztaE+LRMLe1xYvIzjo0XP
mAwH+/bE7XQ2yva93V40541JZqpPy4fNh5Rf1pzywv6YDQbxScH7eC+6iVqr
ry6qncXHfL1LVUdmfLLde4fG9rE1TixutM77dHOoKMZDbd9xpdShGO+22vHU
U220VNvN3HO+6DTb5Up3lHVf9uVEv/OqDo+ZpqZnUyN3dTDWs3rZ00az8sbZ
HSbS48Ox1Jj1W0+1Zn49HSeLlW2+uxw3jZ52Y1ae9kevfRhPN7WHdb3R0cyX
Sca9f1gWFmZxP9C1yaOU2DbuU3XjvW17Ztvx7h+IJO8qg2Vy2XivrPtP6+dd
3qn360/aS939WGXcwiTeHY6sx/TksLWUD6lWtBOZ90Wx3H66udlo5Xp2Mn2q
7luvuc5Dc9R+rT4XzbHXfxk+9+OrQaWcXO0PzW5F1/t1s9ZZjqXKx2Y0KxVb
+9fh3kwUmtNjszdaLO/ro8dWe3+j75fOoVt6KBr78ZjxUVfgoy3pV5ko46HI
PvtZtfeRMRP5Tqcv7exd8T1d2Kb04mOysByOU83n8pDsO1utHAepm6a5e6zu
th9quX5v3Kj7x1Zja5vHeP31o6pMZktprzSs/P2gpMetj/FaTxXLN+9P76l8
+iO5LTnp91q+1DnkmQwxaJH5h/lVsb80yG0pjtuatCVDu5l4RydAqJXW2k2i
0C/lcqlDNtNYrcjB5l7yhVfNVNNbi/Cso9Vqvw7ru9HyJff+XE5Vpee+bqWX
j8/P5kd/WUlt941FOvtSJMc0WKz2D46b2T+n071X9UE5uvHxWkm9Vl6sd7tV
tm+KuXZGam+aPWNdq65X9fd5+f3laZG7Lyfi80ylOFST7iH3mn/XPg7rabOv
mg1lvs4/m8q0+z6udey93alJk6H7WDzEM/v5Mf2YWJfVyvNulB9Nteb08LJ4
9DaJlvaSrNQ14znXWexq82SzqjWSjXzjYZGbF3oEiIPaMW7drBbH+0S1npqr
s1zlMGzMWr1ufpEcr+KjjP2yURPV4ThvlrfqvPEymZiZzPA1MS1ZmvTYKzmZ
pNMuq7NMpVI7DqaHybSk3m9Xq3I/N8zatdfX1bTpPfcbRAXQ0qOBN3pJv5YL
T+WdXUjOpWzGmDdqNzszN63mPuIvydcPa6DWZo1WZtMurxJ6pq5u50+Kvn8s
HJQ2QQIvqzWHNznroWYPNx2pWe19zDODg6oW2yO3OfD21WkvWUt2XsfdXtHU
+639tFMrOc81t7LpfbxqaWvSzg7ix9S80hkbc6mnrlbm+yGTT6Z1RVml1/V4
LZ3vvphjq39cF4+NkdM6Gp2x0+hNjil1bD+vj2qr1di/9pPjweNG6in7bi3z
MHLt7EPD7eXfx7tRIfX44MXd/kc5Valk9f7eXNYm5jGVdOq5bKtUT1de7d5o
WU6Oh09S3VmkinaukVRHo/r4/aNb0vKtera5dMvTVPN1rD51F0/DxKquPI2z
+1HzKZ5L2fV1TS9VWq+Fji4V+7NOxiZCRj+XeMzu+8eBrWWW/UZj3jA2x3S3
ZjQ/ar3idtBUreJzYb95TT9Umr3Ccrp7irduVMltZNuJ47Ly8l7UtXSx1DrO
MnmiSOas6mP2daptre5o9PpxVNzk1DaapUOuavdK2nr5qq+36qgtDXo3W7tJ
uG3zOHokqH6TXLWKVcc+9q3683G/TRyf2+ta4ebw0BilK4f4uJRbDhb1TWJU
KG/L1ZyUXyUeV6vn5fLBfC+4WvMpY2d6++XByA8K/dE2naxVswu1kthkhofJ
Zl9YlQ7vGSKSPh9K9rHQNKVUuayZ1sf9Tetjr+a7h0nv+f7mRS9r02F11nyu
JYqvXr24fhm03uu51NoeHLrerHqI5y01ndirQ+mm1l/nCvWJV0n2ivNJMddL
1ZKO55YfrJqXXk/645d4f/q027cOH1Y1OXl86CbU4uqoquO68vo0kpbzxb49
zWpqzep6r04uMeof1FrhkE7P56N5Zb9saoOFnc2tV/NsXB2phl1uHJ72hUJN
VXqbm7VUL5XszUsxmX/OqfnhsqpNFh9OLaf0X2ez0Wv64Nbj92nlPtGuxSvx
1WE3Icee6L3P4/ZsvF52B1JnZR3fS+a4USQyZmP3YY6Xu3izGX/J9hfFfXKr
NEqLeco1Jh/zWeHZVp/2k9xSGY4fGvfZ+KaYJtK6vamZluoV25mcumh1qs8P
46f2h/Jc3M2nz8PnkVutPXkPx+bsJm8s16vh5rH2vjy+N5dbZRmfSi/F3rq8
rx4LA6P/srEJb1w9aR/PBCdzWr5ibN3erDkuNiu511zGTJeW5fF6744Nj9zO
my6RTaRnu/OyTUzqi2khGXec1bA1mDwmy0/bgrE7pp267Wa8Wsp7mOTm/WXp
sZ1sHlf91GGYPMx3j+ubvtQ+zM1BKzkyD60PIjq1NqVNMq6si1pmXegNtfLm
QV+nCsMnL+91MkpynHMPzkrdlNJDt9t+KK6k1os2eH617MfnRL/x3ph3ajev
e+uh9Zp32/W4NktOrJX9MRomatmsqnbsnfmaeW2Z80XHXXndQkkyJka9WawV
O2qjX1jMp6g8lmqVOdXkKsVevt3c54urfc+o9caz3mhbaBe1pFM5PO9b1YG0
KLXuD/Zm/J7YdQwla3e3zYz7+D5IISMu3Df6pfe216suJ4VdvRhP9qzEzC1X
RrnnwceyrmpSMV1YDez23swahcxH4+M+l5nsO4vK4mZVL1v2ZDSfDx4nrcdx
4n1hvFfa47xu5BJ9tXP/nusWW0Wpkao+pCZEWq4eCsXeH39Qnb3cLn2msbP+
cIFNAixuP35jZoGY5y7/4n67wOSBnZq0cMUkWiwl6suDQk7UHuP+jQECSop8
wf7Qr73kh+VTA8Sz+08aIPb58jBXk3qpWU9vrx4SWmcyWBbuk9l4nfDCRK/2
er9Jb+fjj0Kn0miiteKcsUL6irXinLFC+oq14pyxQvqKteKQ6ztRY4X0FWvF
OWOF9BVrxTljhfQVa8U5Y4X0FWvFOWOF9BVrxTljhfQVa8U5Y4X0FWvFOWOF
9BVrxTljhfQVa8U5Y4X0FWvFOWOF9BVrxTljhfQVa8U5Y4X0FWvFOWOF9BVr
xTljhfQVa8U5Y4X0FWvFOWOF9BVrxTljhfQVa8U5Y4X0FWvFOWOF9BVrxTlj
hfQVa8U5Y4X0FWvFOWOF9BVrxTljhfQVa8U5Y4X0FWvFOWOFdGqtSOeVp8ni
cUbE785r8jhe11/bjbJVLbYX8dx2VLbdwqhf+ljrnZend0WaprRCPq/MFkrl
qbw4pEebl3FHsTKT0v5+1N6Yw5daX2uOdqVt772667eaRXsz792Xb+Lpp+x2
kJUUp71IbXKFD+NdSa/KTeV4XOxt9+mp4NaAATfzoyLKD73GtFSsLQqLx4KS
LsfrKcV9rQzz0l5rlFsf90/G2uiOctm6s5nfpHerj2S7qSMLL+tWuXUz0Xql
9+U029zbN/mpl5rvtPmknGwfpUSh/LBv3CwO6tK7NzLT+/7Dg5sqFGfpndXq
DovOpk4k+ZfcIbl6zbTIPPtufJ7y6rlk49XbL7qSfbAf953WozPP3tSO+fwJ
C6/Pl5PaJrHtrUqv5EYVpx2tZLmV+DGffZ15Pem5d99t5/TtYL3ejJLdSi//
kpq8dprrY6GTW3+UXuLHaWJdmdUShfYhUX5d39S7L5W6Si6D9uAWbUnvmL31
vV62yQXKPnTUSqdTrqQ6SddpPzVGXuLwMklnS4VGd74r6UPFiNc2g0J2YozT
hVqib8+k7qGt1Tr93jLVdlqzyr6WUnPK6Bh/rQ9WdqNXqY9WH+lksbRpNUrG
0/NDt+dqHbXW2nY1pV8tvEjNxLyySg2SuZfxbKp4w+qLthi8js1uyZ4ea23j
kBp4xry4Tc9q+efW09JoefX7ta3uHvtHLV2tSvcF9floEV1jX9NWda+yVSqK
1e7Hk/l6v2nVioSkTXT9OfE42mdSs+d89oZIPv1q9abfH7SWq5w0Gu1T3Yf1
elGelW82xUoiszo+vJQH1nid0itL58XUK4d8f9HM5jW7sx3bRaPrZGZPh/vW
Y0Uzc1ImbhWrx/eO8t6ve6/bwWvTLqwst9tTR+8DZ9PUrUH8fle/OTbK2Xfj
EG+lO8/uazX//uIU445akJLxttF+N5OleH79uhy2nj6MfDZRbBaUZSuR0uvJ
ob70Wl66MFzV7HK1vl6Pc3qvva2uVuttY0AUjk6+lJiM6nF103MNc/PRst9X
jePySfVST41KQ7VKpSLBG21V3inLJ7d07OgJp9HZHp1yvpZsSom5dq8/aM2y
emgf+rq1VOuT4tNE9R43x1nnPX/UCy/ZcmVdaK/KB0NJa/tNt+hZFdMY1XIf
+5TUKxV1I9MsPD0eE8lq4T3dXz5OjNFi1XErxsHrtrNFZVCdH4aV/dCaL18/
tkpzs3yetWe6W1aXG6mqT8oDwya33N2WjjUjdyznnaWRqu/NvNowbzqHQTw/
eXo4eKWuRWS/d01dF17Ge8vS8/OPliXd9Ko1pVs/3OtmMjVdfyRMM5dbOe1V
tmbsc7NCtpxPKZNKajO1Ku/Py66zKSbGq0HO3I0ao523lt7zi2y2tZwcX1pu
01PNkjLIz1z9aG4LREjK39fL9kDxXub95qJwn697s8narNc7mfF+Wh0ctorU
eW7VW+N5ef784mzbRuHGfi1oyvY5RyS//GSeG9/0ihuz1cu25oOMdihUJ5Pc
/f17K1fNl4gQUpG69+brojqKH1LHRLHdMx8Gvc3L83vtOGtnlbI7fHg9EDW+
nuq01Wr53igrs/xgNO1ry7z91NuV29KxvXmYFjqZY1NvjJ5HFa08Oji5UkvN
HB5XM/3j8ZUoNlb1qUjUc3Ndq6ml0Y31Wqx/PLxk79svS0l9LeZVvVOrVeyC
Wi+mnm2ls2tM7I5XrVi1TaHoEm2sN6g+LRu7zaC3zzbMnjevdKv5cqaQGo0l
NXvsPi1fUqmEedOaFrXuzdPucThoF7S6O00+v354z7V0u1FNNial+Pt6nbP3
mVFxvl49D5xcZlSXmo/F42NFX457bttZGfP0uP1QW6np6v6lUS24T0QbWSY7
x92N15hvW7rSMOqTVLP3rs+qtWFpkZA6ycK7mjTzTvopUU5UnMKx4Og5I3U/
r60bk2V2N6hlWjbh2Kt1+ynRWzb6rUJu/mwvX5RNe76YSAtLTXTc8qzaK4wd
p1w9JvPGYVa570z0fKbw1FCbTzXnpdjsvn/kNbNRMqfeaDAe7TWvkc0sP8rS
aqYtCs587OS2jaPS7EwH7Qc9OauVJ/n7oWbk1kst9/zojpv3ymw5VMf15/e2
uVaHrUP+/qMxz0qe97TpWbrSey6n+o1taqPtnw9OrzncjrxVt9lSMlZjflN+
KH3o+/V75fXZrGSy3Zf288A+EgmqK5m5+s1HZd8sDbTq6+Nqktm0EsvHQWdr
VUubZubl5uX/be9LelxHkjTv/BVE16UHqpzgvjQwB1KUqI3aqP3SxZ0SV5GS
SLHR/33MXPEyX2ZFTlX0YNCHUeIhEREi3d3MPvvM3GXu3k2O4001qTbNSsiO
Z7s5axeA0Twc7T9ONmWui/zY/3hehvu2LI0kaWplNHX9TMi9SrrE5mjqVcZx
4S8mXj535tcwjJh7/pEKw0zNhQn1LKb2cO17fAXM5ax3x+T4nNbtqjJGFUxq
4qM1K1r1xvqXy8mJRfPRDj6CU3RvygGJ4BQGYCv6EcK3E01jHpo2dfUvQvlX
kZz6XSgfKSVkwxyrBevEVJLZ5tQPd71mtXPb9WyxSltmFpmnacT3D9fxKLeq
5QfVpbkmDfYj6ZjYQZw6fX3GJh172S/MqbVlI12adbthI/eWjTJuxpUXPvxs
fmzCwWDyhwWbP1ni+FyxoV8HYsyD5sf+bs33SRUL/v23Qhbpt0IW6l//lp3z
f6/8v/20F/NHxdiv+yPIuWaf9479cbMA1sxiL58Vgb/fJ4Yb2vF4GKzPGU2N
Ie38fBwAOZPpdzep/1QtExY/ru7+taoRL5axnfT2b18vG9Xw0f+Mg9a/Z+Xn
uhFui/8oU7xpnWEYmpZUmvFo36VDlfYC2hNoxqEZ6fWBRAsCLas0x9PwLP4T
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
VA01V/5u66jFffzfbx1l+FgvjbS5CjvDsGdsz6nmz5G6OfUFyZk6rkW5dXOf
noy5pcfV81wMDlzWHmESWoQnR7puRzsuDaN295xmDcervpWolpylwXB7n6Zp
LW8oZ98Z7dlbhq0+7Dff3TqK6xt/WL6gqAE5N/TzRttfTz377Qiw35Yrflzz
86offK30BK3j/e68sZ/PTaNDsvhBKgp/3qj6n3+yZvHbQsovr+rF917T917T
917T917T917T917T917T917T917T917T917T917T917T917T917T917T/w/2
mmIkp/TXCtXnbFzf7x+s125dbzLWgsrjYUr/VM9Xpe3FI6ZmuUu1mTXpsZC1
wb5prOGCyvMmTdlbsdofeWZR6vtF2Jfj2cy4NzAPMfOhdN5MexM+bK2ZXkft
cLYX7r2zZVYJF6y8jmL06coc3FZTZZCoh+M82D7vbnqfT/JmZImb8VbOvM3F
Uwc94P2iuW2DcdXNto/HbJ7MWp+jrM4fsOokUy39Fo+3+nPmjornYXq6aG2p
jg9FsrSWSakkQXm+2OZjzXoL8zgUmaXe8LnlUM0+3a9PjThmS++5cYZ+HjPr
bL+04sGeg6DDpm0WMW03l+bFPb3pTnwGYjrZpzqt58e5RUmXkinGq3PAHB9B
mDA1xENt1iQ84OuqRmxoDgsAppLczi7nr5JaPLenpjMUyRqejP2a0oq9PZk2
5wUD6X4YqfooirvGVLWh6Wn8rsztiWberreD7g13p+I4rbeLbj9md/UgOHjF
kLofbu52GUlbJzCv7amYpX6sjI/3e6ubo/oy4TfxOtPHxkHwss43SRI+mCS1
c9EWg9O4onbMcd13rsaiDiK1fxs/myPWRfVW3dFxHkmf/+hzH5F9mQaOq4qD
KHtM2UFcV/UlufUMjafCULvvrl5ZjBbCAqb0zOFgtKPV1FdN43I2+vm8bbey
pXXSKtiJca6co8PgowxE/+y77AJEKDTto1hfm8VpeN1Nt+Zl4h1db6U0XpSz
Wq8YnsCM/fF5eNtZl2Y7VR8T95a4g/0gGW/rCRW4jrTv6aX3uB1GTTi79LfX
/NbvgS/PB1PIusW1nkT9c3PKhtXZXwm9W+fVz+V9cZsP/H6f2lub0TYKav12
1IvZwhl6zl2/rqY7fdh51sJY1uMDr2b2/Nbuo5ltsffyXinOetnE6noWXaiJ
vff0bF1Y+vmyZvrATPayyqd1cLaU3WXiZ3dfgojr5orFiPa2fU5n06s2OM8E
z1iH24A6MYY1Thb7PLkvl8aTZde1o5/v216v3l/rlbfKO/2R2L3nKDuzO/9p
n5x+kxy7+WxeGXq2pJzRaFTsiq6Xxrkd+daHuHjyx0YGOopmy/V0MXJHq9ba
a5k5ZNqVwo3jiVZNp0I0kc8f85qSZvgNz6JaczdufRpKudjcHbWzBpYx1Hht
yXyMzPvHPbgtT0n8nC4z89jL0vVYlYvy1JQl5S3661F82te3tnKMIMmaY1b2
TuaNK57VcHFiKmc/mYz3Q7HmDXGqSnOb1bvVsDnp5+owG1Jifz4IzXolbhf2
05vP26u5lY7Dw+OQeX29Yay8v0wmmm8Fw492q51vk9PtmhWMWJab46a5U9P7
M5fX52RRWJPOc/Vq5Ez0j+Bp9LaK/EimTVQc4uhiKtq8EEf5qFzlRpDNBW2h
h4/57UENYcCCMr2qu8Wo15xMo/ALkY0n4iXT0udkFm1PA2mWPt2uUP1ive3c
4kOaLabXcu7UzmNBbfQgOHeL4W3a163Sbq3NdsFvngX/GK8nSZJePPs2bTP/
sKzPfLHP5xfz0vZC09b0zC08lbqf/DWblDNjNTOr27gJLussVcpjvNfKUa0v
krzcLPpRd4iu/r04HUcLP7ov9Kw0655aPSbU2LILkx8A6ZTjW/8s5v1t0bOc
yaV3HfJM5O4ie93t9ea6PblumjThpfUyZQvThmPLhllAyfKKt7S7IK2Gwy4Y
hI+jZjFrm73NtUbJYFJUtdsnNyyD5clbrVbRxgqAd1bH2eNDY8FjqElysE+a
x9388BY8fW+Vfuz85c29XM+9wzRcfZwUTdN77Ew5zdXGVPwNvz34OszPL8ri
VGyoSXwZsI+JmDzuvSVrTqJB1j65pTLN4tFhOj/sJ24BQZRr1vp1+VzWm3Vj
rtP4DghOUtnaUOUolEb2QqvN3p6ddl28vKzW1zo381430Ldl7jbnH6H8t0je
ub3PSE59J5T/PpJvgoGZLKhDv4q31nz8OIjXmh+HLESsS1mUZd3eu75QJhbT
mOZjOo3WoeMO49TKYjWtruXKPzi7nkEND+Ora7ghyzw3DExHdsLOFq77fXeb
l661NCeN+jEYbGffOjbiL7QVVFHg//7uEe11pw25UCR28BYiLyBnOZD7c6oz
uefsd9WmWM96+3F790+X8f30DPW6pIdc3Za9OsWH8Z6Xc07qUvHCExevrv6T
YvK/++LmXWr6LjV9l5q+S03fpabvUtN3qem71PS/u9T0fUvJ+5aS9y0l71tK
3reUvG8ped9S8v1bSjx5AP5QGvOHOG6gf8vQdmmlHqydyfdtbXTl51ywrx/H
68MKIXGfQXAtJOapTPbTRaMPa8gNNqWoTE6+6wyG2Vw1rqvdJW/ugv1sZJg9
TddlGxTJ83H2eWXTb9wxZa1t9j57FBf9Ks7zZGSpmg051AyAqE+WO844pFaV
ie7FPil6t9g+hwsxHwj8cr3MrY1jUbPd6DxVnuxMfnbgzAf/YvHreWifHhvN
PdpDzTtzrWSlz+zYWE5oD6WJ0RniNJyMrseCiamK8Q9GnOmBbzTeXOzMelju
kr23sOfOwUq4+HAS/MEpvXTj9fBWjEL15J2KueV1wcWZlS612hfAhLa5zdyJ
a+yNzaKQ/Gl/MM5v5ozPxflszp9XfWUyfyax8zjOD23s9DM+nMyOmZpvqcls
caz3ntV8LC76fsUmq+kwOdv1+HKbuiovLFdrYewp+mOlr3Ntzjon5rzSK6fa
NQd9t3cos18NjZo9z3euPkr5qe6m8p41hEVq5vG13jt98XAM++asqlfrWB4/
fUbYniJbY3ujSc2vqbNrifd1/zQzi8aITXvK+uZglV2jrhoVyxXMTmoT0pfi
kVicmVWidvtobg9hUDzzLPsI1tR4Uj1v67E7lcfiLIyaOc83s9TJp47e3Y1o
a8yHbKOsmX4eriMgyqbsPG+36DSrl4zS4EidPsbFsF1Kh/vhmO/VTexeNW0p
DZzayNZOaqd68TyYJj9YWqPxRF0tr/p+Y4jaeRy7u81YoYb9h/vcyyezHcaT
/nDWP2TcPX1EzmEm7yCOPYUmnZby6nGVT5d1/zrT79vVaawVtXmKHSGntotl
5fEz6yJfqs16tIrSy6CFCXeluXvN6XdZfDCryEn66Wrt8YYRdXJ/qH6ckovr
7Yo+Q13m7tW9fpjJRhmHW1sYP7dprp0Sx9AAaL5WF+32IolPUOllOTw+D6cq
D6LwaoofxnyxTSnLO5+f10gfn3sjjTmwo8zXuv7ESEtxduka5eZvXTM6Vuny
UQ2v1WA0mCiNKw4edSwWt92B8pJsH9UT0+rszmma04WL21YaOtZHeTwxxWiz
7G3qG2cthNXx2O8Y+xJzLWNthtEkjn1rSy3n57G9mj7Pd5gpC4/OXZy7ob28
XBm/8pP9Oih73ix7eJ1uaO1q3hjqsm2rh5xXG+409s7URYyzZVlu7WUgTffe
1DkYUbIW9rtq5jlcxJeT2pxcw2xd+Vfr2m4ySFPTs20P48CFCYlNPYLL9rby
GN0zV8cr+2yD1WU9aqvBYmckdW5sPCdOF5m+k1kx1yJvbkyai9hfjTajOIRM
nhpX9t51yut84ThbbqDMzlVd9iAtN65G3+PNxmm58yrk6+gjXS5ksV+Pp0Ph
OG4fmuEs1iLVSttJw5eXQDOig9y5kOlew/uyf33sNvFHba4jaeQs/KMdHMVo
4p1tYWiuF2fRyxRpeXAG1M7ipGXv3J2v182+MqsuaSDM1F3s2lG0mW7rzYA1
boxyncvPgX2aTI78oLLrU77r5PFNGlJld2wLJczbJNJOmTRautlh65+mdsP0
26tsW6OCOZXhdD/eRdO1rG3KibTtosJihWnuXk1qr3f5cXaJTtd1tXw48tM2
Blf91gLpOPZsVdxP4AvLi3k+flxjXx2b7HGQeGzkTVNzz4knyhoJymHyGE61
IrP8g5jfe8y802b3RaID+OORzGnGHHfbbVbWchI3O0fZWbfYOVy4w2AwoMaD
bgTEszX78kczt9OVfYJUZjWaV4eDfKjzw2ASsoeNvBckCKzPnFly4c/fAFB/
/Argu98AUH/8CuC73wBQf/wK4L/4DcD/YbvG7w+HZtmfD4dufiznv47f+Dw5
I2jLcxXUZMH/XNP565L2oKLvNW7c+B94O3rw+vrAc3K6rO7567iMzyX/n74Q
+CvVxGcv/nXrR4XHT5xvNN5H/+Ogip+/Y/hpm8dPZ2H8Jzk8g15AC59HZaxf
B1FQ1P6HBMnnNe+/+8aiCn43+iC8p3/Fp59k4C45DIQcaPGHXS1f9fS3zGn/
PYVmc+/582naBTz7x0Ozf2jwX8nXK+f6rzC0J307Z8HrxV/Nwf1kjk+9/nxu
x+deGi8OvKQmB5w4aQrq8YoMe8uCunaiT0uVVeHB7wFeEh9kINEi94KXsOT7
GHzTDUBbv37T8/Nb/l//7tCQz879oL7B1Is0+ynYzwK/9uu85P4rnQbOA/9M
vugBdf7zR4q8N+i8N+i8N+i8N+i8N+i8N+i8N+i8N+i8N+h8b4POP13VS31V
1vudql7qq7Le71T1Ul+V9X6nqpf6qqz3O1W91Fdlvd+p6qW+Kuv9TlUv9VVZ
73eqeqmvynq/U9VLfVXW+52qXuqrst7vVPVSX5X1fqeql/qqrPc7Vb3UV2W9
36nqpb4q6/1OVS/1VVnvd6p6qa/Ker9T1Ut9Vdb7nape6quy3u9U9VJflfV+
p6qX+qqs9ztVvdRXZb3fqeqlvirr/U5VL/VVWe93qnqpr8p6v1PVS31V1vud
ql7qq7Le71T1Ul+V9X6nqvenDTr/tTU96quy3u+s6VFflfX+P6jq/Y9/y++Z
C+m//7/+JXTSOviX/6T+QmtekhdNGvhRkAX5rf6z54zCu+MD9Ohc34rq+SfP
/YXux06O60vkKBa/csLbL879VnjVs7z9UpRBjuszuOL2y4P7hWHIkS7/6CmW
on6hqwAXgui/+UHqPP+G7/1ueQ2e8NLAyel7Sdcwp6DTMy7hkZWloMrOeZEW
0fNVvPy5tEjWuMj6Fmmp8rERJz1HOVl3gwbwlFwnqpzs8xK6oL2RkYSgjZp2
3PpWOR7+6RbUN/oReKCaz9vsSlyMqv+N9oqqgr/TZN0UF/5+t/xFR3ic8OeC
FvW/AZIY0dulbgEA

-->

</rfc>

