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


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

]>


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

    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization abbrev="ACLU">American Civil Liberties Union</organization>
      <address>
        <postal>
          <street>125 Broad St.</street>
          <city>New York, NY</city>
          <code>10004</code>
          <country>USA</country>
        </postal>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>
    <author initials="H." surname="Schäfer" fullname="Heiko Schäfer">
      <organization></organization>
      <address>
        <email>heiko.schaefer@posteo.de</email>
      </address>
    </author>

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

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

    <abstract>


<?line 72?>

<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-dkg-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 76?>

<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 may 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 an 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>
<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 hints about 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 on one platform with a particular hardware identifier, 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 275?>

<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 work depends on a history of significant work with hardware-backed OpenPGP secret key material, including useful implementations and guidance from many people, including:</t>

<t><list style="symbols">
  <t>NIIBE Yutaka</t>
  <t>Achim Pietig</t>
  <t>Werner Koch</t>
  <t>Andrew Gallagher</t>
  <t>Paul Schaub</t>
</list></t>

<t>The people acknowledeged 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-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:
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
AA==

-->

</rfc>

