<?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.35 (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-02" 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="May" day="29"/>

    <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 (432000 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 remaining validity duration
that a peer might find in a keyholder's certificate,
which occurs if the peer retrieves a copy immediately after a new subkey is created.</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 remaining validity duration
that a peer is guaranteed to find in a keyholder's certificate at any time,
provided the keyholder is following the standard rotation schedule.
This worst case occurs when the peer retrieves
the certificate just before the next subkey rotation.
It is the "floor" of the validity window available to a peer.</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.
In this case, to account for minor clock skew
between a keyholder's own devices, a UMA <bcp14>MAY</bcp14> allow
a small lookahead (e.g., several minutes) when checking
if it is time to ratchet forward to a new subkey.</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>
  <t>With minor clock skew (on the order of minutes) between multiple devices of a single keyholder,
one device might ratchet "ahead" of another. If the lagging device receives a message
encrypted to a subkey it has not yet generated, it may experience a transient decryption
failure until its local clock reaches the rotation threshold.
To mitigate this, a UMA <bcp14>MAY</bcp14> ratchet ahead by a small lookahead
when it encounters an unknown subkey (see <xref target="ratcheting-schedule"/>).</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="29" month="April" year="2026"/>
      <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-10"/>
   
</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 1060?>

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

<t>The following people have contributed in various ways to this draft,
offering reviews, suggestions, corrections, and implementation notes:</t>

<t><list style="symbols">
  <t>Ramakrishnan Muthukrishnan</t>
  <t>Heiko Schäfer</t>
</list></t>

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

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

<t><list style="symbols">
  <t>adjust description of <spanx style="verb">max_rd</spanx> and <spanx style="verb">min_rd</spanx></t>
  <t>acknowledge reviewers</t>
  <t>correct default value of <spanx style="verb">min_rd</spanx></t>
  <t>offer mitigation for small clock skew between MUAs of the same user</t>
</list></t>

</section>
<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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
klzk9plxfeo/D+t2rpB5MqY3znmQnrznrWX+Oat1+9NVctBMd7xi4zxVHqfv
nm52RS1ZKczsV7etvPu9RnG5uOvfL17J/JVty+ntx6Xxvtu0354arbxx7jYq
5rmWXGrbbM14e+/17fS03CvkR3bHLijX4+2bdt4q3Latm+dWsXK7KvYfGua0
fvfcWafa63atPnj3ixk9GYy75TevNeinbutvb05n97SqDerKY2dZ281Lydfs
Y6FBPs4U1vX8e0VLW8t5effgZeqdfjdv9q3sbLuYrfPFVq8+LRduF8WZOX7v
vSu7bL1Vz7bm18Yofz3qNI33WuXmppZv5oynVLuY2OTWhcdEIWdW9+fN0tra
7B6vtXL//vp2MEoG5Ttl5Ort1vitd5OtL6qDVSXTf9THm8diJWl1ck/FmvN6
V1hezwfv20quP7O3k1XP2KdHWn069h/Xb02lN+uv3p7n68ZyncxvNOs1Ub+7
788LlXK7vt4si4Exc0qEc7zfBZNOt5p517VdtqydV8xFof3QmCtayd49vw4K
1VVBX1lW4q5iV3q11XinjTQ/V0pN/fZuOffn2Rvj+iGxSgwKBavjLR+bnlEq
5RYrpdRev/WtXv61UEqcXwfL576ZHj9aObtote/tx6dAdx9KndJ95nVktQqt
YiLjDyfJ9ft5uhIU6otAqZTK9exyva/dz0vFYq/VKDZqt16rtH6tT2u9wuo5
Wbt/y7917NRdsj3Vjbup/9C79SdO47m/txY5JVsttmodX3fPezdPq9Vstzfn
jcGystrVp9tSMC3lxjXXXxvZu0G589x6Lz32Hq3yg7btL7L5Rq2mDPLjcr/9
djvwjLfx7bq5y8zeUun6fjNdLjTbuKn4k4LWaUy6vfasq/VX9WHnZnTbu1tW
jVIz01goncy84z4+39vBW7a7cM+v38c9S1/cLDw3u9p0yVyP8926sr6+q9nP
o7bbv512MsNaLXjeLmuv276SHbcTrcfSTWlfrWjF/aB7Px8/l416/cZ4Pa80
HP0u8BMpvXNzv2zlRw/lLrkvTfvRer5eJBON13sl63bOX0et3Lj47C2ane6j
M6sPWsVMurKq10rmeODf6am3UruRbbeC5qY9uPM3/vrB8K5H5aDQHireqJZ6
6mxv3Uf/ttBdra2Gdz8879z1hg2ncW435g92vVV5zNXeguvca5Aiomuz9D6z
/XwxOdXNOyVHSO+gbL3nXhvOdbLQ9Qc1x9b93tu+n29tXa2SnSWDxi4/uKs2
07tG+nHT8gatSvk6P8tM/DtN2U8rndaN3fA6NW+Td0r7J6/W7hjeKDuYLZdL
OP9+Lm0n3oz9pOq/PSeK1aU9GtnDfrVhLvou0XtaxVRy//w00a/fHudvteYg
k3THwcN8sKu+FouTkt3QC/Z97X3Xrpt1zZ0WmprzlnqcNCoTpzhUVqXleeJ+
fp9/Wp9fF0rBs7nN92yr6ulu3++2Uu/6/tp56xbamZ6/6VcX+4Vbtsp6zUjr
r9tpoaBUGqNGzZ/3s6/tZ3ewHZxP9YZ+t0jO3XFx/jhOjOY963k42Laf/U7n
TVu/ttvz5qzxnJ2Yk8ru7V0pLGpeZe6+TweDxHMxeH8t+claq6/P7zvz99lq
k74f2Ynn9TbYNda3rXFyfm50Xidvu6pm3dS2HV9J70qJbqudSN/VRgu93cw/
FEpes12pdkc5/3FbSfY7T/pwn20aZi498pc7azWtVwJjNK28eZvds3J7sy83
pv3WXa1ZWE3GqVJ1Xeguxk2rZ5zb1bvtPmjvxpO32s2q3ugY9uNz1r++WRTn
dmk7MI3nWyW5blyn69Zr2w3sthdc3xBJ3tcGi9Si8Vpd9e9WD5uCV+/X74zH
uv++zPrF50R3OHJuM8+7taO9K7WSm8y+zkuV9t35+ZtRqeeeJ3f329ZTvnPT
HLWf7h9K9jjoPw4f+onloFpJLbe7Zrdqmv26Xessxkr1/W00LZda26fh1k4W
m5N9szeaL67ro9tWe3tubhferlu+KVnb8ZjxUV/ioy3ld5ko46HIPvs5vfee
tZOFTqevbNxN6TVTXKfN0m2quBiO082HypDsO3df3Q/S5017c3u/Wb/rlfq1
da5vb1uNtWvvE/Wn93vtebpQtlrDKVwPymbCeR+vzHSpcv5695ouZN5T67KX
ea0Vyp1dgckQgxaZf1hYlvoLi9yW0rhtKGsytJ9NdEwChFp5ZZwni/1yPp/e
5bKN5ZIcbP6xUHwybD2zdgjP2jut9tOwvhktHvOvD5X0vfLQN53M4vbhwX7v
L6rp9bYxz+QeS+SYBvPl9sbzs9uHTKb3pN9oez8xXmnpp+qj8+q2Ku55Kd/O
Ku23Zs9a1e5Xy/rrrPL6eDfPX1eSiVm2WhrqKX+Xfyq8Gu+71aTZ1+2GNlsV
Hmxt0n0d1zru1u3UlOehf1vaJbLb2T5zm1xV9OrDZlQYTYzmZPc4vw3eki3j
MVWtG9ZDvjPf1Gap5r3RSDUKjZt5flbsESAOavuEc76c76+T9/X0TJ/mq7th
Y9rqdQvz1HiZGGXdxzc9eT8cF+zKWp81Hp+f7Wx2+JSclB1Due2VvWzKa1f0
abZare0Hk93zpKxfr5fLSj8/zLm1p6flpBk89BtEBTAyo0Ewesw8VYp3lY1b
TM2UXNaaNWrnGzs/uc+/Jx5TT+/OQK9NG63sW7uyTJrZur6e3Wnm9ra409oE
CYKc0Rye552bmjt86yjN+977LDvY6XqpPfKbg2B7P+mlaqnO07jbK9lmv7Wd
dGpl76HmV996709Gxnlu5waJfXpW7YytmdLTl0v7dZctpDKmpi0zq3qilil0
H+2x09+vSvvGyGvtrc7Ya/Se92l97D6s9nqr1dg+9VPjwe2b0tO23Vr2ZuS7
uZuG3yu8jjejYvr2Jkj4/fdKulrNmf2tvag92/t0yqvnc61yPVN9cnujRSU1
Ht4pdW+eLrn5Rkofjerj1/du2Si06rnmwq9M0s2nsX7Xnd8Nk8u6djfObUfN
u0Q+7dZXNbNcbT0VO6ZS6k87WZcIGf188ja37e8HrpFd9BuNWcN622e6Nav5
XuuV1oOm7pQeitu3p8xNtdkrLiabu0TrXFf8Rq6d3C+qj68l08iUyq39NFsg
imTeub/NPU2MtdMdjZ7e95qfmrhWs7zL37u9srFaPJmrtT5qK4Pe+dptEm7b
3I9uCaqfp5at0r3n7vtO/WG/XSf3D+1VrXi+u2mMMtVdYlzOLwbz+ltyVKys
K/d5pbBM3i6XD4vFjf1a9I3mXdbN9raLnVUYFPujdSZVu8/N9WryLTvcPb9t
i8vy7jVLRNKHXdndF5u2kq5UDNt5vz5vvW/1Qnf33Hu4Pn80K8ZkeD9tPtSS
paegXlo9Dlqv9Xx65Q523WB6v0sUHD2T3OpD5bzWX+WL9eegmuqVZs+lfC9d
S3mBX7lxakFm9dwfPyb6k7vNtrV7d+5Tz7c33aReWu51fVzXnu5GymI237Yn
OUOvOd3gycsnR/2dXivuMpnZbDSrbhdNYzB3c/nVcpZL6CPdciuN3d22WKzp
Wu/tfKXUy2X37bGUKjzk9cJwcW88z9+9Wl7rP02no6fMzq8nrjPadbJdS1QT
y93mmRx7svc6S7jT8WrRHSidpbN/LdvjRonImI3Nuz1ebBLNZuIx15+Xtqm1
1ijPZ2nfen6fTYsPrn63fc4vtOH4pnGdS7yVMkRad99qtqMHpXY2r89bnfuH
m/Fd+117KG1mk4fhw8i/r90FN/vm9LxgLVbL4dtt7XWxf20u1toiMVEeS71V
ZXu/Lw6s/uObS3jj8s54fyA4mTcKVWvt96bNcalZzT/ls3amvKiMV1t/bAXk
dp53iWyiPLidx3XyuT6fFFMJz1sOW4Pn21Tlbl20NvuMV3f9bFBLBzfP+Vl/
Ub5tp5r7ZT+9G6Z2s83t6ryvtHcze9BKjexd652ITq238lsqoa1KRnZV7A2N
ytuNuUoXh3dBIehktdQ47++8pf5Wzgz9bvumtFRaj8bg4clxbx+S/cZrY9ap
nT9tnZvWU8Fv1xPGNPXsLN330TBZy+V0veNu7KfsU8uezTv+MugWy4r1bNWb
pVqpozf6xflsgspjuVadUU2uWuoV2s1tobTc9qxabzztjdbFdslIedXdw7Z1
P1Dm5db1zn0bvyY3HUvLud11M+vfvg7SyIiL141++bUd9O4Xz8VNvZRI9Zzk
1K9UR/mHwfuirhtKKVNcDtz21s5Zxex74/06n33edubV+fmyXnHc59FsNrh9
bt2Ok69z67XaHhdMK5/s653r13y31CopjfT9TfqZSMv3u2Kp99dfVGevtMsf
aeys+V9okwCL248/mFngMvAXf3O/XWjywDZcRrQcFq2EE/flQbo2y5D/hQEC
6sV8wv7Qrz0WhpVDA8SD/08aILaFyjBfU3rpac9sL2+SRud5sChep3KJOuGF
yV7t6fots56N34udaqOJ1opjxgrlM9aKY8YK5TPWimPGCuUz1opdvu/FjRXK
Z6wVx4wVymesFceMFcpnrBXHjBXKZ6wVx4wVymesFceMFcpnrBXHjBXKZ6wV
x4wVymesFceMFcpnrBXHjBXKZ6wVx4wVymesFceMFcpnrBXHjBXKZ6wVx4wV
ymesFceMFcpnrBXHjBXKZ6wVx4wVymesFceMFcpnrBXHjBXKZ6wVx4wVymes
FceMFcpnrBXHjBXKZ6wVx4wVymesFceMFcpnrBXHjBXKZ6wVx4wVyqG1IlPQ
7p7nt1MifneeUvvxqv7UblSc+1J7nsivRxXXL4765feV2Xm8e9WUSdooFgra
dK5V7yrzXWb09jjuaE72uby9HrXf7OFjrW80R5vyuvd6v+m3miX3bda7rpwn
Mne59SCnaF57nn7LF9+tVy2zrDS1/X6+df27u6JfAwbcLIxKKD/0GpNyqTYv
zm+LWqaSqKc1/6k6LChbo1FpvV/fWSurO8rn6t7b7DyzWb6n2k0TWXjFdCqt
82ejV35dTHLNrXtemATp2caYPVdS7b2SLFZuto3z+U5fBNdWdnLdv7nx08XS
NLNxWt1hyXurE0n+Mb9LLZ+yLTLPtpuYpYN6PtV4CrbzruLu3Nttp3XrzXLn
tX2hcMDC67PFc+0tue4ty0/kRpUmHaPs+NXEvpB7mgY95aF33W3nzfVgtXob
pbrVXuEx/fzUaa72xU5+9V5+TOwnyVV1WksW27tk5Wl1Xu8+Vus6uQzGjV9y
FbNj91bXZsUlFyh309GrnU6lmu6kfK991xgFyd3jcyZXLja6s03ZHGpWovY2
KOaerXGmWEv23anS3bWNWqffW6TbXmta3dbSel4b7RNP9cHSbfSq9dHyPZMq
ld9ajbJ193DT7flGR6+11l1D698XH5VmclZdpgep/ON4OtGC4f2jMR88je1u
2Z3sa21rlx4E1qy0zkxrhYfW3cJqBfXrlatvbvt7I3N/r1wX9Ye9Q3SNbc1Y
1oPqWqtqTrufSBXq/aZTKxGS9myaD8nb0Tabnj4UcudE8unf35/3+4PWYplX
RqNtunuzWs0r08r5W6mazC73N4+VgTNepc3qwnu0zequ0J83cwXD7azHbsnq
etnp3e66dVs17LySTTil+/1rR3vt14On9eCp6RaXjt/t6aPXgffWNJ1B4npT
P983KrlXa5doZToP/tN94fXRKyU8vaikEm2r/WqnyonC6mkxbN29W4VcstQs
aotWMm3WU0NzEbSCTHG4rLmV+/pqNc6bvfb6frlcrRsDonB0CuXk86ie0N96
vmW/vbfc12Vjv7jTg/Rdo9rQnXK5RPDGWFY22uLOL+87ZtJrdNZ7r1KopZpK
cmZcmzdGs6Lv2ru+6Sz0+nPp7lkPbt/2085rYW8WH3OV6qrYXlZ2lpYxtm/d
UuBUbWtUy79v00qvXDKtbLN4d7tPpu6Lr5n+4vbZGs2XHb9q7YJuO1fSBvez
3bC6HTqzxdP7Wmu+LR6m7anpV/TFm3JvPlcGlktuub8u72tWfl8peAsrXd/a
Bb1hn3d2g0Th+e5mF5S7DpH9Xg19VXwcbx3HLMzeW45y3ruvad367tq0U+nJ
6j1p2/n80msvczVrm58Wc5VCWnuupt8mTvX1YdH13krJ8XKQtzejxmgTrJTX
wjyXay2e948tvxnodlkbFKa+ubfXRSIkFa7rFXegBY+zfnNevC7Ug+nzyq7X
O9nxdnI/2K01pfPQqrfGs8rs4dFbt63iuftUNLT1Q55IfoXnWX583iu92a1e
rjUbZI1d8f75OX99/drK3xfKRAipKt1r+2l+P0rs0vtkqd2zbwa9t8eH19p+
2s5pFX9487Qjanw93Wnr95Vrq6JNC4PRpG8sCu5db1NpK/v2282k2Mnum2Zj
9DCqGpXRzsuXW3p2d7ucmu+3T0Sxce7vSkQ9t1e1ml4enTtPpfr7zWPuuv24
UPSnUkE3O7Va1S3q9VL6wdU6m8az2wnuq07trVjyiTbWG9zfLRqbt0Fvm2vY
vWBW7d4XKtliejRW9Ny+e7d4TKeT9nlrUjK653eb2+GgXTTq/iT18PQePNQy
7cZ9qvFcTryuVnl3mx2VZqvlw8DLZ0d1pXlb2t9WzcW457e9pTXLjNs3taWe
ud8+Nu6L/h3RRhapzn5zHjRm65apNaz6c7rZezWn97VheZ5UOqniq56yC17m
LllJVr3ivuiZeSt9PautGs+L3GZQy7ZcwrGXq/Zdsrdo9FvF/OzBXTxqb+3Z
/FmZO3qy41em973i2PMq9/tUwdpNq9edZ7OQLd419OZdzXssNbuv7wXDbpTt
STAajEdbI2jksov3yv/T3pctKa8kad7rKWRdNz3GOZPalzKbCwmBACE2sd90
aRdoRQIkaKu3mTeZFxv3IP/tdJ6pyh4b64vJsmNlP4kUEe7++ecegUcElUdB
otfxoVZu1sOdzj1nJodcNB4ctbd1cFKqNFA2anOYvrlRuvYPk815llX+2u60
t6cVS9T1al6WReguNwN+Zd34S9Buuno5Xd9213wxtV2xsOLeQDaeYVudh/tN
NhSlxXa2ccoHZFALKlMmveewnRpOMNqr+VG82GyqOvNbMTIuU3Hb2z4nh/G6
ntTrdinkh5PTnrQzwGgWjXZvR4cyV2Vx6L89zsNdV1VGmraNMrK8IBcKv5bO
iTmy/No4zIP5xC9m7uwSRTFzK94yYZirhTChHqXlDFeBz9fAXO5qe0gPD6vp
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
6xqzCcp0pMrjBSWun7fesu73k9Ds216rcec09MOs78+kAx9rwrCncJyycwv5
3F5qdiNEsp4e5gl3LnaDIqfmh/5+nN70Vboub/vJfX5muWS4nt3Ob2UjXC4p
e+kuimgPRWlqCzumHA8e2XTQzZZysLDOIaUkg9xxdrPOYmrzyPq9xzRMXJ+z
3cVIVI5jzTzekicHUWC0c9JmpjXujTnr0sx09w/II6hDPw0hk3fCzBYsYxb2
K05KstgXub4gmG7qPmXupqRxZ8Wev6yuXHpirGnuT5yz0JX5gpLKfeTo150+
Gc0Oo361yq633VrvLYYPr3Nia3IebXtH+X41/LYvnytts58Jq54ag0sPpzuG
YgzjcfCHu/twPT3sMkHNOl3v63Yn1cNMj29virGpNoN8FUxS/emybI+VJ2zX
36tbpsfe5hSwil+phloo/2HrqM29/d9vHWX4RK+MrL0IW8NwpmzPrWePkbo+
9gXJtVzPprymvVlHY2brSf04lYM9l3cHmISW0dGVLpvRlsuiuNs+rLzleDWw
U9WW8ywcbm5WljXymnJ3T6M7+Yuo04f99rNbR3F94w/LFxQ1IOeGvt9o+/3U
sx9HgP1Yrvh2zc+rfvC10hN2rv/LeWM/n5tGR2Txg1QU/rxR9e9/smbxYyHl
91f14tde06+9pl97Tb/2mn7tNf3aa/q11/Rrr+nXXtOvvaZfe02/9pp+7TX9
2mv6tdf0a6/p/wd7TTGSU/prhep9Nq7vdnfW7zaePxlrYe3zMKV/qKeL0vWS
EdOw3LleT9vsUMraYNe29nBOFUWbZey1XO4OPDOv9N086svJdGrcWpiHmMVQ
Oq2t3oSPOnuqN3E3nO6EW+9km3XKhUv/STG6tTQH16WlDFJ1f5iFm8fNy26z
SdGObHE93si5vz776qAHvF+21004rp/Tzf0+naXTLuAo+xkMWHWSq7Z+TcYb
/TH1RuVjbx3PWlep432ZLuxFWilpWJ3Ojnlfsf7cPAxFZqG3fGG7VLvLdqtj
K47Zyn+s3WFQJMwq3y3sZLDjIOiwWZfHTPecSbPyll11NzkBMR2dY5M1s8PM
pqRzxZTj5SlkDvcwSpkG4qE2bVMe8HVRYzYyhyUAU0mvJ48Llmkjnrpj+zQU
yR4ejd2K0sqdM7Ha05yBdD+KVX0UJ8/WVLWh6Wv8tiqciWZeL9e97g+3x/Jg
NZv5czdmt80g3PvlkLrtr95mEUsbNzQv3bGcZkGijA+3W6ebo+Y84dfJKtfH
xl7w82dgkiR8MEkb96zNB8dxTW2Zw6rvXox5E8Zq/zp+tAesi+otnwfXvad9
/q3PvcXO2QpdTxUHcX632EHS1M05vfYMjaeiSLttL35VjubCHKb0zH5vdKOl
FaimcT4Z/WLWdRvZ1p7SMtyKSaGc4v3grQrF4BR47BxEKDXtrVxd2vlxeNla
G/M88Q+ev1RaPy5YrVcOj2DG/vg0vG7tc7ux1PvEu6beYDdIx5tmQoWeK+16
euXfr/tRG03P/c2luPZ74MuzgQVZt7jS07h/ao/5sD4FS6F3ffrNY3GbX2eD
oN+ndvZ6tInDRr8e9HI6d4e+e9MvS2urD5++PTcWzXjPq7kzu3a7eOrY7K26
1Yq7WrSJuprGZ2ri7Hw9X5W2fjqvmD4wk7OoC6sJT7ayPU+C/BZIEHG9QrEZ
0dl0D2tqXbTBaSr4xirahNSRMexxOt8V6W2xMB4su2pc/XTb9HrN7tIs/WXx
1O+p03uM8hO7DR7O0e236eE5m85qQ88XlDsajcpt+exlSeHEgf0mzh/8oZWB
juLpYmXNR95o2dk7LTeHTLdUuHEy0WrLEuKJfHqbNZQ0xV945vWKu3Kr41Aq
xPbmqk97YBtDjdcWzNvIvL3dwuvimCYPa5Gbh16ercaqXFbHtqoof95fjZLj
rrl2tWuEad4e8qp3NK9c+aiH8yNTu7vJZLwbig1viJYqzRxWfy6H7VE/1fvp
kBL7s0FkNktxM3ce/mzWXcyNdBju7/vc7+stYxf9RTrRAjscvnUb7XSdHK+X
vGTEqlof1u2Nsm6PQl6d0nlpT56+p9cjd6K/hQ+jt1Hke2q1cblP4rOpaLNS
HBWjalkYYT4TtLke3WfXOzWEAQuKdVG381GvPZpGGZQim0zEc65lj8k03hwH
0jR7eM9SDcrV5umVb9J0bl2qmdu49zm11sPw9JwPr1Zftyuns9ebOb9+lPx9
vJqkaXb2navV5cF+0Zz4clfMzua560Wmo+m5V/oqdTsGKzatpsZyatbXcRue
V3mmVIdkp1WjRp+nRbWe9+PnPr4Et/J4GM2D+DbX88psemp9n1Bj2ylNfgCk
U42v/ZNY9Ddlz3Yn595lyDOxt42d1XOnt5fN0fOytI3OnZ8rG5g2HDo2ykNK
lpe8rd0EaTkcPsNBdD9oNrNy2OtMa5UcJkV1t3lwwypcHP3lchmv7RB4Z3mY
3t80FjyGmqR756j53DWIruEj8JfZ2zZYXL3z5dTbW9Hy7ahomt5jp8pxpram
Eqz5zT7QYX5+VubHck1NkvOAvU/E9H7rLVhzEg/y7sEtFCtPRntrtt9NvBKC
KNeu9MvisWjWq9ZcZckNEJxmsr2mqlEkjZy51pi9HWs9n8nivFxdmsIses+B
vqkKrz19C+U/IvnT671HcuozofzXSL4OB2Y6p/b9OtnYs/F9L14afhyxELHO
VVlVTXd79oUqtZnWNO+WFa8i1xsmmZ0nalZfqmWwd7c9gxruxxfP8CKWeawZ
mI5sha0jXHa753VWefbCnLTq22CwmX7q2Ii/0HZYx2Hw690j2utOG3KhSOLi
LUR+SM5yIPfn1Cdyz9kv1aZYz3r9dnv3T5fx/fQM9bqkh1zdlr86xYfxnpdT
QepS8cITD6+u/pNi8v/ww81XqelXqelXqelXqelXqelXqelXqelXqel/danp
1y0lX7eUfN1S8nVLydctJV+3lHzdUvL5W0p8eQD+UBmzuzhuoX/b0LZZre7t
rcn3HW104WdcuGvuh8vdjiBxn0JwLSXmoUx21rzVhw3kButKVCbHwHMHw3ym
Gpfl9ly0N8F5tDLMnqxV1YVl+rifAl5Z91tvTNkrh71N7+VZv4izIh3ZquZA
DjUFIOqTxZYz9pld56J3do6K/pxvHsO5WAwEfrFaFPbatanpdnSylAc7lR9P
cOZ9cLb51Sxyjve15h2coeafuE6ys0d+aG03cobSxHgaohVNRpdDySRUzQR7
I8n1MDBafyY+zWZYbdOdP3dm7t5OuWR/FILBMTs/x6vhtRxF6tE/ljPbf4Zn
d1p51HJXAhM65ib3Jp6xM9bzUgqs/mBcXM0pX4iz6Yw/LfvKZPZIE/d+mO27
xO3nfDSZHnK12FCT6fzQ7Hy7fZuf9d2STZfWMD05zfh8tTyVFxbLlTD2Ff2+
1FeFNmPdI3Na6rVbb9u9vt25lNmvh0bDnmZbTx9lvKV7mbxjDWGemUVyaXZu
X9wfor45rZvlKpHHj4ARNsfY0djeaNLwK+rk2eJt1T9OzbI1EtOx2MAcLPNL
/KxH5WIJs5PGhPSlvKc2Z+a1qF3f2utdGJSPIs/fwhU1ntSP62rsWfJYnEZx
O+P5dpq5heXqz5sRb4zZkG2VFdMvolUMRNlWT9/fzp+a3UtHWXigjm/jctgt
pP1tfyh26jrxLpq2kAZuY+QrN3MyvXzsTZMfLOzReKIuFxd9tzZE7TROvO16
rFDD/t177OSj2Q2TSX847e9z7pbdY3c/lbcQxx5Cm1mVvLxf5ON51b9M9dtm
eRxrZWMeE1coqM18Ufv81D7L53q9Gi3j7DzoYMJda95Oc/vPPNmbdeym/Wy5
8nnDiJ9yf6i+HdOz52/LPkOdZ97Fu7yZ6VoZRxtHGD82WaEdU9fQAGiB1pTd
5iyJD1DpeTE8PPbHugjj6GKKb8Zsvsko2z+dHpdYH596I43Zs6M80J79iZFV
4vT8bJVrsPHM+FBni3s9vNSD0WCitJ44uDeJWF63e8pP813cTEz76Tzdtj2e
uaTrpKFrv1WHI1OO1oveurly9lxYHg79J+OcE65j7PUwniRJYG+oxew0dpbW
43SDmbJwf3rz03PoLM4XJqiDdLcKq54/ze/+Uze0bjlrDXXRdfVdLuo1dxz7
J+osJvmiqjbOIpSsnW+5eyNOV8JuW099l4v5atKYk0uUr+rgYl+6dQ5panZy
nGESejAhcah7eN5clz6j++bycGEfXbg8r0ZdPZhvjbQpjLXvJtk817cyKxZa
7M+MSXsW+8vRepREkMlT49rZeW51mc1dd8MNlOmpbqoepOXGxej7vNm6HXda
RnwTv2WLuSz2m7E1FA7j7q4Z7nwlUp20mbR8dQ41I97LTw8y3Ut0W/Qv9+06
eWvMVSyN3HlwcMKDGE/8kyMMzdX8JPq5Ii327oDa2py06J2ep8tlvavN+pm2
EGaaZ+I5cby2Ns16wBpXRrnM5MfAOU4mB35QO82x2D7l8VUaUtXz0JVKVHRp
rB1zabTw8v0mOFpOy/S7i+zYo5I5VpG1G29jayVr62oibZ5xabOCVXgXk9rp
z+IwPcfHy6pe3F354RiDi37tgHRcZ7osb0fwhcXZPB3eLkmgjk32MEh9Nvat
zNxx4pGyR4Kyn9yHllbmdrAXi1uPmT216W2e6gD+ZCRzmjHD3Xbrpb2YJO3W
Vbb2NXH3Z24/GAyo8eA5AuLZmH35rZ052dI5QiqzHM3q/V7eN8V+MInY/Vre
CRIE1kfBLLjo518AqD/+BPDZXwCoP/4E8NlfAKg//gTwn/wF4P+wXePXw6FZ
9ufDodtvy/mv4zfeT84Iu+pUhw1Z8D81dPG6pD2s6VuDGzf+G96OHr5+PvDd
gq7qW/E6LuN9yf+nHwR+o9rk5Cfft37UePzE6UrjffTfDqr4+TeGn7Z5/HQW
xt/J4Rn0HFp4Pypj9TqIgqJ23yRI3695/+UXizr8ZfRhdMt+w6cfZOAeOQyE
HGjxh10tH/X0t9zt/i2DZgv/8fNp2iU8+8dDs79p8F/Jzyun5jcY2oO+nvLw
9eJ3c3A/meNdrz+f2/G+l8ZPQj9tyAEnbpaBevwyx97ysGnc+N1SVV368DnE
S+LDHCSaF374Epb8HoNveiFo6/svPT+/Ffz2Hw4Nee88CJsrTL1Is++C/Szw
a7/OS+7f6Cx07/hn8kMPqPOfP1Lka4PO1wadrw06Xxt0vjbofG3Q+dqg87VB
52uDzuc26PzTVb3UR2W9n6nqpT4q6/1MVS/1UVnvZ6p6qY/Kej9T1Ut9VNb7
mape6qOy3s9U9VIflfV+pqqX+qis9zNVvdRHZb2fqeqlPirr/UxVL/VRWe9n
qnqpj8p6P1PVS31U1vuZql7qo7Lez1T1Uh+V9X6mqpf6qKz3M1W91EdlvZ+p
6qU+Kuv9TFUv9VFZ72eqeqmPyno/U9VLfVTW+5mqXuqjst7PVPVSH5X1fqaq
l/qorPczVb3UR2W9n6nqpT4q6/1MVS/1UVnvZ6p6f9qg859b06M+Kuv9zJoe
9VFZ7/+Dqt5//2txyz1I/4P/8S+RmzXhv/yd+gut+WlRtlkYxGEeFtfm/Wjd
HzethWWVha/lIL8svp8Yeyrou1ufyltDty6u9LxX6ga1G11/o8ooCsnCXR3e
T2Hb/EY3txgYFldo4INf1nXov38ga4Y59IIDIGs4dFFeQzw7+nd65eZuWp+a
pHAL2r5dk9u3T/DlKDylJe34yf/6n9Ddn4lolP4Nm6ZHp+Za1o8/ee4vdD9x
C1waI6fIEEF+d2/X0q8f1fX3sgoLXFrCxcLf79zvDEtOo/lHT3EohBucb831
/Zq7ikhYRjRZHSTX7IECvt25h0//MMm7+sK6gb+/Kw2aiVxIRkD/2S18NfT9
XaJ3Oj9dT/FLk7gA2OS4kOdnpZ/STRq2tBdeW1zWszfa+7HJeB5yTs40/jM1
flY9zD+lHhbVU4e4xEf/LQgz9/E3fO+XhVMUPQvB/LeKbmC2SGcnXJwla4Zh
DbKXWRk/XmXp74vGBK5k5fKbklGv2SkuyIoqNIDnH7tx7ebv1wuG3ZWMJAKw
NLTrNdfa9fFPAERQNegdFPmTAZu/frcHWRHHJd1fFjbpGA+Kfl+qpP430HA+
n+RzAQA=

-->

</rfc>

