<?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.43 (Ruby 4.0.6) -->


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

]>


<rfc ipr="trust200902" docName="draft-ietf-openpgp-external-secrets-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>OpenPGP External Secret Keys</title>

    <author initials="H." surname="Schäfer" fullname="Heiko Schäfer">
      <organization></organization>
      <address>
        <email>heiko.schaefer@posteo.de</email>
      </address>
    </author>
    <author initials="P." surname="Schaub" fullname="Paul Schaub">
      <organization></organization>
      <address>
        <email>vanitasvitae@fsfe.org</email>
      </address>
    </author>

    <date year="2026" month="September" day="22"/>

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

    <abstract>


<?line 65?>

<t>This document defines a standard wire format for indicating that the secret component of an OpenPGP asymmetric key is stored externally, for example on a hardware device or other comparable subsystem.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://dkg.gitlab.io/openpgp-external-secrets/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-openpgp-external-secrets/"/>.
      </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://gitlab.com/dkg/openpgp-external-secrets/"/>.</t>
    </note>


  </front>

  <middle>


<?line 69?>

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

<t>Some OpenPGP secret key material is held by a hardware device that permits the user to operate the secret key without divulging it explicitly.
For example, the <xref target="OPENPGP-SMARTCARD"/> specification is intended specifically for this use.
It is also possible for an OpenPGP implementation to use external secret key material via a standard platform library interface like <xref target="TPM"/>.</t>

<t>An OpenPGP Secret Key Packet (see <xref section="5.5.3" sectionFormat="of" target="RFC9580"/>) is typically used as part of a Transferable Secret Key (<xref section="10.2" sectionFormat="of" target="RFC9580"/>) for interoperability between OpenPGP implementations.
An implementation that uses an external secret key needs a standardized way to indicate to another implementation that specific secret key material has been delegated to some external mechanism, like a hardware device.</t>

<t>This document defines a simple mechanism for indicating that a secret key has been delegated to an external mechanism by allocating a codepoint in the "Secret Key Encryption (S2K Usage Octet)" registry (see <xref section="3.7.2.1" sectionFormat="of" target="RFC9580"/>).</t>

<t>It also establishes a registry of hints about how to locate the external device, and defines a minimalist "best effort" method for locating external secret keys that is implementation-specific.</t>

<t>This document makes no attempt to specify how an OpenPGP implementation discovers, enumerates, or operates external secret keys, other than to recommend that the hardware or comparable external subsystem should be identifiable by the secret key's corresponding public key material.</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?>

<t>The key words "PRIVATE USE" and "SPECIFICATION <bcp14>REQUIRED</bcp14>" that appear in this document when used to describe namespace allocation are to be interpreted as described in <xref target="RFC8126"/>.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>"Secret key" refers to a single cryptographic object, for example the "56 octets of the native secret key" of X448, as described in <xref section="5.5.5.8" sectionFormat="of" target="RFC9580"/>.</t>

<t>"Public key" likewise refers to a single cryptographic object, for example the "56 octets of the native public key" of X448, as above.</t>

<t>"OpenPGP certificate" or just "certificate" refers to an OpenPGP Transferable Public Key (see <xref section="10.1" sectionFormat="of" target="RFC9580"/>).</t>

<t>"External" refers to any cryptographic device or subsystem capable of performing an asymmetric secret key operation using an embedded secret key without divulging the secret to the user.
For discoverability, the external mechanism is also expected to be able to produce or be indexed by the public key corresponding to the embedded secret key.</t>

<t>While this document talks about "external" in the abstract as referring to a cryptographic device embedding a single secret key, most actual hardware devices or other cryptographic subsystems will embed and enable the use of multiple secret keys (see <xref target="multiple-key-hardware"/>).</t>

<t>This document uses the term "authorization" to mean any step, such as providing a PIN, password, proof of biometric identity, button-pushing, etc, that the external subsystem may require for an action.</t>

</section>
</section>
<section anchor="spec"><name>Externally-backed Secret Key Material</name>

<t>An OpenPGP Secret Key packet (<xref section="5.5.3" sectionFormat="of" target="RFC9580"/>) indicates that its secret key material is stored in a cryptographic subsystem that is identifiable by public key parameters by setting the S2K usage octet to TBD (252?), known in shorthand as <spanx style="verb">External</spanx>.</t>

<t>The remainder of the Secret Key packet consists of an optional hint about how the implementation might be able to locate an external subsystem that offers access to the secret key.
This locator hint is entirely advisory.</t>

<t>If the locator hint is absent (that is, if there are no bytes in the Secret Key packet following the <spanx style="verb">External</spanx> S2K usage octet, then the locator hint is known as "best effort" (see <xref target="best-effort"/>).</t>

<section anchor="locator-hint"><name>Locator Hint</name>

<t>If the locator hint is not empty, then the first octet of the hint describes the structure of the remainder of the hint, according to the "OpenPGP External Secret Key Locator Hints" registry established by this document.
That registry is initially empty, with octet values 96-111 (inclusive) reserved for PRIVATE USE.
Adding a new entry into that registry in any other range uses IANA policy SPECIFICATION <bcp14>REQUIRED</bcp14>.</t>

<t>Regardless of what the locator hint says, a consuming implementation <bcp14>MAY</bcp14> use the "best effort" approach to identify an external subsystem that can provide access to the secret key.</t>

<t>A producing implementation that does not know how to provide a meaningful locator hint <bcp14>SHOULD NOT</bcp14> include any trailing data in the rest of such a Secret Key packet.</t>

<t>A consuming implementation that does not understand any particular locator hint <bcp14>SHOULD</bcp14> ignore any trailing data in such a Secret Key packet.</t>

<t>The purpose of the hinting mechanism is to enable optimized access.
For example, if an OpenPGP implementation has access to several dozen hardware tokens, and if querying each attached hardware token is expensive, a locator hint can be used to preferentially access a likely token, without probing each token.</t>

<t>This document does not describe any particular scheme of locator hint.</t>

<section anchor="length-constraint"><name>Length constraint</name>

<t>The locator hint data is associated with the S2K usage octet (i.e. it is handled as "S2K parameter fields", as specified in <xref section="5.5.3" sectionFormat="of" target="RFC9580"/>).</t>

<t>Note that the "S2K parameter fields" segment of a v6 secret key packet uses an explicit length field, which limits its length to at most 255 octets</t>

<t>Thus, a locator hint, including the locator hint ID octet, <bcp14>MUST NOT</bcp14> exceed a length of 255 octets, for any key version.</t>

</section>
</section>
<section anchor="best-effort"><name>Best Effort Access to External Secret Keys</name>

<t>When no locator hint is available, or when a consuming implementation does not understand a given locator hint, or when a given locator hint fails to point to a useful device, a consuming implementation uses a "best effort" strategy to identify the external subsystem that provides access to a a secret key that matches the corresponding public key material.</t>

<t>Each OpenPGP implementation might support different external subsystems.
And, in some installations, the same external subsystem might be identified in different ways (for example, a USB smartcard might be connected to hub 2 at low speed, and in another, the same USB smartcard might be connected to hub 1 at high speed.</t>

<t>In some cases, no external subsystem can be identified that supports access to secret key material that corresponds to the associated public key.
Or, the external subsystem might be available, but for whatever reason attempting to use it could fail (for example, the hardware might advertise the availability of the key, but deny access when the implementation tries to use it).
In these cases, an OpenPGP implementation that tries to use such an external secret key will fail.
The implementation should fail in a similar way to how it might fail if it tried to use a typical software-backed secret key locked with a password, but the password is unavailable to the implementation.</t>

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

<t>External or hardware-backed secret keys promise several distinct security advantages to the user:</t>

<t><list style="symbols">
  <t>Often, the secret key cannot be extracted from the external device, so "kleptography" (the stealing of secret key material) is harder to perform.</t>
  <t>Some hardware can be moved between machines, enabling secret key portability without expanding the kleptographic attack surface.</t>
  <t>Some hardware devices offer auditability controls in the form of rate-limiting, user-visible authorization steps (e.g., button-presses or biometric sensors), or tamper-resistant usage counters.
Malicious use of a secret key on such a device should be harder, or at least more evident.</t>
  <t>Some hardware security devices can attest that key material has been generated on-card, thereby signaling that - barring a successful attack on the hardware - no other copy of the private key material exists.
Such mechanisms signal that the key holder did not have a chance to mishandle (e.g.: accidentally disclose) the private key material.</t>
</list></t>

<t>However, none of these purported advantages are without caveats.</t>

<t>The hardware itself might actually not resist secret key exfiltration as expected.
For example, isolated hardware devices are sometimes easier to attack physically, via temperature or voltage fluctuations (see <xref target="VOLTAGE-GLITCHING"/> and <xref target="SMART-CARD-FAULTS"/>).</t>

<t>In some cases, dedicated cryptographic hardware that generates a secret key internally may have significant flaws (see <xref target="ROCA"/>).</t>

<t>Furthermore, the most sensitive material in the case of decryption is often the cleartext itself, not the secret key material.
If the host computer itself is potentially compromised, then kleptographic exfiltration of the secret key material itself is only a small risk.
For example, when handling an OpenPGP Encrypted Message, the OpenPGP symmetric session key itself could be exfiltrated, permitting access to the cleartext to anyone without access to the secret key material.</t>

<t>Portability brings with it other risks, including the possibility of abuse by the host software on any of the devices to which the hardware is connected.</t>

<t>Rate-limiting, user-visible authorization steps, and any other form of auditability also suffer from risks related to compromised host operating systems.
Few hardware devices are capable of revealing to the user what operations specifically were performed by the device, so even if the user deliberately uses the device to, say, sign an object, the user depends on the host software to feed the correct object to the device's signing capability.</t>

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

<t>External secret keys present specific usability challenges for integration with OpenPGP.</t>

<section anchor="some-hardware-might-be-unavailable-to-some-implementations"><name>Some Hardware Might Be Unavailable To Some Implementations</name>

<t>This specification gives no guidance for how to find the hardware device, and presumes that an implementation will be able to probe available hardware to associate it with the corresponding public key material.
In particular, there is no attempt to identify specific hardware or "slots" using identifiers like PKCS #11 URIs (<xref target="RFC7512"/>) or smartcard serial numbers (see <xref target="historical-notes"/>).
This minimalism is deliberate, as it's possible for the same key material to be available on multiple hardware devices, or for a device to be located with a particular hardware identifier on one platform, while on another platform it uses a different hardware identifier.</t>

<t>Not every OpenPGP implementation will be able to talk to every possible hardware device.
If an OpenPGP implementation encounters a hardware-backed secret key as indicated with this mechanism, but cannot identify any attached hardware that lists the corresponding secret key material, it should warn the user that the specific key claims to be hardware-backed but the corresponding hardware cannot be found.
It may also want to inform the user what categories of hardware devices it is capable of probing, for debugging purposes.</t>

</section>
<section anchor="multiple-key-hardware"><name>Hardware Should Support Multiple Secret Keys</name>

<t>Most reasonable OpenPGP configurations require the use of multiple secret keys by a single operator.
For example, the user may use one secret key for signing, and another secret key for decryption, and the corresponding public keys of both are contained in the same OpenPGP certificate.</t>

<t>Reasonable hardware <bcp14>SHOULD</bcp14> support embedding and identifying more than one secret key, so that a typical OpenPGP user can rely on a single device for hardware backing.</t>

</section>
<section anchor="authorization-challenges"><name>Authorization Challenges</name>

<t>Cryptographic hardware can be difficult to use if frequent authorization is required, particularly in circumstances like reading messages in a busy e-mail inbox.
This hardware <bcp14>MAY</bcp14> require authorization for each use of the secret key material as a security measure, but considerations should be made for caching authorization.</t>

<t>If the cryptographic hardware requires authorization for listing the corresponding public key material, or for probing whether a given public key matches the device's secret keys, it becomes even more difficult to use the device in regular operation.
Hardware <bcp14>SHOULD NOT</bcp14> require authorization for the action of producing the list of corresponding public keys or for probing whether a public key matches the device's secret keys.</t>

<t>If a user has two attached pieces of hardware that both hold the same secret key, and one requires authorization while the other does not, it is reasonable for an implementation to try the one that doesn't require authorization first.
Some cryptographic hardware is designed to lock the device on repeated authorization failures (e.g. 3 bad PIN entries locks the device), so this approach reduces the risk of accidental lockout.</t>

</section>
<section anchor="latency-and-error-handling"><name>Latency and Error Handling</name>

<t>While hardware-backed secret key operations can be significantly slower than modern computers, and physical affordances like button-presses or NFC tapping can themselves incur delay, an implementation using a hardware-backed secret key should remain responsive to the user.
It should indicate when some interaction with the hardware may be required, and it should use a sensible timeout if the hardware device appears to be unresponsive.</t>

<t>A reasonable implementation should surface actionable errors or warnings from the hardware to the user where possible.</t>

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

<t>This document asks IANA to make three changes in the "OpenPGP" protocol group.</t>

<t>Add the following row in the "OpenPGP Secret Key Encryption (S2K Usage Octet)" registry:</t>

<texttable title="Row to add to OpenPGP Secret Key Encryption (S2K Usage Octet) registry">
      <ttcol align='left'>S2K usage octet</ttcol>
      <ttcol align='left'>Shorthand</ttcol>
      <ttcol align='left'>Encryption parameter fields</ttcol>
      <ttcol align='left'>Encryption</ttcol>
      <ttcol align='left'>Generate?</ttcol>
      <c>TBD (252?)</c>
      <c>External</c>
      <c>External Locator Hint, see <xref target="spec"/> of RFC XXX (this document)</c>
      <c>no data</c>
      <c>Yes</c>
</texttable>

<t>Modify this row of the "OpenPGP Symmetric Key Algorithms" registry:</t>

<texttable title="Row to modify in OpenPGP Symmetric Key Algorithms registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <c>253, 254, and 255</c>
      <c>Reserved to avoid collision with Secret Key Encryption</c>
</texttable>

<t>to include TBD (252?) in this reserved codepoint sequence, resulting in the following entry:</t>

<texttable title="Modified row in OpenPGP Symmetric Key Algorithms registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <c>TBD (252?), 253, 254, and 255</c>
      <c>Reserved to avoid collision with Secret Key Encryption</c>
</texttable>

<t>Establish a new registry, "OpenPGP External Secret Key Locator Hints", with the following columns and initial range:</t>

<texttable title="OpenPGP External Secret Key Locator Hints">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Shorthand</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0-95</c>
      <c>Unassigned</c>
      <c>&#160;</c>
      <c>RFC XXX (this document)</c>
      <c>96-111</c>
      <c>Private or Experimental Use</c>
      <c>&#160;</c>
      <c>RFC XXX (this document)</c>
      <c>112-255</c>
      <c>Unassigned</c>
      <c>&#160;</c>
      <c>RFC XXX (this document)</c>
</texttable>

<t>Assigning a new codepoint to this registry uses SPECIFICATION <bcp14>REQUIRED</bcp14>.</t>

</section>


  </middle>

  <back>


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

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



<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="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="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>



    </references>

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

<reference anchor="OPENPGP-SMARTCARD" target="https://gnupg.org/ftp/specs/OpenPGP-smart-card-application-3.4.1.pdf">
  <front>
    <title>Functional Specification of the OpenPGP application on ISO Smart Card Operating Systems, Version 3.4.1</title>
    <author initials="A." surname="Pietig" fullname="Achim Pietig">
      <organization></organization>
    </author>
    <date year="2020" month="March" day="18"/>
  </front>
</reference>
<reference anchor="GNUPG-SECRET-STUB" target="https://dev.gnupg.org/source/gnupg/browse/master/doc/DETAILS;gnupg-2.4.3$1511">
  <front>
    <title>GNU Extensions to the S2K algorithm</title>
    <author initials="W." surname="Koch" fullname="Werner Koch">
      <organization>g10 Code</organization>
    </author>
    <date year="2023" month="July" day="04"/>
  </front>
</reference>
<reference anchor="TPM" target="https://trustedcomputinggroup.org/resource/tpm-library-specification/">
  <front>
    <title>Trusted Platform Module Library Specification, Family “2.0”, Level 00, Revision 01.59</title>
    <author >
      <organization>Trusted Computing Group</organization>
    </author>
    <date year="2019" month="November"/>
  </front>
</reference>
<reference anchor="SMART-CARD-FAULTS" target="http://hdl.handle.net/2117/99293">
  <front>
    <title>Smart Card Fault Injections with High Temperatures</title>
    <author initials="P. M. C." surname="Massolino" fullname="Pedro Maat C. Massolino">
      <organization></organization>
    </author>
    <author initials="B." surname="Ege" fullname="Baris Ege">
      <organization></organization>
    </author>
    <author initials="L." surname="Batina" fullname="Lejla Batina">
      <organization></organization>
    </author>
    <date year="2016" month="November" day="15"/>
  </front>
</reference>


<reference anchor="VOLTAGE-GLITCHING">
  <front>
    <title>The Forgotten Threat of Voltage Glitching: A Case Study on Nvidia Tegra X2 SoCs</title>
    <author fullname="Otto Bittner" initials="O." surname="Bittner">
      <organization/>
    </author>
    <author fullname="Thilo Krachenfels" initials="T." surname="Krachenfels">
      <organization/>
    </author>
    <author fullname="Andreas Galauner" initials="A." surname="Galauner">
      <organization/>
    </author>
    <author fullname="Jean-Pierre Seifert" initials="J." surname="Seifert">
      <organization/>
    </author>
    <date year="2021"/>
  </front>
  <seriesInfo name="DOI" value="10.48550/ARXIV.2108.06131"/>
<refcontent>arXiv</refcontent></reference>
<reference anchor="ROCA">
  <front>
    <title>The Return of Coppersmith's Attack: Practical Factorization of Widely Used RSA Moduli</title>
    <author fullname="Matus Nemec" initials="M." surname="Nemec">
      <organization>Masaryk University, Ca' Foscari University of Venice, Brno, Czech Rep</organization>
    </author>
    <author fullname="Marek Sys" initials="M." surname="Sys">
      <organization>Masaryk University, Brno, Czech Rep</organization>
    </author>
    <author fullname="Petr Svenda" initials="P." surname="Svenda">
      <organization>Masaryk University, Brno, Czech Rep</organization>
    </author>
    <author fullname="Dusan Klinec" initials="D." surname="Klinec">
      <organization>EnigmaBridge, Masaryk University, Brno, Czech Rep</organization>
    </author>
    <author fullname="Vashek Matyas" initials="V." surname="Matyas">
      <organization>Masaryk University, Brno, Czech Rep</organization>
    </author>
    <date month="October" year="2017"/>
  </front>
  <seriesInfo name="Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security" value="pp. 1631-1648"/>
  <seriesInfo name="DOI" value="10.1145/3133956.3133969"/>
<refcontent>ACM</refcontent></reference>
<reference anchor="RFC7512">
  <front>
    <title>The PKCS #11 URI Scheme</title>
    <author fullname="J. Pechanec" initials="J." surname="Pechanec"/>
    <author fullname="D. Moffat" initials="D." surname="Moffat"/>
    <date month="April" year="2015"/>
    <abstract>
      <t>This memo specifies a PKCS #11 Uniform Resource Identifier (URI) Scheme for identifying PKCS #11 objects stored in PKCS #11 tokens and also for identifying PKCS #11 tokens, slots, or libraries. The URI scheme is based on how PKCS #11 objects, tokens, slots, and libraries are identified in "PKCS #11 v2.20: Cryptographic Token Interface Standard".</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7512"/>
  <seriesInfo name="DOI" value="10.17487/RFC7512"/>
</reference>



    </references>

</references>


<?line 276?>

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

<t>Some OpenPGP implementations make use of private codepoint ranges in the OpenPGP specification within an OpenPGP Transferable Secret Key to indicate that the secret key can be found on a smartcard.</t>

<t>For example, GnuPG uses the private/experimental codepoint 101 in the S2K Specifier registry, along with an embedded trailer with an additional codepoint, plus the serial number of the smartcard (see <xref target="GNUPG-SECRET-STUB"/>).</t>

<t>However, recent versions of that implementation ignore the embedded serial number in favor of scanning available devices for a match of the key material, since some people have multiple cards with the same secret key.</t>

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

<section anchor="example-transferable-secret-keys"><name>Example Transferable Secret Keys</name>

<t>Example OpenPGP v4 Transferable Secret Key. It includes (unencrypted) private key material for both its primary key and one subkey:</t>

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

xVgEZgWtcxYJKwYBBAHaRw8BAQdAlLK6UPQsVHR2ETk1SwVIG3tBmpiEtikYYlCy
1TIiqzYAAQCwm/O5cWsztxbUcwOHycBwszHpD4Oa+fK8XJDxLWH7dRIZzR08aGFy
ZHdhcmUtc2VjcmV0QGV4YW1wbGUub3JnPsKNBBAWCAA1AhkBBQJmBa1zAhsDCAsJ
CAcKDQwLBRUKCQgLAhYCFiEEXlP8Tur0WZR+f0I33/i9Uh4OHEkACgkQ3/i9Uh4O
HEnryAD8CzH2ajJvASp46ApfI4pLPY57rjBX++d/2FQPRyqGHJUA/RLsNNgxiFYm
K5cjtQe2/DgzWQ7R6PxPC6oa3XM7xPcCx10EZgWtcxIKKwYBBAGXVQEFAQEHQE1Y
XOKeaklwG01Yab4xopP9wbu1E+pCrP1xQpiFZW5KAwEIBwAA/12uOubAQ5nhf1UF
a51SQwFLpggB/Spn29qDnSQXOTzIDvPCeAQYFggAIAUCZgWtcwIbDBYhBF5T/E7q
9FmUfn9CN9/4vVIeDhxJAAoJEN/4vVIeDhxJVTgA/1WaFrKdP3AgL0Ffdooc5XXb
jQsj0uHo6FZSHRI4pchMAQCyJnKQ3RvW/0gm41JCqImyg2fxWG4hY0N5Q7Rc6Pyz
DQ==
=lYbx
-----END PGP PRIVATE KEY BLOCK-----
]]></sourcecode></figure>

<t>Example OpenPGP v6 Transferable Secret Key. It includes (unencrypted) private key material for both its primary key and one subkey:</t>

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

xUsGY4d/4xsAAAAg+U2nu0jWCmHlZ3BqZYfQMxmZu52JGggkLq2EVD34laMAGXKB
exK+cH6NX1hs5hNhIB00TrJmosgv3mg1ditlsLfCsQYfGwoAAABCBYJjh3/jAwsJ
BwUVCg4IDAIWAAKbAwIeCSIhBssYbE8GCaaX5NUt+mxyKwwfHifBilZwj2Ul7Ce6
2azJBScJAgcCAAAAAK0oIBA+LX0ifsDm185Ecds2v8lwgyU2kCcUmKfvBXbAf6rh
RYWzuQOwEn7E/aLwIwRaLsdry0+VcallHhSu4RN6HWaEQsiPlR4zxP/TP7mhfVEe
7XWPxtnMUMtf15OyA51YBMdLBmOHf+MZAAAAIIaTJINn+eUBXbki+PSAld2nhJh/
LVmFsS+60WyvXkQ1AE1gCk95TUR3XFeibg/u/tVY6a//1q0NWC1X+yui3O24wpsG
GBsKAAAALAWCY4d/4wKbDCIhBssYbE8GCaaX5NUt+mxyKwwfHifBilZwj2Ul7Ce6
2azJAAAAAAQBIKbpGG2dWTX8j+VjFM21J0hqWlEg+bdiojWnKfA5AQpWUWtnNwDE
M0g12vYxoWM8Y81W+bHBw805I8kWVkXU6vFOi+HWvv/ira7ofJu16NnoUkhclkUr
k0mXubZvyl4GBg==
-----END PGP PRIVATE KEY BLOCK-----
]]></sourcecode></figure>

</section>
<section anchor="as-an-external-secret-key"><name>As an External Secret Key</name>

<t>The same OpenPGP v4 Transferable Secret Key with the S2K Usage Octet set to 252? (External) for both the Primary Key Packet and the Subkey Packet. This format omits all data following the S2K Usage Octet:</t>

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

xTQEZgWtcxYJKwYBBAHaRw8BAQdAlLK6UPQsVHR2ETk1SwVIG3tBmpiEtikYYlCy
1TIiqzb8zR08aGFyZHdhcmUtc2VjcmV0QGV4YW1wbGUub3JnPsKNBBAWCAA1AhkB
BQJmBa1zAhsDCAsJCAcKDQwLBRUKCQgLAhYCFiEEXlP8Tur0WZR+f0I33/i9Uh4O
HEkACgkQ3/i9Uh4OHEnryAD8CzH2ajJvASp46ApfI4pLPY57rjBX++d/2FQPRyqG
HJUA/RLsNNgxiFYmK5cjtQe2/DgzWQ7R6PxPC6oa3XM7xPcCxzkEZgWtcxIKKwYB
BAGXVQEFAQEHQE1YXOKeaklwG01Yab4xopP9wbu1E+pCrP1xQpiFZW5KAwEIB/zC
eAQYFggAIAUCZgWtcwIbDBYhBF5T/E7q9FmUfn9CN9/4vVIeDhxJAAoJEN/4vVIe
DhxJVTgA/1WaFrKdP3AgL0Ffdooc5XXbjQsj0uHo6FZSHRI4pchMAQCyJnKQ3RvW
/0gm41JCqImyg2fxWG4hY0N5Q7Rc6PyzDQ==
=3w/O
-----END PGP PRIVATE KEY BLOCK-----
]]></sourcecode></figure>

<t>The (primary) Secret-Key Packet of this key looks as follows, in this format:</t>

<figure><artwork><![CDATA[
0000  c5                        packet type: Secret-Key Packet
0001     34                     packet length
0002        04                  version
0003           66 05 ad 73      creation time
0007                       16   public-key algorithm: EdDSALegacy
0008  09                        curve OID length
0009     2b 06 01 04 01 da 47   curve OID
0010  0f 01
0012        01 07               EdDSA public key Q MPI length
0014              40 94 b2 ba   EdDSA public key Q MPI
0018  50 f4 2c 54 74 76 11 39
0020  35 4b 05 48 1b 7b 41 9a
0028  98 84 b6 29 18 62 50 b2
0030  d5 32 22 ab 36
0035                 fc         S2K usage octet
]]></artwork></figure>

<t>The OpenPGP v6 Transferable Secret Key with the S2K Usage Octet set to 252? (External) for both the Primary Key Packet and the Subkey Packet.</t>

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

xSwGY4d/4xsAAAAg+U2nu0jWCmHlZ3BqZYfQMxmZu52JGggkLq2EVD34laP8AMKx
Bh8bCgAAAEIFgmOHf+MDCwkHBRUKDggMAhYAApsDAh4JIiEGyxhsTwYJppfk1S36
bHIrDB8eJ8GKVnCPZSXsJ7rZrMkFJwkCBwIAAAAArSggED4tfSJ+wObXzkRx2za/
yXCDJTaQJxSYp+8FdsB/quFFhbO5A7ASfsT9ovAjBFoux2vLT5VxqWUeFK7hE3od
ZoRCyI+VHjPE/9M/uaF9UR7tdY/G2cxQy1/Xk7IDnVgExywGY4d/4xkAAAAghpMk
g2f55QFduSL49ICV3aeEmH8tWYWxL7rRbK9eRDX8AMKbBhgbCgAAACwFgmOHf+MC
mwwiIQbLGGxPBgmml+TVLfpscisMHx4nwYpWcI9lJewnutmsyQAAAAAEASCm6Rht
nVk1/I/lYxTNtSdIalpRIPm3YqI1pynwOQEKVlFrZzcAxDNINdr2MaFjPGPNVvmx
wcPNOSPJFlZF1OrxTovh1r7/4q2u6HybtejZ6FJIXJZFK5NJl7m2b8peBgY=
=1veT
-----END PGP PRIVATE KEY BLOCK-----
]]></sourcecode></figure>

<t>The (primary) Secret-Key Packet of this key looks as follows, note the trailing cumulative length octet of the conditionally included S2K parameter fields as described in <xref section="5.5.3" sectionFormat="of" target="RFC9580"/>:</t>

<figure><artwork><![CDATA[
0000  c5                        packet type: Secret-Key Packet
0001     2c                     packet length
0002        06                  version
0003           63 87 7f e3      creation time
0007                       1b   public-key algorithm: Ed25519
0008  00 00 00 20               Ed25519 public-key length
000c              f9 4d a7 bb   Ed25519 public-key
0010  48 d6 0a 61 e5 67 70 6a
0018  65 87 d0 33 19 99 bb 9d
0020  89 1a 08 24 2e ad 84 54
0028  3d f8 95 a3
002c              fc            S2K usage octet
002d                 00         conditional S2K parameters length
]]></artwork></figure>

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

<t>This document is based on significant work by many people, including implementations and guidance:</t>

<t><list style="symbols">
  <t>Daniel Kahn Gillmor</t>
  <t>NIIBE Yutaka</t>
  <t>Achim Pietig</t>
  <t>Werner Koch</t>
  <t>Andrew Gallagher</t>
</list></t>

<t>The people acknowledged in this section are not responsible for any proposals, errors, or omissions in this document.</t>

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

<section numbered="false" anchor="substantive-changes-from-draft-dkg-openpgp-external-secrets-03-to-draft-ietf-openpgp-external-secrets-00"><name>Substantive Changes from draft-dkg-openpgp-external-secrets-03 to draft-ietf-openpgp-external-secrets-00</name>

<t><list style="symbols">
  <t>Remove Daniel Kahn Gillmor, add Paul Schaub as co-author</t>
  <t>Describe length constraint of locator hint</t>
</list></t>

</section>
<section numbered="false" anchor="substantive-changes-from-draft-dkg-openpgp-external-secrets-02-to-draft-dkg-openpgp-external-secrets-03"><name>Substantive Changes from draft-dkg-openpgp-external-secrets-02 to draft-dkg-openpgp-external-secrets-03</name>

<t><list style="symbols">
  <t>Add Heiko Schäfer as co-author</t>
  <t>Add v6 test vectors</t>
</list></t>

</section>
<section numbered="false" anchor="substantive-changes-from-draft-dkg-openpgp-external-secrets-01-to-draft-dkg-openpgp-external-secrets-02"><name>Substantive Changes from draft-dkg-openpgp-external-secrets-01 to draft-dkg-openpgp-external-secrets-02</name>

<t><list style="symbols">
  <t>A device can support indexing (probing for public key material) instead of enumerating available public keys</t>
  <t>Encourage "best effort" even if an understood locator hint fails to identify a device</t>
  <t>Private use range is now "Private or Experimental", and aligned with a power of 2</t>
</list></t>

</section>
<section numbered="false" anchor="substantive-changes-from-draft-dkg-openpgp-external-secrets-00-to-draft-dkg-openpgp-external-secrets-01"><name>Substantive Changes from draft-dkg-openpgp-external-secrets-00 to draft-dkg-openpgp-external-secrets-01</name>

<t><list style="symbols">
  <t>define the external locator hinting mechanism</t>
</list></t>

</section>
<section numbered="false" anchor="substantive-changes-from-draft-dkg-openpgp-hardware-secrets-02-to-draft-dkg-openpgp-external-secrets-00"><name>Substantive Changes from draft-dkg-openpgp-hardware-secrets-02 to draft-dkg-openpgp-external-secrets-00</name>

<t><list style="symbols">
  <t>rename from "Hardware-backed" to "External"</t>
  <t>use RFC9580 instead of I-D.ietf-openpgp-crypto-refresh</t>
</list></t>

</section>
<section numbered="false" anchor="substantive-changes-from-draft-dkg-openpgp-hardware-secrets-01-to-draft-dkg-openpgp-hardware-secrets-02"><name>Substantive Changes from draft-dkg-openpgp-hardware-secrets-01 to draft-dkg-openpgp-hardware-secrets-02</name>

<t><list style="symbols">
  <t>re-format hexdump of test vector secret key packet</t>
</list></t>

</section>
<section numbered="false" anchor="substantive-changes-from-draft-dkg-openpgp-hardware-secrets-00-to-draft-dkg-openpgp-hardware-secrets-01"><name>Substantive Changes from draft-dkg-openpgp-hardware-secrets-00 to draft-dkg-openpgp-hardware-secrets-01</name>

<t><list style="symbols">
  <t>Added test vector for experimentation</t>
  <t>Mention on-device attestation</t>
  <t>update OpenPGP card spec reference to 3.4.1</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA8186XLbyJbmfzxFjjwR1x5xAxdt09V1QYqUqJUSqc0dHdMJ
IAmkCSBhZIKLq1zRDzId0T/mSWbepJ9k4mQmNopSlSeqOsZRLktYcjn7+c5J
1Ot1Q1ARkBN0G5NocjZBw7UgSYQDNCVOQgS6JBtuuMyJcEhOkJvguahTIuZ1
FpMo9uI60S/UuXyB11stw8GCeCzZnCAazZlhLE9Qx6BxcoJEknLRbrWOW20D
JwTDE8JYsWThJSyNT5Ae1liQzYol7gkaRzA+EfVTmNvgqR1SzimLZpuYnKDx
cDYyDC5w5P4PHLCInKAN4UZMT9A/CebUEGeJSMic1xDfhPDDPxsGToXPkhMD
1Q2EEFJ7Oyd0wdDU8f/P/5qTRN4gIabBCfLhToM7PiZzkvw9ZlwQ1nBJ9f0J
TgN4Had2+eUljqjAfEkFJn+f8zlpsMRDxpJEKTkxENL73tMM2DMQEnJne08s
WdDIQ2fwBFxXA+5pEv0d2ACDwS2cOP4J2vOFiPlJswlPwiW6JI3ssSZcaNoJ
W3HS1GM04d2ExKz0rkdFgO2Gw8Kmu/Cab/FZvhpgQbgovewuvIYegLL33gXB
SEIs6BKocDsZ3kzOJvXptXU/G1j3p0AZJHDiEXGC8pVFaezJrcxF3OQxcXhT
k63OQ5yIuoMTt47jOKAOFpRF9U6j2zAbsTuX4ylRH6WRAzdByGPi0Ll+GLE5
Ej7JVaE0DmIRGk9v0RRmQQOcuPBUggXwZ7rhgoS8hh5JAoKJ5KQwoYsFOUHt
VrtVb3Xq5hFcy2UPIS0+Wn4sx6chmlAiqGegs5uHyVl9OhzcD2f16eyhX6FI
QW+ybBRk4SxNHKLolHE6xFyQpOkyp3k6nFnjq+l/l/fr7Ua30fmvZs8090rE
Obt5kDYggp1wJJgkybR9iXDgsYQKP6zsrFNvHdZb3Xd39gQKnKBL5vjqMku8
E+SZLTRgoEWzyfXu3UlrQVyHhXEKpJa6IneaEL1XEYf1gNoJTjZ1XuZms7yr
vZkaCU0CLEDw0DVz04CgK/VqVRBqaIRDGmzQf/zr/2w3Wv/xr/9WQ1dkSQLU
atXQPVlSyeaW2egd7xXUuGFLEtokQe2WefwGQeTOs8UMsn0pFTeQFP86yH99
ZD1czaavyXLSbPpu0PBx5AakERHRbJvmYfP4uH3cKe+4JKkjnAYCjaMvRIo9
RysqfHROPR/NSCjFOE0IL7PVPKibZt3svcvWCXEThq4xFmjQQNeYcxbQiL1+
sI8TytHQI69vXZEvAUZ9UCRsGPV6HWGbiwQ7wjBmPuXIZU4akkggl8xpRDjC
SBp72NiKJgQpMwL/IBq5koORh4SPhZRcZXEQiBCLYBw2RzgqdJxvwpCIhDpo
QTaIcsQFS4iLMpMVbGpybLLGYRwQMAQY+ThxVzghyCVL6hDEEsSETxI5DU6w
HRDEU5tLw9BQ+wqp6wbEMD6AR0uYm0pmGMaUhYXJ0auFpYRYkITiANbkk8BF
9mbHzHKfMUlCKrjcb8pJAlrLJF9JmQYwKrCepQK5dJkGHlCKCkTWYOioCDYN
Y1TstSZf/uWXV8b5+3dUUTVYIo0EiVziFneCYCMpJ4CNKScNYyzgSRxwhmLG
OQUywRMlflCYGPitBhYM3syZsZM+S4rLQhFnGq6tglxZMscOQQFdwH5mk+vv
3xuGYRXTFsEOmmBnQQT6yAk8O1U6g3qNXqMDsvNf7keD495R6/v3T7AZsYn1
VlNOXIQ5ikHvQMjQLMERnxMlDqUZPhbDmq1Ge3tUJcmCJJKFNg2o2CCbiBUh
b9GJN2Az27QD0Ug5qEy0k4IRIW5Zn+g34qIV3gDVtSoR+BlHSrh3jZ9xeydn
fMyRDat2SUA8DCZPMMRB4PP1hMTxcUR5WFPseSXijXcMgVxRMcROI4DLS9u9
ojJ9isFA34KA6bEwcphLYkYjgWgkNWOvxNNh5CSbWNLlIzjLB449gm4dQcSn
PZQQj3KRbLalqtM4bLQbJkhAIQANAxRFagnhAtsB5b7cbj4KmyOfRoIjbIMu
+2wFu5BLVQqf70aRsIZw5JboFtKIhjigXKA9m3CByHzOErGHQiJ85koy5hvf
ITlcURa0viISuQN+xbMQLwhHEUNYCBLGQsqBfHgjl/+2BXApd9iSJLyGSJSG
0qjxmrS4ysLxnSusaYMsfCytSEIcFoYkcgvPkMsZq9jtYrTMgCPusxQMMEHU
JZGgcyqftDdb1vVvHDksSQiPWeQC7eLUDrRnyZSiYRgfPqB78jWlidwmR1c4
8lLsESAaUVaaJS5He9cP09leTf2Lbm7lz/fDu4fx/fAUfp6eW1dX+Q+GfmJ6
fvtwdVr8VLw5uL2+Ht6cqpdvbmeocsnYu7Ze9pSs7N1OZuPbG+tqTwl7mZdA
MsEkNcBKxQkR0vIZLuFOQm3iwjv9weR//7vZRb/8AratbZrH37/rX47Mw+73
72jlk0jNxqJgo38VPtkYOI4JBk0GBUQOjqnAAa+BdeU+W0XIJwnYhf/2T0CZ
fz5B/2A7sdn9R30BNly5mNGsclHS7PWVVy8rIu64tGOanJqV61uUrq7Xeqn8
ntG9dPEffg5oRFDdPPr5H41XMjK5Hz9asyF6mA73FOumk+FgPBoPLBgJ5fKi
rWFO2ipTgfrKhQmGMkbKGI3H4DozSwjhzxv8RxX+Z6xuH0hf++EDmkGUErGA
eRvDyGzngmzAPM5JInMNsOmRFxAkrSnzEhz71EHMhti1GohJC9w7QAxsLM9y
t0hmlCWd3IM7z93uUW3HEsvevdc4qtjhhmHsTXL93ZPeaUU5+QtWG5emKa8W
22wJcp5hA8ghiVBRF9kDs/UlBRNeuVpaXWFTK5GI3pSMRKruyGzt8EV7GSJU
HXuztekiEi7spoNjOSObQ4gKQZn0pFE56i45Z2XQYSEp1w9CPuXKqPK9ELZk
hXW+ClGwimUz/6EDqVrVPxbePgtMyTomjo4LbILk+gVDsYzY5f6k4LtkTdzM
A5TMfNX+69Xs2EXDMJ58KgWjrIYCB4vMre+RnPA64MhSI5ANyYtET4J3M0PN
q6IXLanFCmooZFwg7IhUhmqVoIuXUprKyDlzIYsMAjWFtDskUrRS1Aeeh2kg
aFyZlGcil92rL8imnk2uBK4aOcgAFgYVJAnRnkpG6TcpJ3uw95CAQEUbxAWJ
a4inji/D8IQtqd77ZHxTQzHmHGxmDW6xOSzQpkxLofLrIB52KgSL6nHKfRp5
NUSEUytihh3BQYg3KFHuPEtmsFQnsHo5nBps6jYkFm45EbjOAuVfPkAw9P2t
lCTWKcmOdKScjeiQPYvOBH8rndQpLvjXt9hbRHhbEU9J1iFiCokAk2BvECdC
ZMoIEXAqI2Bp74BNs/4p+tjutX/+VEOLCJw4jcCbJxChSffxLxmt/qWhvFwC
CGrkkiQzl69J4rCIU64MKo4QizWuB+FxOTr2yXZcGVLPF2UN1+FzJVeqUoPN
pfnDjkN4joyVVVpKrhyHJWoJlCMgX0KCDcLuknKWgOqP1X62H8U2B5H/qGlf
Q1Q+lxDpcyOG7A2wV1uD19SYsyBgq4wJBT23+SGNYLRzCYo1mG8lBlpr4Vpd
XVO6+uEDutIjnAOQ/9bOIiYQxP2b0tRzmnChBUQzWD6e+Wil9lwkqQP4VPbM
K6mAl2rAFZaUje7eOxWNyqJ5KT8rEi5t3EumCPiLRfGsBD2ooDL715uTyJra
0hIHKeHoGJA0E32kkROknC7JJ5QQTpIlUXlWKX5rGFZmrSOyAsFR6AVT4ldM
rOydMs8JjjyirOTYurFQzALqbNDuILBhGPfEw4kbgASzOVplhq3CMI4hgcJS
u1Lps7eU59p6kUZe0rkiKDiOE4YdX2IIynRs3tMpB0faVJN3FMuwtAPesRY5
jMuIEjKQ3ywhzseVPoJG3jwNqhstAnkk+QMPRxskEkwDmMrFAmfqlsA22Vw7
mNfaJ1f5JsWqq0xBfiXsIucDyIg6aYCTncujXsSSN1b2zmpmMjJJYsZJWVXg
7UrYI1jmu8F8hhIFUqzYQgPp/J08HZCVgoGcQMgVIJd9I1ERXAi2IBFXSR+d
o68pSTYSYwCJwUJgBxSv+ri0oesYChJLQDKqJAL5sUmeucQyLAKxk1qpF4Rl
8B5s1IC1PIKME2bn08t7r8GmjGV5TrTFMO74JJQELq9LmsYP6IpEnvClVADn
IqG4UtmB4iRHAJ87VEJS0ors8qMfaYM0ALEFTFhWAKTn3IPncm+M5pQELt9T
+bJCZHYlPJ1Xof4NE6SIdXaPijjxwgxHR8uDcoyh3VCBOSpYGQWKDHKEGlr5
1PFRQCVkDX/1bYhjhQpK272ezpSAYCnfZntNq2vm6ioEHZ9mXi4DAxBZOwRI
lU3F5qUpajps28g9LFUNT/m2Puj8UJo2ZOXCvatEjn75UHaOEN2TCFz2Kx+/
hNKsDfrEEpV2v2Nod1oM5NElibYIUgz2+i6aYxrIpSv8UmYMKSdgD3OE8O1F
KH5uGXoQaEG8TcXQvxEiqyKFssZlK4Gr4Kx8LMTC8bXv/yNg2hB09w2bpGI8
nsYxMNClc2UbdixRAuhuTVpUgKdpxAUOAgWuq5yR43B3/J8FklmkrHStmG2F
Ie2Zly0pRg/TPpIla6hYF2M4LIry9NNPbdQGnQjYChSZuNpyRhkkX1rZHx3Q
hAF9qP3JESEY1Xt2MAdkNWK7dqntbGmPCv5XtK2a/tc5h3L1OTdzH1+yeQV3
G8ZtUnsz28rD9kKP7FSV/yCYAb+DEoI5AFUKa9YxIcQrFFYBUC4oxBZPKpCw
mga7S4BWdKCjZ1T1GO1QZR4N87skyt3NKotwt2OAhBJeLOVTA0gvfMJz2r9T
CJNWuTyA8vy7KzsyNYc9NqS/2RpLw9mSBjIH5DSEdpGs9gPhExWaBuqpOVyA
6d1sepyVvhBncwFEyxLc0joCJq9If4ZLGThQTAIn+goYxjTKWZqJR3XdMp+e
EidNgAEDyPxcDRhxw8iNMtg8zcbXK5K4QAgczSMUygWNHAEPqZGxu8SRwB7h
ZTTpxDDq6HYuNEhd3qWDIzDRthRYwGcgtE9YuLsUwxnaWwQkS7o3e5DvQZ5D
sIzsIMR8rUKflMtPXFXd1XAalJaRLCDnkqsVNWSQYGRVwxA7PtR+airSg2nK
bpslIpPrLDQi6xhHuX8trZc6KlBbIJ7KquqONeQYEphAhFOX5uM7DIrfQZ7E
ykotmyNwJnUZE0jUBShehzYLkIYK5iNhHo4+kobXKNCahHCuQKsC0+Ek4izh
n6RvFBgaHeoJAbgAS1wJwiqHpYBh84aB0DWGaIWlPMOvKs6J5bG2BteKopBi
i5wGjDXBHMKYhCCylPZyB4VyYctIBWwDe8WFUvXddVSPRLLmBSUT2etUU/gA
wC/Ui5QAyffryMYKHsSwbrBL4O0161hUNXd1sPpZB0OcW7c4oUvARCqLIWsA
XIBgU6BHnkpwvYQigJQFVxaAyLrUlWGMj5dgOuAVR6p5SLkKZBVHT8CGSqLJ
+B3A24Bx8unN5TQM45ytQJfBc0VZpsN16pPI0kSh0LDZTMQdvCQYdiJtZE4L
KjgJ5pkHkOhosJGLV8JTFgqyntNAaNAa8xw83k6cOAsk115piJQFEFgaQiET
c6r0W/Mp9jdctRfUZJuDKNp1QNqWLIBtoXkAEImyhBlU8/Pj7dXMOhvWz67G
s8H5+Obsp9PbccNsNbpHvV6riZNnumy0zdZRo3Vgdszv32Vs8csvr3qQdEm6
GiW4RIGN7haAWORuIAWZvPKqLsm6kQRFJXoqhQKERxYxIFwN8KrYyP3twMrW
bprdXrNjdjrHvYOG/PfgWK1vlCYgv6B3ykDLRAJsAJU1lgL/VLIP+wBhcUle
uKdgsYT23U5AcCLIWmiBqEkR2LL8hRRq3MuHSVW7GjRMKFGiHMVM5Ekp3FZO
yNVoWNW8VoRKa+JOIDcfXdZPMYR/QYASyhdb8icDEqlmuqySQ2Oqa4G46Jpw
MIi1SgNkuUojW24V99S8Tmb+8vXCflQrkuqYqMA5BT1V+Qh0NdPEt4CfspZP
Sk7KBsOm29ioyIAwyhd8OzFUbUZ5yIZtMO26aiN5lQUvsq8ryi1fpp+C6XS1
Yi4pL+JqgNR+zHepIL5A8DIXWPGTshbFU+lAZSwht4cSEmRNKyUxUltheUNq
ntOMyGq3zSlV5hKy1JFHKdpRwGBekOPVrq4VQNI6BCmqYKUAh0AGqsBrNZxL
AmpLU6A6pXjpDSRYDSDHmrQBEsbXBdTS6zGBtCHzWxXOCYbmRCYkOmN0hB4h
25Ga52/KQ8FO5fYloWVQ+cAzsr8ZVVZDSCJx+rz3Kc3fd3wcAMZAeN7G5WlN
ltKqNUuhCzIkOM/Ycy0dTp+gh1IgPGPqqXG13UujVNUmPMj7ZY+Nl1JX+ldY
gsZC5zRyq0Jcbg2CHaVhVjnCr1rJZD5RrYaWU7AyYlfkdKCaOZL1B1L5cVTC
1XRgo2oH5a6hHGvIqV/u49njAQNAXxWQ82w14aq5bHI5mKIPpoke7scc6mk/
348Ghz2zDfUzKF3nCTRXNjZKoaE390U+hdIZaEE9YoJw6XokK/KWKgmpFuIu
QTgq/sarHY952l5Nk1klswVxz2uo22osw00JXBVqBG+rMlYp58qRysJ85WRB
srOd5D2TEpzTTa666S9vp6QZsFeCNnYMqWBEsADJ5q1kdlucoOotYWj5Uk6o
V42A4/cAaBJlwXyph3BHTgr8iLLgRcsnMLDoQ7RlcChzulIJY7MLoAZ1CWQB
8rWQ7/BjNaCiThxWOIlKHbt5v3Im1jKzDDANuebs9p6yJLo6azkR1FnpnKWR
K7tvIdqSnmWFFQyoTmFsmX19eofKDO61/1Dwc7m3Q8HoCkd1iZ16nlJyWXvg
ytjldm6qtj/VqNx1JuBVMHV3f4BhXIPpV/iOnD7vjGHRnHpp5q6ygvzvdSPI
nmrdGqG8HUt29EBL2gDx5FhRJUaBTWu/knl2pTlbzxSBpnrsPasoCW8z0OBE
YngC00jhirnl2NETJMt7OWlyxukyUoaDlrpCAEzUEi7LQkzJdLS1R+nTdTNt
hvpk00vSQPYqa9wsKuipzdK8BMggEF0aeUokrEpsNMhdp2EMducUGtsA+wM2
TeRY2hzNgeOyO7EyKM1FAWLT3BYGsojq0MRJQ4ADQKylg0gIdlWBTIbDXOFj
dso3iNRDBZjZbK2Nfr4wqIdmIlddgIQYAaJOiyrcrmAe6xRJoQIhwTxNNLTp
VGKSEu4QYleR15HwjledumgzeCND0wvmO1YcSFDM+2OeO/dEWTlt5ROpAFkp
ovpOju4XUVm5bZeCyXKYTIfhZSmTrzheih4piJ4nPVwerzaM8y3hhyrQ2xyS
8K6TJVxFqVnWlqiq+76jq29t/wc2rriFlToB3iNWrHA4MSXOljWW6ihNBEAs
hVkoa63qrX2T0yvdgEZ0IpIVm2raxJfMrG5sen06A/oR5AgRKWrc0d/EW8SG
no+GOvPyhljK8AkMqkpzAEIus5sBu2MivffW2JgGcI5JIUmog2zsQuuXbKQA
ZwZDlTnwSds1qMplbQsJgTY/9RSkXDIxyyEpOQRLhe58wYJEzkaSeZgk0E6i
c+ysue+dMKSUW2mzVkJAgg3iAVtl/eshc0kS5biCziAzcAhhKMm5JSv2GhW9
GQ2QwHGskh/pRUJOgqW0cE4qEzQsJeZ18U+BiO9sRVsk1ZiDlJJAsb7ajDnO
I5/8bInEJXS9TZBEa2CeMxTVGAwHYEqWXDqufDxVjpBQjwwoaUgAVdD55/aJ
KdUBnQVVaVSsV3ZwlIR+d9lEw97aXqgjA8B8SWcI6iQ2keP/5dSoFGbJDFoH
ujIHlc072+lntRcBAwIgnwPgFC9A4xJCJJrqFX1h+UlisEiCOSxQZ4xhe66r
UfesUSyBWk/1PfTDx1pODOOXE3Xw8Ke9e5VwYleq7w+OmQ+5993Ybn74FUJH
3S74a3mU7R6F6t1f0ZlGIX+Gc3j1+q/Z/7K/RtGbCK9mKX/px3K7WA2pXFB2
bH7XPRTo+fkZ6jgldsFYEVPtHb+iFwhrrpmrquRgXNkqiwcKwud4G9DJys7b
8vcpHapRaal19I1xytQdn6Jfi1tGvX4iSdHudWqo3esqHYMmiV/RfdavBmxd
MuoihwWBOgMrlXUncw1D5heqq6pE4ezoQd4FV5yr4jKGA1AC8IhAhiB5nSiT
WNkWV6GDJCuUJrUw/wlkKHer/pkkGWb9hbrHL1tJ7UfaFWuFiSzI4rAgDSOu
GwRkW6LqDayQ6o9PoklTVrlT2QKVadW96rRySEa0XJ1a9WOg0UOEufbjv8Lz
u7XE0A2Sv6KJLu+wBA3XMUloqHzuAyfvDmCa7briyh+c0bB4BgQqLhQSKFgm
nLrXUkIebzZTwrle8IdgwM9zbAhJbGjrZO/WgU1lv3VSkBW2inUkFYue4/EV
vA+EQLaC7D7mUeJs5Tzn1sFoXcDOcQKdwmVAGFRWytnwWZROzgoEV6+8ScoM
K7Zhtsy8W7l9mR2ylx0amdzDNzs8jVaVznvIRkfwlPoGdl2qe7vz4WsoDlLd
JVyG6/I8K0fzNHz36psKqnSUFxAT4oCf1S1g+pQOtGJXAwHdj7l1sqO8AArR
6JLJlXAAYqSs5bhehqQo+E6mBqWGklJixSnAuDJCiglTMCDUsjIoAzbHC2uw
lQDIuGIGJeUlcQRLuIxah/pE0hvCIkFv9UQmVsvuWw83EBzpVjaeo49pRLKC
0qfdxWPYsUxaoO8vTmgIB7QlKqdTFZ7aC6LNu/rCA7C7DgfRftpbdutbzSYN
ODP13fjtt9/KX+towjdHIKtSDr8/PBvfINhJ1mx9OXxB/avbwaW8bxjrR2/4
2XsSzvrl4nL10u9b5/h+ddS37lwruLo8eJjc8cfz+/ZwtjCnq8fxWUf0w5gO
BV28vASDjWHOxvTrtxfLuhuswuZtz3ni38TafnBWt+cbp7/i387j0+4t3p9f
Hj1fnK6vns4P3fvx52/3rSN8NtoYn89d3wkfhNN+/OKEj627s8fuy5O5ss8e
UrtzEU345U2/bz0NLMu0/EW/f3cR9rH5zfL56cDiF8bAci5P71ZX/fuHy8Gd
d2X5L4MRHQ6fg8nRLE1aT5/v9+etcafTpMcPfvf2fLiwBt7iLvvdOB9GycY6
PRp8O2/jLxdLaxp3D6x4Pu7GV5OX3mHypf+8v+8226O7yf3m69n5xYPVvL/i
Nzfemo5eQuOy53wRd6TdPPW+Pd0d3h9M1pPBAcOd5+vD9cQZrM2WJvL4UhH5
7Pnxbjiy7obnd0PzxXi+vSR4EazOWuYLtrtrFk+OV3ZqDvfjQTIx13cxHX1+
6l1aq+G4v7KsptlOb1PbuutF/tx8GBm4Z07vVqOr2PP6zWkctY+/nkbTu+fb
2bfx6XIyINbdy8jzrLH1MJArWY3t0/6L3x/1Zs3h4VfjeBQ+zKPjwc1xs7t8
HJNTf31hWexieFP8/jjzrKb5hEfJpTvpWN5VazR3GXN6z8+28eWOf2ml5+xg
9Hl6fj/uxo5/bd0NNhfR5V3nfvnUbHlh17wYfB2HG689Xz+ddf2X1k3v7vDe
OZhsvhmndz/9ZPwUvNhrJbvDm9P3JPe3337boa8H/7/o68Ffpa8P/Oyl6za7
a25ZluXtP7SjtPXlaRCeB587/a+fX+Z31+vwc9prX5x53uLqa3v4eNrpBvja
Onu+7BtkfbnvnB/cPJs+7/k3/rjfas2Si5Bxb9kJPdOlIuBX8wG/e5mfrZhl
Wf1B/+Xii99pfrFW/MLorx4eB153fGqNnyzr0rZWYzKYjv0+5y/28OhsgPFz
7+ZB7IfrzeVqNT+n8z4NPq++tB+CwwE5MNr420V/6lxYnjOAPViXLTbuW/tX
zy0656ehedQbOi5vL4+Clbd5aC8GzkN4OV/2n21rfpD4xv3L07f07nY1jA6H
TXy1Gq/u8RV3k01r/xHKtOf+NO3e3xycP+HhHaeT4L77bT1pziaHoT9/HBLj
8PlpshbR9cO1mJu9243VM1/61+5VP7w9n+9ff4ZFjcd4djG+ifbJQ//ZXtD9
ydQK3HbkX/hN4+oxHPHp/kHrabN8XtyZ1tD0Bovj3uzhvvM8ItT2mmlTPL4c
4GbT/Nq6eRqYz/ublHZu291VzM+Msz6/hFmurKeBZOfq0j4d/CARJfGsu/74
0o7Pztru0+z56Mv+45fRddu8aPlfn4Kht2+7lH15ii7nVs+6i58enkR0szod
Gtctz2wvX9bs6fro5ch82rfP+6ujVm98tHh6XDw/HCxHt3T//Gm5bNIEH7L5
RWoe3ETsYeE7weIhMRat8Dm1Py83Qfes7/300x/XWgDAZZv8jlhctSRVYP63
nXD1uEApm4YjeRD7QR6DPmbTfCqUGt6ZaKUuffokq05MpW7rqw0kwQj9tR0m
m/eh3UTmt9WDZ1vLeNuZb30W7M8yDrO7P8OZ20eZc/5R32xsO+cf9c3GtnP+
Ud9sbDvn3/XN3xYV32xsO+cf8s3NbwPj93zt77la4/d87e+5WuP3fK1ytZ1V
8/aPKy2o5UftBz9pHayXVEdG8XCMUjY/MzjLzbV2yN4kdVcp0Ykhx2y1Wi2E
nB56448+VKO+CfhqRnjdlM91uu+9rg6+wNPt7E5rxws69YHnOqXLBweo1UPY
RYf6qpMQXQKgIYGnD99YvXkAa5B1kLqMGzKo5QQN3dOpdUU87GxghCOEWsdv
EcFJkyVBt+PT0kbUw20btQ5Qy4TttEzkYtQ9LL9gtFpmC6HWHLVM+LnYvole
rVouqVy2uUPXk3Exp7lFsm4LHXeR3UY2fvNteO0IoV4Lzbuo7aBeFx120eEB
Mk3UOTZarXYLoU4PdW2gcfcImTY6tFHXRMcY7h4hdHyEjrrIPkDtY2QeoYM2
jGa3jVar00LI7aFOG7XbCNuocwAXX8vS3Ml/3IJVC7n+/fDxP8nTvBlM/kX+
Yrr6fwwmJ0fW9eXa6PtH9sCzLGs4HnkqeDodrBbnYO5PPe/a8l8sK+anlt+9
GNPh2Wbt89nq5SKO5wtz2jkw7PNxcto/IhdHZ5eP0WDyefrMLw6Tz8n1YnSx
Wgz6q7EMcpKp5w1Pu2I+vdhf3drP3xb36/Y33DQ2z4PTixm+u1hPX+L9o5HL
+82v6Wjk27c969CazvnsmC2tL/0RS9ft5dWs97j++vRARpeH/rDDXOMzux9s
xvuP518mw+bxdTPFo+OH+0PhvjTP2s76bmM2nxeH49Po0RuuNxm9FpJefny9
MLz2vNe7G7np9Kp7PB48djAZhudH4unlaX11mNzbl8fk/vQZCGb3fU/Ra7DK
6DUwwtWKju/sq7Oz9aTvhWGwP3u8msfcofz6fN2NVi/xkzM+Di7IKkpFyDd3
kiRDazoID+59YUSPC7M5bgYv69mNmLpjHMT340nYefk6NuNNtLq9G14+BqPk
8zfHWp/ejG/cpH2NR18mZ5Obx2W4NlbO5OZ2OrkYBZ9H5m2ynrGlbyaHze7X
dnpwvrEF+fL5YHQxfr74PLrs3VwEh2HbPopJ33v5yfjJXJLZf5YfiZj+zld+
HNhJwzRQH5PJjjiWz9U7ULVW8JlsfZAJoIt2HfD8na/kbH0D70/2YW3nvdd3
+bCD10+/5cM66OgQHc4R+WEfZr/jw9q9nnmc+a+W/g9MeuWPfq48SrGbrU3P
j1HXRfgQ2fbON7VH6x4h9wC1MDowEemhg0N02EIHWLubgx7s1m2hTgeZx+j4
GEY7drW7OTpGJkatI9TuojYBx37URb2udjcdF82P0HEP4Q5c2V5e5fdtb9Jq
td1XBGwV5ChJYlX8smPASj9+OVFIKnF/2pvjgJO978YHZDlwvD8grqe+nLZd
IKUc2ZjL0zGV8wTweWlo9Qrl2W0JpJYbxbehefBKWQ+tPPZ1iiNKAnSJ/Qid
0SAIWWLU0c143B+il1TgBTbq1c/31ivfvK0jK3ITskJncKbU80miT+crTBcX
23LzGJFrpVNf/hB5Wb3oxthAfTdmXH4aTZWg1Xfx9Pex+auvfDXeIuxpRkFV
xNi88dwHcNTy+BQYmoEuO8tSt/owuLvw3vkueEd+W+yPfUHcqKN7AofYdhG/
JqvLpe9tg9FyWF31gwDDssP6wfYB/O2D+n/NTtvFTn+HJLBRqMpXPz6+vR94
YnmARAXL/ysWbv7RhbflwrOeCiggZe2F8ttYoFYfs4Yo2Rz1um/skzxlTbAL
PMm+7VgtlJS6rIw6FFJZmoCtqR5Fz04b4Cg7Js+Y+8YB+KKhV6/dqOeFR6jG
qc+pyK7zFdp7oySpP5KIA1VrzFqtZcMOfFrgr+FN64/yxgTeqK99Vo+glklS
+QzIn7HgvEHox7VAqntCIM5Xo++dV7uN5Ie+ig/RGXXJKx2FlMVoXD9tVGyL
ajKrJ2SeEO7/Nft8Q2l2EETts65BNJ+s3TSMZZBWaPbrD2r8Nat+Q5x2bE/b
KKjKlpapDs/nSiH7G+roGtRLniqoZ/1W8lRrdj+N4RPjRfOyPGsREwclWTsB
LEt9QP//An8OThmeYgAA

-->

</rfc>

